You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Substrate 0.9.12版本单元测试中如何访问event的vault_id参数值

Substrate 0.9.12 提取事件字段vault_id的实现方法

你拿到外层Event实例后,通过嵌套模式匹配即可直接提取目标字段,示例代码如下:

基础匹配写法(适合单分支判断场景)

// 请替换为你自己MosaicVault pallet的实际导入路径
use mosaic_vault::Event as MosaicVaultEvent;

let e = &frame_system::Pallet::<Test>::events()[0];
let EventRecord { event, .. } = e;

// 两层匹配:外层匹配聚合Event的MosaicVault变体,内层匹配pallet内部的VaultCreated事件
if let Event::MosaicVault(MosaicVaultEvent::VaultCreated { vault_id, .. }) = event {
    // 此处可直接使用vault_id变量,单元测试场景下可直接做断言
    assert_eq!(*vault_id, 1);
}

多分支匹配写法(适合处理多个事件场景)

如果需要同时处理多种事件类型,可以用match分支实现:

match event {
    Event::MosaicVault(MosaicVaultEvent::VaultCreated { vault_id, sender, asset_id, reserved }) => {
        // 可访问该事件的所有字段
        println!("vault_id: {}, 发起方: {}", vault_id, sender);
    },
    // 其他事件的处理分支可在此补充
    _ => {}
}

注意事项

  • 必须保证导入的MosaicVaultEvent和你运行时中聚合的pallet事件定义完全一致,避免匹配失败
  • Substrate 0.9.x版本的运行时Event是所有pallet事件的聚合枚举,所以必须先匹配到对应pallet的事件变体,再匹配到具体的事件类型才能访问内部字段
  • 单元测试场景下如果确定当前取到的第一个事件就是VaultCreated,也可以直接用let强制匹配,无需分支判断

内容的提问来源于stack exchange,提问作者Neo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:45:03