> ## 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.

# Мониторинг создания пулов UniswapV3

> Узнайте, как использовать Tenderly Web3 Actions для мониторинга создания новых пулов в UniswapV3Factory и выполнения автоматизированных действий.

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

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

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

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

1. Web3 Action отслеживает события `PoolCreated` от контракта UniswapV3Factory в Ethereum mainnet.
2. Когда событие обнаружено, извлекается адрес нового пула из данных события.
3. Action добавляет новый контракт пула в ваш проект Tenderly и помечает его тегом для облегчения управления.

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

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

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

## Настройка

Пройдём через шаги настройки вашей системы мониторинга `UniswapV3Factory`:

<Steps>
  ### Создайте новый проект Tenderly

  Если вы ещё этого не сделали, создайте новый проект в панели Tenderly или используйте существующий.

  ### Создайте оповещение в Tenderly

  1. Войдите в Tenderly Dashboard
  2. Перейдите в свой проект
  3. Перейдите на вкладку **Alerts** и нажмите **New Alert**
  4. Установите тип оповещения на **Event Emitted**
  5. Настройте оповещение:
     * **Contract Address:** `0x1f98431c8ad98523631ae4a59f267346ea31f984` (контракт UniswapV3Factory)
     * **Event Signature:** `PoolCreated(address,address,uint24,int24,address)`
     * Дайте оповещению подходящее имя для удобства
  6. Сохраните оповещение и запишите `id` оповещения для дальнейшего использования

  ### Инициализируйте проект Web3 Action

  Откройте терминал и выполните следующую команду, чтобы инициализировать новый проект Web3 Actions:

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

  Выберите ваш проект Tenderly, когда будет предложено, и выберите имя каталога для ваших actions.

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

  Обновите файл `tenderly.yaml` следующей конфигурацией:

  ```yaml 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:
        uniswapV3:
          description: "Monitoring UniswapV3 Factory Contract and adding Child/Pool to Contracts page with proper tag"
          function: uniswapV3Monitoring:actionFn
          trigger:
            type: alert
            alert: { <ALERT_ID> }
          execution_type: parallel
  project_slug: "<YOUR_PROJECT_SLUG>"
  ```

  Замените `<YOUR_ACCOUNT_ID>`, `<YOUR_PROJECT_SLUG>` и `<ALERT_ID>` вашими фактическими `Account Name`, `Project Slug` Tenderly и `Alert ID`, который вы записали ранее.

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

  Добавьте следующий секрет в настройки вашего проекта Tenderly:

  * `ACCESS-KEY`: ваш [ключ доступа API](/platform/account/projects/api-tokens) Tenderly

  Чтобы добавить secrets, перейдите в настройки проекта Tenderly и перейдите в раздел «Secrets».

  ### Реализуйте Web3 Action

  Создайте новый файл в каталоге actions с именем `uniswapV3Monitoring.ts` и реализуйте логику вашего Web3 Action следующим образом:

  ```typescript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  const ethers = require('ethers');

  const actionFn = async (context: Context, alertEvent: AlertEvent) => {
    const key = await context.secrets.get('ACCESS-KEY');

    const accountSlug = '<YOUR_ACCOUNT_ID>';
    const projectSlug = '<YOUR_PROJECT_SLUG>';
    const tagName = 'pool';

    const tenderly = new Tenderly({
      accountName: accountSlug,
      projectName: projectSlug,
      accessKey: key,
      network: Number(alertEvent.network),
    });

    const poolCreatedSignature = ethers.utils.id("PoolCreated(address,address,uint24,int24,address)");

    let poolAddress = "";
    for (const log of alertEvent.logs) {
      if (log.topics[0] === poolCreatedSignature) {
        const data = log.data;
        const addressHex = data.substring(data.length - 40);
        poolAddress = ethers.utils.getAddress('0x' + addressHex).toLowerCase();
        break;
      }
    }

    try {
      await tenderly.contracts.add(poolAddress, {
        displayName: 'Pool'
      });
      await tenderly.contracts.update(poolAddress, { appendTags: [tagName] });
      console.log(`Pool contract is: ${poolAddress}, and has been added with tag ${tagName}`);
    } catch (error) {
      console.error('Error adding contract:', error);
    }
  };

  module.exports = { actionFn };
  ```

  Обязательно замените `<YOUR_ACCOUNT_ID>` и `<YOUR_PROJECT_SLUG>` вашими фактическими `Account Name` и `Project Slug` Tenderly.

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

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

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

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

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

Настроенный вами Web3 Action будет автоматически срабатывать всякий раз, когда контракт `UniswapV3Factory` генерирует событие `PoolCreated`. Вот разбор функции `actionFn`:

1. Получает секрет `ACCESS-KEY` из контекста Tenderly.
2. Инициализирует новый экземпляр Tenderly SDK с деталями вашего аккаунта и проекта.
3. Определяет сигнатуру события `PoolCreated` с помощью ethers.js.
4. Проходит по логам события, чтобы найти событие `PoolCreated`, и извлекает адрес нового пула.
5. С помощью Tenderly SDK добавляет новый контракт пула в ваш проект Tenderly с отображаемым именем `Pool`.
6. Помечает новый контракт пула тегом `pool` для облегчения управления.
7. Логирует адрес пула и подтверждение процесса тегирования.

<Note>
  Эта реализация автоматически добавляет новые пулы Uniswap V3 в ваш проект Tenderly и помечает их тегами, что упрощает мониторинг и управление этими контрактами.
</Note>

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

Чтобы изменить поведение вашего Web3 Action:

1. Отредактируйте `actionFn` в файле `uniswapV3Monitoring.ts`.
2. Вы можете изменить переменную `tagName`, чтобы использовать другой тег для пулов.
3. Добавьте дополнительную логику для обработки большей информации из события или выполнения других действий с помощью Tenderly SDK.

Например, для добавления более подробного логирования:

```typescript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
console.log(`New pool created: ${poolAddress}`);
console.log(`Network: ${alertEvent.network}`);
console.log(`Transaction hash: ${alertEvent.hash}`);
```

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

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

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

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

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

Теперь вы настроили пользовательскую систему мониторинга с использованием Tenderly Web3 Actions для отслеживания создания новых пулов в контракте `UniswapV3Factory`. Этот проект демонстрирует, как взаимодействовать со смарт-контрактами, использовать Tenderly SDK и создавать автоматизированную систему для мониторинга и реагирования на конкретные события блокчейна.

Для получения дополнительной информации о Uniswap V3 и его контрактах обратитесь к [документации Uniswap V3](https://developers.uniswap.org/protocol/reference/core/UniswapV3Factory).
