跳转到内容

解析交易

从根本上说,Indexer 处理器就是消费交易流并将处理后的数据写入存储的组件。下面深入了解交易是什么,以及可以从交易中提取哪些信息。

交易是 Aptos 区块链上的执行单元。如果交易中的程序执行成功(例如,从 Move 模块中的入口函数开始执行),产生的状态变更将应用到账本。有关交易生命周期的更多信息,请参阅此页面

Aptos 有四种交易:

  • 创世交易
  • 区块元数据交易
  • 状态检查点交易
  • 用户交易

前三种属于系统内部,对大多数处理器并不相关;本指南不讨论它们。

一般而言,大多数用户交易源于用户调用链上已部署 Move 模块中的入口函数,例如 0x1::coin::transfer。其他情况则源于 Move 脚本。可在此处了解不同交易类型。

处理器处理的用户交易包含多种信息。概括而言,它包括:

  • 已提交的载荷。
  • 函数/脚本执行后对账本产生的变更。

以下各节将展开说明。

载荷是用户希望执行 Move 函数时提交到区块链的内容。载荷的一些关键信息包括:

  • 发送方地址。
  • 所执行函数的地址、模块名和函数名。
  • 函数参数。

载荷中还有其他可能有价值的信息,可在此页面了解。

事件在交易执行期间发出。每个 Move 模块都可定义自己的事件,并决定在函数执行时何时发出事件。

例如,在 Move 中可能有以下代码:

struct MemberInvitedEvent has store, drop {
member: address,
}
public entry fun invite_member(member: address) {
event::emit_event(
&mut member_invited_events,
MemberInvitedEvent { member },
);
}

如果调用 invite_member,就能在交易中找到 MemberInvitedEvent

交易执行时,不会立刻直接影响链上状态。相反,它会输出一组将应用到账本的变更,称为写集。所有验证者就执行结果达成一致后,写集才会应用到账本。

写集展示交易发生后链上数据的最终状态,是链上存储数据的事实来源。写集变更有多种类型:

  • 写入模块/删除模块。
  • 写入资源/删除资源。
  • 写入表项/删除表项。