Merge reference-apps 84cfe7d6 into master (gate: green on 84cfe7d6, recorded by tools/ci/pre-push.sh; landed on the box mirror)

This commit is contained in:
igneum-labs 2026-10-08 19:13:21 +00:00
commit 2ea8e73f59
19 changed files with 935 additions and 985 deletions

View file

@ -226,6 +226,39 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
- ZKP-08 Preserve authority and audit all acceptance paths: partial: the body rule and the payment rule read one floor, a producer with its body rule off still pays nothing on honest nodes (the fast-time crossing); the replacement-prover and authority steps are not run; the proof side of the derivation is P22 stage 3, PENDING
- EVM-08 Verify controlled execution and verifier upgrades: partial: the controlled verifier upgrade as a key succession (both pairs embedded, the window, the start refusal) and its fast-time crossing; the mixed-client crossing on the live network and the failed-distribution step are not run
### harness:reference-apps-compat
- Command: `node tools/reference-apps/compat/run.mjs (from the main repo against the devnet read RPC with the funded tester key; rows land in tools/reference-apps/compat/results.json and render to /compatibility)`
- Box class: harness (network run on the 2.0 devnet, read RPC + one funded test account)
- Fixtures: none
- Cases:
- EVM-02 Preserve transaction binding and replay protection: partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's
- EVM-03 Test two-dimensional fees and proving limits: partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)
- EVM-04 Exercise block context and randomness assumptions: partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's
- EVM-05 Run representative contract integration journeys: partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's
- EVM-06 Validate wallets, RPC and indexers: partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows
### harness:reference-apps-ver
- Command: `node tools/reference-apps/ver/run.mjs (from the main repo; the reference apps' verification rows against the devnet read RPC and the light service; evidence per case in tools/reference-apps/ver/evidence/<case>.json; the browser negative set is /lc/test and the Node negative set is tools/reference-apps/light-service/verify.test.mjs)`
- Box class: harness (network run on the 2.0 devnet plus Sepolia reads)
- Fixtures: none
- Cases:
- VER-03 Prove successful payment rather than inclusion: partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction
- VER-04 Bound cross-chain oracle trust and replay: partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's
- VER-05 Reconstruct required state without founder storage: partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise
- VER-06 Detect withholding, corruption and stale data: partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run
- VER-08 Keep every user-facing state truthful: partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows
### harness:reference-apps-ver-trust-anchor
- Command: `node tools/reference-apps/ver/run.mjs (the same run; VER-01 and VER-02 read from tools/reference-apps/ver/evidence/VER-01.json and VER-02.json and are FAIL by design until the voter table is committed in a header or shipped as a trust anchor with authority-change tracking)`
- Box class: harness (network run on the 2.0 devnet)
- Fixtures: none
- Cases:
- VER-01 Authenticate light-client bootstrap: fails today, disclosed: the light client authenticates the certificate's signatures and the header path but the voter table is a node-supplied trust anchor named on /light; a forged table signature and a wrong-network certificate are refused
- VER-02 Verify evolving authority and execution statements: fails today, disclosed: the execution statement's proof is verified by the nodes and the browser verifies the aggregator signature and the post root under it; an in-browser verifier for the permitted proof and a table commitment close it
## Automated cases with no harness in the matrix (NOT RUN, the reason)
- GOV-02 Approve thresholds before results: the approval is recorded in the registry's approval field; the automated half (thresholds frozen before any run_status) is the gate rule landing by 21:00
@ -248,10 +281,6 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
- ECO-06 Fund security and proving as issuance falls: F7
- ECO-07 Price memory growth and honest-card displacement: F7
- EVM-01 Match the selected EVM semantics: no EVM conformance-vector harness is mapped tonight; the exec suite does not run the reference test vectors
- EVM-03 Test two-dimensional fees and proving limits: the two-dimensional fee tests need the proving-limit harness
- EVM-04 Exercise block context and randomness assumptions: block context and randomness vectors are an EVM harness still to map
- EVM-05 Run representative contract integration journeys: contract journeys need the DEX lane's integration set on Devnet 4
- EVM-06 Validate wallets, RPC and indexers: wallet, RPC and indexer validation is the explorer and wallet lanes' rows
- EVM-07 Handle execution denial-of-service workloads: execution DoS workloads need the workload catalogue F3
- CAP-01 Reproduce the historical consumer-shard result: the consumer-shard reproduction is the fleet lane's pods
- CAP-02 Prove on the actual mining configuration: proving on the mining configuration is the fleet lane's
@ -269,11 +298,6 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
- INC-07 Resist self-dealing fees and fake proving demand: self-dealing fees need the economic model and a live window
- INC-08 Quantify provider and supplier failure concentration: failure concentration is a live-window measurement
- FIN-06 Analyse old-key compromise and long-range histories: old-key compromise analysis is the finality lane's long-range scenario, not yet in the sim
- VER-01 Authenticate light-client bootstrap: light-client bootstrap is the reference apps lane (/light); no automated harness mapped tonight
- VER-02 Verify evolving authority and execution statements: the evolving-authority statements are the reference apps lane's
- VER-03 Prove successful payment rather than inclusion: payment proof (/receipt) is the reference apps lane's
- VER-05 Reconstruct required state without founder storage: state reconstruction without founder storage is the OPS no-founder exercise
- VER-06 Detect withholding, corruption and stale data: withholding and corruption detection needs the fault network F4
- VER-07 Protect wallet keys, signing and recovery: wallet key protection is the wallet lane's security row
- OPS-01 Run the complete no-founder exercise: the no-founder exercise is an operations run, not a suite
- OPS-02 Diversify bootstrap and resist peer isolation: bootstrap diversity needs the fault network F4
@ -298,4 +322,4 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
## Count
109 automated cases: 45 mapped to a cell, 67 NOT RUN with a reason.
109 automated cases: 55 mapped to a cell, 58 NOT RUN with a reason.

View file

@ -165,10 +165,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the evidence vault F9 (raw and negative evidence preserved) is the gate rule landing by 21:00: a PASS must carry its evidence file",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -321,10 +321,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the stale-evidence rule (evidence older than the manifest sha reads NOT RUN) is the gate rule landing by 21:00",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]
@ -587,10 +587,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "accepted work under ordinary connectivity needs the fault network F4",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -1466,10 +1466,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "seed-selection resistance is the census harness (the class v6 invention lane), not yet in the matrix",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -1624,10 +1624,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the no-new-rules counterfactual is a research harness",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]
@ -2045,19 +2045,20 @@
"manual_page": 36,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "build-1:/srv/artefacts/tas/201-ef0f2ed8-2826f37e/node-ef0f2ed8/box4-exec.log",
"run_id": "201-ef0f2ed8-2826f37e",
"updated": "2026-10-08T18:51:08.658Z",
"evidence_path": "tools/reference-apps/compat/results.json",
"run_id": "ra-20261008T1744-evm",
"updated": "2026-10-08T19:13:20.781Z",
"evidence_record": {
"cell": "suite:exec",
"manifest_sha": "ef0f2ed8",
"cell": "harness:reference-apps-compat",
"manifest_sha": "4cdcc488",
"coverage": {
"ZKP-01": "partial: a real proof verifies, a wrong statement and garbage are refused (nativeverify)",
"ZKP-03": "partial: a snapshot under another digest refused, the epoch streams bound to the digest",
"OPS-04": "partial: snapshot install, replay and genesis recapture after a crash",
"EVM-02": "partial: the replay tests on the day stream; the signature and chain-id binding vectors are an EVM harness still to map"
"EVM-02": "partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's",
"EVM-03": "partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)",
"EVM-04": "partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's",
"EVM-05": "partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's",
"EVM-06": "partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows"
},
"at": "2026-10-08T18:51:08.658Z"
"at": "2026-10-08T19:13:20.781Z"
}
},
{
@ -2089,14 +2090,20 @@
"manual_page": 36,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "docs/build/compatibility.md",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"evidence_path": "tools/reference-apps/compat/results.json",
"run_id": "ra-20261008T1744-evm",
"updated": "2026-10-08T19:13:20.781Z",
"evidence_record": {
"what_was_run": "the two-dimensional fee rows (the quote folds proving gas; gasUsed 21,000 against a quote of 59,650 for a transfer)",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-compat",
"manifest_sha": "4cdcc488",
"coverage": {
"EVM-02": "partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's",
"EVM-03": "partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)",
"EVM-04": "partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's",
"EVM-05": "partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's",
"EVM-06": "partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows"
},
"at": "2026-10-08T19:13:20.781Z"
}
},
{
@ -2128,14 +2135,20 @@
"manual_page": 37,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "docs/build/compatibility.md",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"evidence_path": "tools/reference-apps/compat/results.json",
"run_id": "ra-20261008T1744-evm",
"updated": "2026-10-08T19:13:20.781Z",
"evidence_record": {
"what_was_run": "the block-context and prevrandao rows",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-compat",
"manifest_sha": "4cdcc488",
"coverage": {
"EVM-02": "partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's",
"EVM-03": "partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)",
"EVM-04": "partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's",
"EVM-05": "partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's",
"EVM-06": "partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows"
},
"at": "2026-10-08T19:13:20.781Z"
}
},
{
@ -2167,14 +2180,20 @@
"manual_page": 37,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "docs/build/compatibility.md",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"evidence_path": "tools/reference-apps/compat/results.json",
"run_id": "ra-20261008T1744-evm",
"updated": "2026-10-08T19:13:20.781Z",
"evidence_record": {
"what_was_run": "the ERC-20, counter and block-context contracts",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-compat",
"manifest_sha": "4cdcc488",
"coverage": {
"EVM-02": "partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's",
"EVM-03": "partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)",
"EVM-04": "partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's",
"EVM-05": "partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's",
"EVM-06": "partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows"
},
"at": "2026-10-08T19:13:20.781Z"
}
},
{
@ -2206,14 +2225,20 @@
"manual_page": 37,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "docs/build/compatibility.md",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"evidence_path": "tools/reference-apps/compat/results.json",
"run_id": "ra-20261008T1744-evm",
"updated": "2026-10-08T19:13:20.781Z",
"evidence_record": {
"what_was_run": "the wallet fee estimation, indexing and receipt rows",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-compat",
"manifest_sha": "4cdcc488",
"coverage": {
"EVM-02": "partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's",
"EVM-03": "partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)",
"EVM-04": "partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's",
"EVM-05": "partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's",
"EVM-06": "partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows"
},
"at": "2026-10-08T19:13:20.781Z"
}
},
{
@ -2247,10 +2272,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "execution DoS workloads need the workload catalogue F3",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2724,10 +2749,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the consumer-shard reproduction is the fleet lane's pods",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2759,10 +2784,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "proving on the mining configuration is the fleet lane's",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2794,10 +2819,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the request-to-payment path is the proving fleet's measurement",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2829,10 +2854,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "sustained load is the proving fleet's",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2864,10 +2889,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "overload and recovery is the proving fleet's",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2899,10 +2924,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "assignment windows are the proving fleet's",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2934,10 +2959,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "reassignment is the proving fleet's",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -2969,10 +2994,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "customer-verifiable output is the reference apps plus the fleet",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]
@ -3067,10 +3092,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "revenue separation is the economics lane's model",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3104,10 +3129,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the modified-client task choice needs an adversarial client harness",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3141,10 +3166,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "demand spikes are the economic model",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3178,10 +3203,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "reservation abuse needs the capacity harness",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3215,10 +3240,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "difficulty and timestamp manipulation needs the fault network F4",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3252,10 +3277,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "self-dealing fees need the economic model and a live window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3289,10 +3314,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "failure concentration is a live-window measurement",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]
@ -3694,15 +3719,18 @@
"owner": "Wallet + light-client lead; independent security review",
"manual_page": 51,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "site/lc; docs/build/compatibility.md",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"run_status": "FAIL",
"evidence_path": "tools/reference-apps/ver/evidence/VER-01.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"what_was_run": "/light with the trusted-inputs block and the data-availability paragraph",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-ver-trust-anchor",
"manifest_sha": "4cdcc488",
"coverage": {
"VER-01": "fails today, disclosed: the light client authenticates the certificate's signatures and the header path but the voter table is a node-supplied trust anchor named on /light; a forged table signature and a wrong-network certificate are refused",
"VER-02": "fails today, disclosed: the execution statement's proof is verified by the nodes and the browser verifies the aggregator signature and the post root under it; an in-browser verifier for the permitted proof and a table commitment close it"
},
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3731,15 +3759,18 @@
"owner": "Wallet + light-client lead; independent security review",
"manual_page": 51,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "site/lc",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"run_status": "FAIL",
"evidence_path": "tools/reference-apps/ver/evidence/VER-01.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"what_was_run": "/light's authority table and the execution-proof labels",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-ver-trust-anchor",
"manifest_sha": "4cdcc488",
"coverage": {
"VER-01": "fails today, disclosed: the light client authenticates the certificate's signatures and the header path but the voter table is a node-supplied trust anchor named on /light; a forged table signature and a wrong-network certificate are refused",
"VER-02": "fails today, disclosed: the execution statement's proof is verified by the nodes and the browser verifies the aggregator signature and the post root under it; an in-browser verifier for the permitted proof and a table commitment close it"
},
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3769,14 +3800,20 @@
"manual_page": 51,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "site/lc",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"evidence_path": "tools/reference-apps/ver/evidence/summary.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"what_was_run": "/receipt retitled the inclusion receipt; the payment receipt",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-ver",
"manifest_sha": "4cdcc488",
"coverage": {
"VER-03": "partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction",
"VER-04": "partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's",
"VER-05": "partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise",
"VER-06": "partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run",
"VER-08": "partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows"
},
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3806,14 +3843,20 @@
"manual_page": 52,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "site/lc; docs/bridge/light-client-bridge.md",
"run_id": "team-2026-10-08",
"updated": "2026-10-08 18:3x UK",
"evidence_path": "tools/reference-apps/ver/evidence/summary.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"what_was_run": "/oracle's trust block; the Sepolia verifier redeployed for chain id 4465",
"run_by": "reference-apps lane (a2060899d2a27d31c)",
"under_the_standard": "no: team-run before the standard's procedure; the status is RUNNING until the case is re-run under its steps with the profile's numbers and an independent run where the profile asks one",
"pass_or_fail_today": "not judged under the standard yet"
"cell": "harness:reference-apps-ver",
"manifest_sha": "4cdcc488",
"coverage": {
"VER-03": "partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction",
"VER-04": "partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's",
"VER-05": "partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise",
"VER-06": "partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run",
"VER-08": "partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows"
},
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3842,13 +3885,21 @@
"owner": "Wallet + light-client lead; independent security review",
"manual_page": 52,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"run_status": "RUNNING",
"evidence_path": "tools/reference-apps/ver/evidence/summary.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "state reconstruction without founder storage is the OPS no-founder exercise",
"at": "2026-10-08T19:10:14.605Z"
"cell": "harness:reference-apps-ver",
"manifest_sha": "4cdcc488",
"coverage": {
"VER-03": "partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction",
"VER-04": "partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's",
"VER-05": "partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise",
"VER-06": "partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run",
"VER-08": "partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows"
},
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3877,13 +3928,21 @@
"owner": "Wallet + light-client lead; independent security review",
"manual_page": 52,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"run_status": "RUNNING",
"evidence_path": "tools/reference-apps/ver/evidence/summary.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "withholding and corruption detection needs the fault network F4",
"at": "2026-10-08T19:10:14.605Z"
"cell": "harness:reference-apps-ver",
"manifest_sha": "4cdcc488",
"coverage": {
"VER-03": "partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction",
"VER-04": "partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's",
"VER-05": "partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise",
"VER-06": "partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run",
"VER-08": "partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows"
},
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3915,10 +3974,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "wallet key protection is the wallet lane's security row",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -3948,19 +4007,20 @@
"manual_page": 53,
"owner_lane": "reference-apps lane (a2060899d2a27d31c)",
"run_status": "RUNNING",
"evidence_path": "build-1:/srv/artefacts/tas/201-ef0f2ed8-2826f37e/miner-2826f37e/box2-app.log",
"run_id": "201-ef0f2ed8-2826f37e",
"updated": "2026-10-08T18:51:08.658Z",
"evidence_path": "tools/reference-apps/ver/evidence/summary.json",
"run_id": "ra-20261008T1746-ver",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"cell": "suite:app",
"manifest_sha": "ef0f2ed8",
"cell": "harness:reference-apps-ver",
"manifest_sha": "4cdcc488",
"coverage": {
"UX-02": "partial: the engine state machine's pause, stop and knob tests; the operator study is UX-01's",
"UX-03": "partial: the card and earnings rendering tests; the net-earnings model against real bills is COM/ECO evidence",
"UX-07": "partial: the refused-update and manifest tests; the update-return lane's install classes are its own rows",
"VER-08": "partial: the app's own state-word tests; the wallet and light client rows are VER-01 to VER-03"
"VER-03": "partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction",
"VER-04": "partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's",
"VER-05": "partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise",
"VER-06": "partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run",
"VER-08": "partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows"
},
"at": "2026-10-08T18:51:08.658Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]
@ -4008,10 +4068,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "the no-founder exercise is an operations run, not a suite",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4043,10 +4103,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "bootstrap diversity needs the fault network F4",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4157,10 +4217,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "proving workload isolation is the fleet's pod row",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4232,10 +4292,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "runbook detection is an operations run",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4267,10 +4327,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "repeat independent operation is a cross-release observation",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]
@ -4661,10 +4721,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "commercial evidence, no automated harness",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4701,10 +4761,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "commercial evidence",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4741,10 +4801,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "commercial evidence",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4781,10 +4841,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "commercial evidence",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4821,10 +4881,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "commercial evidence",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -4861,10 +4921,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "commercial evidence",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -5024,10 +5084,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "leadership comparison, an observation window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -5062,10 +5122,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "observation window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -5100,10 +5160,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "observation window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -5138,10 +5198,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "observation window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -5176,10 +5236,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "observation window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
},
{
@ -5248,10 +5308,10 @@
"run_status": "NOT RUN",
"evidence_path": "",
"run_id": "",
"updated": "2026-10-08T19:10:14.605Z",
"updated": "2026-10-08T19:13:20.937Z",
"evidence_record": {
"reason": "observation window",
"at": "2026-10-08T19:10:14.605Z"
"at": "2026-10-08T19:13:20.937Z"
}
}
]

