Substrate 技术及生态 9 月大事记|同步策略重磅升级:Polkadot-SDK 团队发布 PR #5666

This article is not available in the current language yet. Showing the original version.
Hi,所有关注 Substrate 技术的开发者们:「Substrate 生态项目技术月报」由 OneBlock+ 出品,每月汇总整理 Substrate 生态各领域项目的技术进展,本篇为 Substrate 生态项目 9 月技术月报,Enjoy!

01重要提交和发布

1.Revive pallet 引入不可变数据存储Polkadot-SDK 团队为 Revive pallet 引入了不可变数据存储的概念,主要用于支持 Solidity 的不可变变量 PR #5861。主要更新包括:

  • ContractInfo 结构添加了 immutable_data_len 字段,用于存储不可变数据的长度。

  • 引入专用的存储映射来存储不可变数据,以保持 ContractInfo 的固定大小。

  • 禁用了 set_code_hash API,为后续支持不可变数据的代码更新做准备。

  • 在构造函数和 set_code_hash 中对不可变数据的使用进行收费。

这一更新为合约提供了更好的兼容性,同时为未来的优化和功能扩展奠定了基础。然而,当前实现需要额外的存储读取,可能会影响性能,团队计划在后续版本中进行优化。

2.Revive pallet 引入最后调用返回数据 APIPolkadot-SDK 团队为 Revive pallet 引入了两个新的系统调用:return_data_sizereturn_data_copy,类似于 EVM 的 RETURNDATASIZERETURNDATACOPY 操作码 PR #5779。主要更新包括:

  • ExecReturnValue(返回数据)的所有权移至 Frame 结构。

  • 实现了新的合约 API 功能,无需额外复制。

  • 在嵌套堆栈中执行任何可执行文件之前重置返回输出。

  • 引入 return_data_sizereturn_data_copy 系统调用。

这一更新提高了合约间调用的效率,并为开发者提供了更灵活的数据处理能力。同时,它也为未来的优化和功能扩展奠定了基础。

3.改进 Runtime 中的 Trie APIPolkadot-SDK 团队对 Runtime 中的 Trie API 进行了重大改进 PR #5756。这次更新是对之前 PR #3881 的重构和改进。主要更新包括:

  • sp_runtime::proving_trie 现在为 base2base16 都提供了 BasicProvingTrie

  • base16 的 API 更加专注于单值证明,并与 base2 trie 的 API 保持一致。

  • 引入了 ProvingTrietrait,封装了 base2base16 trie,并暴露了端到端场景所需的所有 API。

  • 引入了 ProofToHashes trait,允许为 Merkle trie 编写适当的基准测试。

这次更新显著提高了 Trie API 的灵活性和一致性。它为开发者提供了更统一的接口,简化了跨不同 trie 实现的工作。同时,新增的 ProofToHashes trait 为性能优化和基准测试提供了重要工具。

这些改进不仅增强了 Substrate Runtime 的功能,还为未来的优化和扩展奠定了基础。它们将有助于提高区块链系统的整体性能和可维护性。

4.RPC v2: 为 chainHead_v1_storage 实现背压机制Polkadot-SDK 团队对 RPC v2 中的 chainHead_v1_storage 方法实现了背压机制,以提高性能和资源利用效率 PR #5741。主要更新包括:

  • 重构 rpc_v2::Storage::query_iter_paginated 方法,使其支持背压。

  • 引入通道机制,当结果通道满时暂停迭代。

  • archive_storage 添加限制支持,以确保适当的背压。

  • 优化存储查询的性能,特别是对于大量存储项的查询。

这次更新显著提高了存储查询的效率:

  • 在 westend-dev 上迭代 10 个账户的速度提高了约 2-3 倍。

  • 获取 1024 个存储值(非后代值)的速度提高了约 50 倍。

  • 获取 1024 个后代值的速度提高了约 500 倍。

这一改进解决了之前每次调用只能查询五个存储项的限制,大大提高了客户端的查询效率。同时,它为未来的优化和扩展奠定了基础,有助于提高整个区块链系统的能和可扩展性。

