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 原创组文章, 作者彭亚伦
未经许可, 请勿转载.
版权声明: 本文为 InfoQ 作者【彭亚伦】的原创文章。
原文链接:【http://xie.infoq.cn/article/8c23f9a8847ae920c93b5a72c】。文章转载请联系作者。










评论