Skip to main content
本页面记录了当前验证 ProofForge 的可运行门禁,并将其与计划中但尚未实现的门禁区分开来。它反映了实际的脚本、根目录 justfile recipe 和 .github/workflows/ci.yml;它不会添加或编辑 CI 任务。

当前门禁

计划中但尚不可运行的门禁

以下门禁处于 Planned 状态,且不存在于 CI 或脚本中:
  • proof-forge build --target <id> — 统一的面向目标的构建命令。
  • proof-forge test --target <id> — 统一的面向目标的测试命令。
  • 非 EVM、非 Psy 的 proof-forge-artifact.json 验证 — 尚未写出 metadata 的目标仍需制品元数据 schema 验证。
  • 黄金 Yul/输出快照 — 通过快照差异对比进行回归检测。
  • CosmWasm 冒烟测试 — cosmwasm-checkcw-multi-test 验证。
  • Solana sBPF assembly 门禁(目标 solana-sbpf-asm,D-026)。这些门禁会随工作流 6-7 落地变成可运行项;sbpf 工具链先在本地验证 build + disassemble round-trip + Counter 的 sbpf test
    • V-GATE-SOLANA-01--emit-sbpf-asm 产生可被 sbpf build 接受的有效 .s。脚本:scripts/solana/emit-asm-smoke.sh(可运行,Phase 0 完成)。
    • V-GATE-SOLANA-02sbpf build 产生有效 ELF,且 sbpf disassemble 可以 round-trip。脚本:scripts/solana/emit-asm-smoke.sh(可运行,Phase 0 完成)。
    • V-GATE-SOLANA-03 — Counter 场景(initialize、increment、get)通过 sbpf test (Mollusk)。脚本:scripts/solana/counter-smoke.sh(Phase 1 完成;4 项 Mollusk 断言:initialize→0、increment 0→1、increment 5→6、get→return_data)。生成的 .s 现在包含账户校验 prologue(writable + owner 检查),并伴随 manifest.toml;由 scripts/solana/build-examples.sh 保持 Examples/Solana/Counter.golden.sCounter.manifest.toml 同步。
    • V-GATE-SOLANA-04 — Counter 场景通过 Surfpool 本地 simnet 部署和 Web3.js 行为冒烟。脚本:scripts/solana/surfpool-web3-smoke.sh(可选,取决于 surfpool、Solana CLI、sbpf、Node 和 npm 是否可用)。脚本会构建 Counter ELF、启动 Surfpool、用 solana program deploy --use-rpc 部署、通过 @solana/web3.js 创建 program-owned counter account、调用 initialize/increment/get、验证 account data 0→1→2,并检查 get return data。
    • V-GATE-SOLANA-05 — 能力检查器以包含 target id 和 capability id 的清晰诊断拒绝不支持能力。脚本:scripts/solana/diagnostic-smoke.sh 运行 Tests/SolanaDiagnostics.lean,断言 8 个 crosscall.invoke 家族拒绝用例均输出预期消息 target \solana-sbpf-asm` does not support capability `crosscall.invoke`: …`。(Phase 1 完成)。
    • V-GATE-SOLANA-06proof-forge-artifact.json 包含 target: "solana-sbpf-asm"irVersion 和 entrypoint 列表。
    • V-GATE-SOLANA-07sbpf debug --elf --input 可交互工作(开发者体验门禁,不进入 CI)。
    • V-GATE-SOLANA-08 — 控制流 + 断言 IR 覆盖。两半部分:
      • 发射半部分(可运行,不需要 sbpf):scripts/solana/emit-control-smoke.sh 运行 --emit-control-ir-sbpf,grep 生成的 .scontrol.conditional / control.assert / control.assert_eq 标记、assert_fail(exit 2)与 assert_eq_fail(exit 3)全局 label、三个 entrypoint 的 dispatch 行、驱动 r3r2jeq/jlt 比较指令,判断汇编跨重发射逐字节可复现,并校验制品 metadata 记录 target: "solana-sbpf-asm"fixture: "control-ir-sbpf"sourceModule: "ControlFlowAssertProbe" 以及 storage.scalar / control.conditional / assertions.check / account.explicit 能力。(发射半部分完成)。
      • 运行时半部分(依 sbpf + cargo + solana-keygen):scripts/solana/control-smoke.sh 通过 sbpf build 汇编生成的 .s 并跑由 Tests/solana/control_mollusk.rs.tpl 渲染的 Mollusk 测试 crate。6 项 Mollusk 断言覆盖从零状态及非零 pre-state 调用 lifecycle(都落到 10u64 并返回 10)、从 3 调用 guarded_increment.assert 通过、count→4)及从 9 调用(.assertassert_fail exit 2 revert)、从 7 调用 equality_guard.assertEq 通过、count→7 且返回 7)及从 42 调用(.assertEqassert_eq_fail exit 3 revert)。Mollusk fixture 关闭 account_data_direct_mapping / direct_account_pointers_in_program_input / virtual_address_space_adjustments,以使用 Phase 1 lowering 的 legacy 嵌入式账户数据布局。(Phase 1 完成)。
    • V-GATE-SOLANA-09 — PDA typed seed descriptor 与 Solana Web3.js 兼容。 脚本:scripts/solana/pda-web3-smoke.sh 发射 SDK Vault artifact,在隔离 temp project 中安装 @solana/web3.js,读取 solanaExtensions.pdas[].typedSeeds,并确认 literal/account/bump descriptor 通过 PublicKey.findProgramAddressSyncPublicKey.createProgramAddressSync 可以复现同一个 PDA。Harness 也覆盖 UTF-8 和 instruction-parameter seed resolver 行为。这是离线 derivation gate;不会部署或执行交易。
    • V-GATE-SOLANA-10 — System Program transfer CPI 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/system-cpi-web3-smoke.sh 构建生成的 --solana-system-cpi-elf fixture,校验 artifact schema,启动 Surfpool, 用 solana program deploy --use-rpc 部署 ELF,通过标准 @solana/web3.js transaction 调用生成的 transfer entrypoint,并同时检查 recipient lamport delta 与 program-owned state account 中记录的 lamports 值。
    • V-GATE-SOLANA-10R — System Program transfer Pinocchio reference-equivalence contract。脚本: scripts/solana/pinocchio-system-transfer-equivalence.sh emit 同一个 --solana-system-cpi-elf fixture,并将生成 artifact 与 references/solana/pinocchio/system-transfer/reference-manifest.json 以及 source constants 对比。它先锁住 reference account order、 signer/writable constraint、instruction data shape、CPI protocol/data layout 和 state-write contract,再进入后续 dual-deploy runtime harness。
    • V-GATE-SOLANA-10L — System Program transfer Pinocchio live equivalence。脚本: scripts/solana/pinocchio-system-transfer-live-equivalence.sh 构建 ProofForge ELF 和 checked-in Pinocchio reference ELF,启动 Surfpool, 用不同 program id 部署两个程序,用同一个 @solana/web3.js System transfer scenario 分别调用,并对比 recipient lamport delta 和 program-owned state write。若 cargo-build-sbf 找不到 Solana rustc/platform-tools,该 gate 会 skip;可运行 just solana-pinocchio-install-sbf-tools 修复该工具链。
    • V-GATE-SOLANA-11 — System Program create_account CPI 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/system-create-account-cpi-web3-smoke.sh 构建生成的 --solana-system-create-account-cpi-elf fixture,校验 artifact schema, 启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,使用 payer 和 new-account signer 调用生成的 create entrypoint,并检查新 account 的 owner、data length、lamports,以及 state account 记录的 lamports 和 space。
    • V-GATE-SOLANA-11R — System Program create_account Pinocchio reference equivalence。脚本: scripts/solana/pinocchio-system-create-account-equivalence.sh 会 emit 生成的 --solana-system-create-account-cpi-elf artifact,并将 instruction ABI、account order、signer/writable constraint、CPI protocol/data layout、lamports/space/owner contract 和双字段 state-write contract 与 references/solana/pinocchio/system-create-account 对比; 设置 PROOF_FORGE_PINOCCHIO_CARGO_CHECK=1 时还会用 pinocchio-system typecheck 该 reference。
    • V-GATE-SOLANA-11L — System Program create_account Pinocchio live equivalence。脚本: scripts/solana/pinocchio-system-create-account-live-equivalence.sh 构建 ProofForge ELF 和 checked-in Pinocchio reference ELF,启动 Surfpool,用不同 program id 部署两个程序,用同一个 @solana/web3.js create-account scenario 分别调用,并对比 lamports/space 输入和两个 program-owned state write。若 cargo-build-sbf 找不到 Solana rustc/platform-tools,该 gate 会 skip;可运行 just solana-pinocchio-install-sbf-tools 修复该工具链。
    • V-GATE-SOLANA-12 — SPL Token transfer_checked CPI 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/spl-token-transfer-cpi-web3-smoke.sh 构建生成的 --solana-spl-token-transfer-cpi-elf fixture,校验 artifact schema, 启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,通过 @solana/spl-token 创建 mint、source token account 和 destination token account,用 source authority signer 调用生成的 transfer entrypoint,并检查 token balance delta 与 state account 记录的 amount。
    • V-GATE-SOLANA-12R — SPL Token transfer_checked Pinocchio reference equivalence。脚本: scripts/solana/pinocchio-spl-token-transfer-equivalence.sh 会 emit 生成的 --solana-spl-token-transfer-cpi-elf artifact,将 instruction ABI、 account order、signer/writable constraint、CPI protocol/data layout、 decimals/amount contract 和 state-write contract 与 references/solana/pinocchio/spl-token-transfer 对比;设置 PROOF_FORGE_PINOCCHIO_CARGO_CHECK=1 时还会用 pinocchio-token typecheck 该 reference。
    • V-GATE-SOLANA-12L — SPL Token transfer_checked Pinocchio live equivalence。脚本: scripts/solana/pinocchio-spl-token-transfer-live-equivalence.sh 构建 ProofForge ELF 和 checked-in Pinocchio Token reference ELF,启动 Surfpool,用不同 program id 部署两个程序,用同一个 @solana/web3.js + @solana/spl-token transfer_checked scenario 分别调用,并对比 source/destination token balance delta 以及 program-owned amount state write。若 cargo-build-sbf 找不到 Solana rustc/platform-tools,该 gate 会 skip;可运行 just solana-pinocchio-install-sbf-tools 修复该工具链。
    • V-GATE-SOLANA-13 — SPL Token mint_to/burn/approve/revoke CPI 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/spl-token-ops-cpi-web3-smoke.sh 构建生成的 --solana-spl-token-ops-cpi-elf fixture,校验四个 entrypoint 的 artifact instruction schema,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,通过 @solana/spl-token 创建 mint、source token account 和 destination token account,用 source/mint authority signer 调用生成的 mint、burn、approve 和 revoke entrypoint,并检查 supply/balance/delegate 变化以及 state account 记录的 mint、burn、approve 和 revoke 值。
    • V-GATE-SOLANA-13R — SPL Token mint_to/burn/approve/revoke Pinocchio reference equivalence。脚本: scripts/solana/pinocchio-spl-token-ops-equivalence.sh 会 emit 生成的 --solana-spl-token-ops-cpi-elf artifact,将四个 instruction ABI、共享 account order、signer/writable constraint、CPI protocol/data layout、 SPL Token instruction tag 和 state-write contract 与 references/solana/pinocchio/spl-token-ops 对比;设置 PROOF_FORGE_PINOCCHIO_CARGO_CHECK=1 时还会用 pinocchio-token typecheck 该 reference。
    • V-GATE-SOLANA-13L — SPL Token mint_to/burn/approve/revoke Pinocchio live equivalence。脚本: scripts/solana/pinocchio-spl-token-ops-live-equivalence.sh 构建 ProofForge ELF 和 checked-in Pinocchio Token ops reference ELF,启动 Surfpool,用不同 program id 部署两个程序,用同一个 @solana/web3.js + @solana/spl-token mint/burn/approve/revoke scenario 分别调用,并对比 token effect 以及 program-owned state write。若 cargo-build-sbf 找不到 Solana rustc/platform-tools,该 gate 会 skip; 可运行 just solana-pinocchio-install-sbf-tools 修复该工具链。
    • V-GATE-SOLANA-13A — SPL Token set_authority CPI 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/spl-token-authority-cpi-web3-smoke.sh 构建生成的 --solana-spl-token-authority-cpi-elf fixture,校验 artifact schema, 启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,通过 @solana/spl-token 创建 mint,然后用 @solana/web3.js 调用生成程序, 验证 mint authority 已被转移到 instruction accounts 中提供的新 authority pubkey,并检查 program-owned state marker。
    • V-GATE-SOLANA-13AR — SPL Token set_authority Pinocchio reference equivalence。脚本: scripts/solana/pinocchio-spl-token-authority-equivalence.sh 会 emit 生成的 --solana-spl-token-authority-cpi-elf artifact,将 instruction ABI、account order、signer/writable constraint、CPI protocol/data layout、 SetAuthority instruction contract 和 marker state-write contract 与 references/solana/pinocchio/spl-token-authority 对比;设置 PROOF_FORGE_PINOCCHIO_CARGO_CHECK=1 时还会用 pinocchio-token typecheck 该 reference。
    • V-GATE-SOLANA-13AL — SPL Token set_authority Pinocchio live equivalence。脚本: scripts/solana/pinocchio-spl-token-authority-live-equivalence.sh 构建 ProofForge ELF 和 checked-in Pinocchio Token authority reference ELF, 启动 Surfpool,用不同 program id 部署两个程序,用同一个 @solana/web3.js + @solana/spl-token mint-authority transfer scenario 分别调用,并对比 mint authority 与 program-owned state marker。若 cargo-build-sbf 找不到 Solana rustc/platform-tools,该 gate 会 skip; 可运行 just solana-pinocchio-install-sbf-tools 修复该工具链。
    • V-GATE-SOLANA-14 — Solana events.emit scalar log 加 sol_log_pubkeysol_log_data 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/log-event-web3-smoke.sh 构建生成的 --solana-log-event-elf fixture,校验 artifact instruction schema、 events.emit capability metadata、Solana-only pubkeyLogActions 和 Solana-only dataLogActions, 启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,用 scalar amount instruction parameter 调用生成的 emit entrypoint, 检查 program-owned state account 记录的 amount,检查 transaction logMessagessol_log_64_ 输出包含稳定的 AmountEvent tag 和 scalar value,调用 log_state_pubkey,并检查 transaction logMessages 中包含来自 sol_log_pubkey 的 state account base58 pubkey;随后调用 log_state_data,并检查 transaction logMessages 中包含来自 sol_log_data 的 base64 Program data: payload。
    • V-GATE-SOLANA-15 — Solana Clock sysvar 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本:scripts/solana/clock-sysvar-web3-smoke.sh 构建生成的 --solana-clock-sysvar-elf fixture,校验 artifact instruction schema 与 env.block capability metadata,启动 Surfpool, 用 solana program deploy --use-rpc 部署 ELF,调用生成的 record entrypoint,检查 sol_get_clock_sysvarClock.slot 写入 program-owned state account,并与 Web3.js metadata 中的 transaction slot 对比。
    • V-GATE-SOLANA-16 — Solana memory syscall 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本:scripts/solana/memory-web3-smoke.sh 构建生成的 --solana-memory-elf fixture,校验 runtime.memory artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,依次调用 set_sourcecopy_compare_fill,并检查 program-owned state account 中的 copied value、moved value、memcmp result 和 memset byte pattern。
    • V-GATE-SOLANA-17 — Solana SHA-256/Keccak-256/Blake3 syscall 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本:scripts/solana/crypto-hash-web3-smoke.sh 构建生成的 --solana-crypto-hash-elf fixture,校验 crypto.hash artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,依次调用 set_preimagehash_preimagekeccak_preimageblake3_preimage,并将 program-owned account 中的 32-byte digest 与同一 preimage bytes 的 Node crypto.createHash("sha256")@noble/hashes Keccak-256/Blake3 对比。
    • V-GATE-SOLANA-18 — Solana Rent sysvar 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本:scripts/solana/rent-sysvar-web3-smoke.sh 构建生成的 --solana-rent-sysvar-elf fixture,校验 sysvar target extension artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,调用 record_rent,并将 program-owned account 记录的 Rent.lamports_per_byte_year 与 Rent sysvar account 的第一个 u64 word 对比。
    • V-GATE-SOLANA-19 — Solana EpochSchedule sysvar 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/epoch-schedule-sysvar-web3-smoke.sh 构建生成的 --solana-epoch-schedule-sysvar-elf fixture,校验 sysvar target extension artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,调用 record_epoch_schedule,并将 program-owned account 记录的 EpochSchedule.slots_per_epochEpochSchedule.leader_schedule_slot_offsetEpochSchedule.warmupEpochSchedule.first_normal_epochEpochSchedule.first_normal_slot 字段与 RPC getEpochSchedule() 对比。
    • V-GATE-SOLANA-20 — Solana LastRestartSlot sysvar 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/last-restart-slot-sysvar-web3-smoke.sh 构建生成的 --solana-last-restart-slot-sysvar-elf fixture,校验 feature-gated sysvar target-extension artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,调用 record_last_restart_slot,并将 program-owned account 记录的 LastRestartSlot.last_restart_slot 与 LastRestartSlot sysvar account 的第一个 u64 word 对比。生成的汇编使用 SysvarLastRestartS1ot1111111111111111111111 调用 sol_get_sysvar, 以兼容当前 sbpf assembler,同时保留 Solana SDK 层的 LastRestartSlot 能力。
    • V-GATE-SOLANA-21 — Solana EpochRewards sysvar 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/epoch-rewards-sysvar-web3-smoke.sh 构建生成的 --solana-epoch-rewards-sysvar-elf fixture,校验当前所有 EpochRewards 字段的 sysvar target-extension artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,调用 record_epoch_rewards,并把 program-owned account 里记录的 EpochRewards.distribution_starting_block_heightEpochRewards.num_partitionsEpochRewards.parent_blockhash_word0..3EpochRewards.total_points_low/highEpochRewards.total_rewardsEpochRewards.distributed_rewardsEpochRewards.active 与 EpochRewards sysvar account data 对比。
    • V-GATE-SOLANA-22 — Solana return-data 与 compute-unit syscall 通过 Surfpool 和 Web3.js 进行 live 行为验证。脚本: scripts/solana/return-data-compute-web3-smoke.sh 构建生成的 --solana-return-data-compute-elf fixture,校验 runtime.return_dataruntime.compute_units target-extension artifact metadata,启动 Surfpool,用 solana program deploy --use-rpc 部署 ELF,通过 simulation returnData 确认 sol_set_return_data,检查 empty sol_get_return_data 读取,检查同一条 instruction 内的 set/get roundtrip 以及返回的 program id words,记录非零 sol_remaining_compute_units value,并验证 sol_log_compute_units_ 产出 compute-unit log。
  • Move 冒烟测试 — aptos move compile/test 或 Sui Move 验证。
  • 能力拒绝测试 — 针对不支持的能力/目标组合的编译时诊断。

新目标工作的预先验证规则

在目标退出 Research 之前,文档必须指明:
  1. 所需的外部工具。
  2. 目标生成的最小制品。
  3. 构建或验证该制品的本地命令或脚本。
  4. 预期的制品路径。
  5. 一个可观察的成功标准。
如果不存在可运行的本地命令,则该目标保持 Research 状态。

可选外部工具

当前的 CI 安装了 just 1.48.0、Foundry stable 和 solc 0.8.30。本地机器可能没有 justsolccastforgepsyupdargosbpfsurfpool、Solana CLI、Node 或 npm。缺失 just 会阻塞本地命令目录,但不会阻塞直接调用底层脚本。缺失 EVM 工具会阻塞 EVM 工具链门禁,但不会阻塞 lake build。缺失 Psy 工具只会阻塞 Psy smoke 的 Dargo 部分;source generation 和 golden diff 会在脚本退出前先运行。缺失 Solana 工具会阻塞 Solana assembly/runtime smoke,但不会阻塞 Lean build 或 target-registry check。