5.Revive pallet: 限制合约可使用的静态内存量Polkadot-SDK 团队为 Revive pallet 引入了对合约静态内存使用的限制 PR #5726。这一更新旨在确保上传的新代码的声明静态内存符合预定义的限制。主要更新包括:

  • Config 中移除 MaxCodeLen,以保持对其的严格控制。

  • 定义了单一的 STATIC_MEMORY_BYTES 参数,用于限制最大解码大小。

  • 仅在上传时强制执行限制,而不在执行时强制执行,以便日后可以提高限制。

  • 调整了 integrity_check 中的最坏情况计算。

  • 将最大堆栈深度从 5 提高到 10,仍然符合内存限制。

  • 每个合约的内存限制现在是 1MB,可用于数据或代码。

  • 更新了 PolkaVM 版本。

  • 将 blob 限制为 256kb,作为一个理智检查,避免尝试解析非常大的输入。

这些更改确保了合约的内存使用更加可控,同时为未来的优化和扩展提供了灵活性。通过在上传时实施限制,系统可以在不影响现有合约的情况下逐步提高限制。这一更新对于维护区块链系统的稳定性和可扩展性至关重要。

6.Snowbridge: 修复免费共识更新的边界条件Polkadot-SDK 团队修复了 Snowbridge 中免费共识更新的一个边界条件问题 PR #5671。这个修复解决了之前引入的新功能(PR #5201)中的一个潜在漏洞。主要更新包括:

  • 添加了一个存储项来跟踪最后一个免费同步委员会更新周期。

  • 防止恶意中继器通过重复提交已导入的同步委员会更新来滥用系统。

  • 确保只有真正新的同步委员会更新才能免费导入。

  • 增加了新的测试用例,包括边界条件和各种更新场景。

这次更新显著提高了 Snowbridge 的安全性和效率:

  • 防止了潜在的 DoS 攻击,恶意中继器无法再通过重复提交来消耗系统资源。

  • 保持了系统对有效更新的开放性,同时阻止了无效或重复更新的免费提交。

  • 通过全面的测试用例,确保了各种边界条件和更新场景下的正确行为。

这一改进对于维护 Snowbridge 跨链桥的安全性和可靠性至关重要,同时也为未来的优化和扩展提供了更稳固的基础。

7.同步策略重构(第二部分)Polkadot-SDK 团队对同步策略进行了重大重构 PR #5666。这是 PR #5469 的后续工作,主要涵盖了 #5333 中的内容。主要更新包括:

  • 将同步策略的创建从同步引擎中移出,使其成为同步引擎的一个参数。

  • 将请求-响应协议的添加从网络构建中分离出来,确保在不需要时物理上不存在。

  • 引入了 build_polkadot_syncing_strategy 函数,用于创建之前的默认同步策略。

  • 重构了 SyncingStrategy trait 和其他公共接口,移除了对块/状态/跃点同步请求的直接引用。

这次重构显著提高了同步策略的灵活性和可定制性:

  • 允许完全替换同步策略,以满足特定链的需求。

  • 简化了不适用跃点同步的策略实现,无需提供虚拟方法实现。

  • 为未来的优化和功能扩展提供了更好的基础。

虽然这些更改需要下游项目进行一些样板代码调整,但它们为未来的创新和定制化同步策略铺平了道路。这一重构对于提高 Substrate 生态系统的灵活性和可扩展性至关重要。

注意:在稳定版本发布之前,可能会有进一步的调整,以确保向后兼容性和易用性。

02 设计方案和问题讨论

1.Substrate 在原生执行模式下加载 Runtime Wasm Blob 的问题一位贡献者在 GitHub 上提出了一个关于 Substrate 在原生执行模式下加载 Runtime Wasm Blob 的性能问题 Issue #5669。主要讨论点包括:

  • NativeWhenPossible 执行模式下,Substrate 仍然加载 Wasm Blob 来获取Runtime版本,这导致了约 1 秒的性能开销。

  • 提议直接从 NativeElseWasmExecutor 结构的 NativeVersion 字段获取 Runtime 版本,而不是从 Wasm Blob 中加载。

  • 讨论了是否需要引入新的 "AlwaysNative" 执行策略来解决这个问题。