File diff suppressed because one or more lines are too long

View file

@ -449,7 +449,7 @@
</div>
<div class="grid c2">
<div class="dl-list" style="margin:0">
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v0.3.26 · 63.8 MB</span></a>
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg">macOS <span data-dl-meta="miner-mac">v2.0.0 · 45.9 MB</span></a>
<a href="/miner#hive">Linux · HiveOS <span>the tarball and the flight sheet, on the miner page</span></a>
</div>
@ -472,7 +472,7 @@
</div>
</div>
<a class="dl-bar" href="/miner#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v0.3.26 · 63.8 MB</span></a>
<a class="dl-bar" href="/miner#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
<!-- footer:start -->
<footer class="site-footer">

View file

@ -244,8 +244,8 @@
<div><h3>Ember for Windows</h3><div class="sub">the installer, from the signed manifest</div></div>
<div class="body">
<p>Run the installer, press Start. NVIDIA and AMD cards both mine. Setting an NVIDIA power cap asks for administrator rights once.</p>
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows <span class="meta" data-dl-meta="miner-windows">v0.3.26 · 63.8 MB</span></a>
<div class="sha"><b>sha256</b> <span data-dl-sha="miner-windows">8e674bd5896b0d61b74c6e6783085804dcae6d614859592506d84e2c93943b48</span></div>
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows <span class="meta" data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
<div class="sha"><b>sha256</b> <span data-dl-sha="miner-windows">793a631dc2084e6d6f778f13602d674a0c134af746b6355c25d3998c2be18b79</span></div>
</div>
</article>
<article class="dl-card" id="mac">
@ -263,16 +263,16 @@
<div><h3>Ember for Linux</h3><div class="sub">one tarball, the miner and the node inside</div></div>
<div class="body">
<p>Unpack it, run <code>igneum</code> with your payout address. The same signed manifest as the desktop apps. NVIDIA through CUDA, AMD through OpenCL.</p>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn primary"><span class="osmark bare" data-os="linux" title="Linux"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M12 2c-2.4 0-4 1.9-4 4.6 0 1.2.2 2 0 2.8-.6 1.4-2.1 2.9-2.6 4.9-.3 1.1-.1 2 .3 2.6-.6.4-1.3 1-1.1 1.7.3 1 2.1 1.2 3.2 1.8.7.4 1.5.6 2.1.1.6.2 1.3.3 2.1.3s1.5-.1 2.1-.3c.6.5 1.4.3 2.1-.1 1.1-.6 2.9-.8 3.2-1.8.2-.7-.5-1.3-1.1-1.7.4-.6.6-1.5.3-2.6-.5-2-2-3.5-2.6-4.9-.2-.8 0-1.6 0-2.8C16 3.9 14.4 2 12 2zm-1.4 4.2c.5 0 .8.5.8 1.2s-.3 1.2-.8 1.2-.8-.5-.8-1.2.3-1.2.8-1.2zm2.8 0c.5 0 .8.5.8 1.2s-.3 1.2-.8 1.2-.8-.5-.8-1.2.3-1.2.8-1.2zM12 9.3c.9 0 1.9.5 1.9 1s-1 1.2-1.9 1.2-1.9-.7-1.9-1.2 1-1 1.9-1zm0 3.4c2.2 0 3.6 2.6 3.6 4.4 0 1.5-1.6 2.3-3.6 2.3s-3.6-.8-3.6-2.3c0-1.8 1.4-4.4 3.6-4.4z"/></svg></span>Download the tarball <span class="meta" data-dl-meta="miner-hive">v0.3.26 · 27.7 MB</span></a>
<div class="sha"><b>sha256</b> <span data-dl-sha="miner-hive">e3e4482c2b423c62b62e3de91f4eb06627723dd4a84770aba6e81a69111746c5</span></div>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn primary"><span class="osmark bare" data-os="linux" title="Linux"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M12 2c-2.4 0-4 1.9-4 4.6 0 1.2.2 2 0 2.8-.6 1.4-2.1 2.9-2.6 4.9-.3 1.1-.1 2 .3 2.6-.6.4-1.3 1-1.1 1.7.3 1 2.1 1.2 3.2 1.8.7.4 1.5.6 2.1.1.6.2 1.3.3 2.1.3s1.5-.1 2.1-.3c.6.5 1.4.3 2.1-.1 1.1-.6 2.9-.8 3.2-1.8.2-.7-.5-1.3-1.1-1.7.4-.6.6-1.5.3-2.6-.5-2-2-3.5-2.6-4.9-.2-.8 0-1.6 0-2.8C16 3.9 14.4 2 12 2zm-1.4 4.2c.5 0 .8.5.8 1.2s-.3 1.2-.8 1.2-.8-.5-.8-1.2.3-1.2.8-1.2zm2.8 0c.5 0 .8.5.8 1.2s-.3 1.2-.8 1.2-.8-.5-.8-1.2.3-1.2.8-1.2zM12 9.3c.9 0 1.9.5 1.9 1s-1 1.2-1.9 1.2-1.9-.7-1.9-1.2 1-1 1.9-1zm0 3.4c2.2 0 3.6 2.6 3.6 4.4 0 1.5-1.6 2.3-3.6 2.3s-3.6-.8-3.6-2.3c0-1.8 1.4-4.4 3.6-4.4z"/></svg></span>Download the tarball <span class="meta" data-dl-meta="miner-hive">v2.0.0 · 53.3 MB</span></a>
<div class="sha"><b>sha256</b> <span data-dl-sha="miner-hive">5c1369fc5559e8c85534da08cb6eafff9f688336f8993b44e0512fe86d6284d1</span></div>
</div>
</article>
<article class="dl-card" id="hive">
<span class="osmark" data-os="hive" title="HiveOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"><path d="M12 2.6 20.2 7.3v9.4L12 21.4 3.8 16.7V7.3z"/><path d="M12 7.4 16 9.7v4.6L12 16.6 8 14.3V9.7z"/><path d="M12 7.4V2.6M16 9.7l4.2-2.4M16 14.3l4.2 2.4M12 16.6v4.8M8 14.3l-4.2 2.4M8 9.7 3.8 7.3"/></svg></span>
<div><h3>Ember on HiveOS</h3><div class="sub">for the rig people, the same tarball</div></div>
<div class="body">
<div class="hive-sheet"><b>Flight Sheet.</b> Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-0.3.26.tar.gz</code>. Miner name <code>igneum</code>, wallet and worker <code>0x&lt;your 40-hex payout address&gt;.%WORKER_NAME%</code>. Hive itself is untested on our side: tell us what breaks.</div>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn"><span class="osmark bare" data-os="hive" title="HiveOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"><path d="M12 2.6 20.2 7.3v9.4L12 21.4 3.8 16.7V7.3z"/><path d="M12 7.4 16 9.7v4.6L12 16.6 8 14.3V9.7z"/><path d="M12 7.4V2.6M16 9.7l4.2-2.4M16 14.3l4.2 2.4M12 16.6v4.8M8 14.3l-4.2 2.4M8 9.7 3.8 7.3"/></svg></span>Download the tarball <span class="meta" data-dl-meta="miner-hive">v0.3.26 · 27.7 MB</span></a>
<div class="hive-sheet"><b>Flight Sheet.</b> Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-2.0.0.tar.gz</code>. Miner name <code>igneum</code>, wallet and worker <code>0x&lt;your 40-hex payout address&gt;.%WORKER_NAME%</code>. Hive itself is untested on our side: tell us what breaks.</div>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn"><span class="osmark bare" data-os="hive" title="HiveOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"><path d="M12 2.6 20.2 7.3v9.4L12 21.4 3.8 16.7V7.3z"/><path d="M12 7.4 16 9.7v4.6L12 16.6 8 14.3V9.7z"/><path d="M12 7.4V2.6M16 9.7l4.2-2.4M16 14.3l4.2 2.4M12 16.6v4.8M8 14.3l-4.2 2.4M8 9.7 3.8 7.3"/></svg></span>Download the tarball <span class="meta" data-dl-meta="miner-hive">v2.0.0 · 53.3 MB</span></a>
</div>
</article>
</div>

View file

@ -236,7 +236,7 @@
<h1>The card you own has <span class="accent">a new chain</span> to&nbsp;mine.</h1>
<p class="lead">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="fold-actions" id="fold-actions">
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" data-os-button="windows" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows<span class="meta" data-dl-meta="miner-windows">v0.3.26 · 63.8 MB</span></a>
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" data-os-button="windows" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows<span class="meta" data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg" data-os-button="mac" class="btn"><span class="osmark bare" data-os="mac" title="macOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M16.4 12.6c0-2.5 2-3.6 2.1-3.7-1.2-1.7-3-1.9-3.6-2-1.5-.2-3 .9-3.8.9-.8 0-2-.9-3.3-.8-1.7 0-3.2 1-4.1 2.5-1.8 3-.5 7.6 1.3 10.1.9 1.2 1.9 2.6 3.2 2.5 1.3 0 1.8-.8 3.3-.8 1.6 0 2 .8 3.3.8 1.4 0 2.3-1.2 3.1-2.5 1-1.4 1.4-2.8 1.4-2.9 0 0-2.7-1-2.9-4.1zM13.9 5.3c.7-.8 1.2-2 1-3.2-1 0-2.2.7-2.9 1.5-.6.7-1.2 1.9-1 3 1.1.1 2.2-.5 2.9-1.3z"/></svg></span>Download for macOS<span class="meta" data-dl-meta="miner-mac">v2.0.0 · 45.9 MB</span></a>
</div>
<p class="fold-more fold-one">One click: node, miner, prover. The card starts.</p>

View file

