diff --git a/docs/bench-log.md b/docs/bench-log.md index c5fd91150..584ce9150 100644 --- a/docs/bench-log.md +++ b/docs/bench-log.md @@ -1222,3 +1222,43 @@ Not measured: any real GPU. The job-time and interval guards, exit 43 and the ap RTX 5090, the gfx1036 or a Metal card; the first real run is owed from the fleet logs. The "no status" rule has not been tried against a hung RPC (only a stopped process). Unit tests: `cargo test -p igneum-miner -- guard` (7) and `cargo test -- watchdog` in `app/igneum-app` (11), both replaying recorded STATUS and WORKER FAULT lines. + +## 4 October 2026 (evening), the software dev fee measured on a test network: 9 fee blocks in 785, the chain and the miners' counters agree + +Decision of the evening: the Igneum Miner software takes a visible, switchable 1% dev fee (one block template in 100 +requested with the dev payout address, chosen by a template counter, never at random); the protocol carries no fee. +Branch `dev-fee` of both repositories; `docs/design/miner-dev-fee.md`; FUD ledger E18. + +Machine: Apple M5 Max, macOS 26.6.2, load 140 to 170 (many other agents' builds and runs alongside; only counts were +taken, no rates). Network: `node tools/dev-fee/run.mjs --secs 600 --hold-ms 500`, two devnet-v4 nodes (`igneumd` +3bfe346f) on 127.0.0.1 ports 29900 and 29910, network id igneum-devnet-957, the fast-time profile with proof of work +skipped and `genesis_bits` at the floor so a CPU stub miner solves every template it holds. Three `igneum-miner` +processes (dev-fee branch a2c7ba83, `--engine stub`, 1 thread, exponential hold with mean 500 ms, no voting), each +paying its own test address: a and b at the default `--dev-fee 1`, c the control at `--dev-fee 0`. 600 s. Then +`igneum-miner payouts` on both nodes: every block the node holds, counted by the `IGNA` payout address in its coinbase. + +What the miners printed at start, verbatim: + + dev fee 1% (1 block in 100) to 0xdfaea67368f3e3753397d878f97efe6aa8020c2e; --dev-fee 0 turns it off (a, b) + dev fee off (--dev-fee 0); the default is 1% (1 block in 100) to 0xdfaea67368f3e3753397d878f97efe6aa8020c2e (c) + +| Miner | `--dev-fee` | Blocks found (its summary) | Rejected | `fee=` in its summary | `dev-fee block` lines | Blocks to its own address on the chain | +|---|---|---|---|---|---|---| +| a | 1 (default) | 385 | 0 | 5 | 5 | 380 | +| b | 1 | 400 | 0 | 4 | 4 | 396 | +| c | 0 (control) | 397 | 0 | 0 | 0 | 397 | + +The chain (`payouts`, identical on node 0, the miners' node, and node 1, its peer): 1,183 blocks; 380 + 396 + 397 to +the three user addresses, 9 to the dev-fee address `0xdfaea6...0c2e` (0.761% of all blocks, 1.146% of the 785 blocks +of the two fee-paying miners), and 1 block with no `IGNA` field, the genesis block. Found per miner = own blocks + fee +blocks exactly (380 + 5, 396 + 4, 397 + 0), so every fee block the miners logged is on the chain and no other block +went to the dev address. The control miner paid nothing. + +Reading. The expectation is 1 in 100 templates; the stub miner found a block on most but not every template once the +difficulty had risen on three miners at about 2 blocks/s against the 1 block/s target (a and b held about 500 templates +each, 5 and 4 of them fee templates at positions 99, 199, ..., and converted 77 to 80% of templates into blocks), so +the block share lands near 1% with the sampling noise of 9 events (1.15% here). The exactness claim is on the template +side and is the unit test (`dev_fee_tests`: 100 of 10,000 at positions 99, 199, ...; 0 at `--dev-fee 0`; exact at 2 to +100%); the chain test shows the fee blocks reach the chain and are counted the same by the miner and by both nodes. +Not measured: worker (GPU) mode, where the fee template is one of the templates the background fetcher rotates through +once a second per identity, so the share is 1 in 100 templates by time, not by job; and nothing on Windows. diff --git a/site/bench.html b/site/bench.html index 8a6942277..fc9a8b1d8 100644 --- a/site/bench.html +++ b/site/bench.html @@ -170,12 +170,12 @@ th{font-family:var(--f-mono);font-size:12px;letter-spacing:.12em;text-transform:
-
60 entries, newest at the bottom
+
61 entries, newest at the bottom

Engineering log

Every measurement the project has made, newest at the bottom, written by the people and agents who ran it, with the commands and hardware. Prototype numbers are not mining numbers and say so.

- +

Igneum bench log

Append-only. Every number here was measured on the machine named, on the date given.

2026-10-03 proto-metal / igneum-bench, first run

@@ -442,7 +442,15 @@ th{font-family:var(--f-mono);font-size:12px;letter-spacing:.12em;text-transform:

Two defects the harness found on the way, both fixed on the branch: after a guard kill with the job queue not full, the fill loop's continue re-ran the failed stdin write forever (140,000 lines in 45 s, no restart, no STATUS; 501363e0); and the 60 s line-read timeout meant no STATUS line at all while a worker was silent (945153ab: the read now waits one status interval). The "first healthy STATUS" figures above are bounded by the 10 s status interval: the worker is back about 2.5 s after a trip, the next STATUS line reports it.

App watchdog (src/watchdog.rs), one engine run, the fake worker as the Metal worker, steps in order:

StepWhat happenedResultSeconds
own-restartthe worker reports jobs done in 0.3 msthe miner's guard restarted the worker; the card showed the fault and worker faults 1; the app did NOT restart the miner (same pid, app restarts 0)fault on the card 1.0 after injection, mining again 9.1 after the fault
zero-oncejobs complete with 0 hasheswatchdog: hash rate 0 for 60 s while the node is synced; one app restart; mining on the new miner processzero to restart 79.6 (60 s rule plus the status interval and the quit grace), restart to mining 11.3, zero to mining 91.0
zero-faultedthe same again inside five minutescard faulted: hash rate 0 for 60 s while the node is synced (restarted once already); 45 s later still faulted, no miner process, no further restart; the node kept running and the app stayed up; resume cleared it and mining resumedzero to faulted 75.4
no-statusthe miner process stopped with SIGSTOPwatchdog: no status line from the miner for 90 s; the stopped process killed; mining on a new processquiet to restart 90.4, restart to mining 11.0
node-silentthe node process stopped with SIGSTOPthe app restarted the node in-process (the remote-job restart kind), the new node synced, mining resumedquiet to restart 150.7 (120 s rule plus the 30 s terminate grace on a process that cannot answer SIGTERM), restart to synced 7.2, quiet to mining 160.0
-

Not measured: any real GPU. The job-time and interval guards, exit 43 and the app's faulted card have not run on an RTX 5090, the gfx1036 or a Metal card; the first real run is owed from the fleet logs. The "no status" rule has not been tried against a hung RPC (only a stopped process). Unit tests: cargo test -p igneum-miner -- guard (7) and cargo test -- watchdog in app/igneum-app (11), both replaying recorded STATUS and WORKER FAULT lines.

+

Not measured: any real GPU. The job-time and interval guards, exit 43 and the app's faulted card have not run on an RTX 5090, the gfx1036 or a Metal card; the first real run is owed from the fleet logs. The "no status" rule has not been tried against a hung RPC (only a stopped process). Unit tests: cargo test -p igneum-miner -- guard (7) and cargo test -- watchdog in app/igneum-app (11), both replaying recorded STATUS and WORKER FAULT lines.

+

4 October 2026 (evening), the software dev fee measured on a test network: 9 fee blocks in 785, the chain and the miners' counters agree

+

Decision of the evening: the Igneum Miner software takes a visible, switchable 1% dev fee (one block template in 100 requested with the dev payout address, chosen by a template counter, never at random); the protocol carries no fee. Branch dev-fee of both repositories; docs/design/miner-dev-fee.md; FUD ledger E18.

+

Machine: Apple M5 Max, macOS 26.6.2, load 140 to 170 (many other agents' builds and runs alongside; only counts were taken, no rates). Network: node tools/dev-fee/run.mjs --secs 600 --hold-ms 500, two devnet-v4 nodes (igneumd 3bfe346f) on 127.0.0.1 ports 29900 and 29910, network id igneum-devnet-957, the fast-time profile with proof of work skipped and genesis_bits at the floor so a CPU stub miner solves every template it holds. Three igneum-miner processes (dev-fee branch a2c7ba83, --engine stub, 1 thread, exponential hold with mean 500 ms, no voting), each paying its own test address: a and b at the default --dev-fee 1, c the control at --dev-fee 0. 600 s. Then igneum-miner payouts on both nodes: every block the node holds, counted by the IGNA payout address in its coinbase.

+

What the miners printed at start, verbatim:

+

dev fee 1% (1 block in 100) to 0xdfaea67368f3e3753397d878f97efe6aa8020c2e; --dev-fee 0 turns it off (a, b) dev fee off (--dev-fee 0); the default is 1% (1 block in 100) to 0xdfaea67368f3e3753397d878f97efe6aa8020c2e (c)

+
Miner--dev-feeBlocks found (its summary)Rejectedfee= in its summarydev-fee block linesBlocks to its own address on the chain
a1 (default)385055380
b1400044396
c0 (control)397000397
+

The chain (payouts, identical on node 0, the miners' node, and node 1, its peer): 1,183 blocks; 380 + 396 + 397 to the three user addresses, 9 to the dev-fee address 0xdfaea6...0c2e (0.761% of all blocks, 1.146% of the 785 blocks of the two fee-paying miners), and 1 block with no IGNA field, the genesis block. Found per miner = own blocks + fee blocks exactly (380 + 5, 396 + 4, 397 + 0), so every fee block the miners logged is on the chain and no other block went to the dev address. The control miner paid nothing.

+

Reading. The expectation is 1 in 100 templates; the stub miner found a block on most but not every template once the difficulty had risen on three miners at about 2 blocks/s against the 1 block/s target (a and b held about 500 templates each, 5 and 4 of them fee templates at positions 99, 199, ..., and converted 77 to 80% of templates into blocks), so the block share lands near 1% with the sampling noise of 9 events (1.15% here). The exactness claim is on the template side and is the unit test (dev_fee_tests: 100 of 10,000 at positions 99, 199, ...; 0 at --dev-fee 0; exact at 2 to 100%); the chain test shows the fee blocks reach the chain and are counted the same by the miner and by both nodes. Not measured: worker (GPU) mode, where the fee template is one of the templates the background fetcher rotates through once a second per identity, so the share is 1 in 100 templates by time, not by job; and nothing on Windows.

Generated from the repository at build time. Times are UTC. Machine names are model names.

diff --git a/site/index.html b/site/index.html index 22e9720e2..9d6c2f405 100644 --- a/site/index.html +++ b/site/index.html @@ -561,7 +561,7 @@ pre{margin:0;font-family:var(--f-mono);font-size:13px;line-height:1.6;color:var( - +