Skip to main content
处理已就绪的源区块,为目标表生成派生记录。本例筛选带有金额的 trace 行,并保留整数值。

链与区块上下文

本例将 eth 作为函数的链参数。同一个 block 对象选择源区块与目标写入上下文。如果增加 EVM 读取,应将 block.id 显式传给函数及其 EVM 实例。

前置条件

  • 已连接的 block 部署及可读的 BlockDB 源数据。
  • 源 schema 包含 id、tx_id、from_addr、to_addr 和十进制整数 value。
  • 目标表具有兼容列,其中 value 能保持整数精度。
  • 从源通知或应用输入就绪流程取得的 BlockDB Block 对象。

提交区块计算

使用已就绪区块、源表名与目标表名调用 submit_block。调用方判断依赖何时可读,将就绪检查放在函数执行之外。

选择普通表输出

如果结果应写入不带区块写入上下文的按键表,将 handler 替换为 NormalTableWriteHandler(targetTable=target_table)。函数仍需接收计算所需的上下文。见配置参考。 需要条件更新时,选择目标 schema 中可比较的列。遇到相同 id 的已有行时,此 handler 保留较大的 value:
将 increasing_value_handler(target_table) 作为第二个参数传给 TaskBuilder.build。改用 UpdateIfSmaller 可保留较小值。等价字典写法是 condition={"column": "value", "policy": "UpdateIfLarger"}。条件列不能是 id;省略 condition 时执行无条件 upsert。条件 upsert 不保证整个任务及其其他副作用幂等。

确认完成

记录任务标识、源区块、目标表与 Writer 结果。区块写入异步提交。下游计算前,先确认目标区块的存储完成与读取条件;见执行语义。

处理失败

  • 重新计算前,先修正缺失的源字段或目标列。
  • 将 PLUGIN_FAILED 与函数失败分别排查。
  • 提交后连接结束时,先查询原任务和写入状态,再决定是否创建新工作。

继续阅读