写点什么

Substrate 技术及生态 8 月大事记 | 波卡发布新版本,XCM 协议更新

  • 2022 年 9 月 02 日
    江苏
  • 本文字数:3432 字

    阅读完需:约 11 分钟

Substrate技术及生态8月大事记 | 波卡发布新版本,XCM协议更新

2022/08  第 23 期

本期月报由 Substrate Evangelist @Arstman 创作


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

「Substrate 生态项目技术月报」由 OneBlock+ 出品,每月汇总整理 Substrate 生态各个领域项目的技术进展。

本篇为 Substrate 生态项目 8 月技术月报, Enjoy!


01 重要提交和发布

1. Beefy 协议改用版本化确定性通讯验证: BEEFY 协议是配合 GRANDPA 最终性协议的辅助协议。该协议允许 Substrate 链使用 GRANDPA 最终性协议来桥接非 Substrate 链(现在主要支持 ETH 主网)。在 Beefy Pallets 中, 节点在 GRANDPA 共识确定性过程中, 验证者之间的会在以下 channel 会使用 SignedCommitments :

  • block-import <-> voter channel

  • voter <-> RPC-worker channel

  • RPC public API

考虑将来可能出现的版本化问题, 类似于 XCM 各个版本兼容性的方式, 同样在此处也改用了 VersionedFinalityProof 结构, 即将原来的 SignedCommitments 包裹起来, 目前只有一个现行的 V1 版本; 同时相应地修改了 RPC 接口, 并将此处修改 并入 polkadot 主分支。

2. 简化新版事务化存储层使用, 将其设置为默认: 自 #11431 以来, 新版的事务化存储层已经逐步得到应用, 为了将其贯彻替换旧版本, 本次更新对 frame_support 做了一些改动, 使得新版储存层成为默认方式, 之前的 in_storage_layer, 和 DispatchWithStorageLayer traits 弃置, 改为熟悉的 with_storage_layer. 这个改动让开发者在调用 Call 分派时, 更清楚知道是否使用事务化存储功能; 但目前 #[transactional] 宏是否去除目前还没有定论。