然而,讨论的结果表明:

  • 原生执行模式实际上正在被逐步淘汰,因此引入新的执行模式可能不是最佳解决方案。

  • 通过为某些 crate 启用编译器优化,可以在很大程度上解决这个性能问题。

这个讨论突显了 Substrate 在执行策略和性能优化方面的持续演进,以及社区在识别和解决潜在瓶颈方面的积极参与。

2.为提名池成员启用 Opengov 投票支持Polkadot-SDK 团队正在追踪一项重要的功能更新,即为提名池成员启用 Opengov 投票支持 Issue #5659。这项更新的主要内容包括:

  • 计划在 stable2409 版本中包含允许提名池切换到 DelegateStake 策略的修复。

  • 这一更改将允许提名池成员使用他们的池化资金在 Opengov 中进行投票。

  • 预计时间线:

    ▫︎ SDK 发布计划于 2024 年 9 月 25 日。

    ▫︎ Kusama 和 Polkadot 的 Runtime 升级预计将在 SDK 发布后一个月内进行。

    ▫︎ 预计完成时间:2024 年 10 月 25 日。

待完成的任务清单包括:

  • 对 Kusama 和 Polkadot 进行 Runtime 配置更改和迁移。

  • 在 Runtime 升级后,无需许可地迁移所有池成员。

这项更新对于提高 Polkadot 生态系统的去中心化治理参与度具有重要意义。它将使更多的通证持有者能够通过提名池参与网络的决策过程,从而增强整个网络的民主性和参与度。

值得注意的是,这个问题已经被移至 polkadot-fellows/runtimes 仓库,表明这项工作已经进入更具体的实施阶段。

此外,这个更新也在 Polkadot 论坛上引起了讨论,可能会有更多相关的细节信息 论坛讨论链接

3.位域分发子系统队列拥塞问题Polkadot-SDK 团队发现并解决了一个关于位域分发子系统队列偶尔拥塞的问题 Issue #5657。主要讨论点包括:

  • 在 Kusama 网络上观察到,随着验证者数量的增加,位域消息的数量也相应增加,导致网络桥短暂停滞。

  • 位域消息的分发呈现突发性,所有节点在导入区块后设置 1.5 秒的定时器,定时器到期时同时向其他验证者发送位域。

  • 当出现中继链分叉时,问题更加明显,可能导致一个节点在短时间内接收多达 12,000 个位域消息。

经过调查,团队得出以下结论:

  • 系统的平均吞吐量足以处理正常情况下的消息量。

  • 问题主要源于消息的突发性,特别是在中继链出现分叉时。

  • 子系统队列的拥塞,即使是短暂的,也会阻塞发送方(network-bridge-rx),影响其他子系统的通信。

为解决这个问题,团队提出了两个主要改进方案:

  • 将消息容量从默认的 2048 增加到 8192,略微增加内存占用,但可以更好地应对突发流量。

  • 将子系统移至阻塞任务上运行,这样可以提高响应速度,并减少对其他任务的影响。

这些改进已经在 PR #5787 中实现,并已合并到主分支。

这个问题的识别和解决展示了 Polkadot-SDK 团队在优化网络性能和提高系统稳定性方面的持续努力。它也凸显了在扩展验证者数量时可能遇到的挑战,以及团队如何通过细致的分析和优化来应对这些挑战。

