2021.02 – Substrate 技术更新速递

Substrate v3.0发布 - 最显著的变化是可以使用新的属性宏pallet来替代之前的宏decl_*来编写runtime模块。

## 重要提交和发布 * [Substrate v3.0发布](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/releases/tag/v3.0.0) - 最显著的变化是可以使用新的属性宏`pallet`来替代之前的宏`decl_*`来编写runtime模块。 * [实现了IPFS Bitswap通信协议](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/7963) - Bitswap是IPFS的核心模块,用于在节点间交换数据块,Substrate实现此协议,一个Substrate的节点也会变成IPFS网络的一个节点,从而借助IPFS来提供交易的细节信息,而链上只需要存储交易哈希就行了,未来链上可以只存储区块Merkle Trie的根,进而优化链上的存储,也是构建存储链(Storage Chain)的一个重要功能。 * [在Substrate的单元测试中使用construct_runtime!宏](https://link.zhihu.com/?target=https%3A//g%3Ccode%3Eithub.com/parityte%3C/code%3Ech/substrate/pull/8059) - `construct_runtime!`生成的`PalletInfo`实现能够返回唯一的模块名作为存储项的前缀,而之前手动构造的runtime返回的模块名不是唯一的,如果存储项的名称一样会发生存储碰撞,此PR修复了这一问题。 * [如果节点不是验证人,对于不在网络中传播的交易直接丢弃掉](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/8048) - 交易池里现在可以获取到是否是验证人的信息,是底层组件交互的典型方式。 * [扩展SS58地址范围](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/8039) - 之前SS58地址的标识符只支持0~47,随着项目逐渐增多,已经不够分配,这一提交将标识符的范围提高至16383。 * [Aura模块使用新的pallet宏](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/8020) - FRAME v2引入的pallet宏,语法更加简洁、可读性更高、IDE支持更好,已经足够稳定,可用于生产环境,有越来越多的Substrate内置模块已经更新使用pallet宏。 * [contracts模块对存储的合约代码收取租赁费用](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/7935) - 之前只有合约的状态会被收取租赁费用,本修改将租赁费用修改为`rent = storage_rent + (code_size / num_code_users)`,合约代码的存储费用由使用方共同承担。 * [允许验证人阻止新的提名人来提名自己,或者将一些提名人踢出自己的提名人列表](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/7930) - 验证人在偏好设置`ValidatorPrefs`里将blocked设置为true,来阻止任何新的提名人;通过staking模块的可调用函数`kick`将给定的提名人从自己的列表里踢出。 * [Staking和election模块解耦](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/7908) - 通过一些列的重构将模块的功能划分的更加单一、清晰,`primitives/election-providers`提供了选举功能的抽象接口,具体的选举算法实现该接口,并注入到使用的模块如staking模块中。 * [Substrate网络层的轻客户端请求使用了request/response协议](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate/pull/7895) - 复用rust-libp2p提供的通用请求响应协议,只需要自定义协议的名称和格式、请求和响应的数据格式就可以重构包含复杂逻辑的通信协议如区块请求、finality请求以及轻客户端请求。 ## 设计方案讨论 * [Finality Verifier Pallet](https://link.zhihu.com/?target=https%3A//github.com/paritytech/parity-bridges-common/issues/628) - 当前Substrate模块在同步区块头的时候容易受到一定形式的攻击,比如无限期地写入存储、无边界迭代等,本文提出了一个解决方案,即引入一个“中间件”模块,它的功能是验证区块头的最终性和ancestry proof。 * [Substrate 链上身份工作组](https://link.zhihu.com/?target=https%3A//github.com/paritytech/substrate-open-working-groups/discussions/2) - 讨论的内容包括:Polkadot生态对链上身份的需求,社区哪些团队在进行相关的开发及各自的关注点等。 ## 文档和资料 * [Substrate Dev Hub文档的中文翻译已经完成](https://link.zhihu.com/?target=https%3A//substrate.dev/zh-CN/) - 包括了几乎所有的知识库、教程,很多社区的小伙伴参与到了翻译和校对之中。 * [Substrate 如何使用 libp2p 进行点对点通信](https://link.zhihu.com/?target=https%3A//whisperd.tech/post/substrate_network_libp2p/) - 此文章包含了点对点通信的介绍,libp2p的基本介绍,以及Substrate如何使用libp2p实现点对点的通信。 ## 技术生态和社区 * [PolkadotDecoded线上会议正在收集演讲主题](https://link.zhihu.com/?target=https%3A//twitter.com/ParityTech/status/1362078087232512006) - 可以是技术相关,也可以是非技术的主题,欢迎Polkadot社区构建者分享自己的案例和经验。 * [首届Parity官方举办的Substrate开发者黑客马拉松正在进行中](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/eoWgLSrjptHoyMrAE4UP-g) - 本次黑客松有多个参赛类别,包括平行链、独立链、联盟链、智能合约、生态工具等等,有想法就来写代码吧! * [Substrate meetup和workshop在成都成功举办](https://link.zhihu.com/?target=https%3A//www.chainnews.com/articles/363563275384.htm) - 数十名开发者在一起编写runtime模块,学习如何使用Substrate进行智能合约开发,以及Polkadot的生态介绍。 * [为期6个月的英文Substrate课程于2月15号开课](https://link.zhihu.com/?target=https%3A//twitter.com/substrate_io/status/1356555150282866690) - 第一个系统的英文Substrate技术课程,每隔一段时间会有一期课程。 * [Polkadot Arweave桥由两个团队一起在Gitcoin发布悬赏任务](https://link.zhihu.com/?target=https%3A//twitter.com/ArweaveTeam/status/1355168144667668483) - 通过这一桥接,可以为Polkadot生态的平行链和平行线程提供另一个高可用的存储层。 * [OpenZeppelin正在调研使用Substrate的ink!智能合约工具编写其智能合约的需求](https://link.zhihu.com/?target=https%3A//twitter.com/substrate_io/status/1357739391490342913) - OpenZeppelin在以太坊平台提供了一系列的开源智能合约,如果能够使用Rust重写这些智能合约将极大地促进WASM智能合约的技术推广和安全标准。 ## 跨链协议 * [显示地对平行链、平行线程之间升级、降级的生命周期进行追踪](https://link.zhihu.com/?target=https%3A//github.com/paritytech/polkadot/pull/2354) - 引入了新的存储项`ParaLifecycles`跟踪给定平行链/平行线程的当前生命周期,可能的生命周期有`OnboardingAsParathread`(以平行线程的形式准备上线)、`OnboardingAsParachain`(以平行链的形式准备上线)、`Parathread`(当前是平行线程)、`Parachain`(当前是平行链)、`UpgradingToParachain`(当前是平行线程,打算升级成平行链)、`DowngradingToParathread`(当前是平行链,打算降级至平行线程)、`OutgoingParathread`(退出平行线程)、`OutgoingParachain`(退出平行链),可以被拍卖模块和转换功能使用。 * [实现Polkadot协议的Approval Voting子系统](https://link.zhihu.com/?target=https%3A//github.com/paritytech/polkadot/pull/2112) - 中继链通过Approval过程确保只有有效的平行区块能够最终确认,Approval投票被分为两部分Assignments和Approvals,验证人首先广播自己校验候选区块的意图,校验成功后广播自己的赞成票。

