Danny0

Posted on Dec 27, 2021Read on Mirror.xyz

Tenderly Actions功能简介

以代码的方式编写好需执行的函数,配置触发的方式。

当平台检测到触发条件满足时,将自动执行对应的函数。

需要开发者离线编写代码并上传到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)
}

个人看法

该功能主要侧重于链上公开数据的处理,因为是云平台,所以无法很好的直接管理私钥,也就不能方便的自动化发送交易。

但对于一些通用的数据处理场景,还是非常有用的。

参考:

https://docs.tenderly.co/web3-actions/intro-to-web3-actions