4.JSON-RPC: chainHead_v1_storage 查询性能问题Polkadot-SDK 团队发现并解决了新 JSON-RPC API 中 chainHead_v1_storage 查询使用 descendantValues 选项时的性能问题 Issue #5589。主要讨论点包括:

  • 在执行 chainHead_v1_storage 查询时,RPC 节点每次只发送包含 5 个项目的 operationStorageItems 通知,随后立即发送 waitingForContinue 通知。

  • 这种方式导致某些查询需要很长时间才能完成。例如,在 Polkadot 中继链上查询 NominationPools.PoolMembers 的后代值可能需要 6 到 10 分钟,而使用旧版 RPC API 只需几秒钟。

问题的根源:

  • 节点每次只发送 5 个项目,即使在没有背压迹象的情况下也是如此。

  • 频繁的 waitingForContinue 通知和 chainHead_v1_continue 请求导致了不必要的延迟。

解决方案:

  • 增加每个 operationStorageItems 通知中发送的项目数量,可能一次发送数百个项目。

  • 根据系统的响应能力动态调整发送的项目数量。

  • 考虑完全移除 waitingForContinue 机制,改用内部队列来管理存储消息。

这个问题的解决方案已在 PR #5741 中实现,并已合并到主分支。主要改进包括:

  • 实现了背压机制,允许更高效地处理大量存储查询。

  • 显著提高了查询性能:

    ▫︎在 westend-dev 上迭代 10 个账户的速度提高了约 2-3 倍。

    ▫︎获取 1024 个存储值(非后代值)的速度提高了约 50 倍。

    ▫︎获取 1024 个后代值的速度提高了约 500 倍。

这个问题的识别和解决展示了 Polkadot-SDK 团队在优化 RPC 性能方面的持续努力,以及社区在识别和报告潜在问题方面的积极参与。这一改进将显著提高客户端与节点交互的效率,特别是在处理大量存储数据时。

03 技术生态和社区

1.2024 波卡黑客松大赛(新加坡站)圆满落幕2024 波卡黑客松大赛(新加坡站)于 9 月 17 日在新加坡成功举办 活动回顾。本次大赛吸引了 25 个参赛项目进行现场路演,涵盖了 Polkadot 生态开发者工具、智能合约、DeFi、AI、Layer2、DePIN 等多个热门领域。大赛亮点包括:

  • Avatar-Accounts、WeTEE 和 OpenAuth 分别获得基础设施类别的前三名。

  • WaveData、Doton 和 BlockPass 分别获得热门应用类别的前三名。

  • Bolarity、Araucano 和 Motoverse 分别获得基于 Polkadot 构建区块链 SDK 类别的前三名。

  • Transaction Analyzer、SubLink 和 Conduits 分别获得开放式主题类别的前三名。

  • 多个项目获得了来自 Vara Network、Acala、Bifrost 等生态合作伙伴的额外奖励。

本次黑客松展示了 Polkadot 生态的创新活力,为开发者提供了展示和交流的平台。下一站曼谷的比赛将于 11 月 16 日举行,代码提交截止时间为 10 月 23 日。

2.Polkadot Decoded Asia 2024 大会成功举办Polkadot Decoded Asia 2024 于 9 月 16 日 - 17 日在新加坡成功举办 活动回顾。来自全球的 Web3 行业专家、开发者、投资人和创业者齐聚一堂,围绕 Polkadot 生态发展现状与未来趋势展开深入讨论。大会亮点包括:

  • Parity Technologies 首席法务官 Chrissy Hill 探讨了 Web3 项目如何在去中心化和合规性之间寻求平衡。

  • Stanford Blockchain Accelerator 创始人 Kun Peng 分析了 AI 与 Web3 融合的前景,强调了 Polkadot 在这一趋势中的优势。

  • Astar Network 创始人 Sota Watanabe 分享了面向 10 亿用户的生态愿景。

  • OneBlock+ 社区经理 Tracy 介绍了中文开发者社区的建设成果,包括发布 700+ 篇技术文章、举办 50+ 场 Workshop 等。

  • 多个项目方如 SubWallet、CognideX、SubQuery 等分享了最新的技术创新和应用场景。

本次大会展示了 Polkadot 生态的蓬勃发展,为开发者、项目方和投资者提供了宝贵的交流平台,进一步推动了 Web3 技术的创新与应用。

