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_size 和 return_data_copy,类似于 EVM 的 RETURNDATASIZE 和 RETURNDATACOPY 操作码 PR #5779。主要更新包括:
-
将 ExecReturnValue(返回数据)的所有权移至 Frame 结构。
-
实现了新的合约 API 功能,无需额外复制。
-
在嵌套堆栈中执行任何可执行文件之前重置返回输出。
-
引入 return_data_size 和 return_data_copy 系统调用。
这一更新提高了合约间调用的效率,并为开发者提供了更灵活的数据处理能力。同时,它也为未来的优化和功能扩展奠定了基础。
3.改进 Runtime 中的 Trie APIPolkadot-SDK 团队对 Runtime 中的 Trie API 进行了重大改进 PR #5756。这次更新是对之前 PR #3881 的重构和改进。主要更新包括:
-
sp_runtime::proving_trie 现在为 base2 和 base16 都提供了 BasicProvingTrie。
-
base16 的 API 更加专注于单值证明,并与 base2 trie 的 API 保持一致。
-
引入了 ProvingTrietrait,封装了 base2 和 base16 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。主要变更包括:
-
为 InboundLaneData 和 OutboundLaneData 结构添加了 lane_state 字段,以支持无许可通道。
-
引入包装结构,用于解码不包含 lane_state 的旧版存储数据。
-
确保桥接中继器在 BHK 和 BHP 升级过程中能够正常工作。
这一更新为跨链通信提供了更灵活的升级路径,同时保持了系统的稳定性和可靠性。
2.XCM 付费执行屏障增强Polkadot-SDK 团队对 XCM 付费执行屏障进行了增强,以支持更多的源修改指令 PR #5917。主要改进包括:
-
扩展 AllowTopLevelPaidExecutionFrom 屏障,支持 AliasOrigin 和 DescendOrigin 指令。
-
允许在预期的 BuyExecution 指令之前使用更多类型的源修改指令。
-
支持资产转移 XCM 程序在使用源链根源执行入站资产指令后,降低权限以执行程序的其余部分。
这些改进为 XCM 程序提供了更灵活的权限管理选项,特别是在需要在执行过程中调整权限级别的场景中。这一变更与 RFC #109 和 RFC #122 中讨论的 DescendOrigin 和 AliasOrigin 的使用方案相呼应。
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 应用和更广泛的跨链场景提供了基础设施支持。