01
重复实现
每个平台重写一次业务逻辑,维护成本随链数线性上升。
proof-forge-next · Lean 4 · Phase 1
ProofForge 是用 Lean 4 实现的多目标编译器。作者只写一份 portable program;编译器推导语义需求,再按 --target 物化到 EVM、Solana、NEAR、Noir——无法等价实现时给出稳定诊断并拒绝,禁止静默降级。
问题
同一业务逻辑若要分别在 EVM、Solana、NEAR、ZK 电路上实现,通常意味着多套源码、多套测试,以及「看起来一样、边界行为却不同」的风险。ProofForge 把业务语义固定在一份 target-neutral 源码里,让平台差异只出现在物化层。
01
每个平台重写一次业务逻辑,维护成本随链数线性上升。
02
整数溢出、回滚、授权、调用顺序在不同链上常被「近似实现」。
03
best-effort 编译看似通过,却悄悄改变了程序语义。
方案
源码描述状态、入口与视图;类别(合约 / 电路 / Wasm 宿主)由 --target 决定,不得偷偷改业务语义。
一份 program … where,可对多个执行平台生成受控制品。
编译器从源码推导 ProgramRequirements,再与目标能力精确匹配。
目标无法支持时必须拒绝并给出稳定诊断,禁止 fallback。
编译器只做代码生成与语义检查;不托管密钥、不隐式联网部署。
30 秒上手
下面是 README 中的示例程序。选择目标平台,查看会生成什么——以及当前阶段的诚实成熟度。
import ProofForgeV2
open ProofForgeV2.Language
program Counter where
state count : UInt64
init(initial : UInt64) do
count := initial
entry increment(delta : UInt64) : UInt64 do
count := count + delta
return count
view get() : UInt64 do
return countlake env .lake/build/bin/proof-forge-next build \
Examples/Counter.lean \
--module Examples.Counter \
--target solana -o build/counter-solana物化结果 · solana
.sbpf-plan + IDL
typed .sbpf-plan + IDL;无 sBPF/ELF/runtime
Phase 1编译管线
Syntax 只是入口,不是领域语义。失败路径 fail closed——不允许降级到 legacy 成功路径。
目标与成熟度
Phase 1 四个后端均有可测证据;设计中的平台不宣称产品能力。
合约 VM
Counter bytecode + Anvil 测试;非完整 EVM 后端
显式账户 SVM
typed .sbpf-plan + IDL;无 sBPF/ELF/runtime
Wasm 宿主
WAT/Wasm 输出;无 sandbox receipt
电路
.nr 包;无 Nargo/ACIR/proof/VK
CosmWasm / Soroban / ICP 等仅在设计与研究阶段,无产品后端宣称。
不变量
核心不变量约束整个管线——源码层不按目标分支,目标只能做等价物化。
INV-001
Source / Typed / Semantic 层不按 TargetId 分支。
INV-002
target 只能做语义等价的物化;否则拒绝。
INV-005
任一失败不得变成「成功」或 legacy fallback。
INV-008
build 无网络与密钥副作用;deploy / prove / verify 必须显式。
明确边界