重要提交和发布

  • Substrate v3.0发布 - 最显著的变化是可以使用新的属性宏pallet来替代之前的宏decl_*来编写runtime模块。
  • 实现了IPFS Bitswap通信协议 - Bitswap是IPFS的核心模块,用于在节点间交换数据块,Substrate实现此协议,一个Substrate的节点也会变成IPFS网络的一个节点,从而借助IPFS来提供交易的细节信息,而链上只需要存储交易哈希就行了,未来链上可以只存储区块Merkle Trie的根,进而优化链上的存储,也是构建存储链(Storage Chain)的一个重要功能。
  • 在Substrate的单元测试中使用construct_runtime!宏 - construct_runtime!生成的PalletInfo实现能够返回唯一的模块名作为存储项的前缀,而之前手动构造的runtime返回的模块名不是唯一的,如果存储项的名称一样会发生存储碰撞,此PR修复了这一问题。
  • 如果节点不是验证人,对于不在网络中传播的交易直接丢弃掉 - 交易池里现在可以获取到是否是验证人的信息,是底层组件交互的典型方式。
  • 扩展SS58地址范围 - 之前SS58地址的标识符只支持0~47,随着项目逐渐增多,已经不够分配,这一提交将标识符的范围提高至16383。
  • Aura模块使用新的pallet宏 - FRAME v2引入的pallet宏,语法更加简洁、可读性更高、IDE支持更好,已经足够稳定,可用于生产环境,有越来越多的Substrate内置模块已经更新使用pallet宏。
  • contracts模块对存储的合约代码收取租赁费用 - 之前只有合约的状态会被收取租赁费用,本修改将租赁费用修改为rent = storage_rent + (code_size / num_code_users),合约代码的存储费用由使用方共同承担。
  • 允许验证人阻止新的提名人来提名自己,或者将一些提名人踢出自己的提名人列表 - 验证人在偏好设置ValidatorPrefs里将blocked设置为true,来阻止任何新的提名人;通过staking模块的可调用函数kick将给定的提名人从自己的列表里踢出。
  • Staking和election模块解耦 - 通过一些列的重构将模块的功能划分的更加单一、清晰,primitives/election-providers提供了选举功能的抽象接口,具体的选举算法实现该接口,并注入到使用的模块如staking模块中。
  • Substrate网络层的轻客户端请求使用了request/response协议 - 复用rust-libp2p提供的通用请求响应协议,只需要自定义协议的名称和格式、请求和响应的数据格式就可以重构包含复杂逻辑的通信协议如区块请求、finality请求以及轻客户端请求。