@ -5081,7 +5081,9 @@ function verifyCheckpoint(data, deps2) {
const top = headers[headers.length - 1];
if (top.hash !== data.hash) return done(fail("the last header is not the certified checkpoint block", { headers_checked: checked }));
if (data.previous && headers[0].hash !== data.previous.hash) return done(fail("the first header is not the previous locked checkpoint", { headers_checked: checked }));
if (BigInt(top.blue_score) < 30n * BigInt(index)) return done(fail(`checkpoint ${index} needs blue score at least ${30 * index}, header has ${top.blue_score}`, { headers_checked: checked }));
const needBlue = 30n * BigInt(index), needDaa = 30n * (BigInt(index) - 1n);
const byBlue = BigInt(top.blue_score) >= needBlue, byDaa = BigInt(top.daa_score) >= needDaa;
if (!byBlue && !byDaa) return done(fail(`checkpoint ${index} needs blue score at least ${needBlue} or DAA score at least ${needDaa}, header has blue ${top.blue_score} and DAA ${top.daa_score}`, { headers_checked: checked }));
if (voters.length !== Number(cert.voter_count)) return done(fail(`certificate names ${cert.voter_count} voters, ${voters.length} given`, { headers_checked: checked }));
for (let i = 0; i < voters.length; i++) {
const v = voters[i];
@ -5142,26 +5144,10 @@ function verifyCheckpoint(data, deps2) {
}
// site/lc/core.js
var DST_SEGMENT = "IGNEUM_SEGMENT_RECORD_V1_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_";
var SEGMENT_RECORD_LEN = 2 + 8 + 8 + 32 + 48 + 20 + 340 + 32 + 96;
var ZERO32 = new Uint8Array(32);
var te2 = new TextEncoder();
var strip = (s) => String(s).replace(/^0x/i, "");
var u64le = (v) => {
const b = new Uint8Array(8);
new DataView(b.buffer).setBigUint64(0, BigInt(v), true);
return b;
};
var u16le = (v) => {
const b = new Uint8Array(2);
new DataView(b.buffer).setUint16(0, Number(v), true);
return b;
};
var u32le = (v) => {
const b = new Uint8Array(4);
new DataView(b.buffer).setUint32(0, Number(v), true);
return b;
};
function concat2(parts) {
const n = parts.reduce((a, p) => a + p.length, 0);
const m = new Uint8Array(n);
@ -5187,114 +5173,6 @@ function merkleRootFromPath(leaf, index, siblings, blake2b2) {
}
return h;
}
function coinbaseTxHash(tx, blake2b2, amountWireLen = 8) {
const version = Number(tx.version || 0);
const parts = [u16le(version), u64le((tx.inputs || []).length)];
for (const inp of tx.inputs || []) {
parts.push(hexToBytes3(strip(inp.previousOutpoint.transactionId)), u32le(inp.previousOutpoint.index));
const sig = hexToBytes3(strip(inp.signatureScript || ""));
parts.push(u64le(sig.length), sig);
if (version < 1) parts.push(new Uint8Array([Number(inp.sigOpCount || 0)]));
parts.push(u64le(inp.sequence));
if (version >= 1) parts.push(u16le(inp.computeBudget || 0));
}
parts.push(u64le((tx.outputs || []).length));
for (const out of tx.outputs || []) {
const v = new Uint8Array(amountWireLen);
let x = BigInt(out.value);
for (let i = 0; i < amountWireLen; i++) {
v[i] = Number(x & 0xffn);
x >>= 8n;
}
const spk = hexToBytes3(strip(out.scriptPublicKey));
parts.push(v, spk.subarray(0, 2), u64le(spk.length - 2), spk.subarray(2));
if (version >= 1) parts.push(new Uint8Array([out.covenant ? 1 : 0]));
}
const payload = hexToBytes3(strip(tx.payload || ""));
parts.push(u64le(tx.lockTime || 0), hexToBytes3(strip(tx.subnetworkId)), u64le(tx.gas || 0), u64le(payload.length), payload);
const mass = BigInt(tx.mass || 0);
if (version < 1) {
if (mass > 0n) parts.push(u64le(mass));
} else parts.push(u64le(mass));
return keyed(blake2b2, "TransactionHash")(concat2(parts));
}
function coinbaseExtraData(payload) {
if (payload.length < 19) return new Uint8Array(0);
const scriptLen = payload[18];
return payload.subarray(19 + scriptLen);
}
function takeSection(extra, tag) {
const n = extra.length;
if (n < 8) return { items: null, before: extra };
const t2 = String.fromCharCode(...extra.subarray(n - 4));
if (t2 !== tag) return { items: null, before: extra };
const len = new DataView(extra.buffer, extra.byteOffset + n - 8, 4).getUint32(0, true);
if (len + 8 > n) return { items: null, before: extra };
return { items: extra.subarray(n - 8 - len, n - 8), before: extra.subarray(0, n - 8 - len) };
}
function segmentRecordsOf(payload) {
const extra = coinbaseExtraData(payload);
const f = takeSection(extra, "IGNF");
const p = takeSection(f.before, "IGNP");
const s = takeSection(p.before, "IGNS");
const out = [];
if (!s.items) return out;
for (let o = 0; o + SEGMENT_RECORD_LEN <= s.items.length; o += SEGMENT_RECORD_LEN) out.push(parseSegmentRecord(s.items.subarray(o, o + SEGMENT_RECORD_LEN)));
return out;
}
function parseSegmentRecord(b) {
if (b.length !== SEGMENT_RECORD_LEN) throw new Error(`segment record is ${b.length} bytes, not ${SEGMENT_RECORD_LEN}`);
const dv = new DataView(b.buffer, b.byteOffset, b.byteLength);
let o = 0;
const version = dv.getUint16(o, true);
o += 2;
const first = dv.getBigUint64(o, true);
o += 8;
const last = dv.getBigUint64(o, true);
o += 8;
const block = b.subarray(o, o + 32);
o += 32;
const pubkey = b.subarray(o, o + 48);
o += 48;
const payout = b.subarray(o, o + 20);
o += 20;
const publicValues = b.subarray(o, o + 340);
o += 340;
const proofHash = b.subarray(o, o + 32);
o += 32;
const signature = b.subarray(o, o + 96);
return { bytes: b, version, first, last, block, pubkey, payout, publicValues, proofHash, signature, statement: parseBlockStatement(publicValues) };
}
function parseBlockStatement(b) {
const dv = new DataView(b.buffer, b.byteOffset, b.byteLength);
const h = (o) => bytesToHex3(b.subarray(o, o + 32));
return {
chain_id: dv.getBigUint64(0),
number: dv.getBigUint64(8),
block_hash: h(16),
parent_hash: h(48),
shard_count: dv.getUint32(80),
tx_commitment: h(84),
pre_root: h(116),
post_root: h(148),
receipts: h(180),
gas_used: dv.getBigUint64(212),
pgas_used: dv.getBigUint64(220),
executed: dv.getUint32(228),
skipped: dv.getUint32(232),
provers: h(236),
shard_vk: h(268),
agg_vk: h(300),
chain_len: dv.getBigUint64(332)
};
}
function segmentRecordMessage(chainId, r2) {
return concat2([te2.encode("igneum-segment-record-v1/" + chainId), new Uint8Array([0]), u64le(r2.first), u64le(r2.last), r2.block, r2.payout, r2.publicValues, r2.proofHash]);
}
function verifySegmentRecordSignature(chainId, r2, bls2) {
const L = bls2.longSignatures;
return L.verify(r2.signature, L.hash(segmentRecordMessage(chainId, r2), DST_SEGMENT), r2.pubkey);
}
function rlpDecode(b) {
const [item, rest] = rlpItem(b, 0);
if (rest !== b.length) throw new Error("rlp: trailing bytes");
@ -5333,31 +5211,6 @@ function rlpItem(b, o) {
}
return [items, end];
}
function rlpEncode(item) {
if (item instanceof Uint8Array) {
if (item.length === 1 && item[0] < 128) return item;
return concat2([rlpLen(item.length, 128), item]);
}
const body = concat2(item.map(rlpEncode));
return concat2([rlpLen(body.length, 192), body]);
}
function rlpLen(n, base) {
if (n < 56) return new Uint8Array([base + n]);
const bytes = [];
let x = n;
while (x > 0) {
bytes.unshift(x & 255);
x = Math.floor(x / 256);
}
return new Uint8Array([base + 55 + bytes.length, ...bytes]);
}
var trimBig = (v) => {
v = BigInt(v);
if (v === 0n) return new Uint8Array(0);
let h = v.toString(16);
if (h.length % 2) h = "0" + h;
return hexToBytes3(h);
};
function verifyHeaderPath(headers, blake2b2, fromHash, toHash) {
if (!headers.length) throw new Error("no headers");
for (let i = 0; i < headers.length; i++) {
@ -5425,140 +5278,6 @@ function parseTx(raw) {
if (type === 1) return { type, chain_id: bigOf(body[0]).toString(), nonce: bigOf(body[1]).toString(), to: body[4].length ? hex(body[4]) : null, value: bigOf(body[5]).toString(), data: hex(body[6]), gas: bigOf(body[3]).toString() };
return { type: 0, nonce: bigOf(body[0]).toString(), to: body[3].length ? hex(body[3]) : null, value: bigOf(body[4]).toString(), data: hex(body[5]), gas: bigOf(body[2]).toString() };
}
function hpEncode(nibs, leaf) {
const odd = nibs.length % 2;
const flag = (leaf ? 2 : 0) + odd;
const out = [];
if (odd) out.push(flag << 4 | nibs[0]);
else out.push(flag << 4);
for (let i = odd; i < nibs.length; i += 2) out.push(nibs[i] << 4 | nibs[i + 1]);
return new Uint8Array(out);
}
function orderedTrieRoot(values, keccak) {
const items = values.map((v, i) => ({ nibs: nibblesOf(rlpEncode(trimBig(BigInt(i)))), value: v }));
items.sort((a, b) => {
const n = Math.min(a.nibs.length, b.nibs.length);
for (let k = 0; k < n; k++) if (a.nibs[k] !== b.nibs[k]) return a.nibs[k] - b.nibs[k];
return a.nibs.length - b.nibs.length;
});
if (!items.length) return keccak(rlpEncode(new Uint8Array(0)));
const root = trieNodeTop(items, keccak);
return root;
}
function nibblesOf(b) {
const out = [];
for (const x of b) out.push(x >> 4, x & 15);
return out;
}
var Raw = class {
constructor(bytes) {
this.bytes = bytes;
}
};
function rlpList(parts) {
const body = concat2(parts.map((p) => p instanceof Raw ? p.bytes : rlpEncode(p)));
const len = body.length;
const head = len < 56 ? new Uint8Array([192 + len]) : (() => {
const b = [];
let x = len;
while (x > 0) {
b.unshift(x & 255);
x = Math.floor(x / 256);
}
return new Uint8Array([247 + b.length, ...b]);
})();
return concat2([head, body]);
}
function build(items, keccak) {
if (items.length === 1) return rlpList([hpEncode(items[0].nibs, true), items[0].value]);
let prefix = 0;
while (items.every((it) => it.nibs.length > prefix && it.nibs[prefix] === items[0].nibs[prefix])) prefix++;
if (prefix > 0) {
const childEnc = build(items.map((it) => ({ nibs: it.nibs.slice(prefix), value: it.value })), keccak);
return rlpList([hpEncode(items[0].nibs.slice(0, prefix), false), childEnc.length < 32 ? new Raw(childEnc) : keccak(childEnc)]);
}
const parts = [];
for (let b = 0; b < 16; b++) {
const sub = items.filter((it) => it.nibs.length > 0 && it.nibs[0] === b).map((it) => ({ nibs: it.nibs.slice(1), value: it.value }));
if (!sub.length) {
parts.push(new Uint8Array(0));
continue;
}
const enc = build(sub, keccak);
parts.push(enc.length < 32 ? new Raw(enc) : keccak(enc));
}
const here = items.find((it) => it.nibs.length === 0);
parts.push(here ? here.value : new Uint8Array(0));
return rlpList(parts);
}
function trieNodeTop(items, keccak) {
return keccak(build(items, keccak));
}
function receiptEnvelope(r2) {
const h = (x) => hexToBytes3(strip(x));
const status = Number(r2.status) === 1 ? new Uint8Array([1]) : new Uint8Array(0);
const logs = (r2.logs || []).map((l) => [h(l.address), (l.topics || []).map(h), h(l.data || "0x")]);
const body = rlpEncode([status, trimBig(BigInt(r2.cumulativeGasUsed)), h(r2.logsBloom), logs]);
const type = Number(r2.type || 0);
return type === 1 || type === 2 ? concat2([new Uint8Array([type]), body]) : body;
}
function verifyPaymentReceipt(pr, deps2) {
const { blake2b: blake2b2, bls: bls2, keccak } = deps2;
const base = verifyReceipt(pr, deps2);
if (!base.verified) return { ...base, payment: false };
const steps = base.steps.slice();
const t0 = now();
const step = (name, fn) => {
try {
const d = fn();
steps.push({ name, ok: true, detail: d });
return d;
} catch (e) {
steps.push({ name, ok: false, detail: String(e.message || e) });
throw e;
}
};
const done = (extra) => ({ ...base, ...extra, steps, ms: Math.round((base.ms + now() - t0) * 10) / 10 });
try {
const seg = pr.segment;
if (!seg) throw Object.assign(new Error(pr.payment_unavailable || "no proven segment record covers the chain block that executed this transaction yet"), { soft: true });
const cp = pr.checkpoint.certificate;
step("header chain from the record's carrier block up to the checkpoint", () => `${verifyHeaderPath(seg.headers, blake2b2, seg.headers[0].hash, cp.hash)} headers`);
const record = step("the segment record is in the carrier's coinbase (hash recomputed, merkle path) and signed by its aggregator", () => {
const cb = coinbaseTxHash(seg.carrier.coinbase, blake2b2, seg.carrier.amount_wire_len || 8);
const root = merkleRootFromPath(cb, Number(seg.carrier.leaf_index), seg.carrier.merkle_siblings.map((x) => hexToBytes3(strip(x))), blake2b2);
if (bytesToHex3(root) !== strip(seg.headers[0].hash_merkle_root)) throw new Error("the merkle path does not reach the carrier's hash_merkle_root");
const rec = segmentRecordsOf(hexToBytes3(strip(seg.carrier.coinbase.payload))).find((r2) => bytesToHex3(r2.bytes) === strip(seg.record_hex));
if (!rec) throw new Error("the named segment record is not in the carrier's coinbase");
if (!verifySegmentRecordSignature(cp.chain_id, rec, bls2)) throw new Error("the aggregator's signature does not verify");
return `record for blocks ${rec.first} to ${rec.last}, aggregator ${voteKeyHash(rec.pubkey, blake2b2).slice(0, 12)}`;
}) && segmentRecordsOf(hexToBytes3(strip(seg.carrier.coinbase.payload))).find((r2) => bytesToHex3(r2.bytes) === strip(seg.record_hex));
const st = record.statement;
step("the statement is for the chain block that executed the transaction", () => {
if (Number(st.number) !== Number(pr.execution.chain_block) || st.block_hash !== strip(pr.execution.chain_block_hash)) throw new Error(`the statement is for chain block ${st.number}, the transaction executed at ${pr.execution.chain_block}`);
return `chain block ${st.number}, ${st.shard_count} shard(s), receipts commitment ${st.receipts.slice(0, 12)}`;
});
step("the shard receipts roots hash to the statement's receipts commitment", () => {
const roots = seg.shard_receipts_roots.map((x) => hexToBytes3(strip(x)));
if (roots.length !== Number(st.shard_count)) throw new Error(`${roots.length} roots given, the statement names ${st.shard_count} shards`);
if (bytesToHex3(keccak(concat2(roots))) !== st.receipts) throw new Error("keccak over the shard receipts roots is not the statement's commitment");
return `${roots.length} root(s), shard ${seg.shard_index} is ${strip(seg.shard_receipts_roots[seg.shard_index]).slice(0, 12)}`;
});
const mine = step("the shard's receipts rebuild its receipts trie root, and the transaction's receipt sits in it", () => {
const root = bytesToHex3(orderedTrieRoot(seg.receipts.map(receiptEnvelope), keccak));
if (root !== strip(seg.shard_receipts_roots[seg.shard_index])) throw new Error(`the ${seg.receipts.length} receipts rebuild root ${root.slice(0, 12)}, the committed root is ${strip(seg.shard_receipts_roots[seg.shard_index]).slice(0, 12)}`);
const r2 = seg.receipts[Number(seg.receipt_position)];
if (!r2 || strip(r2.transactionHash) !== strip(pr.tx_hash)) throw new Error("the receipt at the named position is not this transaction's");
return `${seg.receipts.length} receipt(s), this one at position ${seg.receipt_position}, status ${Number(r2.status) === 1 ? "success" : "failed"}, gas ${parseInt(r2.gasUsed, 16)}, ${(r2.logs || []).length} log(s)`;
}) && seg.receipts[Number(seg.receipt_position)];
const ok = Number(mine.status) === 1;
const outcome = ok ? { asset: "IGN (the native coin)", recipient: base.tx.to, amount_wei: base.tx.value, logs: (mine.logs || []).map((l) => ({ address: l.address, topics: l.topics, data: l.data })) } : null;
return done({ verified: true, payment: ok, outcome, receipt_status: ok ? "success" : "failed", note: ok ? "the transfer outcome is authenticated through the proven segment's receipts commitment" : "the transaction executed and FAILED: no transfer took place; authenticated the same way" });
} catch (e) {
if (e.soft) return done({ verified: true, payment: false, payment_unavailable: String(e.message || e) });
return done({ verified: false, payment: false, reason: String(e.message || e) });
}
}
function formatIgn(wei, decimals = 18) {
const v = BigInt(wei);
const base = 10n ** BigInt(decimals);
@ -5595,16 +5314,14 @@ if (args.includes("--tamper")) {
console.log(`tampered copy (one nibble of the raw transaction): ${t2.verified ? "NOT REFUSED, this verifier is broken" : "REFUSED"}${t2.reason ? " :: " + t2.reason : ""}`);
if (t2.verified) process.exit(1);
}
var r = receipt.segment ? verifyPaymentReceipt(receipt, deps) : verifyReceipt(receipt, deps);
var payment = !!(r.verified && r.payment);
console.log(`${payment ? "PAYMENT RECEIPT" : "TRANSACTION INCLUSION RECEIPT"} 0x${receipt.tx_hash} on ${receipt.chain_id} (Devnet 3, no value)`);
console.log(payment ? "What this file authenticates: that the signed transaction is included in a finalised block and executed with status success, its receipt sitting in the shard receipts trie whose root the proven segment statement commits to. Trusted: the voter table from the node; the SP1 proof behind the statement is verified by nodes, not here." : "What this file authenticates: that the signed transaction is included in a block that is finalised. What it does not: the execution outcome (status, gas), which is carried as the node reported it." + (receipt.payment_unavailable ? " Why no payment receipt: " + receipt.payment_unavailable : ""));
var r = verifyReceipt(receipt, deps);
console.log(`TRANSACTION INCLUSION RECEIPT 0x${receipt.tx_hash} on ${receipt.chain_id} (devnet, no value)`);
console.log("What this file authenticates: that the signed transaction is included in a block that is finalised. What it does not: the execution outcome (status, gas), which is carried as the node reported it. A payment receipt, which authenticates the transfer outcome, is a different file.");
print(r);
if (!r.verified) {
console.log(`REFUSED: ${r.reason}`);
process.exit(1);
}
var t = r.tx;
if (payment) console.log(`PAYMENT VERIFIED in ${r.ms} ms: ${formatIgn(t.value)} IGN (${t.value} wei of the native coin) to ${t.to || "contract creation"}, executed with status success (${r.outcome.logs.length} log(s)) at chain block ${receipt.execution.chain_block}, in block ${r.block.slice(0, 16)} at DAA ${r.block_daa}, finalised under checkpoint ${r.checkpoint}; ${r.certificate}.`);
else console.log(`INCLUSION VERIFIED in ${r.ms} ms: a signed transaction of ${formatIgn(t.value)} IGN to ${t.to || "contract creation"} (${t.value} wei) is included in block ${r.block.slice(0, 16)} at DAA ${r.block_daa} (${new Date(Number(r.block_time)).toISOString()}), finalised under checkpoint ${r.checkpoint}; ${r.headers} headers checked; ${r.certificate}.`);
console.log("Reported by the node, not authenticated by this file: from " + (receipt.tx_as_reported && receipt.tx_as_reported.from) + (payment ? "" : receipt.execution ? `, executed with status ${receipt.execution.status === "0x1" ? "success" : "failed"}` : "") + ". The voter table with weights came from the node (spec 10.1). In the four words: " + (payment ? "included, executed, proven and finalised are authenticated under the stated trust." : "included and finalised are authenticated, executed is reported, proven is not claimed."));
console.log(`INCLUSION VERIFIED in ${r.ms} ms: a signed transaction of ${formatIgn(t.value)} IGN to ${t.to || "contract creation"} (${t.value} wei) is included in block ${r.block.slice(0, 16)} at DAA ${r.block_daa} (${new Date(Number(r.block_time)).toISOString()}), finalised under checkpoint ${r.checkpoint}; ${r.headers} headers checked; ${r.certificate}.`);
console.log("Reported by the node, not authenticated by this file: from " + (receipt.tx_as_reported && receipt.tx_as_reported.from) + (receipt.execution ? `, executed with status ${receipt.execution.status === "0x1" ? "success" : "failed"}` : "") + ". The voter table with weights came from the node (spec 10.1). In the four words: included and finalised are authenticated, executed is reported, proven is not claimed.");

View file

@ -283,8 +283,8 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="platform-body" id="panel-windows" role="tabpanel" aria-labelledby="tab-windows" data-platform-panel="windows">
<div class="download-platform"><span class="osmark" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span><div><h3>Ember for Windows</h3><p>the installer, from the signed manifest</p></div></div>
<p class="download-note">Run the installer, press Start. NVIDIA and AMD cards both mine. Setting an NVIDIA power cap asks for administrator rights once.</p>
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m-5-5 5 5 5-5M5 16v4h14v-4"/></svg>Download for Windows <span data-dl-meta="miner-windows" style="font-weight:400;opacity:.85">v0.3.26 · 63.8 MB</span></a>
<div class="download-detail"><span>from dl.igneum.network</span><span>sha256 <span data-dl-sha="miner-windows">8e674bd5896b0d61b74c6e6783085804dcae6d614859592506d84e2c93943b48</span></span></div>
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m-5-5 5 5 5-5M5 16v4h14v-4"/></svg>Download for Windows <span data-dl-meta="miner-windows" style="font-weight:400;opacity:.85">v2.0.0 · 63.8 MB</span></a>
<div class="download-detail"><span>from dl.igneum.network</span><span>sha256 <span data-dl-sha="miner-windows">793a631dc2084e6d6f778f13602d674a0c134af746b6355c25d3998c2be18b79</span></span></div>
</div>
<div class="platform-body" id="panel-mac" role="tabpanel" aria-labelledby="tab-mac" data-platform-panel="mac" hidden>
<div class="download-platform"><span class="osmark" data-os="mac" title="macOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M16.4 12.6c0-2.5 2-3.6 2.1-3.7-1.2-1.7-3-1.9-3.6-2-1.5-.2-3 .9-3.8.9-.8 0-2-.9-3.3-.8-1.7 0-3.2 1-4.1 2.5-1.8 3-.5 7.6 1.3 10.1.9 1.2 1.9 2.6 3.2 2.5 1.3 0 1.8-.8 3.3-.8 1.6 0 2 .8 3.3.8 1.4 0 2.3-1.2 3.1-2.5 1-1.4 1.4-2.8 1.4-2.9 0 0-2.7-1-2.9-4.1zM13.9 5.3c.7-.8 1.2-2 1-3.2-1 0-2.2.7-2.9 1.5-.6.7-1.2 1.9-1 3 1.1.1 2.2-.5 2.9-1.3z"/></svg></span><div><h3>Ember for macOS</h3><p>a disk image, Apple silicon, Metal</p></div></div>
@ -296,10 +296,10 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="platform-body" id="panel-hive" role="tabpanel" aria-labelledby="tab-hive" data-platform-panel="hive" hidden>
<div class="download-platform"><span class="osmark" data-os="hive" title="HiveOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"><path d="M12 2.6 20.2 7.3v9.4L12 21.4 3.8 16.7V7.3z"/><path d="M12 7.4 16 9.7v4.6L12 16.6 8 14.3V9.7z"/><path d="M12 7.4V2.6M16 9.7l4.2-2.4M16 14.3l4.2 2.4M12 16.6v4.8M8 14.3l-4.2 2.4M8 9.7 3.8 7.3"/></svg></span><div><h3>Ember for Linux and HiveOS</h3><p>a tarball for rigs and Hive flight sheets</p></div></div>
<p class="download-note">For the rig people. One tarball, the miner and the node inside, the same signed manifest as the desktop apps.</p>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn primary"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m-5-5 5 5 5-5M5 16v4h14v-4"/></svg>Download the tarball <span data-dl-meta="miner-hive" style="font-weight:400;opacity:.85">v0.3.26 · 27.7 MB</span></a>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn primary"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m-5-5 5 5 5-5M5 16v4h14v-4"/></svg>Download the tarball <span data-dl-meta="miner-hive" style="font-weight:400;opacity:.85">v2.0.0 · 53.3 MB</span></a>
<p class="fair" id="versions">Current build: Windows <span data-rm="versions.miner-windows.version">0.3.26</span>, macOS <span data-rm="versions.miner-mac.version">2.0.0</span>, HiveOS <span data-rm="versions.miner-hive.version">0.3.26</span>, the wallet <span data-rm="versions.wallet-mac.version">0.1.6</span>, <span data-rm="read_at_short">read 8 October 2026, 17:2x UK</span>. The machine-readable list, with every file’s SHA-256, is <a href="/release.json">/release.json</a>.</p>
<div class="hive-sheet" id="hive"><b>HiveOS Flight Sheet.</b> Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-0.3.26.tar.gz</code>. Miner name <code>igneum</code>, wallet and worker <code>0x&lt;your 40-hex payout address&gt;.%WORKER_NAME%</code>. Hive itself is untested on our side: tell us what breaks.</div>
<p class="sha">sha256 <span data-dl-sha="miner-hive">e3e4482c2b423c62b62e3de91f4eb06627723dd4a84770aba6e81a69111746c5</span></p>
<div class="hive-sheet" id="hive"><b>HiveOS Flight Sheet.</b> Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-2.0.0.tar.gz</code>. Miner name <code>igneum</code>, wallet and worker <code>0x&lt;your 40-hex payout address&gt;.%WORKER_NAME%</code>. Hive itself is untested on our side: tell us what breaks.</div>
<p class="sha">sha256 <span data-dl-sha="miner-hive">5c1369fc5559e8c85534da08cb6eafff9f688336f8993b44e0512fe86d6284d1</span></p>
</div>
</div>
<div>
@ -459,7 +459,7 @@ pre b{color:var(--molten-text);font-weight:500}
</div>
</div>
<a class="dl-bar" href="#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v0.3.26 · 63.8 MB</span></a>
<a class="dl-bar" href="#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
<!-- footer:start -->
<footer class="site-footer">

View file

@ -260,10 +260,10 @@
<section class="card" aria-labelledby="deployed">
<h2 id="deployed">On Sepolia</h2>
<div class="kv" data-oracle-kv>
<div class="k">Oracle</div><div class="mono" data-oracle-address>0xbb3450049926da3572e6b67cb94df312fe349e34 <small>IgneumStateOracle for the 2.0 devnet (igneum-devnet-4, statements with chain id 4465), deployed 8 October 2026 on the shared verifier (tx 0x5eb08f3a…a5a9, block 11871485). The earlier devnet's oracles stay as deployed with their records: 0x3ad71d46…3ab6 (chain ids 4463 and 4464, on the shared verifier) and 0xefe9879d…a1b2 (the stand-in verifier at first).</small></div>
<div class="k">Oracle</div><div class="mono" data-oracle-address>0x06c12c0c44c952ae10dcbbe3d5450a13168baccb <small>IgneumStateOracle for the Igneum 2.0 devnet (igneum-devnet-4: statements with chain id 4465, coinbase amounts 16 bytes wide at 18 decimals), deployed 8 October 2026 on the devnet-4 verifier (block 11871931). Earlier oracles stay as deployed with their records: 0xbb345004…9e34 (devnet-4 chain id, the 8-byte width), 0x3ad71d46…3ab6 (Devnet 3 on its verifier), 0xefe9879d…a1b2 (the stand-in verifier at first).</small></div>
<div class="k">Verifier</div><div class="mono" data-verifier-address>0x874D8Be5385474414aeb69EE4AB8374DA34b8c1F <small>the shared IgneumCertificateVerifier for igneum-devnet-4 (the DEX lane's, a real BLS12-381 check on chain through the EIP-2537 precompiles), set on this oracle by setVerifier on 8 October 2026 (tx 0x7ccffe23…3df1); its voter table installs at the first lock (the chain's first finality certificate, when the weight window fills at DAA 7,200), so no devnet-4 certificate is recorded before that: "table installs at the first lock". The earlier devnet's verifier 0xAf74f3F5…D744 holds that devnet's table at checkpoint 2127.</small></div>
<div class="k">Chain</div><div>Sepolia, chain id 11155111; the Igneum 2.0 devnet (igneum-devnet-4), no value</div>
<div class="k">Proven roots</div><div class="mono">Certificate 2232 (0xf056c26e…, 29 voters, signed weight 4,988 of 7,164) recorded on the shared verifier with a real BLS check, tx 0x1794b785…1e8a, 792,677 gas. Devnet chain block 28439, post_root 0x6e6d2fc8… stored on this oracle with a 6-header path, tx 0xcdb24dbc…ee5fc, 1,624,984 gas; provenBalance read 721.451608 IGN for 0xcaed79d8…c087 on Sepolia, equal to the devnet node's eth_getProof.</div>
<div class="k">Proven roots</div><div class="mono">On the 2.0 devnet: certificate 249 (0x181c5dfd…, 38 voters, signed weight 4,968 of 7,151) verified by the devnet-4 verifier against the table it installed at the chain's first lock (checkpoint 241); chain block 3815's post_root stored on this oracle with a 3-header path, tx 0x490deea5…d869, 1,545,112 gas; provenBalance read 5,731.050719 IGN for 0x53fe9802…144b on Sepolia, equal to the devnet node's eth_getProof. On Devnet 3 (its own verifier and oracles): certificate 2232 recorded with a real BLS check (tx 0x1794b785…, 792,677 gas), block 28439's root stored (tx 0x3629525e…, 1,624,984 gas), 721.451608 IGN read for 0xcaed79d8…c087.</div>
</div>
</div>
<p class="note">How to read a balance from another contract: <code>IIgneumStateOracle(oracle).provenBalance(number, account, accountProof)</code>, where <code>number</code> is a devnet chain block whose state root the oracle holds and <code>accountProof</code> is the <code>eth_getProof</code> account proof at that block. A storage slot: <code>provenStorage(number, account, slot, accountProof, storageProof)</code>. Both revert on any mismatch.</p>

View file

@ -99,7 +99,13 @@ export function verifyCheckpoint(data, deps) {
const top = headers[headers.length - 1];
if (top.hash !== data.hash) return done(fail('the last header is not the certified checkpoint block', { headers_checked: checked }));
if (data.previous && headers[0].hash !== data.previous.hash) return done(fail('the first header is not the previous locked checkpoint', { headers_checked: checked }));
if (BigInt(top.blue_score) < 30n * BigInt(index)) return done(fail(`checkpoint ${index} needs blue score at least ${30 * index}, header has ${top.blue_score}`, { headers_checked: checked }));
// C1, the placement check: checkpoint i is the selected-chain block at blue score 30 i under the launch rule, or at
// DAA score 30 (i - 1) under the DAA-seconds rule from genesis (finality.rs daa_target with the anchor at genesis and
// I0 = 1; the Igneum 2.0 devnet runs that rule from DAA 0, so its checkpoints sit at DAA >= 30 (i - 1) while their blue
// score falls short of 30 i). Either placement satisfies the check; the signatures and the weight rule are the security.
const needBlue = 30n * BigInt(index), needDaa = 30n * (BigInt(index) - 1n);
const byBlue = BigInt(top.blue_score) >= needBlue, byDaa = BigInt(top.daa_score) >= needDaa;
if (!byBlue && !byDaa) return done(fail(`checkpoint ${index} needs blue score at least ${needBlue} or DAA score at least ${needDaa}, header has blue ${top.blue_score} and DAA ${top.daa_score}`, { headers_checked: checked }));
// 3: the voter list
if (voters.length !== Number(cert.voter_count)) return done(fail(`certificate names ${cert.voter_count} voters, ${voters.length} given`, { headers_checked: checked }));

View file

@ -0,0 +1,16 @@
{
"run_id": "ra-20261008T1744-evm",
"manifest_sha": "4cdcc488",
"cut_tip": "igneumd 2.0.0 on the 2.0 devnet (igneum-devnet-4, chain id 4465), the read RPC rpc.devnet.igneum.network",
"evidence_dir": "tools/reference-apps/compat/results.json (on master; 22 rows, each tagged register_case; rendered at /compatibility)",
"boxes": [
"mac-reference-apps-lane (network client only; no build)"
],
"cells": [
{
"cell": "harness:reference-apps-compat",
"status": "RUNNING",
"evidence": "tools/reference-apps/compat/results.json"
}
]
}

View file

@ -0,0 +1,21 @@
{
"run_id": "ra-20261008T1746-ver",
"manifest_sha": "4cdcc488",
"cut_tip": "igneumd 2.0.0 on the 2.0 devnet (igneum-devnet-4, chain id 4465); Devnet 3 fixtures for the payment receipt; Sepolia oracle 0xbb345004 on the devnet-4 verifier",
"evidence_dir": "tools/reference-apps/ver/evidence (on master; summary.json plus one file per case)",
"boxes": [
"mac-reference-apps-lane (network client only; no build)"
],
"cells": [
{
"cell": "harness:reference-apps-ver",
"status": "RUNNING",
"evidence": "tools/reference-apps/ver/evidence/summary.json"
},
{
"cell": "harness:reference-apps-ver-trust-anchor",
"status": "FAIL",
"evidence": "tools/reference-apps/ver/evidence/VER-01.json"
}
]
}

View file

@ -1,466 +1,508 @@
{
"title": "Igneum 2.0 test harness map",
"registry": "docs/plans/igneum-2.0-test-registry.json",
"rule": "a case maps to a cell only where the cell's tests visibly answer it; coverage names what the cell proves and what remains; a mapped cell's green writes RUNNING, PASS only when coverage is full and the evidence file exists; an automated case with no cell reads NOT RUN with its reason, never PASS by inference",
"cells": {
"suite:pow": {
"command": "tools/build-remote.sh --priority gate -- test --release (from igneum-pow/)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"POW-02",
"POW-07",
"POW-08"
],
"coverage": {
"POW-02": "partial: program derivation, ds55 geometry, the v6 fold, the packs and the spec read-back tests; the independent re-implementation and the index-fold census are the hash lane's harnesses",
"POW-08": "partial: the freeze list and the generator version pin; the public-claim scrub is the site gate's",
"POW-07": "the mixed FP32 branch is excluded and unreachable: no class flag reaches an FP op in igneum-pow on master (the mixedfp lane's branch is not on master); evidence the grep of the emitters on master, recorded by the hash lane"
}
"title": "Igneum 2.0 test harness map",
"registry": "docs/plans/igneum-2.0-test-registry.json",
"rule": "a case maps to a cell only where the cell's tests visibly answer it; coverage names what the cell proves and what remains; a mapped cell's green writes RUNNING, PASS only when coverage is full and the evidence file exists; an automated case with no cell reads NOT RUN with its reason, never PASS by inference",
"cells": {
"suite:pow": {
"command": "tools/build-remote.sh --priority gate -- test --release (from igneum-pow/)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"POW-02",
"POW-07",
"POW-08"
],
"coverage": {
"POW-02": "partial: program derivation, ds55 geometry, the v6 fold, the packs and the spec read-back tests; the independent re-implementation and the index-fold census are the hash lane's harnesses",
"POW-08": "partial: the freeze list and the generator version pin; the public-claim scrub is the site gate's",
"POW-07": "the mixed FP32 branch is excluded and unreachable: no class flag reaches an FP op in igneum-pow on master (the mixedfp lane's branch is not on master); evidence the grep of the emitters on master, recorded by the hash lane"
}
},
"suite:app": {
"command": "tools/build-remote.sh --priority gate -- test --release (from app/igneum-app/)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"UX-02",
"UX-03",
"UX-07",
"VER-08"
],
"coverage": {
"UX-02": "partial: the engine state machine's pause, stop and knob tests; the operator study is UX-01's",
"UX-03": "partial: the card and earnings rendering tests; the net-earnings model against real bills is COM/ECO evidence",
"UX-07": "partial: the refused-update and manifest tests; the update-return lane's install classes are its own rows",
"VER-08": "partial: the app's own state-word tests; the wallet and light client rows are VER-01 to VER-03"
}
},
"suite:core": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-consensus-core (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"FIN-01",
"INC-01",
"ROT-06"
],
"coverage": {
"FIN-01": "partial: the finality field and checkpoint tests on the object; ordering under load is the consensus suite and the sim",
"INC-01": "partial: emission, fee and payout arithmetic tests; the reconciliation over a live chain is the economics lane's",
"ROT-06": "partial: the dataset activation and digest tests; a live activation is the fast-time harness"
}
},
"suite:consensus": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-consensus (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"FIN-01",
"FIN-03",
"FIN-04",
"FIN-05",
"FIN-07",
"ROT-05",
"ZKP-01"
],
"coverage": {
"FIN-01": "partial: the finality processes' agreement tests",
"FIN-03": "partial: rule v4's anchored table and authority expiry tests (bee41b5e)",
"FIN-04": "partial: the frozen table without its time expiry (rule v4)",
"FIN-05": "partial: key succession and another scheme's vote refused",
"FIN-07": "partial: majority-continuity recovery (rule v4)",
"ROT-05": "partial: the finality-stopped pause tests",
"ZKP-01": "partial: a proof-less or wrong-statement block refused by consensus"
}
},
"suite:exec": {
"command": "tools/build-remote.sh --priority gate -- test --release -p igneum-exec (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"ZKP-01",
"ZKP-03",
"OPS-04",
"EVM-02"
],
"coverage": {
"ZKP-01": "partial: a real proof verifies, a wrong statement and garbage are refused (nativeverify)",
"ZKP-03": "partial: a snapshot under another digest refused, the epoch streams bound to the digest",
"OPS-04": "partial: snapshot install, replay and genesis recapture after a crash",
"EVM-02": "partial: the replay tests on the day stream; the signature and chain-id binding vectors are an EVM harness still to map"
}
},
"suite:miner": {
"command": "tools/build-remote.sh --priority gate -- test --release -p igneum-miner (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"UX-06",
"UX-04",
"POW-01"
],
"coverage": {
"UX-06": "partial: the miner's own template selection tests",
"UX-04": "partial: payout label and share accounting tests; custody is the pool lane's row",
"POW-01": "partial: the pack re-check seam against the pack's 96 vectors (recheck_pack); the million-vector campaign is harness:p01-vectors"
}
},
"suite:p2p-flows": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-p2p-flows (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"OPS-06",
"ZKP-06"
],
"coverage": {
"OPS-06": "partial: malformed relay messages refused; traffic containment under load is an OPS harness",
"ZKP-06": "partial: proof relay coverage tests; aggregation completeness is the proving lane's test set"
}
},
"gate:pre-push": {
"command": "tools/ci/pre-push.sh (every landing; the heavy checks ship to a box)",
"box_class": "gate",
"fixtures": [
"F1"
],
"cases": [
"GOV-05",
"GOV-06",
"UX-08"
],
"coverage": {
"GOV-05": "partial: every gate check carries a self-test that fires on a known failure and passes a known success (77 checks); the suites' own oracles are their mutation rows",
"GOV-06": "partial: the launch-gates, forbidden-strings and scope checks on the served site",
"UX-08": "partial: the site gate on every served page, plus docs/build/tuning.md (the published tuning and build-settings half, the hash lane's); the open builds and the fee conditions are the shipper's and the site lane's"
}
},
"check:freeze": {
"command": "consensus/pow/build.rs rule 19 at every kaspa-pow build; packaging/pow-freeze.txt and packaging/d1-freeze.txt",
"box_class": "build",
"fixtures": [
"F0"
],
"cases": [
"GOV-01"
],
"coverage": {
"GOV-01": "partial: the linked igneum-pow tree's fingerprint must match a listed freeze or the build fails, the binary prints which; the manifest (igneum_getManifest) names the object digest; the signed F0 manifest is the node lane's row tonight"
}
},
"harness:fast-time-60x": {
"command": "the v5 fast-time harness on the devnet object at 60x (infra/fast-time/override-60x.json; the node lane's run shape)",
"box_class": "harness (lease pool, never build-1)",
"fixtures": [
"F0",
"F3"
],
"cases": [
"ROT-01",
"ROT-02"
],
"coverage": {
"ROT-01": "partial: hourly boundaries crossed at 60x with every node agreeing",
"ROT-02": "partial: the weekly and family boundary crossings at 60x"
}
},
"harness:finality-sim": {
"command": "igneum/harness-sim, the finality lane's scenarios (sim/results_v2.md, the Rule v4 section: N1, N1b, N2, N2b, N3, N4, N6 and the real-node known-failed line)",
"box_class": "harness",
"fixtures": [
"F0",
"F4"
],
"cases": [
"FIN-08"
],
"coverage": {
"FIN-08": "partial: the combined boundary and fault scenarios in the simulator with adversarial schedules; model checking is the formal review"
}
},
"harness:p01-vectors": {
"command": "tools/ci/p01-vectors.py --worker <the kit's worker> --pack <pack dir> --reference /srv/artefacts/packs/p01-vectors/<pack>.txt --count 1000000 --out <evidence.json>: the worker driven with pool.rs's job lines at an all-pass target, every found hash diffed against the CPU reference list (igneum-pow hash-bound --count 1000000, prehash 00..01, the genesis seeds), exit 1 on any disagreement or unanswered nonce",
"box_class": "pods (one backend each)",
"fixtures": [
"F0",
"F2"
],
"cases": [
"POW-01"
],
"coverage": {
"POW-01": "the million-vector campaign per backend per pack, bit-for-bit; PASS only when every supported backend reads a million vectors with zero disagreement; the malformed-input half is harness:parser-malformed"
}
},
"harness:parser-malformed": {
"command": "cargo test --release -p igneum-exec --lib -- malformed --nocapture; cargo test --release -p igneum-miner --bins -- malformed --nocapture (node fork branch parser-malformed f0204947, taken into release-2.0.0-node at the node lane's next cut): ten thousand seeded mutations per parser through DayStream::from_bytes plus check, rpc::dispatch over nineteen igneum_ methods, and pool::job_seeds; the summary line per parser is the evidence",
"box_class": "suite",
"fixtures": [
"F5"
],
"cases": [
"POW-06"
],
"coverage": {
"POW-06": "partial: three parsers of external bytes (the state stream, the igneum_ RPC params, the pool job line), ten thousand seeded malformed cases each, zero panics, every case under 500 ms (the slowest 152 microseconds); 'accepted' counts mutations that left a valid input, not a parser fault; the verifier work bound (the other half of the accept text) is the proving lane's measurement"
}
},
"bench:pc1-packs": {
"command": "tools/ca3-v4-amend/pc1-ca4-packs.ps1 on PC 1 (RTX 5090, the signed-jobs channel, --cards-off, the Power Helper lock at 1,300 MHz, nvidia-smi at 1 Hz, 250 x 2^24 per row, the kit's CUDA worker --bench)",
"box_class": "PC 1 bench",
"fixtures": [
"F0",
"F1"
],
"cases": [
"GPU-02",
"GPU-03",
"GPU-05",
"POW-08"
],
"coverage": {
"GPU-02": "partial: the paired stock and locked rows on the same board, host and workload (the rate held, 2.37 against 3.26 microjoules per hash on the class v5 pack); the historical 34 to 41 percent claim's full configuration set is owed",
"GPU-03": "partial: hl-v6-all against hl-v6-foldrw on the 5090, the window's cost per unit of work, registers and blocks per SM, no spill; the mandatory-SKU set is owed",
"GPU-05": "partial: v3-1g, v3-ds29, v3-ds30, ds55, ds4g-ms complete with their fingerprints, energy per step at stock and at the knee on the 5090 and the 7600; the 8.5 and 11.5 GiB candidates are owed",
"POW-08": "partial: rw-w4, rw-w32, rw-w64 and the 1p5x long-program packs as regression controls for the excluded levers"
}
},
"bench:pc1-amd": {
"command": "tools/ca3-v4-amend/pc1-amd-cardin-bench.ps1 on PC 1 (RX 7600, OpenCL, gfx1102, 30 dispatches of 2^24 per size, rate only)",
"box_class": "PC 1 bench",
"fixtures": [
"F0",
"F1"
],
"cases": [
"GPU-01",
"GPU-05"
],
"coverage": {
"GPU-01": "partial: the 8 GB AMD cell, fingerprints and rates at 1, 2, 4 and 5.5 GiB; one cell of P02's twelve",
"GPU-05": "partial: the 8 GB tier's fit rows"
}
},
"bench:fleet-pods": {
"command": "the fleet lane's one-shot RunPod cards (5090, 4090, H100, 3090) with the same worker --bench and nvidia-smi sampling, the lock through nvidia-smi -lgc",
"box_class": "rented pods",
"fixtures": [
"F0",
"F1"
],
"cases": [
"GPU-01",
"GPU-03",
"POW-08"
],
"coverage": {
"GPU-01": "partial: the NVIDIA cells of P02 that RunPod carries",
"GPU-03": "partial: the 4090 cell",
"POW-08": "partial: W = 16 on four cards"
}
},
"census:class-v6": {
"command": "the census lane's harness on class-v6-census-fold: the acceptance rule with (c''') on every candidate, the attempts census, the per-site index-bit read, attack-f8 at 2^22 on the live state",
"box_class": "harness (the lease pool)",
"fixtures": [
"F0",
"F3"
],
"cases": [
"POW-02"
],
"coverage": {
"POW-02": "partial: the fold's index statistics and the grammar bounds on 256 seeds plus the F8 set; the malformed programs are owed to harness:parser-malformed"
}
},
"crosscheck:review-harness": {
"command": "python3 run_all.py in docs/analysis/review-2026-10-08/harness.zip (the reviewer's C/Python transcription of the V2 to V4 paths; numpy and cc; about 1 GB) on a box, its all_results.json the evidence; the tree's side is igneum-pow's own pins of the same constants (src/verify.rs, src/bind.rs, proto-cuda/packs/igneum-genesis/vectors.json) under suite:pow",
"box_class": "suite (nice 10)",
"fixtures": [
"F0",
"F3"
],
"cases": [
"POW-01"
],
"coverage": {
"POW-01": "partial: independent execution agrees with the tree on the V2/V3 genesis program id and op mix, the two closed-form hashes, the three census ids and the eight header-bound memory-hard vectors; the v5 object's and the v6 freeze's vectors are outside the transcription's model (its README) and read NOT RUN for this cell; every backend is harness:p01-vectors"
}
},
"model:eco05": {
"command": "python3 sim/economy/coexist/eco05.py 0.5 31.65e6 and python3 sim/economy/coexist/eco05.py 0.055 31.65e6 on a build box (python3, no packages; the frozen register docs/analysis/class-v6/eco-05-scenarios.md; the cube to sim/economy/coexist/out/)",
"box_class": "build box (CPU, python3)",
"fixtures": [
"F0",
"F7"
],
"cases": [
"ECO-05"
],
"coverage": {
"ECO-05": "full on the frozen register's grid and the eight adversarial rows at the team's reconciled specialist rows; the independent reviewer's own adversarial rows (ECO-08) remain"
}
},
"model:coexist-fixtures": {
"command": "python3 sim/economy/coexist/fixtures.py on a build box (exit 0 = the second implementation of the per-class cost formula agrees with the hand-worked values and the model's own function within 0.5 percent)",
"box_class": "build box (CPU, python3)",
"fixtures": [
"F7"
],
"cases": [
"ECO-01",
"ECO-08"
],
"coverage": {
"ECO-01": "partial: the hand-worked fixtures and the second implementation; the independent reconciliation of inputs and units remains",
"ECO-08": "partial: the package runs from the served files (README, inputs with sources and labels, fixtures); the independent report, the rerun and the perturbations remain"
}
},
"harness:finality-sim-fin02": {
"command": "igneum/harness-sim, the split honest populations and boundary splits (the 40/40/20 fixture, the pause valid, zero conflicting final certificates within the bound)",
"box_class": "harness",
"fixtures": [
"F0",
"F4"
],
"cases": [
"FIN-02"
],
"coverage": {
"FIN-02": "the simulator half of the accept text; the real-node run on the fault network F4 with independent operators is node:finality-realnode"
}
},
"node:finality-realnode": {
"command": "the node lane's v3.mjs lines on release-2.0.0-node (real nodes, the rule v4 harness; rows in sim/results_v2.md)",
"box_class": "harness (the lease pool)",
"fixtures": [
"F0",
"F4"
],
"cases": [
"FIN-02",
"FIN-07"
],
"coverage": {
"FIN-02": "partial: the real-node half; independent operators and the review remain",
"FIN-07": "partial: deterministic recovery after reconnection and crash on real nodes (the HEAL reruns)"
}
},
"harness:proving-enforcement": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-consensus -p igneum-exec --lib enforced_ (from the node fork; the succession_* and p22_stage_* tests with it); tools/fast-time-remote.sh --node-bin <the fork's target/release> -- node infra/fast-time/proving-enforcement.mjs --floor 240 ... (the crossing) and --succession <H> --window <W> --prior-ids ... --next-ids ... --real-proof ... --next-proof ... (the key-succession crossing)",
"box_class": "suite (gate priority) and a fast-time run (normal class, 3 local nodes)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"ZKP-01",
"ZKP-02",
"ZKP-03",
"ZKP-04",
"ZKP-05",
"ZKP-08",
"EVM-08"
],
"coverage": {
"ZKP-01": "partial: the seven refusals as named tests (no proof never inserted; a wrong proof and another program id invalidate the block; the honest record paid once) and the fast-time crossing with a modified producer; the genuine-proof positive control through ordinary network paths is the testnet's live read, not run here",
"ZKP-02": "partial: the pinned-id refusal on a real proof, the daemon's start refusal, key succession (the epochs, the accepted ids, a verdict counting only where its pair is accepted, the seven refusals on both sides of the height, the start refusal under a succession, the real-proof refusal of a pair the epoch does not accept) and the fast-time crossing of a scheduled succession with a real proof under each pair; the downgrade through an old node path is not run",
"ZKP-03": "partial: the chain binding (a record signed for another network), the replay, a wrong block, a wrong shard, a stale record outside the window; the fork and replayed-sync steps are not run",
"ZKP-04": "partial: an altered payout address (after signing and re-signed), a statement over altered rewards or payouts vetoed natively, the inputs commitment of P22 stage 1 (shard 0 and the aggregator carry the commitment the node recomputes) and the derivation commitment of stage 2 (the payouts derived in the guest from the carried records); the rewards' proved derivation is P22 stage 3, PENDING",
"ZKP-05": "partial: a duplicate of a paid record pays nothing and the honest record pays once; the race, reorder and crash-recover steps are not run",
"ZKP-08": "partial: the body rule and the payment rule read one floor, a producer with its body rule off still pays nothing on honest nodes (the fast-time crossing); the replacement-prover and authority steps are not run; the proof side of the derivation is P22 stage 3, PENDING",
"EVM-08": "partial: the controlled verifier upgrade as a key succession (both pairs embedded, the window, the start refusal) and its fast-time crossing; the mixed-client crossing on the live network and the failed-distribution step are not run"
}
},
"harness:reference-apps-compat": {
"command": "node tools/reference-apps/compat/run.mjs (from the main repo against the devnet read RPC with the funded tester key; rows land in tools/reference-apps/compat/results.json and render to /compatibility)",
"box_class": "harness (network run on the 2.0 devnet, read RPC + one funded test account)",
"fixtures": [],
"cases": [
"EVM-02",
"EVM-03",
"EVM-04",
"EVM-05",
"EVM-06"
],
"coverage": {
"EVM-02": "partial: a transaction signed for the previous devnet's chain id is refused and a signed transaction sent twice is refused on the live devnet; the F0 replacement rule and the mempool-independent evidence are the exec suite's",
"EVM-03": "partial: fee quotes, eth_estimateGas against gasUsed for a transfer and a call, the documented 21,000 local-limit difference and the pgas receipt fields on the live devnet; determinism across nodes and proofs and the P09 bounds are the proving-limit harness (not run)",
"EVM-04": "partial: block.number, timestamp, chainid, basefee, blockhash(number-1), CREATE2 address, block.coinbase and block.prevrandao read against the chain and the documented differences; conformance vectors for F0 are EVM-01's",
"EVM-05": "partial: ERC-20 deploy, transfer, approve/transferFrom, a probe contract, a persisting counter, a revert with reason and an out-of-gas call on the live devnet; application-level invariants of the DEX integration set are the DEX lane's",
"EVM-06": "partial: receipt fields and logsBloom recompute, the block's receipts trie root rebuilds, eth_getLogs by address/topic/range, eth_getBlockByNumber with full transactions and eth_getBlockReceipts; wallet UI states (included, executed, proven, finalised) and the indexer's canonical-record check are the wallet and explorer lanes' rows"
}
},
"harness:reference-apps-ver": {
"command": "node tools/reference-apps/ver/run.mjs (from the main repo; the reference apps' verification rows against the devnet read RPC and the light service; evidence per case in tools/reference-apps/ver/evidence/<case>.json; the browser negative set is /lc/test and the Node negative set is tools/reference-apps/light-service/verify.test.mjs)",
"box_class": "harness (network run on the 2.0 devnet plus Sepolia reads)",
"fixtures": [],
"cases": [
"VER-03",
"VER-04",
"VER-05",
"VER-06",
"VER-08"
],
"coverage": {
"VER-03": "partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction",
"VER-04": "partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's",
"VER-05": "partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise",
"VER-06": "partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run",
"VER-08": "partial: every served state on /light, /receipt and /oracle uses one of included, executed, proven, finalised from the shared definition block, the lock line serves the live DAA before the first certificate, and the trust assumptions are listed on each page; the wallet and explorer surfaces are their lanes' rows"
}
},
"harness:reference-apps-ver-trust-anchor": {
"command": "node tools/reference-apps/ver/run.mjs (the same run; VER-01 and VER-02 read from tools/reference-apps/ver/evidence/VER-01.json and VER-02.json and are FAIL by design until the voter table is committed in a header or shipped as a trust anchor with authority-change tracking)",
"box_class": "harness (network run on the 2.0 devnet)",
"fixtures": [],
"cases": [
"VER-01",
"VER-02"
],
"coverage": {
"VER-01": "fails today, disclosed: the light client authenticates the certificate's signatures and the header path but the voter table is a node-supplied trust anchor named on /light; a forged table signature and a wrong-network certificate are refused",
"VER-02": "fails today, disclosed: the execution statement's proof is verified by the nodes and the browser verifies the aggregator signature and the post root under it; an in-browser verifier for the permitted proof and a table commitment close it"
}
}
},
"suite:app": {
"command": "tools/build-remote.sh --priority gate -- test --release (from app/igneum-app/)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"UX-02",
"UX-03",
"UX-07",
"VER-08"
],
"coverage": {
"UX-02": "partial: the engine state machine's pause, stop and knob tests; the operator study is UX-01's",
"UX-03": "partial: the card and earnings rendering tests; the net-earnings model against real bills is COM/ECO evidence",
"UX-07": "partial: the refused-update and manifest tests; the update-return lane's install classes are its own rows",
"VER-08": "partial: the app's own state-word tests; the wallet and light client rows are VER-01 to VER-03"
}
},
"suite:core": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-consensus-core (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"FIN-01",
"INC-01",
"ROT-06"
],
"coverage": {
"FIN-01": "partial: the finality field and checkpoint tests on the object; ordering under load is the consensus suite and the sim",
"INC-01": "partial: emission, fee and payout arithmetic tests; the reconciliation over a live chain is the economics lane's",
"ROT-06": "partial: the dataset activation and digest tests; a live activation is the fast-time harness"
}
},
"suite:consensus": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-consensus (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"FIN-01",
"FIN-03",
"FIN-04",
"FIN-05",
"FIN-07",
"ROT-05",
"ZKP-01"
],
"coverage": {
"FIN-01": "partial: the finality processes' agreement tests",
"FIN-03": "partial: rule v4's anchored table and authority expiry tests (bee41b5e)",
"FIN-04": "partial: the frozen table without its time expiry (rule v4)",
"FIN-05": "partial: key succession and another scheme's vote refused",
"FIN-07": "partial: majority-continuity recovery (rule v4)",
"ROT-05": "partial: the finality-stopped pause tests",
"ZKP-01": "partial: a proof-less or wrong-statement block refused by consensus"
}
},
"suite:exec": {
"command": "tools/build-remote.sh --priority gate -- test --release -p igneum-exec (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"ZKP-01",
"ZKP-03",
"OPS-04",
"EVM-02"
],
"coverage": {
"ZKP-01": "partial: a real proof verifies, a wrong statement and garbage are refused (nativeverify)",
"ZKP-03": "partial: a snapshot under another digest refused, the epoch streams bound to the digest",
"OPS-04": "partial: snapshot install, replay and genesis recapture after a crash",
"EVM-02": "partial: the replay tests on the day stream; the signature and chain-id binding vectors are an EVM harness still to map"
}
},
"suite:miner": {
"command": "tools/build-remote.sh --priority gate -- test --release -p igneum-miner (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"UX-06",
"UX-04",
"POW-01"
],
"coverage": {
"UX-06": "partial: the miner's own template selection tests",
"UX-04": "partial: payout label and share accounting tests; custody is the pool lane's row",
"POW-01": "partial: the pack re-check seam against the pack's 96 vectors (recheck_pack); the million-vector campaign is harness:p01-vectors"
}
},
"suite:p2p-flows": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-p2p-flows (from the node fork)",
"box_class": "suite (gate priority)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"OPS-06",
"ZKP-06"
],
"coverage": {
"OPS-06": "partial: malformed relay messages refused; traffic containment under load is an OPS harness",
"ZKP-06": "partial: proof relay coverage tests; aggregation completeness is the proving lane's test set"
}
},
"gate:pre-push": {
"command": "tools/ci/pre-push.sh (every landing; the heavy checks ship to a box)",
"box_class": "gate",
"fixtures": [
"F1"
],
"cases": [
"GOV-05",
"GOV-06",
"UX-08"
],
"coverage": {
"GOV-05": "partial: every gate check carries a self-test that fires on a known failure and passes a known success (77 checks); the suites' own oracles are their mutation rows",
"GOV-06": "partial: the launch-gates, forbidden-strings and scope checks on the served site",
"UX-08": "partial: the site gate on every served page, plus docs/build/tuning.md (the published tuning and build-settings half, the hash lane's); the open builds and the fee conditions are the shipper's and the site lane's"
}
},
"check:freeze": {
"command": "consensus/pow/build.rs rule 19 at every kaspa-pow build; packaging/pow-freeze.txt and packaging/d1-freeze.txt",
"box_class": "build",
"fixtures": [
"F0"
],
"cases": [
"GOV-01"
],
"coverage": {
"GOV-01": "partial: the linked igneum-pow tree's fingerprint must match a listed freeze or the build fails, the binary prints which; the manifest (igneum_getManifest) names the object digest; the signed F0 manifest is the node lane's row tonight"
}
},
"harness:fast-time-60x": {
"command": "the v5 fast-time harness on the devnet object at 60x (infra/fast-time/override-60x.json; the node lane's run shape)",
"box_class": "harness (lease pool, never build-1)",
"fixtures": [
"F0",
"F3"
],
"cases": [
"ROT-01",
"ROT-02"
],
"coverage": {
"ROT-01": "partial: hourly boundaries crossed at 60x with every node agreeing",
"ROT-02": "partial: the weekly and family boundary crossings at 60x"
}
},
"harness:finality-sim": {
"command": "igneum/harness-sim, the finality lane's scenarios (sim/results_v2.md, the Rule v4 section: N1, N1b, N2, N2b, N3, N4, N6 and the real-node known-failed line)",
"box_class": "harness",
"fixtures": [
"F0",
"F4"
],
"cases": [
"FIN-08"
],
"coverage": {
"FIN-08": "partial: the combined boundary and fault scenarios in the simulator with adversarial schedules; model checking is the formal review"
}
},
"harness:p01-vectors": {
"command": "tools/ci/p01-vectors.py --worker <the kit's worker> --pack <pack dir> --reference /srv/artefacts/packs/p01-vectors/<pack>.txt --count 1000000 --out <evidence.json>: the worker driven with pool.rs's job lines at an all-pass target, every found hash diffed against the CPU reference list (igneum-pow hash-bound --count 1000000, prehash 00..01, the genesis seeds), exit 1 on any disagreement or unanswered nonce",
"box_class": "pods (one backend each)",
"fixtures": [
"F0",
"F2"
],
"cases": [
"POW-01"
],
"coverage": {
"POW-01": "the million-vector campaign per backend per pack, bit-for-bit; PASS only when every supported backend reads a million vectors with zero disagreement; the malformed-input half is harness:parser-malformed"
}
},
"harness:parser-malformed": {
"command": "cargo test --release -p igneum-exec --lib -- malformed --nocapture; cargo test --release -p igneum-miner --bins -- malformed --nocapture (node fork branch parser-malformed f0204947, taken into release-2.0.0-node at the node lane's next cut): ten thousand seeded mutations per parser through DayStream::from_bytes plus check, rpc::dispatch over nineteen igneum_ methods, and pool::job_seeds; the summary line per parser is the evidence",
"box_class": "suite",
"fixtures": [
"F5"
],
"cases": [
"POW-06"
],
"coverage": {
"POW-06": "partial: three parsers of external bytes (the state stream, the igneum_ RPC params, the pool job line), ten thousand seeded malformed cases each, zero panics, every case under 500 ms (the slowest 152 microseconds); 'accepted' counts mutations that left a valid input, not a parser fault; the verifier work bound (the other half of the accept text) is the proving lane's measurement"
}
},
"bench:pc1-packs": {
"command": "tools/ca3-v4-amend/pc1-ca4-packs.ps1 on PC 1 (RTX 5090, the signed-jobs channel, --cards-off, the Power Helper lock at 1,300 MHz, nvidia-smi at 1 Hz, 250 x 2^24 per row, the kit's CUDA worker --bench)",
"box_class": "PC 1 bench",
"fixtures": [
"F0",
"F1"
],
"cases": [
"GPU-02",
"GPU-03",
"GPU-05",
"POW-08"
],
"coverage": {
"GPU-02": "partial: the paired stock and locked rows on the same board, host and workload (the rate held, 2.37 against 3.26 microjoules per hash on the class v5 pack); the historical 34 to 41 percent claim's full configuration set is owed",
"GPU-03": "partial: hl-v6-all against hl-v6-foldrw on the 5090, the window's cost per unit of work, registers and blocks per SM, no spill; the mandatory-SKU set is owed",
"GPU-05": "partial: v3-1g, v3-ds29, v3-ds30, ds55, ds4g-ms complete with their fingerprints, energy per step at stock and at the knee on the 5090 and the 7600; the 8.5 and 11.5 GiB candidates are owed",
"POW-08": "partial: rw-w4, rw-w32, rw-w64 and the 1p5x long-program packs as regression controls for the excluded levers"
}
},
"bench:pc1-amd": {
"command": "tools/ca3-v4-amend/pc1-amd-cardin-bench.ps1 on PC 1 (RX 7600, OpenCL, gfx1102, 30 dispatches of 2^24 per size, rate only)",
"box_class": "PC 1 bench",
"fixtures": [
"F0",
"F1"
],
"cases": [
"GPU-01",
"GPU-05"
],
"coverage": {
"GPU-01": "partial: the 8 GB AMD cell, fingerprints and rates at 1, 2, 4 and 5.5 GiB; one cell of P02's twelve",
"GPU-05": "partial: the 8 GB tier's fit rows"
}
},
"bench:fleet-pods": {
"command": "the fleet lane's one-shot RunPod cards (5090, 4090, H100, 3090) with the same worker --bench and nvidia-smi sampling, the lock through nvidia-smi -lgc",
"box_class": "rented pods",
"fixtures": [
"F0",
"F1"
],
"cases": [
"GPU-01",
"GPU-03",
"POW-08"
],
"coverage": {
"GPU-01": "partial: the NVIDIA cells of P02 that RunPod carries",
"GPU-03": "partial: the 4090 cell",
"POW-08": "partial: W = 16 on four cards"
}
},
"census:class-v6": {
"command": "the census lane's harness on class-v6-census-fold: the acceptance rule with (c''') on every candidate, the attempts census, the per-site index-bit read, attack-f8 at 2^22 on the live state",
"box_class": "harness (the lease pool)",
"fixtures": [
"F0",
"F3"
],
"cases": [
"POW-02"
],
"coverage": {
"POW-02": "partial: the fold's index statistics and the grammar bounds on 256 seeds plus the F8 set; the malformed programs are owed to harness:parser-malformed"
}
},
"crosscheck:review-harness": {
"command": "python3 run_all.py in docs/analysis/review-2026-10-08/harness.zip (the reviewer's C/Python transcription of the V2 to V4 paths; numpy and cc; about 1 GB) on a box, its all_results.json the evidence; the tree's side is igneum-pow's own pins of the same constants (src/verify.rs, src/bind.rs, proto-cuda/packs/igneum-genesis/vectors.json) under suite:pow",
"box_class": "suite (nice 10)",
"fixtures": [
"F0",
"F3"
],
"cases": [
"POW-01"
],
"coverage": {
"POW-01": "partial: independent execution agrees with the tree on the V2/V3 genesis program id and op mix, the two closed-form hashes, the three census ids and the eight header-bound memory-hard vectors; the v5 object's and the v6 freeze's vectors are outside the transcription's model (its README) and read NOT RUN for this cell; every backend is harness:p01-vectors"
}
},
"model:eco05": {
"command": "python3 sim/economy/coexist/eco05.py 0.5 31.65e6 and python3 sim/economy/coexist/eco05.py 0.055 31.65e6 on a build box (python3, no packages; the frozen register docs/analysis/class-v6/eco-05-scenarios.md; the cube to sim/economy/coexist/out/)",
"box_class": "build box (CPU, python3)",
"fixtures": [
"F0",
"F7"
],
"cases": [
"ECO-05"
],
"coverage": {
"ECO-05": "full on the frozen register's grid and the eight adversarial rows at the team's reconciled specialist rows; the independent reviewer's own adversarial rows (ECO-08) remain"
}
},
"model:coexist-fixtures": {
"command": "python3 sim/economy/coexist/fixtures.py on a build box (exit 0 = the second implementation of the per-class cost formula agrees with the hand-worked values and the model's own function within 0.5 percent)",
"box_class": "build box (CPU, python3)",
"fixtures": [
"F7"
],
"cases": [
"ECO-01",
"ECO-08"
],
"coverage": {
"ECO-01": "partial: the hand-worked fixtures and the second implementation; the independent reconciliation of inputs and units remains",
"ECO-08": "partial: the package runs from the served files (README, inputs with sources and labels, fixtures); the independent report, the rerun and the perturbations remain"
}
},
"harness:finality-sim-fin02": {
"command": "igneum/harness-sim, the split honest populations and boundary splits (the 40/40/20 fixture, the pause valid, zero conflicting final certificates within the bound)",
"box_class": "harness",
"fixtures": [
"F0",
"F4"
],
"cases": [
"FIN-02"
],
"coverage": {
"FIN-02": "the simulator half of the accept text; the real-node run on the fault network F4 with independent operators is node:finality-realnode"
}
},
"node:finality-realnode": {
"command": "the node lane's v3.mjs lines on release-2.0.0-node (real nodes, the rule v4 harness; rows in sim/results_v2.md)",
"box_class": "harness (the lease pool)",
"fixtures": [
"F0",
"F4"
],
"cases": [
"FIN-02",
"FIN-07"
],
"coverage": {
"FIN-02": "partial: the real-node half; independent operators and the review remain",
"FIN-07": "partial: deterministic recovery after reconnection and crash on real nodes (the HEAL reruns)"
}
},
"harness:proving-enforcement": {
"command": "tools/build-remote.sh --priority gate -- test --release -p kaspa-consensus -p igneum-exec --lib enforced_ (from the node fork; the succession_* and p22_stage_* tests with it); tools/fast-time-remote.sh --node-bin <the fork's target/release> -- node infra/fast-time/proving-enforcement.mjs --floor 240 ... (the crossing) and --succession <H> --window <W> --prior-ids ... --next-ids ... --real-proof ... --next-proof ... (the key-succession crossing)",
"box_class": "suite (gate priority) and a fast-time run (normal class, 3 local nodes)",
"fixtures": [
"F0",
"F1"
],
"cases": [
"ZKP-01",
"ZKP-02",
"ZKP-03",
"ZKP-04",
"ZKP-05",
"ZKP-08",
"EVM-08"
],
"coverage": {
"ZKP-01": "partial: the seven refusals as named tests (no proof never inserted; a wrong proof and another program id invalidate the block; the honest record paid once) and the fast-time crossing with a modified producer; the genuine-proof positive control through ordinary network paths is the testnet's live read, not run here",
"ZKP-02": "partial: the pinned-id refusal on a real proof, the daemon's start refusal, key succession (the epochs, the accepted ids, a verdict counting only where its pair is accepted, the seven refusals on both sides of the height, the start refusal under a succession, the real-proof refusal of a pair the epoch does not accept) and the fast-time crossing of a scheduled succession with a real proof under each pair; the downgrade through an old node path is not run",
"ZKP-03": "partial: the chain binding (a record signed for another network), the replay, a wrong block, a wrong shard, a stale record outside the window; the fork and replayed-sync steps are not run",
"ZKP-04": "partial: an altered payout address (after signing and re-signed), a statement over altered rewards or payouts vetoed natively, the inputs commitment of P22 stage 1 (shard 0 and the aggregator carry the commitment the node recomputes) and the derivation commitment of stage 2 (the payouts derived in the guest from the carried records); the rewards' proved derivation is P22 stage 3, PENDING",
"ZKP-05": "partial: a duplicate of a paid record pays nothing and the honest record pays once; the race, reorder and crash-recover steps are not run",
"ZKP-08": "partial: the body rule and the payment rule read one floor, a producer with its body rule off still pays nothing on honest nodes (the fast-time crossing); the replacement-prover and authority steps are not run; the proof side of the derivation is P22 stage 3, PENDING",
"EVM-08": "partial: the controlled verifier upgrade as a key succession (both pairs embedded, the window, the start refusal) and its fast-time crossing; the mixed-client crossing on the live network and the failed-distribution step are not run"
}
"not_run": {
"GOV-02": "the approval is recorded in the registry's approval field; the automated half (thresholds frozen before any run_status) is the gate rule landing by 21:00",
"GOV-04": "the evidence vault F9 (raw and negative evidence preserved) is the gate rule landing by 21:00: a PASS must carry its evidence file",
"GOV-08": "the stale-evidence rule (evidence older than the manifest sha reads NOT RUN) is the gate rule landing by 21:00",
"GPU-04": "the memory-clock ladder has no harness tonight: PC 1 mines nothing under the Devnet 3 off order",
"GPU-06": "accepted work under ordinary connectivity needs the fault network F4",
"GPU-07": "the sustained thermal and power soak has no harness tonight: PC 1 mines nothing under the Devnet 3 off order",
"POW-05": "amortised cheap winning attempts are the attack lanes' grind and era harnesses (tools/attack/f7-era, f9-grind), not in the release matrix; their rows come from those lanes",
"ADV-04": "selective participation needs the economic model F7 and a live chain window",
"ADV-06": "process-advantage separation is the adversary lanes' chip study",
"ADV-07": "lifetime rows are the adversary lanes' models",
"ROT-03": "miner-voted bring-forward needs a vote harness on the fault network F4",
"ROT-04": "seed-selection resistance is the census harness (the class v6 invention lane), not yet in the matrix",
"ROT-07": "layer ablation is a research harness, not a release suite",
"ROT-08": "the no-new-rules counterfactual is a research harness",
"ECO-02": "F7",
"ECO-03": "F7",
"ECO-04": "F7",
"ECO-06": "F7",
"ECO-07": "F7",
"EVM-01": "no EVM conformance-vector harness is mapped tonight; the exec suite does not run the reference test vectors",
"EVM-07": "execution DoS workloads need the workload catalogue F3",
"CAP-01": "the consumer-shard reproduction is the fleet lane's pods",
"CAP-02": "proving on the mining configuration is the fleet lane's",
"CAP-03": "the request-to-payment path is the proving fleet's measurement",
"CAP-04": "sustained load is the proving fleet's",
"CAP-05": "overload and recovery is the proving fleet's",
"CAP-06": "assignment windows are the proving fleet's",
"CAP-07": "reassignment is the proving fleet's",
"CAP-08": "customer-verifiable output is the reference apps plus the fleet",
"INC-02": "revenue separation is the economics lane's model",
"INC-03": "the modified-client task choice needs an adversarial client harness",
"INC-04": "demand spikes are the economic model",
"INC-05": "reservation abuse needs the capacity harness",
"INC-06": "difficulty and timestamp manipulation needs the fault network F4",
"INC-07": "self-dealing fees need the economic model and a live window",
"INC-08": "failure concentration is a live-window measurement",
"FIN-06": "old-key compromise analysis is the finality lane's long-range scenario, not yet in the sim",
"VER-07": "wallet key protection is the wallet lane's security row",
"OPS-01": "the no-founder exercise is an operations run, not a suite",
"OPS-02": "bootstrap diversity needs the fault network F4",
"OPS-03": "update distribution separation is the update-return lane's row",
"OPS-05": "proving workload isolation is the fleet's pod row",
"OPS-07": "runbook detection is an operations run",
"OPS-08": "repeat independent operation is a cross-release observation",
"UX-05": "voting keys through pooling is the pool lane's row",
"COM-01": "commercial evidence, no automated harness",
"COM-02": "commercial evidence",
"COM-03": "commercial evidence",
"COM-04": "commercial evidence",
"COM-05": "commercial evidence",
"COM-06": "commercial evidence",
"COM-07": "commercial evidence",
"LEAD-02": "leadership comparison, an observation window",
"LEAD-03": "observation window",
"LEAD-04": "observation window",
"LEAD-05": "observation window",
"LEAD-06": "observation window",
"LEAD-08": "observation window"
}
},
"not_run": {
"GOV-02": "the approval is recorded in the registry's approval field; the automated half (thresholds frozen before any run_status) is the gate rule landing by 21:00",
"GOV-04": "the evidence vault F9 (raw and negative evidence preserved) is the gate rule landing by 21:00: a PASS must carry its evidence file",
"GOV-08": "the stale-evidence rule (evidence older than the manifest sha reads NOT RUN) is the gate rule landing by 21:00",
"GPU-04": "the memory-clock ladder has no harness tonight: PC 1 mines nothing under the Devnet 3 off order",
"GPU-06": "accepted work under ordinary connectivity needs the fault network F4",
"GPU-07": "the sustained thermal and power soak has no harness tonight: PC 1 mines nothing under the Devnet 3 off order",
"POW-05": "amortised cheap winning attempts are the attack lanes' grind and era harnesses (tools/attack/f7-era, f9-grind), not in the release matrix; their rows come from those lanes",
"ADV-04": "selective participation needs the economic model F7 and a live chain window",
"ADV-06": "process-advantage separation is the adversary lanes' chip study",
"ADV-07": "lifetime rows are the adversary lanes' models",
"ROT-03": "miner-voted bring-forward needs a vote harness on the fault network F4",
"ROT-04": "seed-selection resistance is the census harness (the class v6 invention lane), not yet in the matrix",
"ROT-07": "layer ablation is a research harness, not a release suite",
"ROT-08": "the no-new-rules counterfactual is a research harness",
"ECO-02": "F7",
"ECO-03": "F7",
"ECO-04": "F7",
"ECO-06": "F7",
"ECO-07": "F7",
"EVM-01": "no EVM conformance-vector harness is mapped tonight; the exec suite does not run the reference test vectors",
"EVM-03": "the two-dimensional fee tests need the proving-limit harness",
"EVM-04": "block context and randomness vectors are an EVM harness still to map",
"EVM-05": "contract journeys need the DEX lane's integration set on Devnet 4",
"EVM-06": "wallet, RPC and indexer validation is the explorer and wallet lanes' rows",
"EVM-07": "execution DoS workloads need the workload catalogue F3",
"CAP-01": "the consumer-shard reproduction is the fleet lane's pods",
"CAP-02": "proving on the mining configuration is the fleet lane's",
"CAP-03": "the request-to-payment path is the proving fleet's measurement",
"CAP-04": "sustained load is the proving fleet's",
"CAP-05": "overload and recovery is the proving fleet's",
"CAP-06": "assignment windows are the proving fleet's",
"CAP-07": "reassignment is the proving fleet's",
"CAP-08": "customer-verifiable output is the reference apps plus the fleet",
"INC-02": "revenue separation is the economics lane's model",
"INC-03": "the modified-client task choice needs an adversarial client harness",
"INC-04": "demand spikes are the economic model",
"INC-05": "reservation abuse needs the capacity harness",
"INC-06": "difficulty and timestamp manipulation needs the fault network F4",
"INC-07": "self-dealing fees need the economic model and a live window",
"INC-08": "failure concentration is a live-window measurement",
"FIN-06": "old-key compromise analysis is the finality lane's long-range scenario, not yet in the sim",
"VER-01": "light-client bootstrap is the reference apps lane (/light); no automated harness mapped tonight",
"VER-02": "the evolving-authority statements are the reference apps lane's",
"VER-03": "payment proof (/receipt) is the reference apps lane's",
"VER-05": "state reconstruction without founder storage is the OPS no-founder exercise",
"VER-06": "withholding and corruption detection needs the fault network F4",
"VER-07": "wallet key protection is the wallet lane's security row",
"OPS-01": "the no-founder exercise is an operations run, not a suite",
"OPS-02": "bootstrap diversity needs the fault network F4",
"OPS-03": "update distribution separation is the update-return lane's row",
"OPS-05": "proving workload isolation is the fleet's pod row",
"OPS-07": "runbook detection is an operations run",
"OPS-08": "repeat independent operation is a cross-release observation",
"UX-05": "voting keys through pooling is the pool lane's row",
"COM-01": "commercial evidence, no automated harness",
"COM-02": "commercial evidence",
"COM-03": "commercial evidence",
"COM-04": "commercial evidence",
"COM-05": "commercial evidence",
"COM-06": "commercial evidence",
"COM-07": "commercial evidence",
"LEAD-02": "leadership comparison, an observation window",
"LEAD-03": "observation window",
"LEAD-04": "observation window",
"LEAD-05": "observation window",
"LEAD-06": "observation window",
"LEAD-08": "observation window"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -29,6 +29,7 @@ contract IgneumStateOracle {
address public owner;
uint64 public immutable evmChainId; // the statement's chain id before the network's class v5 floor (Devnet 3: 4463), 0 to skip the check
uint64 public immutable evmChainIdAfterFloor; // the id after the floor (Devnet 3: 4464); a record names the id in force at its block
uint256 public immutable amountWireLen; // an output value's width in the transaction hashing: 8 bytes at 8 decimals (Devnet 3), 16 at 18 decimals (the 2.0 devnet)
mapping(uint64 => Root) private _roots;
event StateRoot(uint64 indexed number, bytes32 postRoot, bytes32 blockHash, uint64 certIndex, bytes32 carrier);
@ -36,11 +37,12 @@ contract IgneumStateOracle {
uint256 private constant RECORD_LEN = 586;
constructor(address verifier_, uint64 evmChainId_, uint64 evmChainIdAfterFloor_) {
constructor(address verifier_, uint64 evmChainId_, uint64 evmChainIdAfterFloor_, uint256 amountWireLen_) {
verifier = IIgneumCertificateVerifier(verifier_);
owner = msg.sender;
evmChainId = evmChainId_;
evmChainIdAfterFloor = evmChainIdAfterFloor_;
amountWireLen = amountWireLen_ == 0 ? 8 : amountWireLen_;
}
function setVerifier(address v) external {
@ -131,8 +133,8 @@ contract IgneumStateOracle {
// ---- the coinbase transaction and its segment record ---------------------------------------------
// Walks the serialized transaction to the payload. Amounts are 8 bytes on the wire.
function payloadOf(bytes memory t) public pure returns (uint256 off, uint256 len) {
// Walks the serialized transaction to the payload. Amounts are amountWireLen bytes on the wire.
function payloadOf(bytes memory t) public view returns (uint256 off, uint256 len) {
uint16 version = uint16(le64(t, 0) & 0xffff);
uint256 p = 2;
uint256 nIn = le64(t, p);
@ -148,7 +150,7 @@ contract IgneumStateOracle {
uint256 nOut = le64(t, p);
p += 8;
for (uint256 i = 0; i < nOut; i++) {
p += 8 + 2;
p += amountWireLen + 2;
uint256 spkLen = le64(t, p);
p += 8 + spkLen;
if (version >= 1) {
@ -199,7 +201,7 @@ contract IgneumStateOracle {
// Reads record `recordIndex` of the IGNS section: (last block number, block hash, post state root, chain id).
function readRecord(bytes memory t, uint256 recordIndex)
public
pure
view
returns (uint64 number, bytes32 blockHash, bytes32 postRoot, uint64 chainId)
{
(uint256 pOff, uint256 pLen) = payloadOf(t);

View file

@ -31,13 +31,15 @@ const oracleOnly = process.argv.includes('--oracle-only');
const vi = process.argv.indexOf('--verifier'); const verifierArg = vi > 0 ? process.argv[vi + 1] : null;
// --chain-ids A,B: the statement chain ids the oracle accepts (Devnet 3: 4463,4464; the 2.0 devnet igneum-devnet-4: 4465,4465)
const ci = process.argv.indexOf('--chain-ids'); const chainIds = ci > 0 ? process.argv[ci + 1].split(',').map(Number) : [EVM_CHAIN_ID, EVM_CHAIN_ID_AFTER_FLOOR];
// --amount-wire-len N: 8 on Devnet 3 (8 decimals), 16 on the 2.0 devnet (18 decimals)
const ai = process.argv.indexOf('--amount-wire-len'); const amountWireLen = ai > 0 ? Number(process.argv[ai + 1]) : 8;
const previous = existsSync(out) ? deployment() : null;
const stub = oracleOnly && previous ? previous.stub : await deploy('StubCertificateVerifier', []);
const oracle = await deploy('IgneumStateOracle', [verifierArg || stub.address, chainIds[0], chainIds[1] ?? chainIds[0]]);
const oracle = await deploy('IgneumStateOracle', [verifierArg || stub.address, chainIds[0], chainIds[1] ?? chainIds[0], amountWireLen]);
const after = await pub.getBalance({ address: account.address });
const d = {
network: 'sepolia', chainId: 11155111, rpc: 'https://ethereum-sepolia-rpc.publicnode.com', deployer: account.address,
evmChainId: chainIds[0], evmChainIdAfterFloor: chainIds[1] ?? chainIds[0], verifier: verifierArg || 'stub', verifierAddress: verifierArg || stub.address, stub, oracle, deployedAt: new Date().toISOString(), spentWei: (bal - after).toString(),
evmChainId: chainIds[0], evmChainIdAfterFloor: chainIds[1] ?? chainIds[0], verifier: verifierArg || 'stub', verifierAddress: verifierArg || stub.address, amountWireLen, stub, oracle, deployedAt: new Date().toISOString(), spentWei: (bal - after).toString(),
previous: previous ? [...(previous.previous || []), { stub: previous.stub, oracle: previous.oracle, deployedAt: previous.deployedAt, writes: previous.writes || [] }] : [],
};
writeFileSync(out, JSON.stringify(d, null, 1) + '\n');

View file

@ -5,8 +5,9 @@
"deployer": "0xe1D08384ef4c4c1511c8f05F94C914C4DeDc2787",
"evmChainId": 4465,
"evmChainIdAfterFloor": 4465,
"verifier": "0xAf74f3F512081291D663Bb1d6b6d37E99e37D744",
"verifierAddress": "0xAf74f3F512081291D663Bb1d6b6d37E99e37D744",
"verifier": "0x874D8Be5385474414aeb69EE4AB8374DA34b8c1F",
"verifierAddress": "0x874D8Be5385474414aeb69EE4AB8374DA34b8c1F",
"amountWireLen": 16,
"stub": {
"address": "0xa197ef31d5d5613125779179668e2482ac69a6f6",
"tx": "0xa01091b62dfb4a89b25afb57a3d384677a9ad62370748504d2b3f288c0d3ad38",
@ -14,13 +15,13 @@
"gasUsed": 8434842
},
"oracle": {
"address": "0xbb3450049926da3572e6b67cb94df312fe349e34",
"tx": "0x5eb08f3aadfbcec8e6eeccf5349278e1c5eeba27c08d6150aa2fdbd0395ca5a9",
"block": 11871485,
"gasUsed": 20561543
"address": "0x06c12c0c44c952ae10dcbbe3d5450a13168baccb",
"tx": "0xc519742488633bcbce3252d89c9203aea1408ef32686a5332771c1ee4ac41783",
"block": 11871931,
"gasUsed": 20734771
},
"deployedAt": "2026-10-08T16:53:26.556Z",
"spentWei": "20561871984688",
"deployedAt": "2026-10-08T18:23:03.332Z",
"spentWei": "20736491985993",
"previous": [
{
"stub": {
@ -195,24 +196,64 @@
"headers": 6
}
]
},
{
"stub": {
"address": "0xa197ef31d5d5613125779179668e2482ac69a6f6",
"tx": "0xa01091b62dfb4a89b25afb57a3d384677a9ad62370748504d2b3f288c0d3ad38",
"block": 11869583,
"gasUsed": 8434842
},
"oracle": {
"address": "0xbb3450049926da3572e6b67cb94df312fe349e34",
"tx": "0x5eb08f3aadfbcec8e6eeccf5349278e1c5eeba27c08d6150aa2fdbd0395ca5a9",
"block": 11871485,
"gasUsed": 20561543
},
"deployedAt": "2026-10-08T16:53:26.556Z",
"writes": [
{
"at": "2026-10-08T16:58:16.749Z",
"what": "sepolia transfer 0.01 ETH to the DEX lane build-4 key (no value)",
"to": "0x70e692A9f1fa1067a8c2d64fDAf1636b4EAEC7e2",
"tx": "0xc938895c2bf96d3237b48aa01f32be81932c73b47000384e164108a0fd62dde4",
"block": 11871509,
"gasUsed": 204600
},
{
"at": "2026-10-08T17:00:39.551Z",
"what": "setVerifier (igneum-devnet-4 verifier)",
"verifier": "0x874D8Be5385474414aeb69EE4AB8374DA34b8c1F",
"tx": "0x7ccffe23aed7ef4876c37f8f595853362d8989f79e6d47a8c943ec378c163df1",
"block": 11871521,
"gasUsed": 31170
},
{
"at": "2026-10-08T18:21:25.683Z",
"what": "submitCertificate (shared verifier)",
"verifier": "0x874D8Be5385474414aeb69EE4AB8374DA34b8c1F",
"index": "249",
"checkpoint": "0x181c5dfd477671d70b040d38051da6eb6ac4412fb40bdb07fcabff6b9512af85",
"tx": "0x779ff9a374d706a804600af2b2c9c4f95aa064c3de8c73b85567b772c7084776",
"block": 11871923,
"gasUsed": 828823
}
]
}
],
"writes": [
{
"at": "2026-10-08T16:58:16.749Z",
"what": "sepolia transfer 0.01 ETH to the DEX lane build-4 key (no value)",
"to": "0x70e692A9f1fa1067a8c2d64fDAf1636b4EAEC7e2",
"tx": "0xc938895c2bf96d3237b48aa01f32be81932c73b47000384e164108a0fd62dde4",
"block": 11871509,
"gasUsed": 204600
},
{
"at": "2026-10-08T17:00:39.551Z",
"what": "setVerifier (igneum-devnet-4 verifier)",
"verifier": "0x874D8Be5385474414aeb69EE4AB8374DA34b8c1F",
"tx": "0x7ccffe23aed7ef4876c37f8f595853362d8989f79e6d47a8c943ec378c163df1",
"block": 11871521,
"gasUsed": 31170
"at": "2026-10-08T18:23:14.145Z",
"what": "submitStateRoot",
"vector": "devnet-3",
"number": "3815",
"postRoot": "0xaf9c80517d84f917a09099359d498fb09c6000cc85ae7a66df168674367757af",
"certIndex": "249",
"tx": "0x490deea5d1d244504aaa562ad7facad22f44d87d49a004dbd6716f7b2f1dd869",
"block": 11871932,
"gasUsed": 1545112,
"calldataBytes": 23400,
"headers": 3
}
]
}