头图

在执行交易的过程中,会触发事件。每个 Move 模块都可以定义自己的事件,并且决定何时触发这些事件。例如,在一个“转账”(coin tranfer)动作发生时,发送人和接收人账户,会依次分别触发SentEvent事件和ReceiveEvent事件。事件触发的数据,会被存储到链上,并且可以通过 REST 服务来查询,参见“通过事件句柄获取事件信息”。
假设下列账户:
0xc40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd
已经完成了向另外一个账户转账,通过以下的 REST 接口可以查询相关信息:
[https://fullnode.devnet.aptoslabs.com/v1/accounts/c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd/events/0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/withdraw_events](https://fullnode.devnet.aptoslabs.com/v1/accounts/c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd/events/0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/withdraw_events)
该接口会返回指定账户下所有的提现事件,类似下面的样子:

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

每个注册过的事件,都有一个唯一的 key。比如
0x0000000000000000c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd
这个key,就对应着账户
0xc40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd
上的事件
0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/sent_events
查询事件的时候,可以直接用这个 key 当参数:
[https://fullnode.devnet.aptoslabs.com/v1/events/0000000000000000c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd](https://fullnode.devnet.aptoslabs.com/v1/events/0000000000000000c40f1c9b9fdc204cf77f68c9bb7029b0abbe8ad9e5561f7794964076a4fbdcfd)

上述事件流,或者说一组事件列表,每一条都包含一个从0开始有序递增的序列号字段,一个类型字段和数据字段。每条事件必须预先定义好类型。可能有多条事件具有相同或相近的类型,特别是在使用泛型的时候。事件可以有关联的数据;一般说来,这些数据应该包含所有变化的信息,让用户能够查询到交易执行前后,相关的资源发生了哪些变化,从而触发了事件。


songofhawk
303 声望24 粉丝