Skip to main content

事件

在事务执行期间发出事件。 每个 Move 模块都可以定义自己的事件,并在执行模块时选择何时发出事件。 例如,在 coin transfer 期间,发送方和接收方的账户将分别发出 SentEventReceivedEvent。 这些数据存储在账本中,可以通过 REST 接口的 Get events by event handle 进行查询。

假设有一个帐户 0xc40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd 已将代币发送到另一个帐户,可以对 REST 接口进行以下查询: https://fullnode.devnet.aptoslabs.com/v1/accounts/c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd/events/0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/withdraw_events. 输出将是存储在该帐户中的所有WithdrawEvent,它看起来像

[
{
"key": "0x0000000000000000caa60eb4a01756955ab9b2d1caca52ed",
"sequence_number": "0",
"type": "0x1::coin::WithdrawEvent",
"data": {
"amount": "1000"
}
}
]

每个注册的事件都有一个唯一的 key。 key 0x0000000000000000c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd 映射到事件 0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/sent_events 注册账户 0xc40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd. 然后可以使用这个 key 直接进行事件查询, 例如, https://fullnode.devnet.aptoslabs.com/v1/events/0000000000000000c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd.

这些代表事件流,或事件列表,其中每个条目包含从0开始的顺序增加的sequence_numbertypedata。 每个事件必须由某种type定义。 可能有多个事件由相同或相似的type定义,尤其是在使用泛型时。 事件有关联的data。 一般原则是包含所有必要的数据,以了解在执行更改数据并发出事件的事务之前和之后对底层资源的更改。