Skip to main content
状态:已接受 日期:2026-06-30

摘要

ProofForge 应该从一个 EVM 后端实验演进为一个 Lean 优先的多链合约平台。开发者在 Lean 中编写合约业务逻辑、状态机规则和证明。在构建时,他们选择一个目标链家族,ProofForge 会生成特定目标的制品、测试和部署包。 第一个架构决策是使用可移植核心加能力模型:
  • 可移植核心:纯业务逻辑、算术、状态机转换、不变性以及应保持链无关的证明。
  • 能力:显式的面向链的操作,例如存储、调用者身份、价值转移、事件、跨合约调用、账户访问、对象/资源访问以及链环境读取。
  • 目标适配器:针对特定目标家族的 ABI、制品、测试运行器、部署和宿主运行时胶合代码。
该模型避免了假装 EVM、Solana、Wasm 链、Move 链、ZK/电路目标以及类比特币系统具有相同的语义。目标不是一种“最小公分母”语言。目标是一个经过验证的业务核心,具有清晰、可审计的目标边界。

当前基线

仓库目前有一个 EVM 基线:
今日已实现:
  • ProofForge.Evm:EVM SDK 原语和类型化辅助程序。
  • ProofForge.Compiler.LCNF.EmitYul:LCNF 到 Yul 的降级。
  • proof-forge --evm-bytecode:EVM 字节码 CLI 模式。
  • .evm-methods:用于 ABI 选择器的方法分派元数据。
  • 使用生成的运行时字节码的 Foundry 冒烟测试。
今日未实现:
  • 一个目标无关的合约 IR。
  • Solana/sBPF、Wasm 家族、Move 家族或 ZK/电路后端。
  • 云端构建、部署、制品注册表或托管测试网流程。

外部格局

多链合约领域已有相关项目,但尚无主导性的 Lean 优先的经过验证的多链部署平台。

目标架构

可移植 IR 必须位于目标 ABI 细节之上,Lean 源代码语法之下。 它应该表示:
  • 导出的合约入口和方法元数据。
  • 可移植的值、结构体、枚举、数组、映射和错误。
  • 状态转换函数和声明的不变量。
  • 作为类型化效应(typed effects)而非原始目标操作码的能力调用。
  • 在后端降级之前可以检查的携带证明的事实。
目标后端将此 IR 降级到每个链家族:
  • EVM 后端:Yul 对象、ABI 选择器分发、solc 字节码、Foundry 测试。
  • Solana 后端:sBPF 包、指令分发、账户元数据、PDA 辅助函数、CPI 边界、Solana 本地验证器测试。
  • Wasm 后端家族:共享的 Wasm 降级以及针对 NEAR、CosmWasm 和 Polkadot/ink 风格合约的特定链宿主 ABI 适配器。
  • Move 后端家族:针对 Sui 和 Aptos 的 Move 模块/包适配器,包含一个针对直接 Move 字节码或生成的 Move 源代码的 Research 阶段。
  • ZK 电路后端家族:目标源代码生成以及目标原生电路制品生成,从 Psy/DPN 开始。

能力模型

可移植代码不得直接调用原始 EVM、Solana、Wasm、Move 或 ZK VM 宿主 API。它调用 ProofForge 能力。每个目标声明其支持哪些能力以及如何降级它们。 初始能力组: 当合约使用不支持的能力时,编译器应拒绝目标构建。拒绝优于默默地改变语义。

CLI 与产品界面

未来的本地 CLI 应将目标选择作为稳定的公共接口:
Polkadot/ink 风格的合约 (wasm-polkadot) 在目标 profile 和 spike 计划确定前仍仅限 Research 阶段。参见 decisions.md。 Psy/DPN (psy-dpn) 现在针对受限的可移植 IR 子集处于 Experimental 阶段;集成路径仍然是生成 .psy 源代码加 Dargo,而不是公开的类 Yul IR。 当前的 proof-forge --evm-bytecode 模式在面向目标的 build 命令存在之前,仍将作为 EVM 基准。 未来的云平台界面:
  • 从 GitHub 导入。
  • 选择目标矩阵。
  • 在隔离的 worker 中运行确定性构建。
  • 运行目标原生的本地/测试网冒烟测试。
  • 存储制品、ABI、证明、部署元数据和验证报告。
  • 在显式签名或钱包批准后部署到配置的测试网/主网。
  • 显示类似 Vercel/Cloudflare 的项目仪表板,包含构建、环境、部署、日志和特定链的健康检查。

