JAM 灰皮书简单解析
(一组“≺”的偏序约束),把 tickets / availability / reports / disputes 等模块的。与 ELVES(backing/approval/inclusion)在理论上等价,你可以复用其安全性分析。:PVM/主机调用的存在,配合外在数据(预映像/报告等)的默克尔化与承诺验证,使。实现时,要把“核心调度”“服务隔离”“状态承诺输出”做成标准框架。起的秒数为时间基
一、总体架构(你要先把“机器”想明白)
-
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 的变更承诺驱动状态更新。实现时,要把“核心调度”“服务隔离”“状态承诺输出”做成标准框架。
六、从输入到累积的“端到端流程”(实现视角的作业流)
外在数据五件套把链上工作流连起来:
-
预映像(Preimages)上链 / 获取
-
预映像为执行所需的静态数据请求,链上登记索引与承诺,节点按需拉取。
-
-
可用性(Availability)
-
验证者对输入数据的接收与本地存储作出承诺;实现端需维护擦除编码块并至少保留 28 天以便审计/仲裁(存储与带宽策略需明确)。
-
-
报告(Reports)
-
服务完成工作后由特定验证者担保准确性并形成工作报告;
-
报告的唯一性/无重复、来源合法性、段根与先决包一致性、代码哈希可预言性等检查需在“报告转换/验证”阶段做齐(方程 11.36–11.42)。通过的报告进入“可用工作报告集合”。
-
-
审计(Auditing)(对应 ELVES 的 approval)
-
各节点从含可用报告的区块中,抽取固定随机子集进行获取-执行-判断;按时间点与份额(tranches)扩展评估直至满足足够肯定判断。区块被判定“已审计”后方可被各节点最终确认(经济保证在先,完全共识可滞后)。
-
-
争议(Disputes)
-
若出现否定判断或矛盾,进入争议流程:一方面可能对错误否定者惩罚;另一方面当否定超过阈值则对报告/出块方进行仲裁与惩罚。实现上要把争议证据对象和投票/阈值规则内化到状态机。
-
-
累积(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)
-
区块处理管线:按依赖图把解析/校验/执行/承诺分层分队列,†点强制同步。
-
Safrole 子系统:时隙计数器、票证生成/验证、作者索引解析、出块冲突抑制。
-
PVM 执行器:步进函数、主机调用、I/O/预映像接口、gas/计量与可中断恢复。
-
可用性存储:擦除编码块的持久化(≥28 天)、索引与提供协议。
-
审计与争议:随机抽样、份额扩展、阈值与超时、惩罚与奖励流转。
-
状态承诺:ℳΣ 默克尔化、报告转换(11.36–11.43)与状态写入。
-
最终性集成:GRANDPA finalized head 驱动分叉选择与回滚策略。
更多推荐
所有评论(0)