作者: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消息来传送资产。