igneum/sim/horizon/consensus-security/ghostdag_results_1bps.md
igneum-labs 2e405311a4 Horizon: lane 1 (consensus-security) lands, with the 51 percent paper
docs/analysis/51-percent.md: what a 51 percent attacker can and cannot do on Igneum, with
numbers (the selected-chain race over a 90-s hold, the lock as the reorder bound, the veto
at 1/3 of weight and its rental cost, the departure case and the LEAVE item, the p2p surface).
docs/analysis/horizon/consensus-security.md: the attack catalogue across GHOSTDAG ordering,
the difficulty rule, the finality weight, miner signalling, proof records, the exec layer and
p2p, each with the bound and the rental cost at the measured USD 11.7 per GH/s-hour; the
pruned-node unwrap class with its sibling list in the sync and IBD flows; fourteen ranked
defences, three of them not recommended with the reason.

Models and results: sim/horizon/consensus-security/ (ghostdag_sim.py, finality_horizon.py,
cost_model.py, signalling.py, result files).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 20:07:43 +00:00

7.4 KiB

GHOSTDAG withholding simulator, 1 blocks/s, k 18, 8 honest miners, 20 seeds per cell

Generated by sim/horizon/consensus-security/ghostdag_sim.py on 2026-10-06 19:37 UTC. Every number is this simulator's; the model and its limits are in the file header.

1. Honest parallelism alone: natural selected-chain reorg depth at honest miner 0 (chain blocks), 150 s per episode

one-way delay d, s blocks in flight (bps x d) reorg depth p99 (worst seed) reorg depth max
0.35 0.35 2 3
0.67 0.67 2 2
2 2.00 6 7
5 5.00 15 15

2. Withhold for T seconds, then release everything: what the honest selected chain does

won = the attacker's private tip became honest miner 0's selected chain after the release (its earlier-ordered conflicting transaction then precedes the honest copy). reorg = chain blocks removed from miner 0's selected chain (median and max over seeds). fork age = seconds between the fork point and the release: the window a conflicting transaction can reach back. att blue = the attacker's blue blocks over its blocks in miner 0's view (weight and subsidy kept); hon red = honest blocks since the fork turned red by the release.

