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 应用和更广泛的跨链场景提供了基础设施支持。