Substrate技术月报 | 2021.06 - Substrate 技术更新速递

  • 重要提交和发布

    • GRANDPA gossip机制优化,提升公平性
    • SelectChain接口改为异步,便于读取子系统信息
    • 存储项API(如remove_all)新增删除数量限制,支持分批操作
    • WASM内存限制提升至32MB,解决staking模块内存问题
    • 新增try-runtime execute-block命令,支持基于历史状态执行区块
    • 引入Fast Sync模式,大幅加速区块同步
    • 新增transfer_all函数,支持全额转账
    • WASM引擎wasmtime升级至0.27,性能显著提升
  • 设计方案讨论

    • 实现CountedStorageMap,可统计存储元素数量
    • 讨论存储前缀优化,最终采用自定义存储别名方案
    • 探索集成Wasmer执行引擎,为智能合约提供更多WASM执行选项
  • 文档和资料

    • 发布Transaction Pool技术文档,解析设计原理
    • 新增多个技术视频,涵盖存储迁移、Solidity开发者入门等内容
    • 提供Polkadot runtime模块删除的详细操作指南
  • 技术生态和社区

    • 印度Polkadot Buildathon活动启动
    • Web3基金会赞助开发零知识证明plonk模块
    • 第二届Polkadot黑客松进入报名倒计时
  • 跨链协议

    • 发布Polkadot链选择(Chain Selection)开发指南
    • 实现争议处理子系统,支持平行链区块验证
    • Westend网络添加Westmint为可信Teleport平行链,支持跨链资产传送
总结

作者:Kaichao


Hi,所有关注 Substrate 技术的开发者们~


Substrate 技术与生态的6月最新动态来啦,本篇为 Substrate 第九次技术月报(2021年06月),enjoy!




 01. 重要提交和发布

GRANDPA: 加强了grandpa gossip的限制 - 可以减少当前网络中的相关消息,并且让gossip的机制更加的公平。

将SelectChain从同步变成异步接口 - 从而在接口实现中可以异步地读取一些子系统的信息。

存储项的 remove_all等 API 添加了删除元素数量的限制 - 当集合类元素数量很多时,可以通过给定这一限制,分批次删除数据,影响的 API 有remove_all, remove_prefix, clear_prefix, kill_prefix。
增大wasm字节码可获取的内存大小限制至32MB - Substrate实现了freeing-bump 内存分配器,可以动态的在一定范围分配内存,最新修改为32MB,用以解决staking模块占用内存过大的问题。
强制FRAME v2中可调用函数需要声明为 pub - 从而更加符合rust语法。
为编译后二进制包提供的 try-runtime 命令添加了execute-block子命令 - 用户可以使用此命令在上一个区块的 runtime 状态的基础上执行提供的区块。
允许#[pallet::constant]宏作用于有多个接口约束的关联类型 - 即支持以下语法,
 #[pallet::constant]
 type U: Get<u32> + From<u16>;

内置的balances模块新增 transfer_all 可调用函数 - 用来将所有的可用余额转出至另外一个账户。

允许对存储项的前缀即 prefix 重命名 - 默认使用的存储项定义时的字符串字面量,新标签#[pallet::storage_prefix = "CustomName"]可以将prefix自定义。

抽象了NFT所需的一系列接口,unique pallet实现了这些接口 - 包括 Inspect 接口可以读取NFT的属性信息,Mutate接口提供了铸造、销毁、设置NFT属性等的写操作。

wasm的执行引擎wasmtime升级至0.27 - 新版的wasmtime使用了新一代代码生成后端,效率有很大的提升,也修复了一些bug。

在 chain spec 中引入一个新的字段 code_substitute - 可以此字段的值替换链上的wasm,通常是链上wasm运行出现问题之后的临时解决方案。

同步区块时引入了 Fast Sync 模式 - 可以极大加快区块同步的速度,之前需要下载和验证每一个区块,使用Fast Sync之后,不再需要执行每个区块的验证,只需要额外下载最新链上状态的证明。

将pallet::hooks和pallet::call宏所对应的部分变为可选的。

定义了NamedReservableCurrency接口,并在balances模块实现了此接口 - 可以在对资产进行reserve时给定名字,更好的区分是哪个模块对资产进行的reserve操作。

为支持Storage Chain添加了Runtime的模块transaction-storage - 每个交易会被转换成trie包含了256个字节,transaction-storage模块保存了这些trie的root,并且随机选择上一个区块的一笔交易对应的字节进行验证。


 02. 设计方案讨论 

实现了新的存储API CountedStorageMap - 它在存储键值对的同时,可以记录当前map中元素的个数。

讨论:使用索引序列处理存储单元的前缀 - 存储项的命名位于代码中,但是和数据库所存储的键密切相关,目前在代码重构时很难去改变存储项名称,因为会影响数据库的存储,使用索引可以减轻这一问题,不过维护索引也很麻烦,目前的结果是引入自定义存储别名,而不是使用索引。

将Wasmer集成到Substrate沙盒环境 - 目前Substrate的runtime执行支持wasmi和wasmtime,wasmtime执行速度更快,但是只支持可信代码即runtime,鉴于安全,Substrate的ink智能合约还是使用解释执行的wasmi,引入wasmer这种更适合区块链执行环境的编译和执行工具,可以在未来有更多的选项,并通过实际的测试选择更高效的wasm执行方式。



 03. 文档和资料 

Transaction Pool 技术文档 - 涵盖了Substrate交易池的作用、设计原理和数据结构的解析。

视频:使用try-runtime测试存储迁移和runtime升级。

视频:Substrate for Solidity Developers - An Introduction。

视频:WASM Smart Contracts 介绍。

删除Polkadot runtime里的randomness collective flip模块 - 此PR详细的列出了如何在删除模块的同时进行存储的清理。


 04. 技术生态和社区 

Polkadot Buildathon India介绍。

Web3 Open Grands 赞助开发 Zeroknowledge plonk 模块。

Polkadot Hackathon 第二届(夏季)黑客松比赛报名倒计时1天!



 05.  跨链协议 

Polkadot开发指南文档:Chain Selection - 总结了fork-choice和chain selection的设计原理、实现描述。

实现了Polkadot协议中的争议处理子系统 - 在争议出现时,允许验证人恢复平行链候选区块数据,验证候选区块,并对争议给出投票。

向Westend添加Westmint为受信任的Teleport平行链 - 当两条链彼此信任对方的runtime逻辑时,可以添加对方为允许Teleport的源,进而可以通过xcm的TeleportAssets消息来传送资产。


分享至:

作者:Web3 Explorer 

本文为PANews入驻专栏作者的观点,不代表PANews立场,不承担法律责任。

文章及观点也不构成投资意见

图片来源:Web3 Explorer 如有侵权,请联系作者删除。

关注PANews官方账号,一起穿越牛熊
推荐阅读
2021-11-09 11:50
2021-11-09 11:36
2021-11-09 11:13
2021-11-09 09:54
2021-11-09 09:35
2021-11-09 09:09

热门文章

行业要闻
市场热点
精选读物

精选专题

App内阅读