3.2024 波卡黑客松大赛(曼谷站)即将开启2024 波卡黑客松大赛(曼谷站)将于 11 月 16 日在泰国曼谷举行决赛 Demo Day 活动预告。本次大赛亮点包括:

  • 奖金池高达 315,000 美元,分为 4 个主赛道和 4 个特别奖项;

  • 赛题涵盖 Polkadot 生态开发者工具、智能合约、DeFi、AI、Layer2、DePIN 等多个领域;

  • Vara Network & Gear、CESS Network、Unique、Bifrost 等多家生态项目提供额外 Bounty 奖励;

  • 参赛报名及初审作品提交截止时间为 10 月 23 日中午 12 点;

  • 提供线上导师指导、线上 Pre-Demo 等环节,帮助参赛者完善项目;

本次黑客松旨在吸引更多开发者加入波卡生态,推动创新项目的涌现。感兴趣的开发者可通过官方渠道报名参与。

4.Polkadot 即将结束插槽竞拍时代,开启 Coretime 销售机制Polkadot 正在进行重大转型,从插槽竞拍机制过渡到 Agile Coretime 销售机制 详细报道。主要变化包括:

  • 1143 号公投已通过,标志着插槽竞拍机制的结束和向 Agile Coretime 的过渡。

  • Agile Coretime通 过售卖方式让项目租用网络计算资源,简化了资源分配过程。

  • 1161 号公投批准了 Coretime 销售的详细计划,包括初始价格和销售参数。

  • Coretime 销售将采用市场化定价,初始价格为 100 DOT,逐渐降至 10 DOT。

  • 新机制降低了项目进入门槛,加快了平行链项目的上线速度。

  • 催生了专用于 Coretime 交易和管理的市场,如 Lastic 平台。

这一转变旨在提高 Polkadot 生态系统的灵活性和效率,为更多创新项目提供机会,推动生态系统的持续发展。

5.Polkadot 国库稳定币管理面临挑战Polkadot 社区正在讨论国库稳定币管理的紧急问题 详细报道。主要内容包括:

  • 国库目前积累了价值约 1024 万美元的 USDC 和 USDT 稳定币储备。

  • 近期多个提案申请使用稳定币,可能导致稳定币支出超过可用余额。

  • 社区提出了四种应对方案,包括不采取行动、与大额提案方协商、调整支出顺序等。

  • PolkaWorld 建议开发功能提醒提案者稳定币储备情况,以合理安排资金申请。

  • 将 DOT 转换为稳定币被视为资产多样化策略,有助于管理国库风险和保证预算可持续性。

这一讨论反映了 Polkadot 生态系统在财务管理方面的持续优化,以及社区在关键问题上的积极参与和创新思考。

6.Polkadot-API:简化区块链应用开发的强大工具OneBlock Community 发布了一篇关于 Polkadot-API (papi) 的技术解读文章 详细介绍。主要内容包括:

  • papi 是一个专为 Polkadot 生态系统设计的 JavaScript SDK,具有组合性和模块化设计。

  • 主要特点包括基于新的 JSON-RPC 规范、完善的 TypeScript 支持、高性能轻量化设计等。

  • 支持使用 WebSocket 与链交互,以及通过 Smoldot 轻客户端连接。

  • 提供了详细的安装使用指南和代码示例。

  • 与 Polkadot-JS 插件可以无缝集成,适合开发去中心化应用(dApps)。

这个工具为开发者提供了全面而强大的功能,简化了与 Substrate 链交互的过程,有助于提高开发效率和应用质量。

04 跨链协议

1.桥接中继器兼容性更新Polkadot-SDK 团队对桥接中继器进行了向后兼容性更新,以支持新旧版本的 Runtime 共存 PR #5921。主要变更包括:

  • InboundLaneDataOutboundLaneData 结构添加了 lane_state 字段,以支持无许可通道。

  • 引入包装结构,用于解码不包含 lane_state 的旧版存储数据。

  • 确保桥接中继器在 BHK 和 BHP 升级过程中能够正常工作。

