Substrate 技术及生态 5 月大事记 | Square One 计划启动,波卡上线 XCM!
2022/05 第 20 期
本期月报由 Substrate Evangelist @蔡松健创作
Hi,所有关注 Substrate 技术的开发者们:
「Substrate 生态项目技术月报」由 OneBlock+ 出品,每月汇总整理 Substrate 生态各个领域项目的技术进展,本篇为 Substrate 生态项目 5 月技术月报, Enjoy!
01 重要提交和发布
1. 从sc-network中提取同步协议(sc-network 包含一个相当通用的底层网络协议栈,可以在其上实现同步和事务协议。sc-network 不仅公开了底层网络栈的 API,还公开了用于同步和事务相关操作的 API,有必要将同步协议的部分抽离出来),以下是同步协议重构的推进的最新进程:
第一部分:以最小的依赖性移除 sc_network::chain::Client
第二部分:将一些共享的数据结构迁移到 sc-network-common
第三部分:将一部分数据结构迁移到 sc-network-light
第四部分: sc-network 仅依赖于 sc-network-common , sc-network-light 仅依赖于 sc-network-common , sc-network-sync 仅依赖于 sc-network-common sc-service 仅依赖于上述所有来实例化具体实现。
2. BoundedVec 实现序列化和反序列化 BoundedVec 之前没有实现 serde::{Serialize, Deserialize},所以不能在 GenesisBuild 中使用,因为它需要实现:
sp_runtime::traits::MaybeSerializeDeserialize 。
3. bag-list pallet 进行了部分重要更新(bag-list pallet 可以用于选举出波卡网络中 top x 的验证人,bag 是一个排序的列表),主要如下:
更新 bag-list pallet 的事件和错误处理 更新了 bag-list 的 Error 和 Event,bag-list pallet 是一种用于波卡提名人选举过程的机制;
bag-list新增分数的功能 分数主要用来表示验证人质押的提名,验证人被批准的提名金额等于其自身质押加上其所有提名人提名的金额;
4. 提名人池进行了较多更新和部分 bug 修复,主要如下:
向提名人池中增加更多的事件并修复了一些bug 当有成员离开或者被踢出当前提名人池以及交易金额非 0 时发出事件;修复了一个会过早杀死账户的 bug;修复一个允许无权限用户解除绑定金额的 bug;
新增update_role可调用函数 用于显式地更新提名人池中的成员角色;
向提名人池中增加MinPointsToBalance可配置常量 将之前的固定比设置为可配置的常量,主要用于验证人分数和 balance 之间的一个配置,需要确保低于这个常量配比;
提名人池的角色变得可选 提名人池目前可以具有显式可选的角色,也可以通过将角色设置为一些公开的无键地址来实现这一点,但这有点不方便。现在,角色可以简单地设置为 None。现在,提名人池可以表示如下内容:如果将 root 设置为 none,意味着我不会再更改任何角色。如果将提名人设为 none,意味着我永远不会改变提名。如果设置我的状态切换器为 none,意味着我永远不能销毁这个提名人池(除非它被削减 90%)。注意,如果需要,治理可以重新设置上面的任何一个;
5. pallet 中引入#[pallet::call_index] 为 pallet 中的可调用函数增加一个属性 #[pallet::call_index($idx)] ,用于修复 Call 枚举中相应枚举变体的编解码顺序。
6. 移除[pallet::without_storage_info]宏 目前 pallet 的所有存储都已经实现 MaxEncodedLen 。
7. 优化链下工作机的内存利用 主要有以下两个优化:
使用预分配读取快照。
通过 filter_map 来使用预分配。
02 设计方案和问题讨论
1. 所有FRAME交易的存储
存储层:在 Substrate 中已经有一个叫做 transactional 的概念,它能够显式地提交或者回滚事务,但是这个 API 有点僵硬,因为预期的返回类型是 TransactionOutcome,但是往往我们需要知道一些内部的调用结果。由此引入两个新的辅助函数 with_storage_layer 和 in_storage_layer 。
with_storage_layer 只是返回一个 Result。如果返回值是 Ok,就自动提交该存储,如果返回值是 Err,就自动恢复该存储。这样,封闭的函数就不需要知道它位于事务存储层中,从而允许更容易地使用存储层。
in_storage_layer 它只在一个存储层不存在的时候生成一个新的存储层。因此,如果没有存储层, with_storage_layer 和 in_storage_layer 完全相同。否则,如果已经存在存储层,则在存储层中只执行封闭的函数。
对于实际的开发来说 #[transactional] 已经过时了。
这是 nomination pool pallet 的一个大更新。
验证人现在只能在其他人完全离开后才可以解除他们质押绑定的金额。这有助于确保提名人池中质押绑定的金额保持在 MinimumNominatorBond 之上,以便所有提名人可以顺利离开。
当验证人想要离开时,他们必须调用新的 chill 交易来冻结池中的提名人,使其低于 MinimumNominatorBond 。
修复了部分解除质押绑定的代码错误,这会导致在 slash 的情况下的计算不正确。
修复一个 slash 的代码,可能导致过度 slash。
03 文档和资料
Square One 是 Parity 的一项新计划,为新的和早期的创建者在 Substrate 生态中提供生态方向和定制化的支持服务。在 Substrate 上构建的方法有很多种,生态中也有很多工具包和教育、开发和资助的资源。
Parity Signer, Parity 针对 Substrate 链的基于智能手机冷存储解决方案,这是迄今为止最全面的更新。5.0 测试版现在可以在 iOS App Store、谷歌 Play 和项目的 Github 仓库下载,具有改变规则的新功能,如基于 qr 的离线更新。虽然针对最高安全性需求进行了优化,但 Signer 仍处于测试阶段,等待正在进行的审计完成,因此用户应该记住这一点,并始终备份他们的帐户。
04 技术生态和社区
2022 波卡黑客松全球招募已正式开启!本次大赛由 Parity 与 OneBlock+ 主办,期待全世界所有想要了解区块链和开放网络的开发者报名参与。不管是拥有丰富开发经验的创业团队,还是想要进入 Web3 的传统互联网开发者,都期待有创造力有想法的开发者能够加入本次比赛,共创 Web3。
AMA 第二期邀请到首届波卡黑客松大赛“最受开发者欢迎奖”得主 Web3Games 为大家介绍项目发展情况,以及如何通过参加波卡黑客松大赛的契机成功创业!Web3Games 是一个集成的区块链游戏平台,是一个提供玩家创造,和一切区块链游戏相关内容的平台。通过将区块链技术、NFT 和 DeFi 与虚拟游戏结合起来,Web3Games 提供了一个让玩家和开发者都可以拥有自己游戏所有权的生态系统。
本期 OneBlock+邀请 Parallel 工程师-周洋跟大家分享有关 Parallel 的创立与发展,以及参加波卡黑客松大赛的宝贵经验。
本次邀请到 Parity 亚太地区负责人 @Helena,Parity 工程师 @Jimmy,介绍波卡生态进展与开发者支持以及黑客松详情与参赛规则。
05 跨链协议
Polkadot上线XCM 波卡在 v0.9.19 版本升级中上线了通过 XCM 进行平行链间消息传递的功能。波卡的跨链互操作愿景由此开启!
修复与runtime-benchmarks相关的pallet-xcm toml的问题 修复了一个由于 runtime-benchmarks features 引发的编译错误。
中继链上委员会可以发送XCM消息 中继链上委员会能够通过 pallet_xcm 发送交易。(目前此 pr 处于 review 阶段)
评论