一、总体架构(你要先把“机器”想明白)

  • JAM = Join-Accumulate Machine:整套系统遵循“收集-精炼-连接-累积(collect-refine-join-accumulate)”范式;其中链上协议侧重“连接-累积”,论文把这条协议称为 JAM Chain。目标是在不长期碎片化状态的前提下,把可扩展性做大。

  • 并行性与平台优化:扩展性来自三件事:① 空间并行(托管数百个核心);② 时间并行(跨区块流水线,稳定负载);③ 平台优化(与现代硬件匹配的 VM 与 gas 模型)。

二、区块与状态(系统的“接口层”)

  • 区块分解:区块 B = 头 H + 外在数据 X。头部携带前序指针与承诺,外在数据分为五类:票证 tickets、预映像 preimages、报告 reports、可用性 availability、争议 disputes。这是实现端解析与验证外在数据的基础。

  • 状态转移:后态 S’ 由前态 S 和区块 B 通过状态转移函数 Υ 唯一定义:S’ = Υ(S,B)。实际实现中,状态按段划分,降低耦合并利于并行计算。

  • 依赖与流水线:文中给出状态转换依赖图(一组“≺”的偏序约束),把 tickets / availability / reports / disputes 等模块的计算拓扑固定下来,指明哪些步骤能并发、哪些必须同步(用 † 标注的节点)。这对执行器与验证器的流水线调度是直接的实现指南。

三、时间与共识(让链“走得稳”的两根柱子)

  • 共同时钟:引入JAM Common Era(JCE)计时;从 2025-01-01 12:00 UTC 起的秒数为时间基准,只用于判定“未来时隙的区块暂为无效”。实现端据此做基本时间有效性检查。

  • 出块(Safrole):混合共识的“出块半边”,是对 Sassafras 的简化与创新;把时间划分为纪元 Epoch(E=600 个时隙)与时隙 Slot(P=6 秒),并用票证机制分配出块权,降低同/跨时隙竞争从而控制分叉。实现上你需要:时隙计数、票证派生与验证、作者密钥关联等。

  • 终局(GRANDPA):用于确定最佳区块与最终性——把含无效数据的扩展线纳入规范历史(和第 10 节的无效性约束呼应)。实现端要把 GRANDPA 的 finalized head 作为“确信祖先”,驱动分叉选择。

四、执行平台:PVM(你在什么“CPU”上跑)

  • PVM 定义:论文正式化了 PolkaVM(PVM) 的步进函数与停机条件;并允许主机调用推进以整合上下文状态机(让链下/外部逻辑在受控接口下前进)。实现端要按规范实现单步转移、寄存器/内存模型与宿主接口。

  • 工程要点:PVM/主机调用的存在,配合外在数据(预映像/报告等)的默克尔化与承诺验证,使状态变更与数据可用性可以流水线化并行

五、核心(Core)与服务(Service)(把并行性落实到资源)

  • JAM 通过核心 Core托管服务,利用空间并行与时间流水来提升吞吐;同时不要求长期状态分片:合约状态可在 JAM Chain 上以统一格式保存,核心以每秒 ~8KB 的变更承诺驱动状态更新。实现时,要把“核心调度”“服务隔离”“状态承诺输出”做成标准框架。

六、从输入到累积的“端到端流程”(实现视角的作业流)

