写点什么

Substrate 源码追新导读: Call 调用索引化, 存储层事物化全面完成

作者:彭亚伦
  • 2022 年 6 月 30 日
  • 本文字数:884 字

    阅读完需:约 3 分钟

Substrate 源码追新导读: Call调用索引化, 存储层事物化全面完成

20220523 - 20220529

新增一个脚本用来运行全部 Benchmarks 的命令

4 月份以来, Benchmark相关的命令和子命令进行了一系列更新和扩展, 本周又新添加一个脚本用于执行全部的Benchmark命令; 并对 Benchmark 相关源码进行了诸多修正和更新. 脚本文件基于https://github.com/paritytech/polkadot/blob/master/scripts/ci/run_benches_for_runtime.sh.


详情:https://github.com/paritytech/substrate/pull/11493

新增 Call 索引化的属性宏

目前来说, 任何 dispatchable 的 Call 都没有设置执行顺序, 其执行大致是根据交易池和权重规则来判定, 现在提供一个#[pallet::call_index($idx)]属性宏, 用于固定Callenum 中的变量位置索引值, 不涉及执行顺序, 仅仅用于引用时方便区分等场景.


详情: https://github.com/paritytech/substrate/pull/11381

存储层的事务化全面更新以及 bug 修复

自 2021 年起, Parity 的核心开发者 Shawn Tabrizi 就提交一个新的储存层事务处理构想, 基本上分 3 步走: 第一步设置一个嵌套事务处理层数量的限制常量, 第二步在所有 Frame 和 Pallet 中对于事务化的 Call 调用实现全新的事务处理机制, 第三步则是将Transaction更名, 以便将"事务"跟"交易"这者区分开来(两者的单词都是Transaction).


今年 4 月份第一步已经完成, 而最关键的第二步则直到本周才彻底实现完毕. 这一部分提供了一些新的辅助函数日with_storage_layer, in_storage_layer等, 来替代之前的with_transactional函数, 相比之前的方式, 新的函数返回值是一个Result, 这样更符合事务处理的定义: 返回成功, 或者失败回滚.


储存层新的更新还包含一个DispatchWithStorageLayer的 trait 接口, 任何 pallet 都可以调用其中的.dispatch_with_storage_layer方法来使用新的储存层事务处理逻辑, 同时UnfliteredDispatchable用于兼容之前的处理逻辑.


另外, 第三步可能不会完成了, 因为改动太大, 对以前的代码兼容性不太好.


详情: https://github.com/paritytech/substrate/pull/11431


关于储存层的更新, 本周还有 Gavin 对多项储存容易出现删除相同 key 的问题.


详情: https://github.com/paritytech/substrate/pull/11490




本文为 SEP Creation 原创组文章, 作者彭亚伦


未经许可, 请勿转载.

发布于: 刚刚阅读数: 3
用户头像

彭亚伦

关注

A Rustacean and Substrate Evangelist 2021.01.25 加入

A Rustacean, and Substrate Evangelist, member of CRVA (RISC-V)

评论

发布
暂无评论
Substrate 源码追新导读: Call调用索引化, 存储层事物化全面完成_Substrate_彭亚伦_InfoQ写作社区