深入理解 JAM | Polkadot 下一代中继链如何用三 个函数重新定义区块链计算
作者: PaperMoon 团队
Polkadot 的中继链从诞生之日起就面对一个张力:它足够强大,能同时为上百条平行链提供共享安全;但也足够"固执"——你只能用它来跑平行链,不能用它做别的。JAM 要做的事情,是把"专门跑平行链的中继链"变成"什么都能跑的通用计算机",而且整条链上连交易都没有。
理解 JAM 不需要你忘掉 Polkadot,恰恰相反——JAM 的设计逻辑是把现有中继链做的两件核心工作(分布式数据可用性和计算审计担保)从平行链的外壳中剥离出来,变成任何人都可以调用的底层原语。换句话说,平行链只是 JAM 上的一个"服务",而不是 JAM 的全部。
一、JAM 是什么:一条专注于 Rollup 的无交易链
从中继链到 Rollup 链
JAM(Join-Accumulate Machine):Polkadot 下一代核心协议,目标是把中继链泛化为通用计算基础设施。名字源自 CoreJAM(Collect-Refine-Join-Accumulate),描述了其计算模型。其中 Collect 和 Refine 发生在链下,只有 Join 和 Accumulate 在链上执行。
JAM 本质上是一条领域专用链,专门处理 Rollup 问题:接收 Rollup 的输出,将其整合到共享状态中。这和当前中继链的功能类似,但 JAM 对 Rollup 的处理方式"更少偏见、更加通用"。
它的核心工作只有一件事:**提供一套机制,确保输出正确地反映了输入经过变换后的结果。**
### 无交易设计
JAM 没有交易的概念。所有无需许可的操作都先经过链下的 Refine 阶段(将输入数据预处理为工作报告/工作结果),然后再传输到链上。
链上只接受五种**外部信息(extrinsic)**:
| 类型 | 作用 |
|---|---|
|
Guarantees 担保 |
验证人集体证明工作结果准确反映了工作项经 Refine 函数变换后的输出 |
|
Assurances 保证 |
与 Guarantees 配合,验证人对工作结果的数据可用性进行证明 |
|
Judgments 裁决 |
当工作结果的完整性存疑时,大量验证人投票证明其有效或无效;无效项可能触发回滚,必须在工作报告提交后 1 小时 内完成 |
|
Preimages 原像 |
供 Refine 函数使用的链上数据查询机制 |
|
Tickets 票据 |
匿名出块机制的入场券,系统提前两个 epoch 运行(SAFROLE 算法) |
外部调用(extrinsic):Substrate(Polkadot 生态的区块链开发框架)中从链外发起的操作请求,类似以太坊中的"交易",但范围更广。
为什么选择一次性升级
JAM 将作为一次完整的单次升级引入,而非迭代式更新。原因有三:
1. 统一升级可以精确限制升级后的行为边界
2. 避免每周/每月不断的小型破坏性变更
3. 将多个小型破坏性变更合并为一次过渡
二、服务模型:三个入口函数定义一切
智能合约的味道
JAM 具有智能合约链的特征:任何人都可以在 JAM 链上无需许可地执行代码。JAM 的状态被组织为独立的封装单元,每个封装包含状态、代码和余额——这些封装被称为**服务(Service)**。
智能合约:部署在区块链上的自动执行程序,满足预设条件时自动运行,无需人工干预。
与基于 Substrate的链不同(在那里添加新的 pallet——Substrate 框架中的功能模块——需要治理批准),JAM 上创建服务是完全无需许可的。
Refine:链下的计算主力
Refine 是大部分计算发生的地方,执行几乎无状态的 Rollup 变换。
关键参数:
- 输入容量:每个时间槽(6 秒)最多 15 MB
- 输出容量:最多 90 kB(因为输出需要分布式可用性存储,必须大幅压缩)
- 执行时间:最多6 秒的 PVM gas(相当于一整个中继链区块周期),相比当前 PVF 的 2 秒限制有显著提升
以平行链场景为例:15 MB 的输入就是有效性证明(PoV),90 kB 的输出就是候选收据。
Refine 虽然基本无状态,但可以执行一种有状态操作:**原像查询**。如果一个哈希值对应的原像被认为存在于 JAM 链上,Refine 可以通过提供哈希来请求该原像。这使得代码(比如平行链代码)可以高效地存储在 JAM 上,只需通过哈希引用即可获取。
Accumulate:将结果折叠进链上状态
Accumulate 负责将 Refine 的输出整合到链上状态中,是有状态的函数。
- **执行时间**:远短于 Refine,通常最多约 **10 毫秒**。如果工作包中有多个工作项,可用时间会被分摊
- **能力范围**:读取任何服务的存储、写入自己的键值存储、转移资金(含备注)、创建新服务、升级代码、请求原像可用性
一个高级特性:Refine 可以调用 PVM 子实例——创建具有可定制代码、数据、内存和栈配置的子虚拟机实例。
OnTransfer:异步的服务间通信
**OnTransfer** 是有状态函数,允许服务之间的异步通信。它可以检查其他服务的状态并修改自己的状态。
与智能合约链的关键区别在于:**交互是异步的**。一个服务向另一个服务发送带有代币的消息,接收方在同一个 6 秒周期内稍后处理。没有即时的返回路径——如果需要回复,发送方需要发起另一次转账,或者修改自己的状态供接收方稍后读取。
**并行执行**:Accumulate 和 OnTransfer 都被设计为可并行执行,不同服务的累积和转账可以同时进行。未来甚至可以分配超过当前 10 毫秒的 gas 配额,用二级核心执行某些需要更多计算量的累积操作。
工作包与两阶段处理
服务的输入被组织为**工作包(Work Package)**,每个工作包包含多个工作项,每个工作项关联一个服务。工作包被分配给一个核心,在一个时间槽(通常 6 秒)内处理。
处理流程:
1. Refine 接收工作项 → 产出工作结果
2. 工作包中的多个工作项 → 被精炼为包含多个工作结果的工作报告
3. 工作结果被送入 Accumulate,折叠进链上状态
三、PVM:基于 RISC-V 的极简虚拟机
**PVM(Polkadot Virtual Machine)**:基于 RISC-V 指令集的原生执行环境。
为什么选择 RISC-V 而不是 WASM
**WASM / WebAssembly**(一种高效的二进制指令格式)虽然为 Web 优化,但在栈管理方面存在挑战,特别是续延(continuation)处理。RISC-V 将栈放在内存中,使续延处理变得自然,无需额外复杂度。
PVM 的核心特性:
- **简单、安全、可沙箱化**
- **确定性、共识敏感、计量友好**
- **在常规硬件(x64、ARM)上执行速度极佳**
- **免费计量优势**——相比 WASM 不需要额外的计量开销
RISC-V 的另一个优势是易于转译到常见硬件格式(x86、x64、ARM),且拥有成熟的工具链支持(如 [LLVM](https://llvm.org/))。
续延:并行计算的新标准
RISC-V 启用的续延机制为 JAM 这样的可扩展多核平台编程建立了新标准。异步、并行化的架构对区块链和共识系统的可扩展性越来越关键。
四、流水线出块:把 6 秒用到极致
传统方式的瓶颈
以太坊等传统基于状态的区块链,区块头中包含"后置状态根"——总结计算完成后的状态。这意味着必须等计算全部完成才能发送区块头。
JAM 的方案
JAM 在区块头中放置的是**前一个区块的状态根**(而非当前区块的),即状态根滞后一个区块。这带来了一个巨大的优化:
1. 轻量计算(约占工作量的 **~5%**)在区块头分发前执行
2. 区块头立即分发
3. 剩余约 **~95%** 的计算(主要是 Accumulate)在之后完成
4. 下一个区块可以在当前区块执行完成之前就开始
**效率提升**:传统 6 秒区块时间中,实际用于计算的时间有限。JAM 的流水线设计使整个区块时间都可用于有效计算,实际获得约 **3-3.5 秒**的有效区块计算时间——相比当前设置是巨大改进。
但有一个前提:如果使用全部区块时间,存在永远追赶/延迟导入区块的风险。
五、架构哲学:不可升级的链 + 可升级的服务
### 与中继链的关键区别
JAM 固定了区块头的类型编码和哈希方案(更难更改),而中继链固定的是 WASM 语言。但两者都保留了灵活性——JAM 通过服务模型实现了类似中继链 WebAssembly 元协议的可升级性。
**升级责任转移到了服务层**,链本身不再承担升级负担。三个支撑理由:
1. **简单性**:不可升级的链大幅降低复杂度
2. **避免功能膨胀**:中继链的 Substrate SDK 因为升级太容易,导致复杂功能不断累积却从不移除,使得复制 Polkadot 变得不切实际
3. **优化空间**:固定参数使网络拓扑和时序优化成为可能,而中继链的高度可升级性因为频繁变更的可能性而限制了优化
**算力时间(Coretime)** 销售、**质押(Staking)**、**治理(Governance)**等应用层功能全部由服务管理。
**算力时间(Coretime)**:Polkadot 2.0 中对中继链出块与验证资源的抽象单位,可以按需购买和出售。
**质押**:将代币锁定在网络中以参与共识或获得奖励的机制。
**治理**:链上的去中心化决策机制,持币者可以投票决定协议升级、资金使用等重大事项。
服务的经济模型
一个新颖的概念:服务关联的代币余额提供了经济模型调整的机会——服务持有的 DOT 越多,可使用的数据和状态容量就越大。这在纯粹可升级的链(如当前中继链)上无法实现。
六、网络层与出块算法
SAFROLE:极简出块
**SAFROLE** 是 JAM 的出块算法,是 SASSAFRAS 的简化版本,排除了平行链专用的组件(平行链服务可能仍然使用完整的 SASSAFRAS)。
设计目标是最大程度的极简主义,追随以太坊黄皮书的先例——让更多的人能够理解和实现。理解 Polkadot 1.0 的端到端非常困难,而 JAM 的目标是让能读懂黄皮书的人可以相当快速地理解 JAM。
### QUIC 协议与网格扩散
JAM 使用 **QUIC 协议**实现验证人之间的直接点对点连接。所有 **1,000+ 个** Polkadot 验证人可以维持持久连接而不会出现套接字问题。
由于 JAM 的无交易特性,gossip 协议基本不再需要。对于需要在小型验证人子集内进行非点对点分发的场景,使用**网格扩散**(Grid Diffusal)替代:验证人排列成网格,数据包按行发送,每个行节点再发送给所有列成员。
七、与现有生态的兼容性
平行链完全兼容
JAM 的设计优先保证与现有 Polkadot 1.1 平行链的兼容性。所有 Polkadot 1.1 的功能被整合为 JAM 上的一个单独服务——**平行链服务**。其他服务可以在此基础上利用分布式可用性和计算担保系统。
Substrate 兼容
Substrate 兼容性通过 PVF 重定向修改来维持:WebAssembly 过渡到 PVM。由于 PVM 只是 RISC-V 的微小修改,而 RISC-V 已经是官方 LLVM 目标,PVM 很可能在 JAM 部署前就成为官方 LLVM 目标。
XCMP:期待已久的完整跨链消息传递
JAM 要求完整的 **XCMP**(Cross-Chain Message Passing)支持。
**XCM(跨共识消息格式)**:Polkadot 生态中链与链之间传递消息和资产的标准协议。
当前的 HRMP(水平中继链消息传递)将所有消息都通过中继链中转,数据载荷限制在 **≤ 4 kB**——这不够实用。XCMP 的解决方案是只通过链上中继消息头,实际消息数据通过链下传输。
Accords:多实例分片智能合约
**Accords** 封装了状态和逻辑(类似智能合约),可以有多个实例与平行链并存,支持实例间消息传递和与平行链的同步交互。
使用场景包括:
- 缺乏互信的平行链间代币转账
- 直接代币传送(teleportation),消除需要信任的储备中间方
- XCM 转发机制,确保消息通过第三方中介时的完整性
效率提升的新可能
JAM 更广泛、更少偏见的底层共识机制使得创新方案成为可能:
- 分布式可用性可用于复杂任务(如零知识证明)
- 混合资源消耗模型:工作包同时包含计算密集型任务和数据密集型操作
- 不同需求的服务配对(大量计算 + 高数据可用性)优化验证人资源利用,降低成本
八、JAM Toaster:千节点测试平台
JAM Toaster 是专门为 JAM 打造的大规模测试环境,解决了此前 Polkadot 开发中的测试痛点:
- 过去的测试网络规模小(最多几十个节点),使用不可靠的云硬件
- Kusama 网络缺乏全面监控(验证人访问受限)
- 小规模网络无法模拟大规模网络动态
JAM Toaster 提供了一个 **1,023 个节点**的网络,能够全面研究网络行为和性能,让开发者获得预期的平行链性能洞察。
小结
- 三函数模型:Refine(链下计算主力)、Accumulate(链上状态折叠)、OnTransfer(异步服务间通信)构成了 JAM 所有计算的骨架
- 无交易设计:链上只接受五种外部信息,所有无需许可的计算都先经过链下 Refine 预处理
- PVM 替代 WASM:基于 RISC-V 的极简虚拟机,获得免费计量、原生续延支持和更长的执行时间(6 秒 vs 2 秒)
- 流水线出块:前置状态根设计让约 95% 的计算与区块分发并行,有效计算时间达到 3-3.5 秒
- 不可升级的链 + 可升级的服务:链层固定带来简单性和优化空间,服务层保留全部灵活性
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)