外在数据五件套把链上工作流连起来:

  1. 预映像(Preimages)上链 / 获取

    • 预映像为执行所需的静态数据请求,链上登记索引与承诺,节点按需拉取。

  2. 可用性(Availability)

    • 验证者对输入数据的接收与本地存储作出承诺;实现端需维护擦除编码块至少保留 28 天以便审计/仲裁(存储与带宽策略需明确)。

  3. 报告(Reports)

    • 服务完成工作后由特定验证者担保准确性并形成工作报告

    • 报告的唯一性/无重复来源合法性段根与先决包一致性代码哈希可预言性等检查需在“报告转换/验证”阶段做齐(方程 11.36–11.42)。通过的报告进入“可用工作报告集合”。

  4. 审计(Auditing)(对应 ELVES 的 approval)

    • 各节点从含可用报告的区块中,抽取固定随机子集进行获取-执行-判断;按时间点份额(tranches)扩展评估直至满足足够肯定判断。区块被判定“已审计”后方可被各节点最终确认(经济保证在先,完全共识可滞后)。

  5. 争议(Disputes)

    • 若出现否定判断或矛盾,进入争议流程:一方面可能对错误否定者惩罚;另一方面当否定超过阈值则对报告/出块方进行仲裁与惩罚。实现上要把争议证据对象投票/阈值规则内化到状态机。

  6. 累积(Accumulate)

    • 依赖图的†同步点保证可用性充分原像查找整合完毕后,才能把已审计报告并入状态;状态承诺通过默克尔化函数 ℳΣ 写入头部,形成确定的状态根。

实现者提示:上述 1–6 步与依赖图的偏序是一一对应的——这是你做并行执行 + 阶段化提交的依据;把“可并行的放并行”“带匕首†的节点串行化”,能最大化流水线吞吐。

七、数据承诺与作者身份(区块层面的必要字段)

  • 状态承诺:区块计算偏好先默克尔化状态得到 32 字节承诺(便于流水线和验证);

  • 作者密钥:区块作者公钥与验证者集合索引绑定(文中等价使用 Bandersnatch 表示,不序列化进头)。实现端要把作者索引解析进验证者集合,用于 Slashing / 奖惩。

八、安全与生态组件

  • ELVES 等价性:JAM 的保证/审计/累积与 ELVES(backing/approval/inclusion)在理论上等价,你可以复用其安全性分析。实现端务必对可用性取样随机选取份额扩展超时策略做成参数化。

  • 家族组件:Safrole(出块)、GRANDPA(终局)、BEEFY 等来自同一技术谱系;文末对组件来源与审核亦有说明,方便工程上溯源。

九、分叉与非法扩展的处理

  • 若某扩展含被其他任何区块状态标记为无效的数据,则该扩展非法;GRANDPA 不得将其确认为规范历史。你的实现要在状态转移规则最终性规则两处同时防御。

十、把流程画成一张“实现导向”的文字图

[Preimages登记/获取]
        │
        ▼
[Inputs 可用性承诺/编码保留(≥28天)]───┐
        │                               │
        ▼                               │
   [服务执行 in PVM]                    │
        │  产出工作包/报告               │
        ▼                               │
   [Reports 验证/唯一性/先决检查/代码哈希预言]
        │             │
        │             └───若失败→ [争议/惩罚]
        ▼
   [Auditing 随机抽取→获取→复验→判断(份额扩展)]
        │
   (足够肯定)
        │
        ▼
   [依赖图†同步点:可用性+原像查找已满足]
        │
        ▼
   [Accumulate 累积到状态 → ℳΣ(state) 写入区块头]
        │
        ▼
   [GRANDPA 最终性/最佳区块推进]

——上图各节点与论文的外在数据五件套依赖式流水线一一对应,可直接映射到你的模块划分与任务队列设计中。

落地实现清单(给工程团队的 To-Do)

  1. 区块处理管线:按依赖图把解析/校验/执行/承诺分层分队列,†点强制同步。

  2. Safrole 子系统:时隙计数器、票证生成/验证、作者索引解析、出块冲突抑制。

  3. PVM 执行器:步进函数、主机调用、I/O/预映像接口、gas/计量与可中断恢复。

  4. 可用性存储:擦除编码块的持久化(≥28 天)、索引与提供协议。

  5. 审计与争议:随机抽样、份额扩展、阈值与超时、惩罚与奖励流转。

  6. 状态承诺:ℳΣ 默克尔化、报告转换(11.36–11.43)与状态写入。

  7. 最终性集成:GRANDPA finalized head 驱动分叉选择与回滚策略。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