PoV有效性证明完整指南:Cumulus如何用见证数据重建部分Merkle树
PoV有效性证明完整指南Cumulus如何用见证数据重建部分Merkle树【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulus在 Polkadot 的 Parachain平行链生态中PoVProof of Validity有效性证明是验证一条平行链新区块是否合法的“通行证”。Cumulus 作为在 Substrate 上构建平行链的核心框架完整实现了 PoV 的生成与验证协作者Collator把区块与存储证明打包成 PoV 发给中继链验证器Validator则利用其中的见证数据在内存中重建部分 Merkle 树逐笔重放交易以确认新区块合法。本文带你快速看懂这套机制的设计思路与关键代码位置。什么是 PoV平行链区块的“自证清白”包 PoV 本质上是一个自包含的数据包验证器只需它无需事先掌握平行链的完整状态就能独立复核一个区块。一个 PoV 包含三部分内容组成部分内容作用Header区块头区块编号、父哈希、状态根等声明区块身份与预期最终状态Extrinsics外派区块内的全部交易供验证器逐笔重放执行Storage Proof存储证明部分 Merkle 树的节点与键值即“见证数据”用于重建最小可用状态理解 PoV 的关键在于验证器手里没有平行链的完整状态数据库。存储证明Witness恰恰补上了这一缺口——它只携带验证该区块实际读写过的状态键及其 Merkle 路径验证器据此拼出一棵“部分 Merkle 树”树根必须与父区块头里的状态根完全一致才算过关。此外PoV 在中继链上会被**纠删编码erasure coding**后分片每片由一名验证器持有。这也意味着单个验证器拿到的只是片段但任意足够多的片段都能还原完整 PoV。PoV 的诞生协作者如何打包见证数据 协作者出块时Cumulus 的协作服务会在client/collator/src/service.rs的build_collation中完成打包构造紧凑证明调用into_compact_proof把执行区块过程中记录的存储证明压缩成紧凑格式并绑定父区块的状态根组装 ParachainBlockData把区块头、外派与紧凑证明封装在一起压缩成 PoV通过maybe_compress_pov压缩后封装为PoV { block_data }随候选一并提交给中继链。一个值得注意的安全细节存储证明刻意不包含:code运行时字节码。相关测试见client/collator/src/lib.rs中的collates_produces_a_block_and_storage_proof_does_not_contains_code它断言验证端从证明中读取:code会失败——防止恶意协作者通过膨胀的 PoV 浪费验证资源。重建部分 Merkle 树验证器的六步流程 验证逻辑的核心在pallets/parachain-system/src/validate_block/implementation.rs的validate_block函数流程如下第一步解码与身份核验解码ParachainBlockData断言块头的parent_hash与参数中parent_head的哈希一致确保“子区块确实接在声称的父区块后面”。第二步校验验证数据validate_validation_data检查块内set_validation_data内禀交易中的中继父块号、存储根与外部参数是否一致防止验证数据被篡改。第三步重建稀疏内存数据库关键storage_proof.to_memory_db(Some(parent_header.state_root()))这是“见证数据 → 部分 Merkle 树”的转换点把存储证明还原为一棵只含被访问键的稀疏内存数据库同时验证其根哈希与父区块头状态根匹配。这一步失败整个验证立即终止。第四步接管存储接口通过一系列replace_implementation如host_storage_get、host_storage_root等把 WASM 运行时原本指向宿主机的存储调用重定向到内存数据库。验证器从此完全在自包含的环境中运行不依赖任何外部状态。第五步内禀检查check_inherents验证时间戳等内禀数据与真实世界及中继链状态相符例如通过RelayChainStateProof核验关联的中继链数据。第六步执行区块并比对状态根E::execute_block(block)逐笔重放全部交易执行完毕后取最终存储根必须与块头声明的状态根一致最后返回ValidationResult新头数据、上/下/水平消息等。✅ 至此一个仅含部分见证数据的 PoV 就完成了“自证”任何伪造的交易或状态都会被状态根比对戳穿。内存优化Trie 缓存让验证又快又省 重放区块会频繁读取树节点若每次都从证明中解码开销巨大。Cumulus 在pallets/parachain-system/src/validate_block/trie_cache.rs中实现了专用的TrieCache无上限节点缓存以哈希为键缓存已解码的NodeOwned重复访问零开销键值缓存缓存lookup_value_for_key结果加速高频键读取根计算时禁用值缓存as_trie_db_mut_cache在计算存储根时只保留节点缓存简化并发语义WASM 单线程下安全。配合参数结构MemoryOptimizedValidationParams见validate_block/mod.rsblock_data直接复用输入内存进一步降低验证器的内存峰值。当 PoV 丢失时PoV 恢复机制 中继链每个区块只挑选一条 PoV 纳入落选的 PoV 对应区块可能在平行链网络中“失传”协作者故障或作恶时。Cumulus 在client/pov-recovery/src/lib.rs实现了恢复流程监听每个被支持的中继链区块若对应 PoV 的区块本地未知则启动随机延迟计时器避免恢复请求同时涌入造成拥塞若计时期间区块经正常同步导入则跳过恢复计时器触发后通过中继链的可用性恢复协议AvailabilityRecoveryMessage收集足够片段还原完整 PoV还原出区块后按正确顺序导入并继续处理队列中的后续候选。该服务在节点启动时于client/service/src/lib.rs中创建并以后台任务cumulus-pov-recovery运行。关键源码路径速查 ⚡PoV 打包与压缩client/collator/src/service.rsbuild_collationPoV 大小日志与解压缩client/collator/src/lib.rs验证器侧六步验证pallets/parachain-system/src/validate_block/implementation.rs验证参数定义pallets/parachain-system/src/validate_block/mod.rsMerkle 树节点缓存pallets/parachain-system/src/validate_block/trie_cache.rs存储证明验证测试client/collator/src/lib.rs:code排除测试PoV 恢复协议客户端client/pov-recovery/src/lib.rs、client/pov-recovery/src/active_candidate_recovery.rs节点服务装配恢复任务注册client/service/src/lib.rs小结为什么这套设计如此优雅 ✨Cumulus 的 PoV 验证机制体现了一个核心思想——用密码学承诺替代完整状态协作者只需提交“被用到的那部分状态”见证数据而非全量数据库验证器通过重建部分 Merkle 树并比对状态根以极小成本完成完整性校验纠删编码 PoV 恢复协议保证了即使在作恶或故障场景下被中继链接纳的区块也能在平行链网络中“失而复得”。理解了 PoV 如何从见证数据重建部分 Merkle 树你就掌握了 Cumulus 安全模型中最精巧的一环。想要动手实践可以基于parachain-template/目录搭建一个平行链模板在本地网络中观察区块的协作与验证全过程。【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

