以代码的方式编写好需执行的函数,配置触发的方式。
当平台检测到触发条件满足时,将自动执行对应的函数。
需要开发者离线编写代码并上传到Tenderly平台,带有版本管理。
主要使用场景是自定义数据处理和告警通知等。
Trigger类型
- block:指定间隔一个或多个区块执行
- transaction: 执行满足条件的交易才执行,需设置filter过滤交易
- periodic:通过cron语法指定执行的时间,或interval参数指定周期执行的间隔
- webhook:提供一个http接口,可用于外部触发执行
- alert:与现有的告警集成,当有告警时执行
其中interval参数只能为:
{5m, 10m, 15m, 30m, 1h, 3h, 6h, 12h, 1d}
Functions
上传代码的方式,45M限制;
import { ActionFn, BlockEvent, Context, Event } from '@tenderly/actions'
export const blockHelloWorldFn: ActionFn = async (context: Context, event: Event) => {
let blockEvent = event as BlockEvent
console.log(blockEvent)
}
event需要根据类型转换:
let transactionEvent = event as TransactionEvent
let periodicEvent = event as PeriodicEvent
let webhookEvent = event as WebhookEvent
Secrets
可以通过context获取已经定义的私密数据;
必须在dashboard先定义;
最大1KB;
export const blockHelloWorldFn: ActionFn = async (context: Context, event: Event) => {
const token = await context.secrets.get('API_TOKEN')
}
Storage
提供Key-Value存储,可以保存一些数据;
最大10KB;
export const blockHelloWorldFn: ActionFn = async (context: Context, event: Event) => {
await context.storage.putNumber('HELLO_WORLD/BLOCK_NUMBER', event.blockNumber)
await context.storage.putStr('HELLO_WORLD/BLOCK_HASH', event.blockHash)
let invocationCount = await context.storage.getNumber('HELLO_WORLD/INVOCATIONS')
await context.storage.putNumber('HELLO_WORLD/INVOCATIONS', invocationCount + 1)
}
个人看法
该功能主要侧重于链上公开数据的处理,因为是云平台,所以无法很好的直接管理私钥,也就不能方便的自动化发送交易。
但对于一些通用的数据处理场景,还是非常有用的。
参考: