docs/plans/pool.md 10.5: the open-pool gate on igneum-build-1 (100 members, 10 daemons, 4 nodes, PASS: 90 of 90 honest members paid by the coinbase rule, first payout p50 3.6 s p90 7.0 s after the first share, 0 withheld shares seen, 0 honest blocks paying a withheld address, stale 9.6 percent), the two failed runs and their lessons, consequences by tier

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-07 13:10:26 +00:00
parent 953bf4a239
commit d50511af3b

View file

@ -422,7 +422,44 @@ harness verifies the chain-side fact now, the standing rule); 100 CPU members
(one key and one address each, one thread each, niced); the chain at 0.1 s per share (at 1 block a second a 10-second
chain is sub-block work only for a pool under a tenth of the network, spec 9.12 item 8), window 2,160.
GATE_RESULTS_PLACEHOLDER
Run 1 of record: 7 October 2026, 12:53:51Z to 13:09:09Z on igneum-build-1, pool binary from pool-finish d48d9dd2 (the
seeds-check line of the last fix overlaid), node and miner from pool-finish-node b0444f51 (`strings igneumd` carries
b0444f51; the box's 96 threads also carried the proving lane's builds, load 50 to 60). Summary:
`/srv/builds/igneum-wt-pool-finish/pl-gate-1/run/summary.json` and `gate.log` (prefix pl-*, spared).
| Number | Value | Source |
|---|---|---|
| Nodes, peers, DAA at the end | 4 nodes, peers 1/2/2/1, DAA 953/953/953/953 (one DAG; the 30-s samples agree throughout) | `getConnectedPeerInfo`, `getBlockDagInfo` on every node |
| Members, daemons | 100 keys and addresses on 10 daemons; daemon 9 (members 9, 19, ..., 99) withheld its shares | the harness |
| Honest members with a share, paid by the coinbase rule | 90 of 90, 90 of 90 | the daemons' `/api/open/shares`; `eth_getBalance` before and after on node 0 |
| Members paid over time | 53 at 30 s, 71 at 60 s, 84 at 90 s, 91 at 120 s, 98 at 180 s, 100 at 211 s | the 30-s samples |
| First payout after the first share, honest members | n 90, p50 3.6 s, p90 7.0 s, max 8.3 s; 90 of 90 under 120 s | the 5-s watcher: the member's first share's header time against its first chain credit |
| Blocks found | 948 on the chain (DAA 948 at the last sample); 864 by honest daemons, 84 by the withholder | the daemons' `/api/blocks`; `getBlockDagInfo` |
| Honest blocks paying a withheld address | 0 of 864 | the honest daemons' block splits |
| Withheld shares seen by any honest daemon | 0 | the honest daemons' `/api/open/shares` |
| Withheld members' credits | 0.01 to 0.81 IGN each, from their own daemon's 84 blocks alone (that daemon pays its own window) against 2,383 IGN credited in all | `eth_getBalance` |
| Share chain at the end | height 1,814 on all nine honest daemons (1,816 on the withholder, its own branch), 2,007 shares accepted each, 193 stale, 8 to 15 reorgs, 0 refused | `/api/open` on every daemon |
| Stale rate, honest daemons | 9.6 percent (193 of 2,007) at 2 shares a second across 10 daemons on one box | `/api/open` |
| Stale rate, the withholder | 17.8 percent (its branch loses to the nine) | `/api/open` on daemon 9 |
| Share check cost, daemon 0 | p50 3.8 ms, p99 7.3 ms, max 10.2 ms over 1,044 checks (the box under other lanes' builds, nice 15 miners) | the daemon's STATUS line |
| Drop proof | `verify-share` on daemon 0's first logged share: `SHARE OK 530b509c... height 7 ... (work 32,768 hashes; cache 2^24 words)`, exit 0; on the 12-member smoke the same tool printed `BLOCK PAYS <address> weight 970,456,567 of 4,294,967,292 (22.60%)` against the first confirmed block after it | `igneum-pool verify-share` |
| Verdict | PASS | the harness |
Two runs before it failed and taught: the first (12:16Z) refused every share past epoch 1 because the seeds check keyed
the node's epochs by `DAA / epoch_blocks`; the second (12:34Z) refused shares from members on other nodes because four
nodes named three epoch seeds, and the reason was the harness, not the chain: `--connect` raced the earlier node's
listener and nodes 2 and 3 never peered (three partitions). The seeds check is now the rule of spec 9.12 item 3, and the
harness starts the nodes in sequence with `--addpeer` and reads their peers before anything else starts.
Consequences by tier, from these numbers (the standing rule of 5 October):
| Tier | What the gate's numbers mean | What is done |
|---|---|---|
| A home miner with one card (8 to 32 GB, any vendor, any OS) on the open pool | the first payout follows the first block found on the chain after its first share: 3.6 s median here at 1 block a second with the pool as the whole network; on the devnet at 100 GH/s with the open pool at a tenth of the network it is the pool's block interval, about 10 s, plus the share's wait; the member's share wait is the chain's interval times the member count over its hash share (100 members at 0.5 s: 50 s; at the spec's 10 s per share with 100 members of one card: 17 minutes, which is O-9.10's row) | the chain's rate is a chain constant a public open chain sets from its hashrate (spec 9.12 item 8, O-9.10); the gate ran at 0.5 s |
| The same card on pool-0 | unchanged by this round: a share every 10 s and a payout round every 60 s | TLS on the member port, the page rows |
| A rig | one open daemon per rig beside its node; the daemon's cost is the share checks (3.8 ms each here) at the chain's rate, under a core at 2 shares a second | nothing more |
| A pool user without a node | cannot join the open pool; pool-0 as before | the page says so |
| The network | the open pool's stale rate was 9.6 percent at 2 shares a second with ten daemons on one host; a public chain at the same rate across the internet loses more to forks, which is the uncles row (10.6); every block's coinbase grew by 48 bytes per payee, at most 256 payees, under the devnet's 16,384-byte cap | the uncles row stays open; the public chain's rate is O-9.10 |
### 10.6 Open after this round