Skip to main content
本指南介绍如何使用 Tenderly 的 API 设置简单和复杂的告警规则。我们将逐一探讨每种表达式类型,然后将它们组合成复杂的监控方案。

Alerting API 参考

简介

Tenderly 的 Alert API 允许您创建简单和复杂的 Alerts。 简单告警由一条规则组成,例如 method_call 会在事务调用您的 public 或 external 方法时触发。复杂告警可包含多个条件,只有当所有条件都满足时才会触发。例如,同时包含 method_call 和 state_change 的告警,会在事务调用指定方法并更新指定存储槽时触发。 使用 API 定义 Alert 时,您需要指定以下内容:
  • 投递渠道(delivery channels):当告警规则触发时,会通知这些渠道。详见 Delivery Channels。
  • 表达式(expressions)数组:当数组中每个表达式所代表的所有条件都被满足时,告警将被触发。
email、Discord 和 Sentry 投递渠道可以通过 API(POST /api/v1/account/{accountId}/delivery-channel)创建。Slack、Telegram 和 PagerDuty 渠道需要 OAuth/bot 连接流程,只能通过 Dashboard 创建。所有渠道都可以使用 API 获取。

身份验证

在创建告警之前,您需要设置身份验证并标识您的项目:

表达式类型

您可以使用不同的表达式类型来指定 Alerts 的触发规则。

说明

  • 以上是 API 接受的全部表达式类型。任何其他 type 值的负载都会被拒绝并返回 400(“Expressions are not in the right format”)。
  • 告警内的所有表达式都是 AND 关系:只有当每个表达式都匹配同一笔事务时,告警才会触发。要监控相互独立的条件,请为每个条件创建单独的告警。
  • 比较运算符(operator)的有效取值:>、>=、<、<=、==、!=、contains、notContains
  • 参数类型(parameter_type)包括:uint、int、bool、address、string、slice、array、tuple、fixed_bytes、bytes、hash、function
  • 表达式类型 emitted_log、erc20_transfer_matcher、eth_balance、tx_value、method_call、state_change、tx_status 和 view_function 支持可选的 not: true 字段来对匹配取反
  • erc20_token_transfer 规则:设置 addresses 或 match_any 其中之一,不能同时设置。address_tag 将 match_any 缩小到带有该标签的项目地址。未设置 token_addresses 时,代币范围为项目中的 ERC-20 合约(可通过 token_tag 缩小,或通过 match_non_project_contracts 扩大到任意代币)。require_dollar_value: true 会跳过没有已知美元价格的代币转账,且仅可与 match_non_project_contracts 一起使用。min_amount 和 max_amount 包含边界值,比较的是绝对金额,并且要求 token_addresses 中恰好有一个条目。设置 net: true 时,方向和金额作用于事务中每个地址和代币的余额净变化。参见 ERC-20 代币转账监控。
  • eth_balance 仅在事务使余额跨越阈值(从不满足变为满足)时触发,而不是在条件持续满足期间的每笔事务上触发
  • 所有地址必须是有效的 Ethereum 地址(以 0x 开头,40 个十六进制字符)
  • Wei 值应作为字符串传入以处理大数
  • 网络 ID 应与目标区块链一致(例如 Ethereum 主网为 “1”)
更多详情请参阅 Alerting API 参考。

简单表达式示例

以下示例展示如何设置简单表达式规则。

1. 方法调用监控

使用场景:监控智能合约中的特定函数调用。

2. 状态变化监控

使用场景:监控合约状态变量的变化,特别适用于跟踪关键参数,例如暂停状态或余额阈值。

3. 事件监控

使用场景:监控您的合约发出的特定事件,并支持参数过滤。

4. 原生 ETH 余额监控

使用场景:当某个地址的原生 ETH 余额低于阈值时告警,例如必须保持有充足资金的中继器或运营钱包。将告警范围限定到某个网络和地址,然后将原生余额与阈值(以 wei 表示)进行比较。

5. ERC-20 代币转账监控

使用场景:当金库钱包在 Ethereum mainnet 上发送至少 100,000 USDT 时告警。network 表达式将告警限定在一个网络上,min_amount 以原始单位表示(USDT 有 6 位 decimals)。ERC20 Token Transfer 介绍了各字段。
如需监控项目中的所有地址而不是单个地址,请将 addresses 替换为 "match_any": true,并可选择搭配 "address_tag"。如需覆盖项目中的所有代币,请省略 token_addresses;金额边界要求单个代币,因此还需删除 min_amount 和 max_amount。 如需匹配任意 ERC-20 代币(包括未添加到项目中的代币),请省略 token_addresses 并设置 "match_non_project_contracts": true。添加 "require_dollar_value": true 可跳过没有已知美元价格的代币,例如垃圾代币和空投代币。以下表达式会在任何有价格的 ERC-20 代币从带有 treasury 标签的项目地址转出时触发:

复杂告警示例

以下示例展示复杂的表达式规则。只有当 expressions 数组中的每个表达式都被满足时,告警才会触发。

1. 安全监控系统

使用场景:结合多个条件的全面安全监控:
  • 监控管理员函数调用
  • 跟踪大额转账
  • 监视黑名单地址
  • 对关键参数的状态变化进行告警

2. DeFi 协议监控

用例:监控 DeFi 池的以下情况:
  • 大额交易/兑换
  • 流动性变化
  • 失败的事务
由于告警内的表达式是 AND 关系,每个条件都是一个单独的告警。下面的示例一次性创建三个告警。

3. ERC20 代币监控

用例:代币监控,包括:
  • Transfer 一致性检查
  • 大额转账监控
  • 总供应量变化
与上一个示例一样,每个条件都是各自独立的告警。