Diem区块链中的事件机制详解

Diem区块链中的事件机制详解

diem Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world. diem 项目地址: https://gitcode.com/gh_mirrors/di/diem

概述

在Diem区块链中,事件(Events)是Move语言定义的一种特殊数据结构,用于记录交易执行过程中产生的关键信息。这些事件数据会被永久存储在区块链的EventStore中,成为账本状态的一部分。通过查询事件,用户可以获取链上交易执行的证明。

事件类型与用途

Diem区块链中的事件主要分为三大类:

1. 支付交易事件

当发生支付交易时,系统会自动生成两类事件:

  • SentPaymentEvent:记录在发送方的事件流中
  • ReceivedPaymentEvent:记录在接收方的事件流中

这两种事件结构相同,包含以下字段:

| 字段名 | 类型 | 描述 | |----------|----------|----------------------------------------------------------------------| | amount | Amount | 交易金额 | | sender | string | 发送方地址(16进制编码),如果是铸币交易则为0x0...0 | | receiver | string | 接收方地址(16进制编码) | | metadata | string | 可选字段,可用于存储额外元数据,如实现子地址方案等 |

2. 铸币与销毁事件

每种注册的货币类型都会在链上维护一个CurrencyInfo<CoinType>资源,其中包含四个相关事件流:

  • BurnEvent:记录货币销毁事件
  • PreburnEvent:记录预销毁事件
  • CancelBurnEvent:记录取消销毁事件
  • MintEvent:记录货币铸造事件

3. 系统操作事件

系统级操作也会产生相应事件,例如:

  • UpgradeEvent:系统升级维护时触发
  • NewEpochEvent:链上配置修改时触发
  • NewBlockEvent:新区块添加时触发

事件机制核心概念

事件流(Event Stream)

事件流是ContractEvent负载的仅追加向量(append-only vector)。每个事件流都有:

  • 唯一的40字节事件键(Event Key)
  • 从0开始的序列号(Sequence Number)

事件句柄(EventHandle)

EventHandle是Move资源,包含:

  • 事件键
  • 当前事件流中的事件计数

EventHandle通常嵌入在其他Move资源中。例如,每个DiemAccount资源都包含:

  • sent_events:发送支付事件句柄
  • received_events:接收支付事件句柄

ContractEvent结构

ContractEvent负载包含:

  • 事件键
  • 序列号
  • 序列化的Move值
  • 标识值类型的标签

事件查询实践

查询账户的SentPaymentEvent

以下示例展示如何查询账户的SentPaymentEvent:

  1. 获取事件键: 通过查询账户状态获取sent_events_keyreceived_events_key

    示例响应:

    {
      "received_events_key": "00000000000000001668f6be25668c1a17cd8caf6b8d2f25",
      "sent_events_key": "01000000000000001668f6be25668c1a17cd8caf6b8d2f25",
      ...
    }
    
  2. 查询具体事件: 使用获取的事件键查询特定序列号的事件。

    示例响应:

    {
      "data": {
        "amount": {
          "amount": 200,
          "currency": "XUS"
        },
        "metadata": "",
        "receiver": "280081f",
        "sender": "996b67d",
        "type": "sentpayment"
      },
      "key": "01000000000000001668f6be25668c1a17cd8caf6b8d2f25",
      "sequence_number": 2,
      "transaction_version": 106495
    }
    

技术实现要点

  1. 不可变性:事件一旦产生就无法修改,确保历史记录的可靠性
  2. 高效查询:通过事件键和序列号可以快速定位特定事件
  3. 类型安全:Move语言的类型系统保证事件数据的结构一致性
  4. 存储优化:事件流采用仅追加设计,优化了写入性能

理解Diem的事件机制对于开发钱包应用、审计工具和监控系统都至关重要。通过合理利用事件数据,开发者可以构建更可靠、透明的区块链应用。

diem Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world. diem 项目地址: https://gitcode.com/gh_mirrors/di/diem

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡霆圣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值