Шаблон Web3 Action для мониторинга UniswapV3Factory
Обзор проекта
Цель этого проекта — настроить систему, которая отслеживает создание новых пулов в контракте UniswapV3Factory и выполняет автоматизированные действия при выполнении определённых условий. Вот краткое описание процесса проекта:- Web3 Action отслеживает события
PoolCreatedот контракта UniswapV3Factory в Ethereum mainnet. - Когда событие обнаружено, извлекается адрес нового пула из данных события.
- Action добавляет новый контракт пула в ваш проект Tenderly и помечает его тегом для облегчения управления.
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть следующее:- Установленный Tenderly CLI
- Node.js (сейчас поддерживается v20)
- npm
- Аккаунт и проект Tenderly
Настройка
Пройдём через шаги настройки вашей системы мониторингаUniswapV3Factory:
Если вы ещё этого не сделали, создайте новый проект в панели Tenderly или используйте существующий.
- Contract Address:
0x1f98431c8ad98523631ae4a59f267346ea31f984(контракт UniswapV3Factory) - Event Signature:
PoolCreated(address,address,uint24,int24,address) - Дайте оповещению подходящее имя для удобства
id оповещения для дальнейшего использования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, который вы записали ранее.ACCESS-KEY: ваш ключ доступа API TenderlyСоздайте новый файл в каталоге actions с именем
uniswapV3Monitoring.ts и реализуйте логику вашего Web3 Action следующим образом: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 будет автоматически срабатывать всякий раз, когда контрактUniswapV3Factory генерирует событие PoolCreated. Вот разбор функции actionFn:
- Получает секрет
ACCESS-KEYиз контекста Tenderly. - Инициализирует новый экземпляр Tenderly SDK с деталями вашего аккаунта и проекта.
- Определяет сигнатуру события
PoolCreatedс помощью ethers.js. - Проходит по логам события, чтобы найти событие
PoolCreated, и извлекает адрес нового пула. - С помощью Tenderly SDK добавляет новый контракт пула в ваш проект Tenderly с отображаемым именем
Pool. - Помечает новый контракт пула тегом
poolдля облегчения управления. - Логирует адрес пула и подтверждение процесса тегирования.
Эта реализация автоматически добавляет новые пулы Uniswap V3 в ваш проект Tenderly и помечает их тегами, что упрощает мониторинг и управление этими контрактами.
Кастомизация
Чтобы изменить поведение вашего Web3 Action:- Отредактируйте
actionFnв файлеuniswapV3Monitoring.ts. - Вы можете изменить переменную
tagName, чтобы использовать другой тег для пулов. - Добавьте дополнительную логику для обработки большей информации из события или выполнения других действий с помощью Tenderly SDK.
Мониторинг и устранение неполадок
Чтобы убедиться, что ваш Web3 Action работает корректно:- Отслеживайте выполнения Web3 Action в панели Tenderly
- Проверяйте логи Tenderly на предмет сообщений об ошибках или деталей выполнения
- Используйте инструменты отладки Tenderly для инспекции деталей транзакций и взаимодействий с контрактами
- Проверяйте страницу Contracts вашего проекта Tenderly, чтобы увидеть добавленные и помеченные контракты пулов
Заключение
Теперь вы настроили пользовательскую систему мониторинга с использованием Tenderly Web3 Actions для отслеживания создания новых пулов в контрактеUniswapV3Factory. Этот проект демонстрирует, как взаимодействовать со смарт-контрактами, использовать Tenderly SDK и создавать автоматизированную систему для мониторинга и реагирования на конкретные события блокчейна.
Для получения дополнительной информации о Uniswap V3 и его контрактах обратитесь к документации Uniswap V3.