Справочник Alerting API
Введение
Tenderly Alert API позволяет создавать как простые, так и сложные оповещения (Alerts). Простое оповещение состоит из одного правила, например,method_call будет срабатывать, когда транзакция вызывает ваш публичный или внешний метод. Сложное оповещение может содержать несколько условий и сработает только когда все они выполняются. Например, оповещение с method_call и state_change сработает, когда транзакция вызовет указанный метод и изменит указанный слот хранилища.
При определении оповещения через API вам необходимо указать следующее:
- каналы доставки (delivery channels), которые получат уведомление при срабатывании правила. Подробнее о каналах доставки (Delivery Channels).
- массив выражений (expressions), которые вызовут срабатывание оповещения, если все условия, представленные отдельными выражениями, будут выполнены.
Каналы доставки можно создавать только через Dashboard, но получить их можно через API.
Аутентификация
Прежде чем создавать оповещения, вам нужно настроить аутентификацию и идентифицировать ваш проект:- JavaScript
- Shell
- Python
Типы выражений
Для задания правил срабатывания оповещений можно использовать различные типы выражений.| Тип выражения | Мониторинг | Основной сценарий использования | Обязательные аргументы | Необязательные аргументы |
|---|---|---|---|---|
method_call | Определённые вызовы функций в контрактах (прямые или внутренние транзакции) | Отслеживание вызовов важных функций | - line_number: строка, в которой определена функция; call_position: позиция вызова (“first”, “last”, “any”) | Нет |
whitelisted_caller_addresses | Вызовы от определённых адресов | Контроль доступа по allow-list | - addresses: массив Ethereum-адресов | Нет |
blacklisted_caller_addresses | Вызовы от заблокированных адресов | Контроль доступа по block-list | - addresses: массив Ethereum-адресов | Нет |
contract_address | Взаимодействия с конкретным контрактом | Отслеживание всех взаимодействий с контрактом | - address: адрес контракта | - transaction_type: “direct”, “source” или “internal” |
network | События в определённых сетях | Мультичейн-мониторинг | - network_id: ID сети/цепочки | Нет |
tag | Контракты с определёнными тегами | Мониторинг по группам | - tag: строка тега | - transaction_type: “direct”, “source” или “internal” |
tx_status | Успех/неуспех транзакции | Отслеживание неудачных транзакций | Нет | - transaction_success: boolean |
function_params | Значения параметров функций | Отслеживание конкретных входных параметров функций | - address: адрес контракта; function_line_number: строка определения функции; parameter_conditions: массив условий | - Специфичные для параметра опции |
tx_value | Значение транзакции | Отслеживание крупных переводов | - transaction_value: сумма в wei; operator: оператор сравнения | Нет |
emitted_log | События контракта | Отслеживание конкретных событий | - address: адрес контракта; event_name: имя события; event_id: сигнатура события | - match_any: boolean; decode_events: boolean; parameter_conditions: массив условий |
state_change | Изменения состояния контракта | Отслеживание изменений в хранилище | - address: адрес контракта; parameter_conditions: массив условий | - Параметры сравнения (пороговое значение, процент) |
view_function | Результаты read-only функций | Отслеживание вычисляемых значений | - address: адрес контракта; input: ABI-закодированные данные функции; network_id: ID сети | - parameter_condition: сравнение значений |
eth_balance | Изменения баланса ETH | Отслеживание пороговых значений баланса | - address: адрес контракта; threshold: баланс в wei; operator: оператор сравнения | Нет |
erc20_transfer_matcher | Согласованность ERC20-переводов | Проверка корректности переводов | - address: адрес токена; log_name: имя события; balances: имя переменной состояния | Нет |
tx_error | Ошибки транзакции | Отслеживание непредвиденных сбоев | Нет | - addresses_to_ignore: массив адресов |
tx_internal_error | Внутренние ошибки транзакции | Отслеживание сбоев внутренних вызовов | Нет | - addresses_to_match: массив адресов |
no_action | Отсутствие активности | Отслеживание бездействия контракта | - check_after_seconds: пороговое время | - no_log: условия по событиям; no_transaction: условия по транзакциям |
sandwich_transaction | Сэндвич-атаки | Отслеживание MEV-активности | - address: адрес контракта | - transaction_type: “direct”, “source” или “internal” |
Примечания
- Для операторов сравнения (
operator) допустимые значения:>,>=,<,<=,==,!=,contains,notContains - Типы параметров (
parameter_type) включают:uint,int,bool,address,string,byte - Все адреса должны быть валидными Ethereum-адресами (с префиксом
0x, 40 hex-символов) - Значения в wei следует передавать в виде строк для работы с большими числами
- ID сети должны соответствовать целевому блокчейну (например, “1” для Ethereum mainnet)
Примеры простых выражений
Рассмотрим примеры настройки простых правил-выражений.1. Мониторинг вызовов методов
Сценарий: отслеживание вызовов определённых функций в вашем смарт-контракте.- JavaScript
- Shell
- Python
2. Мониторинг изменений состояния
Сценарий: мониторинг изменений переменных состояния контракта, особенно полезен для отслеживания критичных параметров, таких как состояние паузы или пороговые значения баланса.- JavaScript
- Shell
- Python
3. Мониторинг событий
Сценарий: мониторинг определённых событий, генерируемых вашими контрактами, с фильтрацией по параметрам.- JavaScript
- Shell
- Python
4. Мониторинг баланса нативного ETH
Сценарий: оповещение о снижении баланса нативного ETH некоторого адреса ниже порогового значения, например, для релеера или операционного кошелька, который должен оставаться пополненным. Ограничьте оповещение сетью и адресом, затем сравните нативный баланс с пороговым значением (в wei).- JavaScript
- Shell
- Python
Примеры сложных оповещений
Далее приведены примеры сложных правил-выражений. Оповещение сработает, когда каждое выражение в массивеexpressions выполнено.
1. Система мониторинга безопасности
Сценарий: комплексный мониторинг безопасности, объединяющий несколько условий:- Мониторинг вызовов административных функций
- Отслеживание крупных переводов
- Отслеживание адресов из чёрного списка
- Оповещения об изменениях критичных параметров состояния
- JavaScript
- Shell
- Python
2. Мониторинг DeFi-протокола
Сценарий: мониторинг DeFi-протокола для:- Крупных сделок/свопов
- Значительного влияния на цену
- Изменений ликвидности
- Неудачных транзакций
- Сэндвич-атак
- JavaScript
- Shell
- Python
3. Мониторинг ERC20-токена с оповещениями о бездействии
Сценарий: комплексный мониторинг токена, включающий:- Мониторинг переводов
- Проверки баланса
- Проверки согласованности состояния
- Мониторинг бездействия
- JavaScript
- Shell
- Python