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

更新主要是对 Westend xcm 中开启了平行链集(Collectives parachain)的 teleporter 功能。

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

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

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

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

02 设计方案和问题讨论

重构 DMP 存储

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

将 construct_runtime! 宏的 Call 和 Event 重命名

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

Uniques Pallet V2 的自增 CollectionaID

在六月份的 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 Builder 2022 上半年巡礼

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

Substrate 入门课程第九期结业, 进阶课程第五期开课

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

Substrate Seminar: XBI - 基于 XCM 的智能合约高级标准和接口 (ABI)

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

Substrate Connect 波卡生态链的轻客户端浏览器插件

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

05 跨链协议

新增两个跨链 XCM 调用费用查询 API

该 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

你可能感兴趣的:(区块链,前端,javascript,大数据)