尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Solana 跨链交易验证提案深度解析:基于 SPV 的无信任链间状态验证机制

Solana 跨链交易验证提案深度解析:基于 SPV 的无信任链间状态验证机制 Solana 跨链交易验证提案深度解析基于 SPV 的无信任链间状态验证机制【免费下载链接】solanaWeb-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.项目地址: https://gitcode.com/GitHub_Trending/so/solana导读本文基于 Solana 官方提案 interchain-transaction-verification.md 展开系统讲解如何把传统轻客户端普遍使用的简单支付验证SPV, Simple Payment Verification能力以智能合约形式部署到 Solana 链上从而在没有可信预言机oracle、不依赖哈希锁hashlock和抵押品的前提下实现程序化检测与验证其他网络如 Bitcoin、Litecoin上的交易。读完本文你将掌握 SPV Program / SPV Engine 的角色划分、Proof Request 与 Request Book 的市场化撮合模型、Client-Prover-Header Store 三方协作流程以及 Header Store 在 Solana 账户模型下的两种存储设计方案为理解或实现链上跨链验证合约打下完整基础。一、提案背景跨链互操作的三重困境提案开篇即指出一个事实跨链应用inter-chain applications在数字资产生态中并不新鲜即便是规模较小的中心化交易所其用户量与交易量也远超任何单一链上应用的总和并凭借多年优化获得了极高的估值。然而这些中心化服务的基本运作机制都建立在用户单方面信任平台之上一旦发生意外损失用户几乎没有任何追索与保护手段。这种信任模式直接导致整个数字资产生态沿网络边界割裂其根本原因在于现有的互操作方案普遍存在三类结构性障碍技术实现复杂完整实现跨链协议需要处理异构链的共识、最终性与数据格式差异激励结构不稳定跨链桥等方案依赖跨网络规模的质押与激励模型经济安全性难以长期维系要求利益相关方持续高等级协作多阶段、多签名的协调式方案需要大量机构长期配合推进缓慢。二、核心思路把 SPV 验证能力搬上链2.1 什么是 SPV简单支付验证SPV是大多数主流区块链网络中轻客户端light client使用的一类方法论总称用于在不完整存储和维护整条链的情况下验证网络状态的某些方面。最常见的形态是借助哈希树hash tree结构通过把某笔交易与所在区块头block header中的根哈希root hash进行比较提供某笔交易存在于某个区块中的证明。这样轻客户端或钱包只需最小化对网络节点的信任就能对链上事件达到概率性确定probabilistic certainty。2.2 关键洞察从链下验证到链上合约验证传统上SPV 证明的组装与验证都由节点、钱包或其他客户端在链下完成。但本提案的核心洞察在于两点组合将验证 SPV 证明的能力以智能合约形式搬到链上充分利用区块链固有的可归档archival特性。由此即可构造一套无需任何可信预言机、也无需复杂多阶段共识机制的系统以程序化方式检测并验证其他网络上的交易。该概念对所有具备 SPV 机制的区块链都通用甚至可以在其他智能合约平台上双边bilaterally运作从而打开低成本、快速、无需抵押品、无需哈希锁、无需可信中间人的跨链价值转移的可能性。2.3 相比协调式方案的显著简化选择复用各大主流区块链上成熟且长期稳定的机制使得基于 SPV 的互操作方案远比编排式多阶段方案简单无需广泛认可的跨链通信标准也无需起草这些标准的大型多边组织取而代之的是一组离散的、基于合约的服务调用方合约可以通过统一的抽象接口轻松使用这为大量能够跨异构平台生态互操作的应用程序与合约奠定了基础。三、术语表理解 SPV 系统的 10 个核心概念术语含义SPV Program面向客户端Client的跨链 SPV 系统接口负责管理参与角色SPV Engine验证交易证明的核心组件是 SPV Program 的子集ClientSPV Program 的调用方通常是另一个 Solana 合约Prover为交易生成证明并提交给 SPV Program 的一方Transaction Proof由 Prover 创建包含 Merkle Proof、交易与区块头引用Merkle Proof基本的 SPV 证明用于验证某笔交易存在于某个区块中Block Header描述某个区块的基本参数及其相对位置Proof Request客户端向 Prover 下达的、要求验证某些交易的订单Header Store用于在证明中存储与引用区块头范围的数据结构Client Request客户端发送给 SPV Program、用于触发创建 Proof Request 的交易Sub-account由其他合约账户拥有、没有自己私钥的 Solana 账户四、服务模型SPV Program 与 SPV Engine 的分层架构4.1 SPV Program链上证明公共市场SPV Program 以合约形式部署在 Solana 网络上维护一个面向 SPV 证明的公共市场public marketplace允许任何一方提交证明请求也允许任何一方提交证明以响应该请求。关键设计决策多实例并存任何时刻都会有多个 SPV Program 实例处于活跃状态至少为每个已连接的外部网络部署一个同一网络也可能存在多个实例API 相对一致各实例在高层级 API 与功能集上保持相对一致但因货币型平台Bitcoin、Litecoin与智能合约平台在网络状态变更验证能力上存在差异会有部分变体引擎可插拔无论针对哪个网络SPV Program 都依赖内部组件SPV Engine提供无状态stateless的 SPV 证明验证上层面向客户端的功能与 API 都构建在其上。SPV Engine 需要按网络做特定实现但任何团队完成实现后都可以直接嵌入标准 SPV Program 并部署从而低成本扩展整个跨链生态。4.2 SPV Engine无状态验证内核SPV Engine 是部署在 Solana 上的合约为调用方无状态地验证 SPV 证明。其验证入参包括与该程序关联的区块链正确格式的SPV proof用于比对证明所需的相关区块头引用reference(s)待验证交易的必要参数。若证明验证成功SPV Program 会把验证通过的证明保存到请求账户request account中调用方可以将结果存入自己的账户数据或按需处理。此外SPV Program 还按链chain by chain暴露用于表示与验证区块头、交易、哈希等的工具函数与结构体utilities and structs。五、请求-证明撮合机制Client、Prover 与 Request Book5.1 请求描述能力精确哈希或过滤器对于 Proof Request 而言请求方被称为Client在绝大多数场景下是另一个 Solana 合约。Client 可以提交针对某一笔特定交易的请求或者提交一个更宽泛的过滤器匹配交易的输入inputs、输出outputs、金额amount等任意参数组合。提案给出了两个典型示例示例一精确支付验证请求某个时间之后从地址 A 发送到地址 B、金额为 X 的任何交易。此类结构可用于**原子交换atomic swap**场景中验证特定预期付款示例二抵押物监控请求从地址 xxx 发出的任何交易可被借贷合约或合成代币铸造合约用于监控并响应抵押率collateralization的变化例如检测抵押资产的移动。5.2 完整流程Client ──Client Request(含参数费用)──▶ SPV Program │ 校验通过后创建 ▼ Proof Request 账户 ▲ Prover ──监控 Request Book──▶ 提交 Proof(引用目标请求) ──▶ SPV Program 验证 │ 成功后 ▼ 存入 Proof Request 账户数据 │ Client ◀──查询请求账户数据轮询状态与证明─────────────────────┘Client 提交 Client Request携带验证参数与费用feeSPV Program 校验并创建 Proof Request 账户假设校验成功SPV Program 创建一个 Proof Request 账户用于跟踪请求进度Prover 认领并提交证明Prover 通过账户指定其意图填充的请求提交证明供验证验证并存储SPV Program 验证证明成功后将其保存到请求账户的账户数据中Client 查询Client 通过查询请求账户的账户数据监控请求状态并查看适用的交易及其证明。提案同时注明在 Solana 未来支持事件events发布后该流程将简化为合约发布事件而非当前描述的轮询polling模式。5.3 SPV Program 的三项核心功能SPV Program 是 Client 合约访问跨链 SPV 机制的主要入口提供Submit Proof Request允许客户端提交针对某个或某组证明的请求Cancel Proof Request允许客户端使一个待处理请求失效Fill Proof Request供 Prover 提交与某个 Proof Request 对应的证明以进行验证。SPV Program 在自己的账户数据中维护公开的待处理 Proof Request 列表供 Prover 监控Prover 提交证明时会附带目标请求的引用。5.4 Request Book单一类型的订单簿Request Book 是公开的、有效的待处理 Proof Request 列表供 Prover 填充或供 Client 取消。它大致相当于交易所中的订单簿orderbook但只有一种类型的挂牌listing而非买卖两侧。Request Book 存储在 SPV Program 的账户数据中。5.5 费用分配Proof Request 在发送时附带费用由 SPV Engine 合约在与该请求匹配的证明验证通过后支付给相应的 Prover。值得注意的细节是费用会在 Merkle Proof 提交者与所引用 Header Store 的维护者之间拆分详见下文 Header Store 一节。六、参与者角色详解6.1 Client客户端Proof Request 的发起方。在大多数情况下是应用程序或具体金融产品如贷款、互换、托管 escrow 等中的其他合约。Client 在每次验证流程周期中初始提交ClientRequest传达参数与费用校验成功后由 SPV Program 创建 Proof Request 账户也可以提交引用某个活跃 Proof Request 的CancelRequest将其标记为对证明提交无效。6.2 Prover证明者填充 Proof Request 的证明提交方。Prover 监控 SPV Program 的 Request Book寻找未完成的 Proof Request生成匹配的证明并提交给 SPV Program 验证。若证明被接受该 Proof Request 关联的费用将发放给 Prover。Prover 通常运行 Solana Blockstreamer 节点同时接入一个 Bitcoin 节点用于构造证明与获取区块头。6.3 Header Store区块头存储Header Store 是一种基于账户的数据结构用于维护区块头使提交的证明可以通过引用 header store 账户来包含这些区块头。由于区块头链验证本身就是 SPV Program 证明验证机制的组成部分因此 header store 可以由独立实体维护即无需全局统一。七、Header Store 的两种实现方案账户模型下的存储设计提案特别指出一个 Solana 平台约束当前无法扩容已分配的账户数据容量account data capacity因此该用例需要一种无需重平衡rebalancing即可无限增长的数据结构。为此引入Sub-account由 SPV Program 拥有、没有自己私钥的账户通过把区块头分配到其账户数据中充当存储。提案给出了两种可行实现方案 A按公钥索引的单头子账户每个子账户存放一个区块头其公钥与区块哈希blockhash匹配每次验证需要的账户数据查找次数 确认数confirmations受交易数据上限约束确认数存在限制15–20 个单个区块头不会在网络范围内重复存储无全网冗余。方案 B多子账户组成的链表维护存储账户的顺序索引sequential index每个存储账户存放多个区块头超过 99.9% 的验证场景最多只需 2 次账户数据查找多数场景仅需 1 次紧凑的顺序数据地址格式compact sequential data address format支持任意数量的确认数且查找快速代价是会造成网络范围内的区块头重复存储低效network-wide header duplication inefficiencies。两种方案本质上是存储冗余度与查询效率之间的权衡方案 A 通过公钥即地址实现天然去重但受限于单账户数据量方案 B 通过顺序链表换取极低的查找成本但引入了全网冗余。八、与仓库其他提案的关联Solana 自身的 SPV 能力跨链提案所依赖的 SPV 概念并非凭空而来——Solana 自己也在为低资源客户端设计链上轻验证机制。仓库中的另一份提案 simple-payment-and-state-verification.md 详细描述了如何在 Solana 内部使用 Merkle Proof 将验证者的响应锚定到账本中让轻客户端不依赖单一验证者即可确认交易。其核心要素包括Transaction Inclusion Proof从交易出发、穿过 Entry-Merkle 到达 Block-Merkle再进入 Bank-Hash 的 Merkle 路径Optimistic Confirmation Proof超过阈值 T 的验证者对区块投票后区块获得乐观确认需持久化投票按(Slot, Hash, Pubkey)索引以便按需检索Proof of Stake Distribution在 epoch 切换质押集合时把全部质押写入系统账户供全节点以 Merkle 证明系统账户状态更新Receipt由交易 → Entry-Merkle → Block-Merkle → Bank-Hash与一组合法的 PoH 条目验证者投票条目、ticks、LightEntry构成。该提案还给出了 Solana 账本层面 Merkle 树的代码落地证据在 ledger/src/entry.rs 中每个 entry 内的交易即已按签名排序并做 Merkle 化ledger/src/blockstore.rs 中实现了 merkle proof 相关的数据容量计算如ShredData::capacityledger/src/shred/merkle.rs 承载分片shred层的 Merkle 根实现。这套链内 SPV 基础设施与跨链 SPV 提案共享同一套哈希树锚定 区块头链验证的密码学方法论只是把验证边界从Solana 自己账本内扩展到了其他公链账本上。九、潜在应用场景总结综合提案内容这套 SPV 跨链验证机制可以支撑以下典型应用应用场景请求过滤器示例用途原子交换时间 T 后地址 A → 地址 B金额 X验证特定预期付款是否完成贷款清算地址 xxx → 任意地址检测抵押资产的移动触发清算逻辑抵押率监控地址 xxx 的任何交易借贷/合成资产合约监控抵押变化跨链价值转移双边 SPV 合约无需抵押、哈希锁或可信中间人的低成本跨链转账十、结语Solana 跨链交易验证提案的价值在于它拒绝为跨链互操作引入全新的共识层或大型协调组织而是把公链生态中久经考验的 SPV 机制原样上链借助 Solana 合约的账户模型与子账户存储能力构建出一个开放的、市场的、可编程的跨链验证服务层。SPV Program 负责撮合与状态管理SPV Engine 负责无状态验证Client 与 Prover 通过 Request Book 高效对接Header Store 则解决了区块头这一无界数据在固定容量账户下的存储难题。对于希望在 Solana 上实现轻量跨链能力的团队而言本文给出的术语体系、分层架构、流程设计与存储权衡都是可以直接落地的设计蓝图。延伸阅读跨链 SPV 提案原文docs/src/proposals/interchain-transaction-verification.mdSolana 链内轻客户端 SPV 提案docs/src/proposals/simple-payment-and-state-verification.md已实现的快照验证方案docs/src/implemented-proposals/snapshot-verification.mdMerkle 相关实现ledger/src/shred/merkle.rs、ledger/src/blockstore.rs【免费下载链接】solanaWeb-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.项目地址: https://gitcode.com/GitHub_Trending/so/solana创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表