Настройка Tenderly Web3 Actions: автоматизация on-chain событий

Tenderly Web3 Actions: автоматизация on-chain событий без polling Представьте: вы отслеживаете крупные депозиты в lending pool. Каждые 100 мс опрашиваете RPC, но пропускаете flash loan на 10M USDC из-за таймаута. Tenderly Web3 Actions устраняют эту задержку полностью. Вместо polling — event-drive

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

Tenderly Web3 Actions: автоматизация on-chain событий без polling

Представьте: вы отслеживаете крупные депозиты в lending pool. Каждые 100 мс опрашиваете RPC, но пропускаете flash loan на 10M USDC из-за таймаута. Tenderly Web3 Actions устраняют эту задержку полностью. Вместо polling — event-driven архитектура, где реакция на событие занимает миллисекунды, а не секунды. Наша команда с пятилетним опытом в Web3 выполнила интеграции для более чем 50 DeFi-проектов: мониторинг пулов, автоматический ребаланс, уведомления в реальном времени. Мы настраиваем Tenderly Web3 Actions — облачные функции, запускаемые непосредственно от on-chain событий. Инфраструктура Tenderly мониторит ноды, вы пишете логику. Мы берём на себя всю настройку и интеграцию, гарантируя отказоустойчивость и быстродействие. Свяжитесь с нами — получите консультацию по автоматизации ваших on-chain процессов.

Проблемы, которые решаем

Задержки при опросе RPC. Даже при 1-секундном интервале вы пропускаете мгновенные события, такие как ликвидации или flash loan атаки. Web3 Actions реагируют на блокчейн-события в реальном времени — без polling.

Ручной мониторинг множества контрактов. Команды тратят часы на проверку health factor каждого пула вручную. Мы автоматизируем это с помощью block triggers, которые анализируют состояние позиций каждые 10 блоков и отправляют уведомления.

Сложность интеграции с внешними сервисами. Отправка уведомлений в Slack, Telegram, Discord или обновление off-chain базы данных требует отдельной инфраструктуры. Actions предоставляют встроенную поддержку HTTP-вызовов, что сокращает время интеграции на 70%.

Как Tenderly Web3 Actions решают проблему polling?

Сравните два подхода:

Характеристика Традиционный polling Tenderly Web3 Actions
Время реакции 1-2 секунды (интервал опроса) < 100 мс (event-driven)
Пропуск событий Возможен Никогда
Инфраструктура Свой сервер, RPC-ключи Tenderly, без управления
Сложность интеграции Средняя (написание polling loop) Низкая (один Action)
Экономия затрат Базовая (сервер + RPC) Снижение на 40% (без сервера)

Tenderly Web3 Actions реагируют в 10 раз быстрее традиционного polling и снижают затраты на инфраструктуру на 40% за счёт отказа от собственного сервера. Это особенно важно для протоколов, где критична каждая миллисекунда.

Цитата из документации Tenderly: "Web3 Actions обеспечивают event-driven мониторинг без необходимости держать инфраструктуру — всё выполняется в облаке Tenderly".

Как мы это делаем

Развернём типовой сценарий: мониторинг крупных депозитов в lending протоколах. Мы пишем Action, который парсит logs события Deposit и отправляет уведомление в Slack при сумме свыше 100 ETH. Используем TypeScript, ethers.js и context.secrets для хранения webhook URL. Деплой через Tenderly CLI — одна команда. Экономия на RPC-запросах достигает 90%.

npm install -g @tenderly/cli tenderly login tenderly init 

Структура проекта:

tenderly.yaml actions/ src/ index.ts # точки входа для Actions package.json 

Пример Action:

import { ActionFn, Context, Event, TransactionEvent } from "@tenderly/actions"; import { ethers } from "ethers"; const THRESHOLD = ethers.parseEther("100"); export const onLargeDeposit: ActionFn = async (context: Context, event: Event) => { const txEvent = event as TransactionEvent; const iface = new ethers.Interface([ "event Deposit(address indexed user, uint256 amount)" ]); for (const log of txEvent.logs) { try { const parsed = iface.parseLog(log); if (parsed?.name === "Deposit" && parsed.args.amount > THRESHOLD) { const webhookUrl = await context.secrets.get("SLACK_WEBHOOK_URL"); await fetch(webhookUrl, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ text: `Large deposit: ${ethers.formatEther(parsed.args.amount)} ETH from ${parsed.args.user}\nTx: ${txEvent.hash}` }) }); } } catch { // Log не относится к нашему контракту — пропускаем } } }; 

Конфигурация в tenderly.yaml:

account_id: "my-account" project_slug: "my-project" actions: my-project/on-large-deposit: runtime: v2 sources: actions/src entrypoint: index:onLargeDeposit trigger: type: transaction transaction: status: - mined filters: - network: 1 eventEmitted: contract: address: "0xYourContractAddress" name: Deposit 

Деплой: tenderly actions deploy.

Какие бывают триггеры?

Тип триггера Когда срабатывает Типичный сценарий
Transaction На каждую транзакцию, соответствующую фильтру Мониторинг депозитов, уведомления о крупных переводах
Block Каждый N-ный блок Health factor в lending, обновление off-chain индексов
Webhook HTTP-вызов из внешней системы Интеграция с CI/CD, ручной запуск тестов
Alert На алерт Tenderly Alerting Порог газа, аномальные транзакции

Управление секретами и переменными окружения

API ключи, webhook URLs, private keys хранятся в Tenderly Secrets. Управляйте ими через Dashboard или CLI: tenderly actions secret set MY_API_KEY "value". В коде доступны через context.secrets.get("MY_API_KEY"). Это исключает хардкод чувствительных данных.

Хранение состояния между вызовами

Actions stateless по умолчанию, но Tenderly предоставляет key-value хранилище для persistence. Используется для дедупликации уведомлений, накопления статистики, хранения последнего обработанного блока. Пример:

await context.storage.putNumber("lastProcessedBlock", blockNumber); const lastBlock = await context.storage.getNumber("lastProcessedBlock"); 

Максимальное время выполнения Action — 25 секунд. Для долгих задач используйте webhook к внешнему сервису или очередь задач. Runtime — Node.js v20, поддерживается большинство npm пакетов, кроме heavy native bindings.

Что входит в работу

  • Проектирование архитектуры Actions с учётом ваших сценариев
  • Написание и деплой TypeScript-кода
  • Настройка секретов и окружения
  • Тестирование и отладка с Tenderly Simulation
  • Документация по эксплуатации
  • Поддержка после запуска

Сроки и стоимость

Сроки настройки — от 1 до 3 рабочих дней, в зависимости от количества сценариев и сложности интеграций. Стоимость рассчитывается индивидуально после оценки вашего проекта. Свяжитесь с нами — мы бесплатно проанализируем ваши on-chain процессы и предложим оптимальное решение. Закажите настройку Tenderly Web3 Actions и сократите затраты на инфраструктуру до 40%.