1.8 KiB
sim
Simulations of Igneum consensus rules. One script per rule, results next to it.
finality_sim.py
Simulates the sustained-mining finality vote-weight rule: each key's weight is the sum over
the trailing 30 days of its counted blocks, where a day's counted blocks are capped at
2x the previous day's counted blocks plus a floor f. A checkpoint locks at two thirds of
total weight. Scenarios A to F (steady state, rental burst, key splitting, honest growth
shock, churn, patient owner) are described in results.md together with the model's
assumptions and the measured numbers.
Requirements: Python 3, numpy (checked present: 3.10.10, numpy 2.2.6 on 3 October 2026).
Run everything (about one second):
python3 finality_sim.py > out.md
Options:
--seed N random seed, default 7 (seed 11 gives the same crossing days)
--scenarios A,B subset of A,B,C,D,E,F
--floors 1,10 floor values in blocks per key per day, default 1,10,100,1000
--growth 2.0 daily cap multiplier (1e9 removes the cap)
--window 30 trailing window in days
--committee 100 committee size, used only for the active-24-hour total in E
--presence 0 proposed presence gate, 0 = off (tested and rejected in results.md)
The runs behind results.md:
python3 finality_sim.py
python3 finality_sim.py --growth 1e9 --scenarios B --floors 1
python3 finality_sim.py --presence 20 --scenarios C,D
python3 finality_sim.py --seed 11 --scenarios A,B --floors 1,1000
Output is markdown tables on stdout. Days in B to E are counted from the event, so "+1" is the first full day after the burst, the doubling or the churn.
Model limits are listed at the end of results.md: no latency, no DAG, no VRF sampling noise,
instant difficulty retarget, free keys.