这一更新为跨链通信提供了更灵活的升级路径,同时保持了系统的稳定性和可靠性。

2.XCM 付费执行屏障增强Polkadot-SDK 团队对 XCM 付费执行屏障进行了增强,以支持更多的源修改指令 PR #5917。主要改进包括:

  • 扩展 AllowTopLevelPaidExecutionFrom 屏障,支持 AliasOriginDescendOrigin 指令。

  • 允许在预期的 BuyExecution 指令之前使用更多类型的源修改指令。

  • 支持资产转移 XCM 程序在使用源链根源执行入站资产指令后,降低权限以执行程序的其余部分。

这些改进为 XCM 程序提供了更灵活的权限管理选项,特别是在需要在执行过程中调整权限级别的场景中。这一变更与 RFC #109RFC #122 中讨论的 DescendOriginAliasOrigin 的使用方案相呼应。

3.外部位置到本地账户转换器增强Polkadot-SDK 团队为所有平行链添加了 HashedDescription<AccountId, DescribeFamily<DescribeAllTerminal>> 外部位置到本地账户的转换器 PR #5765。主要更新包括:

  • 为所有平行链 Runtime 添加了新的位置转换器。

  • 保留了现有的转换器以维持向后兼容性。

  • 为每个 Runtime 添加了单元测试,以验证新的转换功能。

  • 使用 LocationToAccountHelper::convert_location() 进行测试,确保之前失败的转换现在能够成功。

这一更新显著提高了跨链通信的灵活性和兼容性。它允许更多类型的外部位置被转换为本地账户,从而支持更广泛的跨链交互场景。同时,通过保留现有转换器,确保了与旧版本的兼容性,平滑了升级过程。

新增的单元测试不仅验证了新功能的正确性,还为未来的开发和维护提供了可靠的基础。这种全面的测试方法有助于确保跨链功能的稳定性和可靠性。

4.支持将 Polkadot 原生资产转移到以太坊Polkadot-SDK 团队实现了通过 Snowbridge 将 Polkadot 原生资产(PNA)发送到以太坊网络的功能 PR #5546。这次更新支持以下类型的资产转移:

  • 代币 (1,Here)

  • 由 Assets Pallet 管理的原生资产 (0,[PalletInstance(instance),GenereIndex(index)])

  • 由 Foreign Assets Pallet 管理的平行链原生资产 (1,[Parachain(paraId)])

主要更新包括:

  • 实现了 PNA 的注册和转移功能。

  • 引入了 AssetRegistrarMetadata 结构,用于存储资产元数据。

  • 实现了从 Asset Hub 到以太坊的资产转移。

  • 添加了 ConvertAssetId 到出站路由器。

  • 引入了 LocationToToken 转换器。

  • 实现了通过二级治理通道注册 PNA。

  • 添加了全面的单元测试和集成测试。

这次更新显著提高了 Polkadot 生态系统的跨链互操作性:

  • 允许 Polkadot 原生资产在以太坊网络上流通,扩大了资产的使用范围。

  • 为开发者提供了更灵活的跨链资产管理选项。

  • 通过全面的测试用例,确保了跨链转移的安全性和可靠性。

需要注意的是,目前 PNA 的注册仅允许通过 sudo 调用,实际功能尚未启用。未来的 Runtime 升级将使该调用无需许可,并同时升级网关合约。

这一功能的实现为 Polkadot 和以太坊生态系统之间的深度集成铺平了道路,为跨链 DeFi 应用和更广泛的跨链场景提供了基础设施支持。

Share to:

Author: OneBlock Community

Opinions belong to the column author and do not represent PANews.

This content is not investment advice.

Image source: OneBlock Community. If there is any infringement, please contact the author for removal.

Follow PANews official accounts, navigate bull and bear markets together
PANews APP
US stocks closed lower across the board, while crypto stocks generally rose.
PANews Newsflash