设计方案讨论

  • Finality Verifier Pallet - 当前Substrate模块在同步区块头的时候容易受到一定形式的攻击,比如无限期地写入存储、无边界迭代等,本文提出了一个解决方案,即引入一个“中间件”模块,它的功能是验证区块头的最终性和ancestry proof。
  • Substrate 链上身份工作组 - 讨论的内容包括:Polkadot生态对链上身份的需求,社区哪些团队在进行相关的开发及各自的关注点等。

文档和资料

  • Substrate Dev Hub文档的中文翻译已经完成 - 包括了几乎所有的知识库、教程,很多社区的小伙伴参与到了翻译和校对之中。
  • Substrate 如何使用 libp2p 进行点对点通信 - 此文章包含了点对点通信的介绍,libp2p的基本介绍,以及Substrate如何使用libp2p实现点对点的通信。

技术生态和社区

  • PolkadotDecoded线上会议正在收集演讲主题 - 可以是技术相关,也可以是非技术的主题,欢迎Polkadot社区构建者分享自己的案例和经验。
  • 首届Parity官方举办的Substrate开发者黑客马拉松正在进行中 - 本次黑客松有多个参赛类别,包括平行链、独立链、联盟链、智能合约、生态工具等等,有想法就来写代码吧!
  • Substrate meetup和workshop在成都成功举办 - 数十名开发者在一起编写runtime模块,学习如何使用Substrate进行智能合约开发,以及Polkadot的生态介绍。
  • 为期6个月的英文Substrate课程于2月15号开课 - 第一个系统的英文Substrate技术课程,每隔一段时间会有一期课程。
  • Polkadot Arweave桥由两个团队一起在Gitcoin发布悬赏任务 - 通过这一桥接,可以为Polkadot生态的平行链和平行线程提供另一个高可用的存储层。
  • OpenZeppelin正在调研使用Substrate的ink!智能合约工具编写其智能合约的需求 - OpenZeppelin在以太坊平台提供了一系列的开源智能合约,如果能够使用Rust重写这些智能合约将极大地促进WASM智能合约的技术推广和安全标准。

跨链协议

  • 显示地对平行链、平行线程之间升级、降级的生命周期进行追踪 - 引入了新的存储项ParaLifecycles跟踪给定平行链/平行线程的当前生命周期,可能的生命周期有OnboardingAsParathread(以平行线程的形式准备上线)、OnboardingAsParachain(以平行链的形式准备上线)、Parathread(当前是平行线程)、Parachain(当前是平行链)、UpgradingToParachain(当前是平行线程,打算升级成平行链)、DowngradingToParathread(当前是平行链,打算降级至平行线程)、OutgoingParathread(退出平行线程)、OutgoingParachain(退出平行链),可以被拍卖模块和转换功能使用。
  • 实现Polkadot协议的Approval Voting子系统 - 中继链通过Approval过程确保只有有效的平行区块能够最终确认,Approval投票被分为两部分Assignments和Approvals,验证人首先广播自己校验候选区块的意图,校验成功后广播自己的赞成票。

区块链技术网。

  • 发表于 2021-02-24 11:14
  • 阅读 ( 683 )
  • 学分 ( 4 )
  • 分类:Polkadot

评论