路线图

阶段 0:EVM 基准

状态:已在此仓库中实现。
  • 保持 EVM 示例通过 proof-forge --evm-bytecode 编译。
  • 保持 Foundry 冒烟测试作为成熟的 EVM 测试框架。
  • 将当前的 EVM SDK 原语视为第一个具体的能力来源。

阶段 1:目标模型和可移植 IR

  • 引入目标注册表和目标标识符。
  • 将特定于 EVM 的 SDK 调用与可移植合约能力分离。
  • 定义可移植合约 IR (spec)和制品元数据。
  • 为不支持的目标能力添加编译时错误 (注册表)。
  • 定义 Counter 共享场景

阶段 2:并行目标 spike (CosmWasm + Solana)

需要阶段 1 完成。CosmWasm 和 Solana spike 可以并行进行。 CosmWasm (wasm-cosmwasm):
  • 带有 region ABI 和 JSON 消息的 Wasm 宿主适配器。
  • 通过 cosmwasm-check 进行 Counter 冒烟测试。
Solana (solana-sbpf-linker):
  • 将可移植入口映射到带有显式账户的指令调度。
  • 通过原版 Zig + sbpf-linker 生成最小的 sBPF 制品。
  • 在 Mollusk 或 Solana 本地验证节点下运行。
两个 spike 都使用相同的可移植 IR Counter 模块。参见 decisions.md

阶段 3:Move 家族

  • 从受限的可移植 IR 生成 Move 源代码(先是 Aptos POC,然后是 Sui)。
  • 将 Sui 对象和 Aptos 资源建模为目标能力。
  • 在 EVM 和 Aptos 上验证 Counter(或后续场景)。

阶段 3.5:ZK 电路目标研究

  • 从受限的可移植 IR 生成 Psy 兼容的 .psy 源代码。
  • 通过 Dargo 编译为 DPN 电路 JSON。
  • 在本地节点/证明器部署冒烟测试之前,决定内存中的 Psy 执行是否足够。

阶段 4:跨目标场景加固

  • 跨 EVM 和至少两个非 EVM 目标的共享场景测试。
  • 黄金 IR 和制品快照。
  • Counter v1 的能力矩阵覆盖(事件、访问控制可选)。

阶段 5:云平台

  • 添加托管的目标矩阵构建。
  • 添加制品注册表和部署历史。
  • 添加测试网部署流程。
  • 添加验证报告,显示证明状态、使用的目标能力以及特定于链的警告。

非目标

  • 不要承诺每个合约都能编译到每个链。
  • 不要隐藏链经济模型、最终性、账户模型或资源模型。
  • 不要将任意 EVM 字节码翻译到每个目标。
  • 不要将 Bitcoin L1 执行作为早期后端目标。
  • 不要取代成熟的目标原生工具,如 Foundry、Solana 本地验证节点工具、NEAR 工具、CosmWasm 工具或 Move CLI。应先与它们集成。

测试策略

每个目标家族应有四个测试层级:- Lean 检查:证明、纯逻辑和状态机不变性。
  • 黄金制品:针对小型示例的稳定 IR 和后端输出快照。
  • 目标原生冒烟测试:针对 EVM 的 Foundry,针对 sBPF 的 Solana 本地验证器,特定链的 Wasm 运行器,Move 本地/测试网工具,以及针对 psy-dpn 的 Dargo/Psy 工具。
  • 跨目标场景测试:相同的可移植合约场景应在支持的目标上产生等效的高层结果。
CI 应从仅支持 EVM 开始,然后随着新后端的落地扩展到目标矩阵。在拥有至少一个本地冒烟测试和一个共享的可移植场景测试之前,目标不被视为已支持。

开放性问题

  • 在可移植合约 IR 中应保留多少 Lean 的 LCNF?
  • 目标适配器是否应仅用 Lean 编写,或者当链工具使其更可靠时,某些适配器是否可以使用 Zig/Rust/Go?
  • 对于 Move,生成的 Move 源代码对于第一个后端是否可以接受,还是为了平台叙事需要直接的 Move 字节码?
  • 对于 Wasm,编译器应该发射一个通用的 Wasm 核心加适配器,还是从一开始就为每个链发射独立的 Wasm?
  • 云部署应如何处理私钥、多签工作流和用户控制的签名?