> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Уведомления о выходе валидаторов Lido

> Узнайте, как использовать Tenderly Web3 Actions для мониторинга запросов на выход валидаторов Lido и отправки уведомлений через Telegram, используя open-source шаблон для мониторинга.

В этом туториале мы покажем вам, как настроить **Tenderly Web3 Action для мониторинга запросов на выход валидаторов Lido** и отправки уведомлений через Telegram. Этот проект демонстрирует, как использовать Web3 Actions для взаимодействия со смарт-контрактами и внешними API для создания собственной системы уведомлений.

Используйте этот шаблон Github-проекта, чтобы настроить собственный мониторинг запросов на выход валидаторов Lido:

<Card title="Шаблон Web3 Action для мониторинга валидаторов" href="" />

## Обзор проекта

Цель этого проекта — настроить систему, которая отслеживает запросы на выход валидаторов Lido и отправляет уведомления при выполнении определённых условий.

Вот краткое описание процесса проекта:

1. **Подпишитесь на релевантные on-chain события**: Web3 Action отслеживает события `ValidatorExitRequest` от контракта Lido в Ethereum mainnet.
2. **Декодируйте событие через Tenderly API**: когда событие обнаружено, извлекает детали транзакции через Tenderly API.
3. **Фильтруйте только интересующие события**: событие `ValidatorExitRequest` дополнительно оценивается путём проверки того, что `stakingModuleId` равен 1, а `nodeOperatorId` равен 14.
4. **Реагируйте**: если произошёл интересующий `ValidatorExitRequest`, Web3 Action отправляет уведомление в указанный канал Telegram с деталями запроса на выход валидатора.

## Предварительные требования

Прежде чем начать, убедитесь, что у вас есть следующее:

* Установленный [Tenderly CLI](https://github.com/Tenderly/tenderly-cli)
* [Node.js](https://nodejs.org/) (в настоящее время поддерживается v20)
* [npm](https://www.npmjs.com/)
* Токен Telegram-бота и ID канала
* Аккаунт и проект Tenderly

### Настройка

Пройдём шаги настройки вашей системы уведомлений о выходе валидаторов Lido:

<Steps>
  ### Клонирование репозитория

  Сначала клонируйте репозиторий проекта и перейдите в каталог проекта:

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  git clone https://github.com/Tenderly/tenderly-lido-validator-monitoring-solution
  cd tenderly-lido-validator-monitoring-solution
  ```

  ### Установка зависимостей

  Установите необходимые npm-пакеты:

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  npm install
  ```

  ### Настройка проекта Tenderly

  Настройте свой проект Tenderly, выполнив следующие шаги:

  1. Войдите в свой аккаунт Tenderly
  2. Создайте новый проект или используйте существующий
  3. Запишите ваши [**Account Name и Project Slug**](/platform/account/projects/slug)

  ### Настройка tenderly.yaml

  Обновите файл `tenderly.yaml` информацией о вашем проекте Tenderly:

  ```yaml showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  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 и мониторить нужный контракт, вам нужно добавить этот контракт в проект.

  В данном случае мы хотим добавить **`0x0de4ea0184c2ad0baca7183356aea5b8d5bf5c6e`**.

  ### Настройка Secrets

  Добавьте следующие секреты в ваши Web3 Actions:

  * `BEARER`: ваш bearer-токен Tenderly API
  * `BOT-TOKEN`: токен вашего Telegram-бота
  * `CHANNEL-ID`: ID вашего Telegram-канала

  Чтобы добавить секреты, перейдите в Web3 Actions внутри вашего проекта и перейдите в раздел [Secrets](/monitoring/web3-actions/references/context#secrets).

  ### Развёртывание

  Чтобы развернуть ваш Web3 Action, используйте Tenderly CLI:

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  tenderly actions deploy
  ```

  Эта команда развернёт action, определённый в вашем файле `tenderly.yaml`.
</Steps>

## Как это работает

Давайте разберём основные компоненты файла `lidoEvents.ts`:

```typescript showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}

const subscribeToLidoValidatorExitRequestFn = async (
  context: Context,
  transactionEvent: TransactionEvent,
) => {
  // Event handling logic here
};

// Helper functions for API calls and notifications
```

Функция `subscribeToLidoValidatorExitRequestFn` — это основная точка входа нашего Web3 Action. Она обрабатывает следующие задачи:

1. Извлекает детали транзакции через Tenderly API
2. Проверяет, что `stakingModuleId` равен 1, а `nodeOperatorId` равен 14
3. Если условие выполнено, отправляет уведомление в указанный канал Telegram

### Tenderly API для трейса транзакции

Ключевая часть этого Web3 Action — получение трейса транзакции через Tenderly API. Вот используемый endpoint API:

```typescript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const url = `https://api.tenderly.co/api/v1/public-contract/${network}/trace/${txHash}`;
```

Этот endpoint API возвращает подробный трейс транзакции, включающий все логи и события, сгенерированные во время выполнения транзакции. Вот что представляет каждая часть URL:

* `https://api.tenderly.co/api/v1/public-contract/`: базовый URL для публичного API контрактов Tenderly
* `${network}`: идентификатор сети (например, `1` для Ethereum Mainnet)
* `${txHash}`: хеш транзакции, которая нас интересует

Ответ этого API содержит массу информации о транзакции, включая:

* Все сгенерированные события и их параметры
* Внутренние вызовы, сделанные во время транзакции
* Произошедшие изменения состояния

В нашем Web3 Action мы используем этот трейс, чтобы найти событие `ValidatorExitRequest` и извлечь релевантную информацию:

```typescript showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const validatorExitRequestLog = result.logs.find(
  (log: any) => log.name === "ValidatorExitRequest"
);

if (validatorExitRequestLog) {
  const stakingModuleId = validatorExitRequestLog.inputs.find(
    (input: any) => input.soltype.name === "stakingModuleId"
  )?.value;
  const nodeOperatorId = validatorExitRequestLog.inputs.find(
    (input: any) => input.soltype.name === "nodeOperatorId"
  )?.value;
  // ... other parameters
}
```

Это позволяет нам точно идентифицировать интересующие нас запросы на выход валидаторов и извлекать необходимую информацию для отправки уведомления.

<Note>
  Использование Tenderly API для трейсов транзакций предоставляет мощный способ получить подробную информацию об on-chain событиях без необходимости прямого взаимодействия с блокчейном или запуска собственной ноды.
</Note>

## Кастомизация

Для выходов валидаторов Lido интересующие события распознаются по параметрам `stakingModuleId` со значением 1 и `nodeOperatorId` со значением 14.

Чтобы изменить эти условия фильтрации или добавить больше событий для мониторинга:

1. Отредактируйте файл `lidoEvents.ts`
2. Обновите проверку условия в операторе `if` в соответствии с вашими требованиями
3. Измените формат сообщения или добавьте дополнительную информацию по необходимости

Например, чтобы изменить условия `stakingModuleId` и `nodeOperatorId`:

```typescript showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
if (stakingModuleId == 1 && nodeOperatorId == 14) {
  // Your custom logic here
}
```

## Мониторинг и устранение неполадок

Чтобы убедиться, что ваш Web3 Action работает корректно:

* Отслеживайте выполнения Web3 Action в панели Tenderly
* Проверяйте логи Tenderly на предмет сообщений об ошибках или деталей выполнения
* Убедитесь, что у вашего Telegram-бота есть разрешение отправлять сообщения в указанный канал

<Warning>
  Эта настройка специально предназначена для мониторинга запросов на выход валидаторов Lido в Ethereum mainnet.
</Warning>

## Заключение

Теперь вы настроили пользовательскую систему уведомлений с использованием Tenderly Web3 Actions для мониторинга запросов на выход валидаторов Lido.
