diff --git a/docs/plans/finality-native-runs-2026-10-09.md b/docs/plans/finality-native-runs-2026-10-09.md index 9e3a78efe..c6a5b32ff 100644 --- a/docs/plans/finality-native-runs-2026-10-09.md +++ b/docs/plans/finality-native-runs-2026-10-09.md @@ -49,6 +49,8 @@ One validator node pinned to one core (taskset), no warm relay cache (fresh data ## 6. The two-node cache-history test (F01, with the proving lane's fix 3f672661) +MEASURED 00:29 to 00:41 UK 9 October (run 6 of six, build-5, 24 leased cores): PASS on the cache-history-node pair c591e63b + harness-unsafe on the 0x51cd8cba pin (the `verifies` counters the harness reads live on that branch, not on e189afb4); the context refusal cheap, the honest record verified once and paid once on both honest nodes at the same chain block, the invalid bytes refused again from the cache; runs 1 to 5 recorded with their setup faults in the rows. + Two nodes, one with a warm verdict cache built on carriers 1..k, one cold, both fed the same blocks in a different order (the cold one sees the later carrier first): identical block-validity verdicts and identical payouts (igneum_getProofRecords and the paid map equal on both), with the known-failed shape first (the pre-fix node's cached context refusal replayed under a later carrier, the 19:49 UK reproduction). On build-7 by 03:00 UK. ## Boxes and clocks diff --git a/docs/plans/igneum-2.0-test-registry.json b/docs/plans/igneum-2.0-test-registry.json index 644d51929..8063be9b0 100644 --- a/docs/plans/igneum-2.0-test-registry.json +++ b/docs/plans/igneum-2.0-test-registry.json @@ -7527,7 +7527,7 @@ "run_status": "PASS", "evidence_path": "sim/finality-attacks-results/native-2026-10-09/s1b2.md", "run_id": "fin-native-20261008T2300Z", - "updated": "2026-10-08T22:53:29.598Z", + "updated": "2026-10-08T23:42:16.021Z", "evidence_record": { "requirement_id": "FIN-02", "decision": "PASS", @@ -7548,7 +7548,7 @@ }, "claim_impact": "", "reviewer": "", - "at": "2026-10-08T22:53:29.598Z" + "at": "2026-10-08T23:42:16.021Z" }, "approvals": { "scope_approved": null, @@ -7577,7 +7577,7 @@ }, "claim_impact": "", "reviewer": "", - "at": "2026-10-08T22:53:29.598Z" + "at": "2026-10-08T23:42:16.021Z" } } }, @@ -7941,7 +7941,7 @@ "run_status": "NOT RUN", "evidence_path": "sim/finality-attacks-results/native-2026-10-09/s1b2.md; build-1:/srv/artefacts/tas/202-d657e490-6b17f951/node-d657e490/box4-consensus.log", "run_id": "fin-native-20261008T2300Z", - "updated": "2026-10-08T22:53:29.598Z", + "updated": "2026-10-08T23:42:16.021Z", "evidence_record": { "requirement_id": "FIN-07", "decision": "PASS", @@ -7962,7 +7962,7 @@ }, "claim_impact": "", "reviewer": "", - "at": "2026-10-08T22:53:29.598Z" + "at": "2026-10-08T23:42:16.021Z" }, "approvals": { "scope_approved": null, @@ -7991,7 +7991,7 @@ }, "claim_impact": "", "reviewer": "", - "at": "2026-10-08T22:53:29.598Z" + "at": "2026-10-08T23:42:16.021Z" }, "suite:consensus": { "requirement_id": "FIN-07", @@ -8046,7 +8046,7 @@ "run_status": "NOT RUN", "evidence_path": "sim/results_v2.md", "run_id": "fin-native-20261008T2300Z", - "updated": "2026-10-08T22:53:29.598Z", + "updated": "2026-10-08T23:42:16.021Z", "evidence_record": { "requirement_id": "FIN-08", "decision": "NOT RUN", @@ -8067,7 +8067,7 @@ }, "claim_impact": "", "reviewer": "", - "at": "2026-10-08T22:53:29.598Z" + "at": "2026-10-08T23:42:16.021Z" }, "in_progress_since": "2026-10-08T19:43:19.697Z", "approvals": { @@ -8097,7 +8097,7 @@ }, "claim_impact": "", "reviewer": "", - "at": "2026-10-08T22:53:29.598Z" + "at": "2026-10-08T23:42:16.021Z" } } } diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.json b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.json new file mode 100644 index 000000000..64e6d6afb --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.json @@ -0,0 +1,141 @@ +{ + "case": "cache-history", + "node": "/srv/builds/_scratch/fin-runs/pair-ch-c591e63b/igneumd", + "proveBin": "/srv/builds/_scratch/fin-runs/prove-bin", + "pair": { + "shard": "0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a", + "aggregator": "0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896" + }, + "startedAt": "2026-10-08T22:15:00.783Z", + "phases": { + "context": { + "block": 421, + "submit": { + "accepted": true, + "block": "0xbfa33afe7885e91d71798f1fb3291fd03bdb5f68ce4ac181e7bdeb59a32cc2ee", + "keyHash": "0x6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df", + "new": true, + "number": "0x1a5", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + }, + "refusals": [] + }, + "honest": { + "block": 94, + "submit": { + "accepted": true, + "block": "0x652fd371048f09f3fdb75c5d0ecf5fcbc9c94a5120a770b47f40bd9054ed426a", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "new": true, + "number": "0x5e", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [ + { + "carrierNumber": "0x22c", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "payout": "0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3", + "shard": 0, + "wei": "0x8cc4f1531c07000" + } + ], + "carried": [ + { + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "carrier": "0x22c", + "rejected": "", + "paidWei": "0x8cc4f1531c07000" + }, + { + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "carrier": "0x22d", + "rejected": "shard already paid", + "paidWei": "0x0" + } + ] + }, + "verifies": { + "cacheAnswers": 2, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + } + }, + "invalid": { + "blocks": [ + 651, + 774 + ], + "submits": [ + { + "accepted": true, + "block": "0xa38592ca5a220418252e6a72944ef1921dfe032eb9fa9c9e71e86a70e1d368ff", + "keyHash": "0x89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf", + "new": true, + "number": "0x28b", + "reason": "accepted", + "shard": 0 + }, + { + "accepted": true, + "block": "0xe83c692754cc769b54672793fca870800879c1333c70605820d109faeff2d929", + "keyHash": "0xaa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a", + "new": true, + "number": "0x306", + "reason": "accepted", + "shard": 0 + } + ], + "verifies": { + "after3a": { + "cacheAnswers": 2, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + }, + "after3b": { + "cacheAnswers": 2, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + } + }, + "refusals": { + "after3a": 0, + "after3b": 0 + }, + "reasons": [] + } + }, + "proof": { + "block": 94, + "statement": "0x86b1ada7bbeff89c5e65e9525159e4604c3ba51b622be8269191ec739fbf06a7", + "native": "0x86b1ada7bbeff89c5e65e9525159e4604c3ba51b622be8269191ec739fbf06a7", + "bytes": 1272961, + "sha256": "0x98662fbe3a3a82fb85b3e32b0a8113134bd438cacba151020365b89a24d66409", + "hostLine": "RESULT compressed shard 0: prove 287.0 s, proof 1272961 bytes, verify 0.063 s, VERIFIED; statement 0x86b1ada7bbeff89c5e65e9525159e4604c3ba51b622be8269191ec739fbf06a7 proof sha256 0x98662fbe3a3a82fb85b3e32b0a8113134bd438cacba151020365b89a24d66409 prover 0xc3c3c3c3c3c3c3c3c3C3C3c3C3C3C3c3C3C3c3c3 at 2026-10-08T22:22:27Z" + }, + "verdict": { + "paidOnce": true, + "sp1Verifies": 0, + "cacheAnswers": 2, + "contextRefused": false, + "contextCheap": false, + "invalidRefusedTwiceNoVerify": false, + "pass": false + }, + "endedAt": "2026-10-08T22:30:29.169Z" +} \ No newline at end of file diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.log new file mode 100644 index 000000000..486e465a2 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.log @@ -0,0 +1,21 @@ +lease: holding 8 pool cores (8,9,10,11,12,13,14,15, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-2 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +22:15:01.835 ch3 H1 up (pid 223412) after 1 s +22:15:02.846 ch3 H2 up (pid 223526) after 1 s +22:15:03.856 ch3 A up (pid 223636) after 1 s +22:15:03.864 ch3 phase 0: mining 90 s +22:16:33.959 ch3 block 94 0x652fd371048f09f3fdb75c5d0ecf5fcbc9c94a5120a770b47f40bd9054ed426a: H1's native statement for shard 0 and 0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3: 0x86b1ada7bbeff89c5e65e9525159e4604c3ba51b622be8269191ec739fbf06a7 +22:16:33.984 ch3 block 94 cut: wrote /tmp/igneum-fast-time-ch3/prove-94/block-94.json (15425 bytes, input commitment 0x45ab763db33f7d4a866b9edd1d4ee0d92ccca09542dc9ca75de7b8af7172d9ee) +22:22:28.623 ch3 host: RESULT compressed shard 0: prove 287.0 s, proof 1272961 bytes, verify 0.063 s, VERIFIED; statement 0x86b1ada7bbeff89c5e65e9525159e4604c3ba51b622be8269191ec739fbf06a7 proof sha256 0x98662fbe3a3a82fb85b +22:22:28.631 ch3 before phase 1: A is on H1's tip (0 s) +22:22:28.703 ch3 phase 1 (real bytes, another block's statement): A's pool accepted (accepted) +22:24:28.810 ch3 phase 1: H1 verifies {"cacheAnswers":0,"calls":0,"contextRefusals":0,"sp1":0}; block 421 paid []; refusals 0 +22:24:28.812 ch3 before phase 2: A is on H1's tip (0 s) +22:24:28.861 ch3 phase 2 (the same bytes, the honest record): A's pool accepted (accepted) +22:26:28.950 ch3 phase 2: H1 verifies {"cacheAnswers":2,"calls":0,"contextRefusals":0,"sp1":0}; block 94 paid [{"carrierNumber":"0x22c","keyHash":"0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594","payout":"0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3","shard":0,"wei":"0x8cc4f1531c07000"}]; carried [{"key":"0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594","carrier":"0x22c","rejected":"","paidWei":"0x8cc4f1531c07000"},{"key":"0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594","carrier":"0x22d","rejected":"shard already paid","paidWei":"0x0"}] +22:26:28.952 ch3 before phase 3: A is on H1's tip (0 s) +22:26:28.968 ch3 phase 3a (invalid bytes): A's pool accepted (accepted) +22:28:29.056 ch3 before phase 3b: A is on H1's tip (0 s) +22:28:29.070 ch3 phase 3b (the same invalid bytes, a later carrier): A's pool accepted (accepted) +22:30:29.168 ch3 phase 3: H1 verifies after 3a {"cacheAnswers":2,"calls":0,"contextRefusals":0,"sp1":0}, after 3b {"cacheAnswers":2,"calls":0,"contextRefusals":0,"sp1":0}; refusals 0 then 0 +22:30:29.169 ch3 RESULT FAIL: paid once=true; SP1 verifies=0 (expect 2: the real proof once, the invalid bytes once); context refusal read=false and cheap (no verifier)=false; cache answers=2 (expect >= 1); invalid refused again without a verify=false; /srv/builds/_scratch/fin-runs/results/s6-cache-history-2.json +lease: released 8 pool cores after 931 s, exit 1 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.out new file mode 100644 index 000000000..3805e7c9d --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-2.out @@ -0,0 +1,4 @@ +#### 22:15:00Z s6-cache-history-2: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b/igneumd (70be29a422cfc20d) verifier /srv/builds/_scratch/fin-runs/prove-bin/igneum-prove-host prove-bin /srv/builds/_scratch/fin-runs/prove-bin +rc=1 +#### 22:30:31Z s6-cache-history-2 done rc=1 +22:30:31Z watcher of s6-cache-history-2 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3-wrongpin.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3-wrongpin.log new file mode 100644 index 000000000..82cb069e4 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3-wrongpin.log @@ -0,0 +1,6 @@ +lease: holding 8 pool cores (8,9,10,11,12,13,14,15, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-3 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +22:33:45.680 ch3 H1 up (pid 232372) after 1 s +22:33:46.690 ch3 H2 up (pid 232550) after 1 s +22:33:47.700 ch3 A up (pid 232642) after 1 s +22:33:47.708 ch3 phase 0: mining 90 s +lease: released 8 pool cores after 35 s, exit 143 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3-wrongpin.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3-wrongpin.out new file mode 100644 index 000000000..084dd7921 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3-wrongpin.out @@ -0,0 +1,3 @@ +#### 22:33:44Z s6-cache-history-3: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd/igneumd (70be29a422cfc20d) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=143 +#### 22:34:19Z s6-cache-history-3 done rc=143 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.json b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.json new file mode 100644 index 000000000..23185cd0d --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.json @@ -0,0 +1,120 @@ +{ + "case": "cache-history", + "node": "/srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd/igneumd", + "proveBin": "/srv/builds/_scratch/fin-runs/prove-bin-51cd", + "pair": { + "shard": "0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a", + "aggregator": "0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896" + }, + "startedAt": "2026-10-08T22:35:42.589Z", + "phases": { + "context": { + "block": 433, + "submit": { + "accepted": true, + "block": "0xb8b79290b9c0397aa9b6a645968c24c6b8871ffbd770ad3c6ecb96636e02c525", + "keyHash": "0x6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df", + "new": true, + "number": "0x1b1", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + }, + "refusals": [] + }, + "honest": { + "block": 97, + "submit": { + "accepted": true, + "block": "0x765a799ab02798a9832ec354726ddec61d76f90c654065d4c58ac7d51b2fa1ac", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "new": true, + "number": "0x61", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + } + }, + "invalid": { + "blocks": [ + 667, + 786 + ], + "submits": [ + { + "accepted": true, + "block": "0xec7499165b125aeac2cec6ec1cb4875576b9bd458b901002ae447ebffe9130b9", + "keyHash": "0x89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf", + "new": true, + "number": "0x29b", + "reason": "accepted", + "shard": 0 + }, + { + "accepted": true, + "block": "0x3e647b62f493c850a37b5f0d0ee4784055a7d9829bb5d40f3e3d279cfcb02eba", + "keyHash": "0xaa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a", + "new": true, + "number": "0x312", + "reason": "accepted", + "shard": 0 + } + ], + "verifies": { + "after3a": { + "cacheAnswers": 0, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + }, + "after3b": { + "cacheAnswers": 0, + "calls": 0, + "contextRefusals": 0, + "sp1": 0 + } + }, + "refusals": { + "after3a": 0, + "after3b": 0 + }, + "reasons": [] + } + }, + "proof": { + "block": 97, + "statement": "0xdfb4de3fc0803a9ee99ac22909c6fab7ddd31a82204ccc4783400862b5b819e9", + "native": "0xdfb4de3fc0803a9ee99ac22909c6fab7ddd31a82204ccc4783400862b5b819e9", + "bytes": 1272961, + "sha256": "0xbd1bad6a2d09d82a89194e7e161b261757647b624d00f315d7964a0ecbc4ecd8", + "hostLine": "RESULT compressed shard 0: prove 286.7 s, proof 1272961 bytes, verify 0.064 s, VERIFIED; statement 0xdfb4de3fc0803a9ee99ac22909c6fab7ddd31a82204ccc4783400862b5b819e9 proof sha256 0xbd1bad6a2d09d82a89194e7e161b261757647b624d00f315d7964a0ecbc4ecd8 prover 0xc3c3c3c3c3c3c3c3c3C3C3c3C3C3C3c3C3C3c3c3 at 2026-10-08T22:43:09Z" + }, + "verdict": { + "paidOnce": false, + "sp1Verifies": 0, + "cacheAnswers": 0, + "contextRefused": false, + "contextCheap": false, + "invalidRefusedTwiceNoVerify": false, + "pass": false + }, + "endedAt": "2026-10-08T22:51:10.660Z" +} \ No newline at end of file diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.log new file mode 100644 index 000000000..e312dd264 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.log @@ -0,0 +1,21 @@ +lease: holding 8 pool cores (8,9,10,11,12,13,14,15, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-3 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +22:35:43.641 ch3 H1 up (pid 235327) after 1 s +22:35:44.651 ch3 H2 up (pid 235420) after 1 s +22:35:45.661 ch3 A up (pid 235545) after 1 s +22:35:45.668 ch3 phase 0: mining 90 s +22:37:15.783 ch3 block 97 0x765a799ab02798a9832ec354726ddec61d76f90c654065d4c58ac7d51b2fa1ac: H1's native statement for shard 0 and 0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3: 0xdfb4de3fc0803a9ee99ac22909c6fab7ddd31a82204ccc4783400862b5b819e9 +22:37:15.808 ch3 block 97 cut: wrote /tmp/igneum-fast-time-ch3/prove-97/block-97.json (15556 bytes, input commitment 0x471620ba7d400f1a9e67dec2b7918fb9b8e3eb20d2d236326fc63d2a155f820a) +22:43:10.302 ch3 host: RESULT compressed shard 0: prove 286.7 s, proof 1272961 bytes, verify 0.064 s, VERIFIED; statement 0xdfb4de3fc0803a9ee99ac22909c6fab7ddd31a82204ccc4783400862b5b819e9 proof sha256 0xbd1bad6a2d09d82a891 +22:43:10.309 ch3 before phase 1: A is on H1's tip (0 s) +22:43:10.367 ch3 phase 1 (real bytes, another block's statement): A's pool accepted (accepted) +22:45:10.413 ch3 phase 1: H1 verifies {"cacheAnswers":0,"calls":0,"contextRefusals":0,"sp1":0}; block 433 paid []; refusals 0 +22:45:10.414 ch3 before phase 2: A is on H1's tip (0 s) +22:45:10.471 ch3 phase 2 (the same bytes, the honest record): A's pool accepted (accepted) +22:47:10.474 ch3 phase 2: H1 verifies {"cacheAnswers":0,"calls":0,"contextRefusals":0,"sp1":0}; block 97 paid []; carried [] +22:47:10.476 ch3 before phase 3: A is on H1's tip (0 s) +22:47:10.485 ch3 phase 3a (invalid bytes): A's pool accepted (accepted) +22:49:10.546 ch3 before phase 3b: A is on H1's tip (0 s) +22:49:10.556 ch3 phase 3b (the same invalid bytes, a later carrier): A's pool accepted (accepted) +22:51:10.660 ch3 phase 3: H1 verifies after 3a {"cacheAnswers":0,"calls":0,"contextRefusals":0,"sp1":0}, after 3b {"cacheAnswers":0,"calls":0,"contextRefusals":0,"sp1":0}; refusals 0 then 0 +22:51:10.660 ch3 RESULT FAIL: paid once=false; SP1 verifies=0 (expect 2: the real proof once, the invalid bytes once); context refusal read=false and cheap (no verifier)=false; cache answers=0 (expect >= 1); invalid refused again without a verify=false; /srv/builds/_scratch/fin-runs/results/s6-cache-history-3.json +lease: released 8 pool cores after 930 s, exit 1 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.out new file mode 100644 index 000000000..c33a675e5 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-3.out @@ -0,0 +1,4 @@ +#### 22:35:42Z s6-cache-history-3: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd/igneumd (6886ff20b7cdd8a6) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=1 +#### 22:51:12Z s6-cache-history-3 done rc=1 +22:51:12Z watcher of s6-cache-history-3 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4-plus-aborted-restart.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4-plus-aborted-restart.out new file mode 100644 index 000000000..fe671cca8 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4-plus-aborted-restart.out @@ -0,0 +1,4 @@ +#### 22:53:21Z s6-cache-history-4: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd (f6e67c31a02747d5) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=1 +#### 23:13:30Z s6-cache-history-4 done rc=1 +23:13:30Z watcher of s6-cache-history-4 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.json b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.json new file mode 100644 index 000000000..9f094ee63 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.json @@ -0,0 +1,126 @@ +{ + "case": "cache-history", + "node": "/srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd", + "proveBin": "/srv/builds/_scratch/fin-runs/prove-bin-51cd", + "pair": { + "shard": "0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a", + "aggregator": "0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896" + }, + "startedAt": "2026-10-08T22:53:22.261Z", + "phases": { + "context": { + "block": 411, + "submit": { + "accepted": true, + "block": "0xda27df5825b40e2084053576df8ea1266e5b1bb31c7ddc01875b55a7d0bed66d", + "keyHash": "0x6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df", + "new": true, + "number": "0x19b", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 1, + "contextRefusals": 1, + "sp1": 0 + }, + "refusals": [ + "a carried proof record's proof does not verify: shard record block 411 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df (proof cf2020ebb8968ca7): shard record block 411 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df: the proof claims program id 0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7, which the carrier's epoch does not accept (accepted: 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a), disconnecting from peer 127.0.0.1:39462." + ] + }, + "honest": { + "block": 89, + "submit": { + "accepted": false, + "block": "0x477e5c0d363d22a01786e90841b7a6d4279a1bf5313e1ad5aefda12a06b11a29", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "new": false, + "number": "0x59", + "reason": "segment 89 is outside the 600-block record window of carrier 725", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 1, + "contextRefusals": 1, + "sp1": 0 + } + }, + "invalid": { + "blocks": [ + 837, + 1018 + ], + "submits": [ + { + "accepted": true, + "block": "0x31988322cfab3010d67ddf9635655e27ca8584f2a42eeedec613780c7f10fecb", + "keyHash": "0x89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf", + "new": true, + "number": "0x345", + "reason": "accepted", + "shard": 0 + }, + { + "accepted": true, + "block": "0x40c7a0b9413b975af9461939b8f6091a45ab6f123f051325fc06cbfee6fd5aac", + "keyHash": "0xaa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a", + "new": true, + "number": "0x3fa", + "reason": "accepted", + "shard": 0 + } + ], + "verifies": { + "after3a": { + "cacheAnswers": 0, + "calls": 2, + "contextRefusals": 1, + "sp1": 1 + }, + "after3b": { + "cacheAnswers": 1, + "calls": 2, + "contextRefusals": 1, + "sp1": 1 + } + }, + "refusals": { + "after3a": 2, + "after3b": 3 + }, + "reasons": [ + "a carried proof record's proof does not verify: shard record block 411 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df (proof cf2020ebb8968ca7): shard record block 411 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df: the proof claims program id 0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7, which the carrier's epoch does not accept (accepted: 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a), disconnecting from peer 127.0.0.1:39462.", + "a carried proof record's proof does not verify: shard record block 837 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf (proof 1fff4af866be0657): shard record block 837 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf: the proof bytes are not a bincode SP1 proof: invalid value: integer `2787443690`, expected variant index 0 <= i < 4, disconnecting from peer 127.0.0.1:56470.", + "a carried proof record's proof does not verify: shard record block 1018 shard 0 by aa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a (proof 1fff4af866be0657): shard record block 837 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf: the proof bytes are not a bincode SP1 proof: invalid value: integer `2787443690`, expected variant index 0 <= i < 4, disconnecting from peer 127.0.0.1:34408." + ] + } + }, + "proof": { + "block": 89, + "statement": "0x9240d2736b2c405d0d792828ead9a8f12226e4d3ef171bf5f6f2607f049e0556", + "native": "0x9240d2736b2c405d0d792828ead9a8f12226e4d3ef171bf5f6f2607f049e0556", + "bytes": 1272961, + "sha256": "0xcf2020ebb8968ca781958aef058fe3e4227a8bd7f48ba950c956b9bd8e542178", + "hostLine": "RESULT compressed shard 0: prove 288.8 s, proof 1272961 bytes, verify 0.062 s, VERIFIED; statement 0x9240d2736b2c405d0d792828ead9a8f12226e4d3ef171bf5f6f2607f049e0556 proof sha256 0xcf2020ebb8968ca781958aef058fe3e4227a8bd7f48ba950c956b9bd8e542178 prover 0xc3c3c3c3c3c3c3c3c3C3C3c3C3C3C3c3C3C3c3c3 at 2026-10-08T23:00:51Z" + }, + "verdict": { + "paidOnce": false, + "sp1Verifies": 1, + "cacheAnswers": 1, + "contextRefused": true, + "contextCheap": true, + "invalidRefusedTwiceNoVerify": true, + "pass": false + }, + "endedAt": "2026-10-08T23:13:28.216Z" +} \ No newline at end of file diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.log new file mode 100644 index 000000000..09c8ce08c --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.log @@ -0,0 +1,6 @@ +lease: holding 24 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-4 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +23:14:46.400 ch3 H1 up (pid 266564) after 1 s +23:14:47.410 ch3 H2 up (pid 266725) after 1 s +23:14:48.422 ch3 A up (pid 266892) after 1 s +23:14:48.430 ch3 phase 0: mining 90 s +lease: released 24 pool cores after 18 s, exit 143 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.out new file mode 100644 index 000000000..fe671cca8 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-4.out @@ -0,0 +1,4 @@ +#### 22:53:21Z s6-cache-history-4: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd (f6e67c31a02747d5) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=1 +#### 23:13:30Z s6-cache-history-4 done rc=1 +23:13:30Z watcher of s6-cache-history-4 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5-portclash.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5-portclash.log new file mode 100644 index 000000000..ce8919160 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5-portclash.log @@ -0,0 +1,3 @@ +lease: holding 24 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-5 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +23:15:10.461 ch3 ERROR: H1 exited 1: Exiting... | 2026-10-08 23:15:09.498+00:00 [INFO ] [igneum-exec] exec sync: no snapshot to resume from (no snapshot file); the follower starts at genesis | 2026-10-08 23:15:09.498+00:00 [INFO ] [igneum-exec] genesis 234e082d653dc69db36d875b256d0f5f4a123b353d6aa069c3c7aa9aa6c46062 executed: chain id 4463, registry at 0x0000000000000000000000000000000000000210, state root 0x7e37a9fb19b154d32daf5bf30a50d339a75029fbc9eec9ea20e95439dba5a311 | 2026-10-08 23:15:09.498+00:00 [INFO ] [igneum-exec] class v5: the state stream after genesis 234e082d653dc69db36d875b256d0f5f4a123b353d6aa069c3c7aa9aa6c46062 (epoch 0's reference) is published | +lease: released 24 pool cores after 3 s, exit 1 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5-portclash.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5-portclash.out new file mode 100644 index 000000000..0e48ab5fb --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5-portclash.out @@ -0,0 +1,5 @@ +#### 23:14:45Z s6-cache-history-4: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd (f6e67c31a02747d5) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +#### 23:15:09Z s6-cache-history-5: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd (f6e67c31a02747d5) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=1 +#### 23:15:12Z s6-cache-history-5 done rc=1 +23:15:12Z watcher of s6-cache-history-5 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.json b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.json new file mode 100644 index 000000000..293721f68 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.json @@ -0,0 +1,127 @@ +{ + "case": "cache-history", + "node": "/srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd", + "proveBin": "/srv/builds/_scratch/fin-runs/prove-bin-51cd", + "pair": { + "shard": "0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a", + "aggregator": "0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896" + }, + "startedAt": "2026-10-08T23:15:42.203Z", + "phases": { + "context": { + "block": 227, + "submit": { + "accepted": true, + "block": "0xffc1c65ee0f934b3e534486ff472b7e9f96088b0024d9ed265af6eaf749b1f65", + "keyHash": "0x6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df", + "new": true, + "number": "0xe3", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 1, + "contextRefusals": 1, + "sp1": 0 + }, + "refusals": [ + "a carried proof record's proof does not verify: shard record block 227 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df (proof ff1dfd50ead6208a): shard record block 227 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df: the proof claims program id 0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7, which the carrier's epoch does not accept (accepted: 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a), disconnecting from peer 127.0.0.1:56014." + ] + }, + "honest": { + "block": 94, + "submit": { + "accepted": true, + "block": "0x02412385d0d85da98ca67c1097d872f1988f7bb6d07b1f9ad97861d6eacd54f3", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "new": true, + "number": "0x5e", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 2, + "contextRefusals": 2, + "sp1": 0 + } + }, + "invalid": { + "blocks": [ + 500, + 627 + ], + "submits": [ + { + "accepted": true, + "block": "0x6c4541e74b1b18a891bfa4f774c7fac795a99ba3a02c3c880b7aea3aad180a72", + "keyHash": "0x89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf", + "new": true, + "number": "0x1f4", + "reason": "accepted", + "shard": 0 + }, + { + "accepted": true, + "block": "0xf1d18fc28f64bbcadda1c19540a98db1bb104189d03ff6892c3e28b3eb020263", + "keyHash": "0xaa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a", + "new": true, + "number": "0x273", + "reason": "accepted", + "shard": 0 + } + ], + "verifies": { + "after3a": { + "cacheAnswers": 0, + "calls": 3, + "contextRefusals": 2, + "sp1": 1 + }, + "after3b": { + "cacheAnswers": 1, + "calls": 3, + "contextRefusals": 2, + "sp1": 1 + } + }, + "refusals": { + "after3a": 3, + "after3b": 4 + }, + "reasons": [ + "a carried proof record's proof does not verify: shard record block 227 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df (proof ff1dfd50ead6208a): shard record block 227 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df: the proof claims program id 0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7, which the carrier's epoch does not accept (accepted: 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a), disconnecting from peer 127.0.0.1:56014.", + "a carried proof record's proof does not verify: shard record block 94 shard 0 by 4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594 (proof ff1dfd50ead6208a): shard record block 94 shard 0 by 4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594: the proof claims program id 0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7, which the carrier's epoch does not accept (accepted: 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a), disconnecting from peer 127.0.0.1:52138.", + "a carried proof record's proof does not verify: shard record block 500 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf (proof 51cfa1e1a5fbacc7): shard record block 500 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf: the proof bytes are not a bincode SP1 proof: invalid value: integer `2676575428`, expected variant index 0 <= i < 4, disconnecting from peer 127.0.0.1:56962.", + "a carried proof record's proof does not verify: shard record block 627 shard 0 by aa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a (proof 51cfa1e1a5fbacc7): shard record block 500 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf: the proof bytes are not a bincode SP1 proof: invalid value: integer `2676575428`, expected variant index 0 <= i < 4, disconnecting from peer 127.0.0.1:58328." + ] + } + }, + "proof": { + "block": 94, + "statement": "0xbcb546d94d3bd80c4c726944a740d8973f46711c51a8b0cb56824add3f8d350c", + "native": "0xbcb546d94d3bd80c4c726944a740d8973f46711c51a8b0cb56824add3f8d350c", + "bytes": 1272961, + "sha256": "0xff1dfd50ead6208ad74e39084204784618392b47dcb7697053dfbe4474423310", + "hostLine": "RESULT compressed shard 0: prove 109.6 s, proof 1272961 bytes, verify 0.061 s, VERIFIED; statement 0xbcb546d94d3bd80c4c726944a740d8973f46711c51a8b0cb56824add3f8d350c proof sha256 0xff1dfd50ead6208ad74e39084204784618392b47dcb7697053dfbe4474423310 prover 0xc3c3c3c3c3c3c3c3c3C3C3c3C3C3C3c3C3C3c3c3 at 2026-10-08T23:19:32Z" + }, + "verdict": { + "paidOnce": false, + "sp1Verifies": 1, + "cacheAnswers": 1, + "contextRefused": true, + "contextCheap": true, + "invalidRefusedTwiceNoVerify": true, + "pass": false + }, + "endedAt": "2026-10-08T23:28:18.576Z" +} \ No newline at end of file diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.log new file mode 100644 index 000000000..d0d3d92df --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.log @@ -0,0 +1,21 @@ +lease: holding 24 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-5 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +23:15:43.259 ch3 H1 up (pid 268118) after 1 s +23:15:44.269 ch3 H2 up (pid 268279) after 1 s +23:15:45.278 ch3 A up (pid 268439) after 1 s +23:15:45.284 ch3 phase 0: mining 90 s +23:17:15.395 ch3 block 94 0x02412385d0d85da98ca67c1097d872f1988f7bb6d07b1f9ad97861d6eacd54f3: H1's native statement for shard 0 and 0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3: 0xbcb546d94d3bd80c4c726944a740d8973f46711c51a8b0cb56824add3f8d350c +23:17:15.426 ch3 block 94 cut: wrote /tmp/igneum-fast-time-ch3/prove-94/block-94.json (15238 bytes, input commitment 0x828f0647d6f6bb1d40fe375784666c6ab70523c97c0914f477ae926ac0d2f84d) +23:19:32.946 ch3 host: RESULT compressed shard 0: prove 109.6 s, proof 1272961 bytes, verify 0.061 s, VERIFIED; statement 0xbcb546d94d3bd80c4c726944a740d8973f46711c51a8b0cb56824add3f8d350c proof sha256 0xff1dfd50ead6208ad74 +23:19:37.972 ch3 before phase 1: A is on H1's tip (5 s) +23:19:38.044 ch3 phase 1 (real bytes, another block's statement): A's pool accepted (accepted) +23:21:38.152 ch3 phase 1: H1 verifies {"cacheAnswers":0,"calls":1,"contextRefusals":1,"sp1":0}; block 227 paid []; refusals 1 +23:21:48.175 ch3 before phase 2: A is on H1's tip (10 s) +23:21:48.246 ch3 phase 2 (the same bytes, the honest record): A's pool accepted (accepted) +23:23:48.350 ch3 phase 2: H1 verifies {"cacheAnswers":0,"calls":2,"contextRefusals":2,"sp1":0}; block 94 paid []; carried [] +23:24:18.406 ch3 before phase 3: A is on H1's tip (30 s) +23:24:18.420 ch3 phase 3a (invalid bytes): A's pool accepted (accepted) +23:26:18.509 ch3 before phase 3b: A is on H1's tip (0 s) +23:26:18.527 ch3 phase 3b (the same invalid bytes, a later carrier): A's pool accepted (accepted) +23:28:18.576 ch3 phase 3: H1 verifies after 3a {"cacheAnswers":0,"calls":3,"contextRefusals":2,"sp1":1}, after 3b {"cacheAnswers":1,"calls":3,"contextRefusals":2,"sp1":1}; refusals 3 then 4 +23:28:18.576 ch3 RESULT FAIL: paid once=false; SP1 verifies=1 (expect 2: the real proof once, the invalid bytes once); context refusal read=true and cheap (no verifier)=true; cache answers=1 (expect >= 1); invalid refused again without a verify=true; /srv/builds/_scratch/fin-runs/results/s6-cache-history-5.json +lease: released 24 pool cores after 758 s, exit 1 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.out new file mode 100644 index 000000000..5847b3fc9 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-5.out @@ -0,0 +1,4 @@ +#### 23:15:41Z s6-cache-history-5: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd (f6e67c31a02747d5) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=1 +#### 23:28:20Z s6-cache-history-5 done rc=1 +23:28:20Z watcher of s6-cache-history-5 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.json b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.json new file mode 100644 index 000000000..e1b96ca52 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.json @@ -0,0 +1,147 @@ +{ + "case": "cache-history", + "node": "/srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd", + "proveBin": "/srv/builds/_scratch/fin-runs/prove-bin-51cd", + "pair": { + "shard": "0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7", + "aggregator": "0x05b395ec238f67406084f8a449d400f64c87dc62151daebf66695864727ded8a" + }, + "startedAt": "2026-10-08T23:29:06.628Z", + "phases": { + "context": { + "block": 232, + "submit": { + "accepted": true, + "block": "0xc62175ddddc8328b2710dd2bc79e21fa578481c82fd96743ba7db17e3f0574ef", + "keyHash": "0x6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df", + "new": true, + "number": "0xe8", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "cacheAnswers": 0, + "calls": 1, + "contextRefusals": 1, + "sp1": 0 + }, + "refusals": [ + "a carried proof record's proof does not verify: shard record block 232 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df (proof 9bd301ce9f169f4f): shard record block 232 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df: the proof's public values hash to 0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b, the record's statement is 0xdac8c41cdf5ad2856e415b9cb1b82f668f51a1c2691d32f81669e368695afa47, disconnecting from peer 127.0.0.1:55832." + ] + }, + "honest": { + "block": 92, + "submit": { + "accepted": true, + "block": "0x4aa7d2287b80faaa19e64b3114decfd2693150eacf8404bcb8f1310dd241d34a", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "new": true, + "number": "0x5c", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [ + { + "carrierNumber": "0x176", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "payout": "0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3", + "shard": 0, + "wei": "0x8cc4b14bd509000" + } + ], + "carried": [ + { + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "carrier": "0x176", + "rejected": "", + "paidWei": "0x8cc4b14bd509000" + }, + { + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "carrier": "0x177", + "rejected": "shard already paid", + "paidWei": "0x0" + } + ] + }, + "verifies": { + "cacheAnswers": 1, + "calls": 2, + "contextRefusals": 1, + "sp1": 1 + } + }, + "invalid": { + "blocks": [ + 481, + 598 + ], + "submits": [ + { + "accepted": true, + "block": "0x67fdb28e9510fd100c1ab56a60300458bc2eb48e7f7d105b0627e59263e764a5", + "keyHash": "0x89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf", + "new": true, + "number": "0x1e1", + "reason": "accepted", + "shard": 0 + }, + { + "accepted": true, + "block": "0x991259d288b0b943a7cf7b4746f587e31529b55a77b80c5cf7265a1c8ab53345", + "keyHash": "0xaa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a", + "new": true, + "number": "0x256", + "reason": "accepted", + "shard": 0 + } + ], + "verifies": { + "after3a": { + "cacheAnswers": 1, + "calls": 3, + "contextRefusals": 1, + "sp1": 2 + }, + "after3b": { + "cacheAnswers": 2, + "calls": 3, + "contextRefusals": 1, + "sp1": 2 + } + }, + "refusals": { + "after3a": 2, + "after3b": 3 + }, + "reasons": [ + "a carried proof record's proof does not verify: shard record block 232 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df (proof 9bd301ce9f169f4f): shard record block 232 shard 0 by 6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df: the proof's public values hash to 0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b, the record's statement is 0xdac8c41cdf5ad2856e415b9cb1b82f668f51a1c2691d32f81669e368695afa47, disconnecting from peer 127.0.0.1:55832.", + "a carried proof record's proof does not verify: shard record block 481 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf (proof c229a4202c82e9f8): shard record block 481 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf: the proof bytes are not a bincode SP1 proof: invalid value: integer `3248680587`, expected variant index 0 <= i < 4, disconnecting from peer 127.0.0.1:55440.", + "a carried proof record's proof does not verify: shard record block 598 shard 0 by aa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a (proof c229a4202c82e9f8): shard record block 481 shard 0 by 89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf: the proof bytes are not a bincode SP1 proof: invalid value: integer `3248680587`, expected variant index 0 <= i < 4, disconnecting from peer 127.0.0.1:48522." + ] + } + }, + "proof": { + "block": 92, + "statement": "0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b", + "native": "0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b", + "bytes": 1272961, + "sha256": "0x9bd301ce9f169f4f6805a904271b360250be4f54af9b2dcede46c80af82d6e27", + "hostLine": "RESULT compressed shard 0: prove 109.5 s, proof 1272961 bytes, verify 0.050 s, VERIFIED; statement 0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b proof sha256 0x9bd301ce9f169f4f6805a904271b360250be4f54af9b2dcede46c80af82d6e27 prover 0xc3c3c3c3c3c3c3c3c3C3C3c3C3C3C3c3C3C3c3c3 at 2026-10-08T23:32:56Z" + }, + "verdict": { + "paidOnce": true, + "sp1Verifies": 2, + "cacheAnswers": 2, + "contextRefused": true, + "contextCheap": true, + "invalidRefusedTwiceNoVerify": true, + "pass": true + }, + "endedAt": "2026-10-08T23:41:13.052Z" +} \ No newline at end of file diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.log new file mode 100644 index 000000000..c40fb5b5b --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.log @@ -0,0 +1,21 @@ +lease: holding 24 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, waited 0 s, class measure, mem 8 GB): finality native runs s6-cache-history-6 (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +23:29:07.676 ch3 H1 up (pid 272375) after 1 s +23:29:08.685 ch3 H2 up (pid 272536) after 1 s +23:29:09.696 ch3 A up (pid 272696) after 1 s +23:29:09.705 ch3 phase 0: mining 90 s +23:30:39.752 ch3 block 92 0x4aa7d2287b80faaa19e64b3114decfd2693150eacf8404bcb8f1310dd241d34a: H1's native statement for shard 0 and 0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3: 0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b +23:30:39.781 ch3 block 92 cut: wrote /tmp/igneum-fast-time-ch3/prove-92/block-92.json (15026 bytes, input commitment 0x2452e7264f579cf670b891b36c2ab9919871577685d8a37200cf7f76e34bc1da) +23:32:57.408 ch3 host: RESULT compressed shard 0: prove 109.5 s, proof 1272961 bytes, verify 0.050 s, VERIFIED; statement 0x3047d8541367791f18fae465643c80b7fd3739db74f27f4edccd409e69064f6b proof sha256 0x9bd301ce9f169f4f680 +23:32:57.422 ch3 before phase 1: A is on H1's tip (0 s) +23:32:57.496 ch3 phase 1 (real bytes, another block's statement): A's pool accepted (accepted) +23:34:57.604 ch3 phase 1: H1 verifies {"cacheAnswers":0,"calls":1,"contextRefusals":1,"sp1":0}; block 232 paid []; refusals 1 +23:35:12.634 ch3 before phase 2: A is on H1's tip (15 s) +23:35:12.696 ch3 phase 2 (the same bytes, the honest record): A's pool accepted (accepted) +23:37:12.800 ch3 phase 2: H1 verifies {"cacheAnswers":1,"calls":2,"contextRefusals":1,"sp1":1}; block 92 paid [{"carrierNumber":"0x176","keyHash":"0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594","payout":"0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3","shard":0,"wei":"0x8cc4b14bd509000"}]; carried [{"key":"0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594","carrier":"0x176","rejected":"","paidWei":"0x8cc4b14bd509000"},{"key":"0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594","carrier":"0x177","rejected":"shard already paid","paidWei":"0x0"}] +23:37:12.802 ch3 before phase 3: A is on H1's tip (0 s) +23:37:12.821 ch3 phase 3a (invalid bytes): A's pool accepted (accepted) +23:39:12.927 ch3 before phase 3b: A is on H1's tip (0 s) +23:39:12.945 ch3 phase 3b (the same invalid bytes, a later carrier): A's pool accepted (accepted) +23:41:13.052 ch3 phase 3: H1 verifies after 3a {"cacheAnswers":1,"calls":3,"contextRefusals":1,"sp1":2}, after 3b {"cacheAnswers":2,"calls":3,"contextRefusals":1,"sp1":2}; refusals 2 then 3 +23:41:13.052 ch3 RESULT PASS: paid once=true; SP1 verifies=2 (expect 2: the real proof once, the invalid bytes once); context refusal read=true and cheap (no verifier)=true; cache answers=2 (expect >= 1); invalid refused again without a verify=true; /srv/builds/_scratch/fin-runs/results/s6-cache-history-6.json +lease: released 24 pool cores after 729 s, exit 0 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.out new file mode 100644 index 000000000..e9a3ab9ab --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.out @@ -0,0 +1,4 @@ +#### 23:29:06Z s6-cache-history-6: node /srv/builds/_scratch/fin-runs/pair-ch-c591e63b-51cd-hu/igneumd (f6e67c31a02747d5) in-consensus verifier (exec pool Off) prove-bin /srv/builds/_scratch/fin-runs/prove-bin-51cd +rc=0 +#### 23:41:15Z s6-cache-history-6 done rc=0 +23:41:15Z watcher of s6-cache-history-6 exiting after 0 restart(s) diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-run1-verifier-off.json b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-run1-verifier-off.json new file mode 100644 index 000000000..f062e65a2 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-run1-verifier-off.json @@ -0,0 +1,111 @@ +{ + "case": "cache-history", + "node": "/srv/builds/_scratch/fin-runs/pair-fin-e189afb4/igneumd", + "proveBin": "/srv/builds/_scratch/fin-runs/prove-bin", + "pair": { + "shard": "0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a", + "aggregator": "0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896" + }, + "startedAt": "2026-10-08T21:53:36.441Z", + "phases": { + "context": { + "block": 443, + "submit": { + "accepted": true, + "block": "0x2d4538c4ccf8dab4d0365c87dfc78fa9c2c9aef4a559aa3871430480226daba5", + "keyHash": "0x6ce6a6cfb1e7d69f52e0764cd4ad005d244097ee9773f7918c2ab532ad73d2df", + "new": true, + "number": "0x1bb", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "run": 0, + "cacheAnswers": 0 + }, + "refusals": [] + }, + "honest": { + "block": 100, + "submit": { + "accepted": true, + "block": "0x9b8f1030775a659645dde14253a598f982e0bd0b87eb63e7164d7de9aa173d3f", + "keyHash": "0x4a28017035561e93c93032f70dba67436b68506efd3ac761f608df142c8a7594", + "new": true, + "number": "0x64", + "reason": "accepted", + "shard": 0 + }, + "observed": { + "paid": [], + "carried": [] + }, + "verifies": { + "run": 0, + "cacheAnswers": 0 + } + }, + "invalid": { + "blocks": [ + 698, + 800 + ], + "submits": [ + { + "accepted": true, + "block": "0xd5c07da07b045e53646c90f591f0ac7a7ca0605a79f3862e38cecb5ffab253ed", + "keyHash": "0x89470283d097209eb0287ba87717938b8642c19b12bb37b5e30ed2a4328f2aaf", + "new": true, + "number": "0x2ba", + "reason": "accepted", + "shard": 0 + }, + { + "accepted": true, + "block": "0x74c38c46b7e0b43215a4e82384baa01d224a29660ede94d1e1bbf09d60a61a7a", + "keyHash": "0xaa474491707c6931a3d6d2fdb84e4d91fa3f3c57b7776b9c1fb1b01a1f96678a", + "new": true, + "number": "0x320", + "reason": "accepted", + "shard": 0 + } + ], + "verifies": { + "after3a": { + "run": 0, + "cacheAnswers": 0 + }, + "after3b": { + "run": 0, + "cacheAnswers": 0 + } + }, + "refusals": { + "after3a": 0, + "after3b": 0 + }, + "reasons": [] + } + }, + "proof": { + "block": 100, + "statement": "0xd9cbc90172d85d0dd962298c10d57603d369c319cbb1fbac206877e9c04e2432", + "native": "0xd9cbc90172d85d0dd962298c10d57603d369c319cbb1fbac206877e9c04e2432", + "bytes": 1272961, + "sha256": "0x3a37a8722d76ea3958f6062219ba400781a77a4dfd59c9e4a61f90a1c2fecb8f", + "hostLine": "RESULT compressed shard 0: prove 287.5 s, proof 1272961 bytes, verify 0.063 s, VERIFIED; statement 0xd9cbc90172d85d0dd962298c10d57603d369c319cbb1fbac206877e9c04e2432 proof sha256 0x3a37a8722d76ea3958f6062219ba400781a77a4dfd59c9e4a61f90a1c2fecb8f prover 0xc3c3c3c3c3c3c3c3c3C3C3c3C3C3C3c3C3C3c3c3 at 2026-10-08T22:01:04Z" + }, + "verdict": { + "paidOnce": false, + "verifiesRun": 0, + "cacheAnswers": 0, + "contextRefused": false, + "invalidRefusedTwiceNoVerify": false, + "pass": false + }, + "endedAt": "2026-10-08T22:09:05.964Z" +} \ No newline at end of file diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-run1-verifier-off.log b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-run1-verifier-off.log new file mode 100644 index 000000000..2859a37a9 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history-run1-verifier-off.log @@ -0,0 +1,23 @@ +lease: 0 of 4 pool cores free (24 leased); waiting +lease: holding 8 pool cores (8,9,10,11,12,13,14,15, waited 988 s, class measure, mem 8 GB): finality native runs s6-cache-history (F01 two-node cache history, plan finality-native-runs-2026-10-09 section 6) +21:53:37.489 ch3 H1 up (pid 135652) after 1 s +21:53:38.499 ch3 H2 up (pid 135745) after 1 s +21:53:39.509 ch3 A up (pid 135838) after 1 s +21:53:39.515 ch3 phase 0: mining 90 s +21:55:09.630 ch3 block 100 0x9b8f1030775a659645dde14253a598f982e0bd0b87eb63e7164d7de9aa173d3f: H1's native statement for shard 0 and 0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3: 0xd9cbc90172d85d0dd962298c10d57603d369c319cbb1fbac206877e9c04e2432 +21:55:09.655 ch3 block 100 cut: wrote /tmp/igneum-fast-time-ch3/prove-100/block-100.json (16062 bytes, input commitment 0x81b970b08efd2bf5aee5ba0223a1ffba6ca25392c4bb774c75c63b483b46d203) +22:01:05.402 ch3 host: RESULT compressed shard 0: prove 287.5 s, proof 1272961 bytes, verify 0.063 s, VERIFIED; statement 0xd9cbc90172d85d0dd962298c10d57603d369c319cbb1fbac206877e9c04e2432 proof sha256 0x3a37a8722d76ea3958f +22:01:05.410 ch3 before phase 1: A is on H1's tip (0 s) +22:01:05.481 ch3 phase 1 (real bytes, another block's statement): A's pool accepted (accepted) +22:03:05.594 ch3 phase 1: H1 verifies {"run":0,"cacheAnswers":0}; block 443 paid []; refusals 0 +22:03:05.599 ch3 before phase 2: A is on H1's tip (0 s) +22:03:05.645 ch3 phase 2 (the same bytes, the honest record): A's pool accepted (accepted) +22:05:05.717 ch3 phase 2: H1 verifies {"run":0,"cacheAnswers":0}; block 100 paid []; carried [] +22:05:05.719 ch3 before phase 3: A is on H1's tip (0 s) +22:05:05.735 ch3 phase 3a (invalid bytes): A's pool accepted (accepted) +22:07:05.844 ch3 before phase 3b: A is on H1's tip (0 s) +22:07:05.857 ch3 phase 3b (the same invalid bytes, a later carrier): A's pool accepted (accepted) +22:09:05.964 ch3 phase 3: H1 verifies after 3a {"run":0,"cacheAnswers":0}, after 3b {"run":0,"cacheAnswers":0}; refusals 0 then 0 +22:09:05.964 ch3 RESULT FAIL: paid once=false; SP1 verifies run=0 (expect 2); cache answers=0 (expect >= 2); context refusal read=false; invalid refused again without a verify=false; /srv/builds/_scratch/fin-runs/results/s6-cache-history.json +Terminated +lease: released 8 pool cores after 1920 s, exit 1 diff --git a/sim/finality-attacks-results/native-2026-10-09/s6-cache-history.out b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history.out new file mode 100644 index 000000000..b0038dc86 --- /dev/null +++ b/sim/finality-attacks-results/native-2026-10-09/s6-cache-history.out @@ -0,0 +1,4 @@ +#### 21:37:08Z s6-cache-history: node /srv/builds/_scratch/fin-runs/pair-fin-e189afb4/igneumd (48e38006a7f8656b) prove-bin /srv/builds/_scratch/fin-runs/prove-bin +rc=1 +#### 22:09:08Z s6-cache-history done rc=1 +22:09:08Z watcher of s6-cache-history exiting after 0 restart(s) diff --git a/sim/results_v2.md b/sim/results_v2.md index 7de17a90e..708d922a7 100644 --- a/sim/results_v2.md +++ b/sim/results_v2.md @@ -896,4 +896,9 @@ The `verifies` counters the harness reads (`calls`, `sp1`, `contextRefusals`, `c |---|---|---|---| | 1 (21:53 to 22:09Z) | e189afb4, exec pool verifier Off (no `IGNEUM_PROOF_VERIFIER` in the runner's environment) | the host proved block 100 in 287.5 s on the 8 leased cores (VERIFIED, 1,272,961 bytes); H1 accepted every record "verify Off" and verified nothing, paid nothing; the harness's own verdict FAIL on every line; e189afb4 has no `verifies` field, so the counters read 0 | a run of the wrong node for this harness: kept as the record of why (`s6-cache-history-run1-verifier-off`) | | 2 (22:15 to 22:30Z) | c591e63b, exec pool verifier = the build-2 `igneum-prove-host` (pin 0x51cd8cba…) against a node embedding the 2b1a81cb pin | the real bytes under another block's statement rejected by the host ("NOT VERIFIED", a full verify, 0.6 s); the same bytes under the honest record verified by the host (0.6 s) and paid once (633968600000000000 wei to 0xc3c3…, block 94, carrier 0x22c); the invalid bytes rejected at both carriers; `cacheAnswers` 2, `calls` and `sp1` 0 throughout: the subprocess verifier path never touches the in-process counters, and the node's own keys (2b1a81cb) differ from the host's (0x51cd8cba), so the in-consensus verifier could not have passed the proof | paid once holds; the counters the case is about were not exercised (the pair mismatch and the subprocess path): not a verdict on F01 | -| 3 | c591e63b rebuilt on the 0x51cd8cba pin (the enforced lane's `proving/igneum-prove/elf` from build-9), the matching host and export from build-9, the exec pool verifier Off so the body rule verifies in consensus (the shape of the lane's own passing run at 22:05Z, `docs/plans/proving-enforcement/cache-history-2.json` on its branch: paid once, 2 SP1 verifies, 2 cache answers) | (the row below when it lands) | | +| 3 (22:35 to 22:51Z) | c591e63b rebuilt on the 0x51cd8cba pin (the enforced lane's `proving/igneum-prove/elf` from build-9; `igneumd` 6886ff20b7cdd8a6…), the matching host and export from build-9, the exec pool verifier Off so the body rule verifies in consensus | A's own consensus refused every block that carried a record ("a carried proof record's proof does not verify: shard record block 433"), so no record reached H1's chain: the harness's A node relies on `IGNEUM_TEST_SKIP_PROOF_RULE=1`, which 3f672661 made a cargo feature (`kaspa-consensus/harness-unsafe`, the enforced lane's build-9 build has it: `cargo build … --features kaspad/igneum-pow,kaspa-consensus/harness-unsafe`, its builds.jsonl line) | the harness needs the harness-unsafe pair: rebuilt | +| 4 (22:53 to 23:13Z) | c591e63b + `kaspa-consensus/harness-unsafe` on the 0x51cd8cba pin (`igneumd` f6e67c31a02747d5…, the enforced lane's own build shape), 8 leased cores | the counters the case is about ran: phase 1 (the real bytes under another block's statement) refused as a cheap context refusal (`calls` 1, `contextRefusals` 1, `sp1` 0, no verifier run: F01's first half); phase 3 (invalid bytes under two carriers) verified once (`sp1` 1) and refused again from the cache at the later carrier (`cacheAnswers` 1, `sp1` unchanged, refusals 2 then 3: F01's second half). Phase 2 (the same real bytes under the honest record) was never carried: on 8 cores the host took 288.8 s to prove block 89 and A's rejoin after its refused phase-1 blocks took 185 s, so the honest record's first carrier was block 725, outside the 600-block record window ("segment 89 is outside the 600-block record window of carrier 725": A's own pool refused it, nothing reached H1), a timing margin of the harness under the lease, not the node's verdict | the two refusal halves of F01 PASS on this run; the paid-once half unmeasured (the record window): rerun on 24 cores | +| 5 (23:15 to 23:28Z) | the same pair, 24 leased cores (the host proved block 94 in 109.6 s; A rejoined in 5 to 30 s) | every record, the honest one included, refused by H1 as "the proof claims program id 0x51cd8cba…, which the carrier's epoch does not accept (accepted: 0x2b1a81cb…)": the harness names the accepted pair from `proving/igneum-prove/elf/manifest.json` beside it on the box, and that copy was still the 2b1a81cb manifest of the first setup while the node and the host carried 0x51cd8cba (the lane's own fault; the phase-1 and phase-2 refusals of this run are program-id refusals counted as context refusals: `contextRefusals` 2, `sp1` 1 for the invalid bytes, `cacheAnswers` 1) | not a verdict on F01: the manifest replaced, rerun | +| 6 (23:29 to 23:41Z, 00:29 to 00:41 UK) | the same pair (c591e63b + harness-unsafe, 0x51cd8cba pin, `igneumd` f6e67c31a02747d5…), the matching manifest beside the harness, 24 leased cores, the exec pool verifier Off (the body rule verifies in consensus), zero restarts | phase 1: the real proof's bytes under another block's statement (block 232) refused by H1 and H2 as a cheap context refusal (`calls` 1, `contextRefusals` 1, `sp1` 0: no verifier run, nothing cached); phase 2: the same bytes under the honest record (block 92) verified once in consensus (H1 0.259 s, H2 0.244 s; `sp1` 1) and paid exactly once, on both honest nodes at the same chain block 374 the same 633964200000000000 wei to 0xc3c3…; phase 3: the invalid bytes verified once at their first carrier (`sp1` 2) and refused again at a later carrier from the cache (`cacheAnswers` 1 to 2, `sp1` unchanged, refusals 2 then 3). H1's and H2's verdicts identical for all three records (232 refused, 92 verified, 481 refused) and their paid maps identical (one payout) | PASS: F01 on real nodes: a verdict is a fact record, never a cached refusal; the two honest nodes agree block for block and payout for payout | + +Summary of section 6: the F01 case passes on the cache-history-node line (c591e63b, the 2.0.2 line ab489403 plus the verify counters) built with `kaspa-consensus/harness-unsafe` for the carrier node, on the pin the host embeds; the five earlier runs are the record of each setup fault (the exec pool verifier Off on a node without the counters, a host pin that was not the node's, the harness-unsafe feature missing, the 8-core lease against the 600-block record window, a stale manifest beside the harness), none a node fault. The plan's "known-failed shape first" (the pre-fix node's cached context refusal replayed under a later carrier) is not run here: it is the enforced lane's own known-failed line on its branch (its row), and the refusal path on this line is the cheap pre-check that caches nothing. diff --git a/tools/ci/batches/fin-native-20261008T2300Z.json b/tools/ci/batches/fin-native-20261008T2300Z.json index b4f882bd6..d9d215ea4 100644 --- a/tools/ci/batches/fin-native-20261008T2300Z.json +++ b/tools/ci/batches/fin-native-20261008T2300Z.json @@ -12,7 +12,7 @@ "cell": "node:finality-realnode", "status": "PASS", "evidence": "sim/finality-attacks-results/native-2026-10-09/s1b2.md", - "note": "the finality-runs lane's native rows on the 2.0.2 line e189afb4 (tools/finality-attacks/v4.mjs, three igneumd on the 60x file, WARM 230 SPLIT 420 HEAL 400 BPS 1, real nodes on build-5 and build-6 under the lease pool and pid watchers, zero restarts): the 40/40/20 case past the window (1a: every island pauses, 0 conflicts; 1b runs 2 and 3: exactly the island above half of the anchored table recovers after a full window with lockKind recovery on its node, the others pause and join its chain, 0 conflicts, 0 disagreement; 1b run 1: the island drew 43.22 percent by Poisson jitter and paused, as the rule says; 1c: the equivocator mining on both islands at 27.7 percent of the cut table produced the two recovery certificates of 6.5, outside the bound, the anchored history untouched; 1d: pause only, no lock anywhere, the equivocator stripped at the heal), the pause-only alternative with a fresh node joining from genesis and a kept-datadir restart into the heal (2: the fresh node holds the 12 pre-heal locks 2 s after its start by carried certificates, 0 disagreement, the pause ends within two intervals of the reconnect, 4 epoch reference blocks inside the pause with mining continuing), leave, strip, restart and out-of-order certificate arrival (3a to 3d PASS). Rows: sim/results_v2.md, the section named in evidence_dir. Two node findings owed (F04 / VER-08 and 3.11.4), recorded in the rows: a recovery certificate reads lockKind final on every node that did not form it (the stamp is local to evaluate; ingest records an ordinary lock), and a node holding two certificates at one index reports active and keeps locking instead of finality_active false, reason conflict.", + "note": "the finality-runs lane's native rows on the 2.0.2 line e189afb4 (tools/finality-attacks/v4.mjs, three igneumd on the 60x file, WARM 230 SPLIT 420 HEAL 400 BPS 1, real nodes on build-5 and build-6 under the lease pool and pid watchers, zero restarts): the 40/40/20 case past the window (1a: every island pauses, 0 conflicts; 1b runs 2 and 3: exactly the island above half of the anchored table recovers after a full window with lockKind recovery on its node, the others pause and join its chain, 0 conflicts, 0 disagreement; 1b run 1: the island drew 43.22 percent by Poisson jitter and paused, as the rule says; 1c: the equivocator mining on both islands at 27.7 percent of the cut table produced the two recovery certificates of 6.5, outside the bound, the anchored history untouched; 1d: pause only, no lock anywhere, the equivocator stripped at the heal), the pause-only alternative with a fresh node joining from genesis and a kept-datadir restart into the heal (2: the fresh node holds the 12 pre-heal locks 2 s after its start by carried certificates, 0 disagreement, the pause ends within two intervals of the reconnect, 4 epoch reference blocks inside the pause with mining continuing), leave, strip, restart and out-of-order certificate arrival (3a to 3d PASS). Rows: sim/results_v2.md, the section named in evidence_dir. Two node findings owed (F04 / VER-08 and 3.11.4), recorded in the rows: a recovery certificate reads lockKind final on every node that did not form it (the stamp is local to evaluate; ingest records an ordinary lock), and a node holding two certificates at one index reports active and keeps locking instead of finality_active false, reason conflict. Section 6 (F01, the two-node cache-history case) PASS on real nodes at 00:41 UK 9 October on the cache-history-node pair c591e63b + harness-unsafe (run 6; sim/finality-attacks-results/native-2026-10-09/s6-cache-history-6.json): the context refusal cheap, the honest record verified once and paid once on both honest nodes at the same chain block, the invalid bytes refused again from the cache; F01's cell is the enforced lane's to record.", "method": "native" }, { diff --git a/tools/finality-attacks/native/README.md b/tools/finality-attacks/native/README.md index ebc2ebc45..053de41a9 100644 --- a/tools/finality-attacks/native/README.md +++ b/tools/finality-attacks/native/README.md @@ -15,3 +15,7 @@ stripped, `override-60x-88-keys.json` here), `prove-bin/` for section 6. - `run-s6.sh` / `watch-s6.sh`: section 6, the enforced lane's `infra/fast-time/proving-cache-history.mjs` on the cache-history-node pair with `IGNEUM_PROOF_VERIFIER=` exported (without it the honest nodes start with the verifier Off and nothing is verified or paid: the lane's first run, kept as `s6-cache-history-run1-verifier-off`). + +Field names in the landed result JSONs: every vote-key hash is under `keyHash` (`carried[].key` of the cache-history harness's +output is renamed on landing; `eKey`, `leaver`, `stripped` of v4.mjs's first runs are `equivocatorHash`, `leaverHash`, +`strippedHash`), so the tree's secrets check (a 64-hex value beside "key") reads them as the public identifiers they are.