d, s attacker share H hold T, s blocks withheld (mean) won reorg med / max fork age if won, s (med) att blue / att blocks hon red / hon blocks
0.35 20% 30 6.0 5% 0 / 21 30 57% 3%
0.35 20% 60 10.9 0% 0 / 0 - 36% 2%
0.35 20% 90 17.9 0% 0 / 0 - 22% 1%
0.35 20% 120 23.4 0% 0 / 1 - 18% 1%
0.35 34% 30 11.4 40% 0 / 19 30 73% 3%
0.35 34% 60 21.8 40% 0 / 38 61 55% 13%
0.35 34% 90 31.4 5% 0 / 42 95 36% 3%
0.35 34% 120 43.0 10% 0 / 58 124 28% 6%
0.35 45% 30 14.1 75% 12 / 18 31 93% 5%
0.35 45% 60 26.8 80% 24 / 34 61 87% 25%
0.35 45% 90 40.4 75% 39 / 48 91 84% 36%
0.35 45% 120 53.8 75% 52 / 61 121 84% 44%
0.35 51% 30 15.6 80% 11 / 16 32 93% 5%
0.35 51% 60 29.9 80% 22 / 30 62 86% 26%
0.35 51% 90 44.4 75% 34 / 46 91 84% 36%
0.35 51% 120 59.7 75% 46 / 57 122 81% 43%
0.35 67% 30 21.9 100% 10 / 15 32 98% 10%
0.35 67% 60 40.4 100% 17 / 26 62 98% 39%
0.35 67% 90 59.4 100% 28 / 35 92 99% 55%
0.35 67% 120 79.8 100% 37 / 45 122 99% 63%
0.35 90% 30 28.7 100% 3 / 4 32 98% 18%
0.35 90% 60 54.0 100% 5 / 9 62 99% 49%
0.35 90% 90 81.0 100% 7 / 13 92 99% 59%
0.35 90% 120 106.5 100% 10 / 18 122 99% 72%
0.67 20% 30 6.0 10% 0 / 18 33 65% 4%
0.67 20% 60 10.9 0% 0 / 1 - 38% 2%
0.67 20% 90 17.9 0% 0 / 1 - 21% 1%
0.67 20% 120 23.4 0% 0 / 1 - 18% 1%
0.67 34% 30 11.4 40% 0 / 18 30 77% 4%
0.67 34% 60 21.8 40% 0 / 36 61 55% 14%
0.67 34% 90 31.4 5% 0 / 39 95 35% 4%
0.67 34% 120 43.0 10% 0 / 52 124 28% 6%
0.67 45% 30 14.1 70% 10 / 17 31 94% 5%
0.67 45% 60 26.8 75% 22 / 32 61 84% 25%
0.67 45% 90 40.4 70% 33 / 46 91 80% 34%
0.67 45% 120 53.8 70% 46 / 57 121 80% 42%
0.67 51% 30 15.6 85% 10 / 15 32 90% 6%
0.67 51% 60 29.9 85% 20 / 28 63 88% 28%
0.67 51% 90 44.4 80% 32 / 44 92 86% 39%
0.67 51% 120 59.7 80% 42 / 53 122 84% 46%
0.67 67% 30 21.9 100% 8 / 13 32 98% 12%
0.67 67% 60 40.4 100% 16 / 23 62 98% 40%
0.67 67% 90 59.4 100% 26 / 31 92 99% 56%
0.67 67% 120 79.8 100% 34 / 41 122 99% 64%
0.67 90% 30 28.7 100% 2 / 4 32 98% 19%
0.67 90% 60 54.0 100% 4 / 9 62 99% 51%
0.67 90% 90 81.0 100% 6 / 13 92 99% 59%
0.67 90% 120 106.5 100% 9 / 17 122 99% 73%
2 20% 30 6.0 10% 0 / 12 34 69% 8%
2 20% 60 10.9 0% 0 / 2 - 35% 3%
2 20% 90 17.9 0% 0 / 3 - 19% 2%
2 20% 120 23.4 0% 0 / 3 - 17% 2%
2 34% 30 11.4 70% 8 / 12 33 86% 11%
2 34% 60 21.8 55% 15 / 23 64 69% 21%
2 34% 90 31.4 5% 0 / 29 95 40% 5%
2 34% 120 43.0 10% 0 / 38 124 27% 7%
2 45% 30 14.1 90% 9 / 15 32 95% 13%
2 45% 60 26.8 85% 16 / 23 62 90% 32%
2 45% 90 40.4 80% 26 / 31 92 88% 42%
2 45% 120 53.8 65% 32 / 39 123 79% 42%
2 51% 30 15.6 100% 9 / 13 33 98% 14%
2 51% 60 29.9 100% 18 / 23 63 98% 40%
2 51% 90 44.4 95% 25 / 33 93 97% 52%
2 51% 120 59.7 90% 32 / 41 123 93% 57%
2 67% 30 21.9 100% 7 / 9 33 98% 21%
2 67% 60 40.4 100% 12 / 16 63 98% 49%
2 67% 90 59.4 100% 20 / 23 93 99% 62%
2 67% 120 79.8 100% 26 / 30 123 99% 70%
2 90% 30 28.7 100% 2 / 4 32 98% 29%
2 90% 60 54.0 100% 4 / 8 62 99% 58%
2 90% 90 81.0 100% 6 / 13 92 99% 61%
2 90% 120 106.5 100% 9 / 16 122 99% 76%
5 20% 30 6.0 15% 2 / 14 36 67% 15%
5 20% 60 10.9 0% 2 / 8 - 32% 5%
5 20% 90 17.9 0% 1 / 5 - 19% 4%
5 20% 120 23.4 0% 2 / 5 - 14% 3%
5 34% 30 11.4 100% 7 / 13 35 96% 31%
5 34% 60 21.8 35% 10 / 18 68 67% 22%
5 34% 90 31.4 5% 1 / 22 104 42% 11%
5 34% 120 43.0 5% 2 / 29 123 23% 9%
5 45% 30 14.1 100% 5 / 9 35 96% 28%
5 45% 60 26.8 95% 10 / 14 64 94% 47%
5 45% 90 40.4 85% 16 / 19 94 91% 54%
5 45% 120 53.8 65% 20 / 25 124 78% 49%
5 51% 30 15.6 100% 6 / 9 34 96% 33%
5 51% 60 29.9 95% 10 / 15 64 96% 51%
5 51% 90 44.4 95% 16 / 22 94 97% 61%
5 51% 120 59.7 90% 20 / 28 124 93% 65%
5 67% 30 21.9 100% 4 / 7 34 97% 39%
5 67% 60 40.4 100% 9 / 12 64 98% 61%
5 67% 90 59.4 100% 13 / 16 94 99% 73%
5 67% 120 79.8 100% 18 / 22 123 99% 77%
5 90% 30 28.7 100% 2 / 3 32 98% 52%
5 90% 60 54.0 100% 4 / 6 62 99% 66%
5 90% 90 81.0 100% 5 / 10 92 99% 74%
5 90% 120 106.5 100% 8 / 14 122 99% 83%

3. Selfish withholding (release when about to lose, or at lead L = 6): blue share against hash share over 600 s, d = 0.67 s

attacker share H attacker blue blocks / its blocks (weight kept) attacker share of ALL blue blocks (weight share; honest mining gives H) private tip is the chain at the end max reorg depth seen
20% 100% 19.3% 0% 1
34% 100% 34.3% 60% 1
45% 100% 44.9% 60% 2
51% 100% 51.1% 80% 2
67% 100% 67.2% 100% 3
90% 100% 90.3% 100% 1

(106 cells, 11 s)