Tenderly Web3 Actions: автоматизація on-chain подій без polling
Уявіть: ви відстежуєте великі депозити в lending pool. Кожні 100 мс опитуєте RPC, але пропускаєте flash loan через таймаут. 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%.
Розробка смарт-контрактів
Ми зіткнулися з ситуацією: контракт задеплоєно, за два тижні приходить повідомлення — пул дреновано на значну суму. Дивимося транзакцію в Tenderly: атакуючий викликав deposit(), всередині callback на ERC-777 повторно викликав withdraw() — баланс оновився тільки після другого виходу. Класична reentrancy, але не через ETH transfer, а через хук ERC-777. ReentrancyGuard стояв тільки на withdraw().
Такі випадки — не рідкість. Смарт-контракт — це фінансова логіка без можливості пропатчити її вночі. Наша команда розробляє контракти під ключ, вбудовуючи захист від reentrancy, MEV та gas-атак на ранніх етапах. Reentrancy attack — одна з найпоширеніших вразливостей, що потребує глибокого розуміння EVM.
Як ми розробляємо смарт-контракти під ключ?
Починаємо з аудиту бізнес-логіки та вибору стеку. Solidity 0.8.x — стандарт для EVM-сумісних чейнів: Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche C-Chain. Для Solana використовуємо Rust та Anchor: модель акаунтів і програм вимагає явного оголошення всіх ресурсів. Для проектів з формальною верифікацією підходить Move (Aptos, Sui) — лінійні типи мови виключають копіювання ресурсів на рівні компілятора. Vyper обираємо для контрактів, де критична простота аудиту (Curve Finance).
| Мова |
Модель виконання |
Типова область |
Ризики |
| Solidity 0.8.x |
EVM, послідовне виконання |
DeFi, NFT, токени |
Reentrancy, переповнення (unchecked) |
| Rust (Anchor) |
Solana, паралельне |
Високонавантажені DEX, ігри |
Неправильне оголошення акаунтів |
| Move |
Aptos/Sui, ресурсна |
Крупні протоколи |
Складність екосистеми |
| Vyper |
EVM, обмежений синтаксис |
Критичні контракти (Curve) |
Залежність від стабільності компілятора |
Gas optimization — не передчасна оптимізація, а архітектурне рішення. На Ethereum mainnet деплой погано спроектованого контракту може коштувати значну суму тільки через неоптимальний storage layout. Переупаковка структури Proposal з 7 слотів до 4 заощадила 18k gas на кожному голосуванні — економія на масштабі протоколу з тисячами голосувань на день дає відчутну річну вигоду.
Типові помилки в gas: передача масивів через memory замість calldata в external функціях (дорожче в 2-3 рази); використання require з довгими рядками замість custom error error InsufficientBalance(...). Кастомні помилки дешевші на 50-200 gas на revert і передають структуровані дані фронтенду.
Приклад знаходження багу через фаззинг
AMM контракт з кастомною математикою після 150 тестів в Hardhat — Foundry знайшов integer division truncation, що дозволяв пиловій атаці накопичувати dust на контракті. Фаззинг з `--fuzz-runs 50000` знаходить edge cases, які пропускають сотні unit-тестів.
Чому аудит смарт-контрактів критичний для безпеки?
Аудит — не разова перевірка, а вбудований етап розробки. Використовуємо три рівні:
- Статичний аналіз — Slither (30 секунд в CI) виявляє reentrancy, неініціалізовані змінні, небезпечний delegatecall.
- Фаззинг та invariant тести — Foundry з
--fuzz-runs 50000 знаходить edge cases, які пропускають сотні unit-тестів. Echidna перевіряє інваріанти («сума всіх балансів ≤ totalSupply»).
- Ручний code review — наші інженери з досвідом 10+ років у блокчейні виявляють логічні помилки, які не ловлять інструменти. Для протоколів з високим TVL обов'язковий зовнішній аудит з боку Trail of Bits, Consensys Diligence або OpenZeppelin. Термін — 2-4 тижні.
Будь-який апгрейдуємий протокол повинен мати timelock. TimelockController з OpenZeppelin: операція пропонується → чекає мінімальний delay (48-72 години) → виконується. Без timelock один скомпрометований deployer wallet = втрата всього пулу.
OpenZeppelin Security Audits підтверджують, що 80% вразливостей, знайдених у деплоїних контрактах, пов'язані з відсутністю перевірок доступу або reentrancy. Ми включаємо ці перевірки в CI ще до першого деплою.
Які патерни апгрейду обираємо?
| Патерн |
Механізм |
Ризик |
Коли використовувати |
Наш досвід |
| Transparent Proxy (OZ) |
admin vs user розділення |
Storage collision, centralization |
Стандартні проекти |
15+ реалізацій |
| UUPS |
Логіка апгрейду в implementation |
Забути _authorizeUpgrade → контракт назавжди зламаний |
Газ-оптимізовані проекти |
7 проектів |
| Diamond (EIP-2535) |
Множина facets |
Складність аудиту |
Крупні протоколи з 10+ контрактами |
3 впровадження |
| Beacon Proxy |
Один beacon для множини proxies |
Beacon = single point of failure |
Фабрики однотипних контрактів |
5 фабрик |
Storage collision — головна небезпека проксі. Implementation v2 не повинен додавати змінні перед існуючими. OpenZeppelin Upgrades plugin для Hardhat та Foundry перевіряє це автоматично, але тільки при використанні його API.
Як захистити контракт від MEV та front-running?
На Ethereum mainnet транзакції в mempool видно всім. MEV-боти проводять sandwich-атаки на DEX, фронтраннінги мінтингу та governance. Рішення: commit-reveal scheme для аукціонів, приватна відправка через Flashbots PROTECT RPC. EIP-7702 та PBS (proposer-builder separation) змінюють картину, але поки не масово.
Процес розробки
- Аналітика — специфікація функцій, діаграма викликів, аналіз edge cases. Без цього кодинг починається даремно.
- Розробка — Solidity/Rust з тестами паралельно. Тест → код → рефакторинг. Використовуємо Foundry для fuzz та invariant тестів.
- Внутрішній аудит — Slither + Echidna + ручний code review. Foundry invariant tests для протокольних інваріантів.
- Зовнішній аудит — для проектів з реальними грошима. Термін: 2-4 тижні.
- Деплой — Foundry scripts або Hardhat Ignition з verify на Etherscan. Gnosis Safe для ownership transfer одразу після деплою.
- Моніторинг — Tenderly alerts, OpenZeppelin Defender, Forta Network.
Що входить в роботу
- Документація на архітектуру та специфікацію контракту (NatSpec).
- Вихідний код з репозиторієм та CI (Slither, Foundry, coverage).
- Розгорнута версія контракту з verify на блокчейн-експлорері.
- Результати аудиту (внутрішнього та зовнішнього за запитом).
- Доступи до моніторингу та управління (Gnosis Safe).
- Гарантія на код: фікси критичних багів протягом місяця після деплою.
- Консультація щодо інтеграції з веб-інтерфейсом (wagmi, RainbowKit).
Терміни орієнтовно
- ERC-20 token з базовими функціями: 1-2 тижні
- Vesting контракт з cliff/linear schedule: 2-3 тижні
- NFT ERC-721/1155 з маркетплейсом: 4-6 тижнів
- AMM або lending протокол: 2-4 місяці
- Мультичейн протокол з bridge: 4-7 місяців
Аудит додає 3-6 тижнів і йде паралельно з фінальним тестуванням де можливо. Вартість розраховується індивідуально — зв'яжіться з нами, і ми оцінимо ваш проект безкоштовно. Економія на газі завдяки нашій оптимізації може сягати 30% на рік для високонавантажених протоколів.
Зв'яжіться з нами для оцінки вашого проекту. Замовте розробку смарт-контракту — отримайте консультацію з архітектури та захисту від reentrancy, MEV та gas-атак. Напишіть нам — ми підберемо оптимальний стек під вашу задачу.