3. Polkadot 发布 v0.9.27 版本: 本次发布等级为中级, 需要相关项目方在一定时间内做出相应调整, 其中包含的最主要的重点更新是 [#5798] 以及相关的 paritytech/cumulus#1433 更新, 该更新主要是对 Westend xcm 中开启了平行链集(Collectives parachain)的 teleporter 功能。

4. Pallet-contracts 修复 func_id 掩码问题: 此处修复位于 Pallet-contracts 的 chain_extension 模块中, 该模块提供了从智能合约调用 runtime 的能力, 其实现方式就是在 runtime 配置中定义实现 ChainExtension Trait, 以此来"扩展"链的能力。chain_extension 模块提供了 Environment 结构来向"链扩展"提供反射访问其参数和执行环境的能力。本 PR 修改了其中是用来获取合约传递的函数 id 的方法, 它返回合约传递的 id 的两个最低有效字节,其他两个字节表示链扩展本身(调用此函数的代码), 具体的修复就是将掩码扩展 4 位 16 进制。

5. Contract 应用嵌套解码深度, 默认值 256: pallet-contract 增加一个 const MAX_DECODE_NESTING 的 u32 常量, 用于定义嵌套的解码深度。之前该嵌套深度没有 pallet 级的配置定义, 因此是由 MAX_EXTRINSIC_DEPTH 来限制, 但这个常量有可能在将来会修改, 因此增加 MAX_DECODE_NESTING 常量来单独定义。

6. cli 命令行标志优化: 将 cli 的命令行标志 --keep-blocks 和 --prunning 优化为 --blocks-pruning 和 --state-prunning , 这样命名更清晰, 避免混淆; polkadot 和 cumulus 也已经同步更新。

7. Runtime Benchmarks 微调调用权限: 部分 Benchmark 中使用的是 Root origin, 拥有权限过高, 该 pr 将这些调整为更合适的 successfu_origin。


02 设计方案和问题讨论


DMP 是中继链和平行链传递 XCM 消息的一种, 该方案旨在重构平行链的 DMP 消息队列存储和消费机制, 提供一个 MessageQueueChain 结构用于扩展消息队列架构, 一个 ringbuf 模块来提供环形缓冲区和消息窗口, 用于优化平行链对 DMP 消息的处理机制, 另外提供了 WrappingIndex, MessageIdx, QueuePageIdx 等用于包裹类型, 以及相关的状态处理机制和测试等。

construct_runtime! 宏生成的 runtime Call, 用于 runtime 暴露给外部 extrinsice 调用的, 另外则是在 pallet 内部 通过 #[pallet::call] 宏生成的, 这两者目前没有很好地区分, 因此在开发中有可能造成混淆调用而报错, 目前在讨论是否需要将 construct_runtime! 宏中的 Call 和 Event 重命名为 RuntimeCall 和 RuntimeEvent , 此处修改虽然很小, 但是影响比较大, 就意味从第一版开始沿用的命名方式都需要更改, 属于 Breaking 级别的修改了。

在六月份的 Uniques V2 提案计划 中, 第一项是为 NFT 的收藏集合(collection)提供自增长的 ID 值, 这一功能在上月底的 PR#11796 中通过 AtLeast32BitUnsigned 实现并合并如主分支, 但随后的实践中发现这样的实现方式不兼容 XCMv3, 因此又在 PR#12059 中回退, 目前 Uniques V2 依然还在讨论开发中。

对于智能合约调用产生的状态以及合约自身消费存储, Pallet Contact 一开始的设计是参考以太坊当时正在探索的方式: 对调用合约并更改状态收取租金, 这一机制称为"状态租金(state rent)", 但实践中这一机制非常复杂且难以处理, 更重要的是这样的机制对合约的开发者非常不友好, 因此在去年该机制被去除, 并修改为基于存储的收费机制, 这个机制相比而言就简单易行多了。但也随之带来一些问题, 比如对于合约开发者来说其融资策略就不够灵活, 存储收费的流程和机制还不够完善, 可能导致漏洞: 比如因价格变动引发高频交易套利行为等. 目前官方还在持续就这一方案进行改进. 历史变动详情: #9669 #9807 #10082 #12064


03 文档和资料


substrate-connect 是由 Parity 官方开发维护的基于浏览器的轻客户端插件, 结合 wasm 轻客户端和 PolkadotJS 的能力, 相关的开发文档如下:

https://paritytech.github.io/substrate-connect/

 

https://github.com/paritytech/substrate-connect


04 技术生态和社区


第十一期 Substrate Saturday 以「Substrate Builder's 2022 First Half Recap」为主题,邀请到 Parity 官方 Substrate 技术大咖、SEP 大使和黑客松开发者,与数百名社区小伙伴共同回顾了开发者为 Substrate 和波卡生态做出的贡献,以及 Substrate 技术带来的无穷潜力。

由 Oneblock 和 Parity 联合出品的 Substrate 区块链应用开发入门课已经开设了 9 期,获得了近 28000 名开发者的关注,课程共有 3000 余位开发者报名参加,获得了大家的一致好评。本月第九期入门课程顺利结业, 进阶课程第五期也即将在 2022 年 8 月底开课。

XBI 是由 t3rn 团队开发的一款基于 XCM 跨链消息格式的二进制智能合约 ABI 接口, 该接口扩展了 XCM 协议以启用跨链调用智能合约, 并可以将调用结果返回给源链。

Substrate Connect 是由 Parity 官方开发维护的高效, 快速, 去中心化的基于浏览器的 substrate 链交互轻客户端插件, 得益于 wasm 轻客户端开发组件 smoldot 和成熟的 PolkadotJS 框架, Substrate Connect 以去中心化轻客户端的形式对链进行交互, 理想状态下其稳定性和速度都远超目前的 Websocket 模式, 且提供扩展开发的能力; 目前已经提供 Chrome 和 Firefox 的插件, 并支持 Polkadot / Kusama, 以及测试网 Westend 和 Rococo。


05 跨链协议


该 PR 是依据六月份提出的一个建议而做出的调整. 在构建 XCM 交易时, 通常需要先通过 BuyExecution 购置一定的 weight 费用, 而现有的费用查询 API 接口 query_info 不太适合查询 XCM 交易调用; 为此在 transaction-payment pallet 中新增加一个 TransactionPaymentCallApi trait, 提供两个 API 接口: query_call_info 用于查询获取 特定 Call 在 Runtime 中 Dispatch 的 class, weight 等信息, query_call_fee_details 用于获取调用 Call 的花费, 两者都方便用于 XCM 调用。


关于我们

OneBlock+ 是全球最大的 Substrate 技术开发者社区,也是 Parity 在亚洲唯一的运营合作伙伴,波卡生态早期项目的创始人、CTO、核心开发者大部分都来自 One Block+ 社区。

Twitter: https://twitter.com/OneBlock_

Medium: https://medium.com/@OneBlockplus

Telegram: https://t.me/oneblock_dev

Discord: https://discord.gg/z2XZZWEcaa

Bilibili: https://space.bilibili.com/1650224419

YouTube: https://www.youtube.com/channel/UCWo2r3wA6brw3ztr-JmzyXA

用户头像

还未添加个人签名 2022.01.14 加入

还未添加个人简介

评论

发布
暂无评论
Substrate技术及生态8月大事记 | 波卡发布新版本,XCM协议更新_区块链_One Block Community_InfoQ写作社区