ledger: N8, the execution layer's segment-wide subsidy against the coinbase's per-block one (7 October 2026), the switched fix's shape

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-07 08:20:01 +00:00
parent 5770460c13
commit cddd170af6

View file

@ -2083,6 +2083,14 @@ Per tier, before the fix: a silent miner on a network with the bonus on would ha
Fix (the node side, ca3-v4-0318; the shard guest's port of the executor is the proving lane's): `igneum::silent_split(subsidy, silent, bonus_bps)` in consensus-core is the one arithmetic both ledgers apply; the coinbase manager goes through it; `SegmentBlock::silent` carries consensus's `finality_silent_builder` (a pure function of the block's past, new on the consensus API and the session) and `ChainBlockEnv::signing_bonus_bps` the bps at the chain block's DAA (0 while the switch is off); `execute_segment` credits the split. Known failed first: a silent blue block with the bonus on credits 72/28, a block that signed or the bonus off 80/20, the sum unchanged; the coinbase test asserts its outputs equal the split. The guest statement gains the two inputs, so the shard program id re-pins (the testnet genesis pins it anyway). Harness case owed: a silent block with voters must credit 72/28 on both ledgers (the vote-or-burn harness's bonus case, the exec record against the UTXO outputs per merging chain block) or the gate fails. Fixed in c7ea1e21 on ca3-v4-0318 (09:12 UK; igneum-exec 25, consensus-core 113, consensus 109 plus the two moved targets, kaspad check clean on igneum-build-1); the testnet lane cherry-picks it onto testnet-genesis-2-node. No guest change: the shard guest takes the segment's rewards and pool credit as inputs copied from the node's record (proving/igneum-prove export/src/main.rs:69), so the statement and the shard program id are untouched. Harness case e726a0fe (the vote-or-burn harness's bridge check per pair row); the known-failed-then-fixed pair of runs is in the plan's 7.6.
### N8. The execution layer credits every block of a segment at the merging chain block's DAA; the UTXO coinbase pays each merged block the subsidy of its own DAA (found by the bridge-identity harness's known-failed run, 7 October 2026, 09:16 UK)
The first disagreement of that run was on an A row (a signing key, so not N7's bonus): the UTXO coinbase paid the parent 253,783,734 sompi and the EVM record credited it 253,784,614, one second of launch ramp apart. `igneum/exec/src/service.rs` computes `block_subsidy(header.daa_score)` once per chain block and credits every block of the segment with it; `utxo_validation.rs` pays each merged block `coinbase_data.subsidy`, the figure its own coinbase carries at its own DAA. So on every chain, the devnet included, the two ledgers differ by the ramp's slope on every merged block for the first 30 days and by the whole step for the blocks on the far side of every subsidy period boundary; between, they agree.
Per tier: no balance anyone can see is wrong (0.0003 percent of a share on the ramp), but the bridge identity the base-unit gate asserts is false by that slope on the devnet today and on the testnet from its first block, and a strict reconciler reports it.
Fix (switched, since it changes the EVM state transition): `Params::subsidy_per_block_activation_daa`, a new object field in the subsidy family, never on every network as compiled, in the digest once set; from that chain-block DAA the service fills `SegmentBlock::subsidy` with the block's own `block_subsidy(daa)` and the executor splits it. Known failed first in the executor's test: two blocks a second apart on the ramp and two straddling the first halving boundary, the chain block's subsidy without the rule and their own with it. The harness reports the exact per-row identity beside the N7 bonus ratio and fails on it under `--subsidy-per-block`. The value is the project lead's word (the coordinator recommends 0 on the testnet, an upgrade height with 0.3.19 on the devnet); the testnet lane's re-cut gains the one field. Commit hash: in the status log once green.
## Status updates, 5 October 2026 (ledger sweep, night of 4 to 5 October)
`docs/review/ledger-sweep-2026-10-05.md` holds the runs, the commands and the running table. Every Open, Proposed, Unmeasured or pending entry was read against its experiment line; the status lines above carry the evidence inline, marked "Sweep (5 October 2026)" where a note was added and "Was:" where the status changed. Items owned by the other two night branches (F23, F24, G12, X18, the flood memory growth; the base-fee floor, testnet parameters, G13, G14, public text) were left to them.