2021.02 – Substrate 技术更新速递

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

重要提交和发布

  • 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生态对链上身份的需求,社区哪些团队在进行相关的开发及各自的关注点等。

文档和资料

技术生态和社区

跨链协议

  • 显示地对平行链、平行线程之间升级、降级的生命周期进行追踪
    – 引入了新的存储项 ParaLifecycles
    跟踪给定平行链/平行线程的当前生命周期,可能的生命周期有 OnboardingAsParathread
    (以平行线程的形式准备上线)、 OnboardingAsParachain
    (以平行链的形式准备上线)、 Parathread
    (当前是平行线程)、 Parachain
    (当前是平行链)、 UpgradingToParachain
    (当前是平行线程,打算升级成平行链)、 DowngradingToParathread
    (当前是平行链,打算降级至平行线程)、 OutgoingParathread
    (退出平行线程)、 OutgoingParachain
    (退出平行链),可以被拍卖模块和转换功能使用。
  • 实现Polkadot协议的Approval Voting子系统
    – 中继链通过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生态对链上身份的需求,社区哪些团队在进行相关的开发及各自的关注点等。

文档和资料

技术生态和社区

跨链协议

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

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。


  • 发表于 7分钟前
  • 阅读 ( 9 )
  • 学分 ( 0 )
  • 分类:Polkadot