Шаблон Web3 Action для мониторинга валидаторов
Обзор проекта
Цель этого проекта — настроить систему, которая отслеживает запросы на выход валидаторов Lido и отправляет уведомления при выполнении определённых условий. Вот краткое описание процесса проекта:- Подпишитесь на релевантные on-chain события: Web3 Action отслеживает события
ValidatorExitRequestот контракта Lido в Ethereum mainnet. - Декодируйте событие через Tenderly API: когда событие обнаружено, извлекает детали транзакции через Tenderly API.
- Фильтруйте только интересующие события: событие
ValidatorExitRequestдополнительно оценивается путём проверки того, чтоstakingModuleIdравен 1, аnodeOperatorIdравен 14. - Реагируйте: если произошёл интересующий
ValidatorExitRequest, Web3 Action отправляет уведомление в указанный канал Telegram с деталями запроса на выход валидатора.
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть следующее:- Установленный Tenderly CLI
- Node.js (в настоящее время поддерживается v20)
- npm
- Токен Telegram-бота и ID канала
- Аккаунт и проект Tenderly
Настройка
Пройдём шаги настройки вашей системы уведомлений о выходе валидаторов Lido:git clone https://github.com/Tenderly/tenderly-lido-validator-monitoring-solution
cd tenderly-lido-validator-monitoring-solution
account_id: "<YOUR_ACCOUNT_ID>"
actions:
<YOUR_ACCOUNT_ID>/<YOUR_PROJECT_SLUG>:
runtime: v2
sources: actions
specs:
action_name:
description: Get a notification when condition matches on Lido tx
function: lidoEvents:subscribeToLidoValidatorExitRequestFn
execution_type: parallel
trigger:
type: transaction
transaction:
status:
- mined
filters:
- network: 1
eventEmitted:
contract:
address: 0x0de4ea0184c2ad0baca7183356aea5b8d5bf5c6e
name: ValidatorExitRequest
project_slug: "<YOUR_PROJECT_SLUG>"
Обязательно замените
<YOUR_ACCOUNT_ID> и <YOUR_PROJECT_SLUG> вашими фактическими Account Name и Project Slug Tenderly.Чтобы иметь возможность разворачивать action и мониторить нужный контракт, вам нужно добавить этот контракт в проект.
BEARER: ваш bearer-токен Tenderly APIBOT-TOKEN: токен вашего Telegram-ботаCHANNEL-ID: ID вашего Telegram-каналаЧтобы добавить секреты, перейдите в Web3 Actions внутри вашего проекта и перейдите в раздел Secrets.
Как это работает
Давайте разберём основные компоненты файлаlidoEvents.ts:
showLineNumbers
subscribeToLidoValidatorExitRequestFn — это основная точка входа нашего Web3 Action. Она обрабатывает следующие задачи:
- Извлекает детали транзакции через Tenderly API
- Проверяет, что
stakingModuleIdравен 1, аnodeOperatorIdравен 14 - Если условие выполнено, отправляет уведомление в указанный канал Telegram
Tenderly API для трейса транзакции
Ключевая часть этого Web3 Action — получение трейса транзакции через Tenderly API. Вот используемый endpoint API:https://api.tenderly.co/api/v1/public-contract/: базовый URL для публичного API контрактов Tenderly${network}: идентификатор сети (например,1для Ethereum Mainnet)${txHash}: хеш транзакции, которая нас интересует
- Все сгенерированные события и их параметры
- Внутренние вызовы, сделанные во время транзакции
- Произошедшие изменения состояния
ValidatorExitRequest и извлечь релевантную информацию:
showLineNumbers
Использование Tenderly API для трейсов транзакций предоставляет мощный способ получить подробную информацию об on-chain событиях без необходимости прямого взаимодействия с блокчейном или запуска собственной ноды.
Кастомизация
Для выходов валидаторов Lido интересующие события распознаются по параметрамstakingModuleId со значением 1 и nodeOperatorId со значением 14.
Чтобы изменить эти условия фильтрации или добавить больше событий для мониторинга:
- Отредактируйте файл
lidoEvents.ts - Обновите проверку условия в операторе
ifв соответствии с вашими требованиями - Измените формат сообщения или добавьте дополнительную информацию по необходимости
stakingModuleId и nodeOperatorId:
showLineNumbers
Мониторинг и устранение неполадок
Чтобы убедиться, что ваш Web3 Action работает корректно:- Отслеживайте выполнения Web3 Action в панели Tenderly
- Проверяйте логи Tenderly на предмет сообщений об ошибках или деталей выполнения
- Убедитесь, что у вашего Telegram-бота есть разрешение отправлять сообщения в указанный канал