react-fetching-library的useQuery深度剖析:loading、error、刷新与中止,React请求四态一次搞定

react-fetching-library的useQuery深度剖析:loading、error、刷新与中止,React请求四态一次搞定

react-fetching-library的useQuery深度剖析:loading、error、刷新与中止,React请求四态一次搞定 【免费下载链接】react-fetching-library Simple and powerful API client for react 👍 Use hooks or FACCs to fetch data in easy way. No d…

2026/8/25 9:41:31 阅读更多 →
Qt实现Modbus-RTU串口通信:从协议解析到稳定读取的完整实践

Qt实现Modbus-RTU串口通信:从协议解析到稳定读取的完整实践

1. 项目概述:为什么要在Qt中搞Modbus串口读操作?搞工控或者嵌入式设备对接的朋友,对Modbus协议肯定不陌生。它简单、开放,在PLC、传感器、仪表这些设备里几乎是标配。而串口(RS232/RS485)又是Modbus-RTU模式…

2026/8/25 9:41:31 阅读更多 →
如何将 cookiecutter-spacy-fastapi 集成到 Azure Search:自定义认知技能实战教程

如何将 cookiecutter-spacy-fastapi 集成到 Azure Search:自定义认知技能实战教程

如何将 cookiecutter-spacy-fastapi 集成到 Azure Search:自定义认知技能实战教程 【免费下载链接】cookiecutter-spacy-fastapi Cookiecutter API for creating Custom Skills for Azure Search using Python and Docker 项目地址: https://gitcode.com/gh_mirro…

2026/8/25 9:40:24 阅读更多 →

最新新闻

OpenClaw AI智能体安全平台部署与实战:从零构建自动化安全运营中心

OpenClaw AI智能体安全平台部署与实战:从零构建自动化安全运营中心

1. 项目概述:当“养虾”成为安全工程师的新黑话最近在安全圈和AI开发者社群里,“养虾”这个词突然火了起来。不明就里的朋友可能以为我们在讨论水产养殖,但实际上,这指的是部署和运维一个名为“OpenClaw”(因其图标酷似…

2026/8/25 10:25:08 阅读更多 →
OpenClaw AI智能体框架实战:3步部署、3大核心Skill与5个应用案例详解

OpenClaw AI智能体框架实战:3步部署、3大核心Skill与5个应用案例详解

1. 项目概述:为什么OpenClaw值得你花时间? 最近在AI应用开发圈子里,OpenClaw这个名字出现的频率越来越高。简单来说,它是一个开源的AI智能体(Agent)开发与部署框架,你可以把它理解为一个“乐高…

2026/8/25 10:25:08 阅读更多 →
AI大模型赋能安全测试实战:内网渗透、代码审计与漏洞利用

AI大模型赋能安全测试实战:内网渗透、代码审计与漏洞利用

1. 从“人肉扫描”到“智能协同”:安全测试的范式转移 如果你和我一样,在安全测试这个行当里摸爬滚打了几年,一定经历过这样的场景:面对一个庞大的内网资产列表,手动一个个IP去扫端口、识别服务、测试弱口令&#xff0…

2026/8/25 10:25:08 阅读更多 →
Python集合与字典深度解析:从哈希表原理到实战应用场景

Python集合与字典深度解析:从哈希表原理到实战应用场景

1. 项目概述:从“容器”到“工具”的认知跃迁刚接触Python那会儿,我也曾把set和dict混为一谈,觉得它们都是用来装东西的“容器”,无非一个装单个元素,一个装键值对。直到在项目里踩了几个不大不小的坑,比如…

2026/8/25 10:25:08 阅读更多 →
Python集合与字典深度解析:从哈希表原理到高效应用场景

Python集合与字典深度解析:从哈希表原理到高效应用场景

1. 项目概述:从“容器”到“映射”,理解Python两大核心数据结构在Python的日常开发中,set(集合)和dict(字典)是高频使用的两个内置数据结构。很多刚入门的开发者,甚至一些有经验的程…

2026/8/25 10:25:08 阅读更多 →
基于QClaw与AI大模型构建微信智能聊天机器人:从自动化流程到场景化应用

基于QClaw与AI大模型构建微信智能聊天机器人:从自动化流程到场景化应用

1. 项目缘起:从“技术玩具”到“实用工具”的蜕变那天晚上,我正对着电脑屏幕发呆,手里摆弄着QClaw这个新上手的工具。说实话,一开始我只是把它当成一个“技术玩具”——一个能让我把各种API和逻辑串起来、实现一些自动化小功能的平…

2026/8/25 10:24:01 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →