Fork release-0.3.6 final tip 2b6d23ef = a11455e7 (testnet-params merged, the fee height switch) + cf369022 (the release dev-fee address 0x7F45d7d7272e57639BeBb739A60B05bB2CD4C126, docs/design/miner-dev-fee.md updated here) + the miner-latency merge, which landed only after the miner suite (15 passed), the 3-node fast-time run (243 blocks, 0 rejected, 0 red, sinks agree, switched p50 46 to 52 ms) and the dev-fee harness (8 of 8 fee blocks on chain, control at 0) passed on the merged tree. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
72 lines
4.9 KiB
Markdown
72 lines
4.9 KiB
Markdown
# The miner software's dev fee
|
|
|
|
Decision (the project lead, 4 October 2026, evening): the Igneum miner software takes a visible, switchable 1% dev fee, the norm
|
|
for GPU miners (lolMiner, T-Rex). The protocol stays fee-free: no dev fund, no fee to any team, foundation or fund
|
|
(CLAUDE.md, litepaper). This fee is the software's, like every third-party miner's, and it is documented as such.
|
|
|
|
## Mechanism
|
|
|
|
Solo mining, no pool: the miner asks its node for block templates with a payout address. One template in 100 is
|
|
requested with the dev payout address instead of the user's. The choice is a template counter, never a random draw,
|
|
so it is exactly 1 in 100 and anyone can audit it from the source: template `n` (counting from 0) is a fee template
|
|
when `floor((n + 1) p / 100) > floor(n p / 100)`, which at `p = 1` is the templates 99, 199, 299, ... Every template
|
|
is mined for the same time, so fee blocks are `p` in 100 on average.
|
|
|
|
What changes on a fee template, and what does not:
|
|
|
|
| Field | User template | Fee template |
|
|
|---|---|---|
|
|
| Coinbase extra data `IGNA` address (the execution-layer payout the chain pays) | the user's `--evm-address` | the dev address |
|
|
| Vote key hash (finality weight) | the user's | the user's, unchanged |
|
|
| UTXO-side coinbase script (`--address`, a label address with no key in the app) | the user's | the user's, unchanged |
|
|
|
|
So a fee block still adds to the user's finality weight, and the only thing that moves is who the execution layer
|
|
pays for that block.
|
|
|
|
Source: `vendor/igneum-node-v4` branch `dev-fee`, `igneum/miner/src/main.rs`, section "Software dev fee"
|
|
(`DevFee`, `fee_slot`, `Identity::with_dev_fee_address`, `template(.., fee)`, `submit(.., fee)`, `payouts`).
|
|
|
|
## The flag, the lines, the counter
|
|
|
|
| Where | What |
|
|
|---|---|
|
|
| `igneum-miner mine ... --dev-fee <percent>` | whole percent of templates; default 1; `--dev-fee 0` turns it off |
|
|
| Start line, on | `dev fee 1% (1 block in 100) to 0x<address>; --dev-fee 0 turns it off` |
|
|
| Start line, off | `dev fee off (--dev-fee 0); the default is 1% (1 block in 100) to 0x<address>` |
|
|
| Start line, no release address (a build whose `DEV_FEE_ADDRESS` is not 40 hex; none since 5 October 2026) | `dev fee off: no release address is set (DEV_FEE_ADDRESS placeholder in igneum/miner/src/main.rs)` |
|
|
| Per fee block accepted | `dev-fee block <hash>` |
|
|
| Status line (CPU and worker modes) and `MINER SUMMARY` | `fee=N` |
|
|
| `igneum-miner payouts <grpc url>` | blocks per `IGNA` payout address over every block the node holds, with the share; the dev address is tagged `(dev fee)` |
|
|
|
|
The app (Igneum Miner): Settings shows the same line next to the rewards address with a switch, stored in
|
|
`settings.json` as `dev_fee` (default on); off passes `--dev-fee 0`. The dashboard's "your blocks" row shows the
|
|
lifetime dev-fee block count; each fee block is also an event. The HiveOS package: `DEV_FEE=0` in the Flight Sheet's
|
|
extra config.
|
|
|
|
## The addresses
|
|
|
|
| Constant (`igneum/miner/src/main.rs`) | Value | Network |
|
|
|---|---|---|
|
|
| `DEV_FEE_ADDRESS` | `0x7F45d7d7272e57639BeBb739A60B05bB2CD4C126`: the project lead's payout address from the Igneum Wallet, given 5 October 2026, EIP-55 checksum verified, on file at `~/.config/igneum/dev-fee-release.json`; set on the fork's `release-0.3.6` (commit cf369022). Were it ever not 40 hex the fee would be off outside the devnet and the miner would say so at start | mainnet, testnet |
|
|
| `DEV_FEE_ADDRESS_DEVNET` | `0xdfaea67368f3e3753397d878f97efe6aa8020c2e` | devnet and simnet only |
|
|
|
|
The devnet address was generated on 4 October 2026 with the app's own key derivation (secp256k1, keccak of the
|
|
uncompressed public key, `app/igneum-app/src/keys.rs`), checked against the known vector for key 0x01. The private key
|
|
is held outside the repository (the maintainers' local secret store, mode 0600) and never in any commit. Devnet coins
|
|
have no value and the devnet may be reset; this address is never a release address.
|
|
|
|
## Tests and measurement
|
|
|
|
- Unit tests (`cargo test --release -p igneum-miner dev_fee_tests`): exactly 100 fee templates in 10,000 at 1%, at
|
|
positions 99, 199, ...; 0 at `--dev-fee 0`; 2, 3, 5, 10, 50 and 100% exact over 10,000; a fee template carries the
|
|
dev `IGNA` address and the user's unchanged key reveal; the release address pays the fee on mainnet and testnet (and
|
|
never the devnet address), and a non-hex placeholder keeps the fee off.
|
|
- Test network: `node tools/dev-fee/run.mjs` (two nodes on 29900+, fast-time profile, proof of work skipped and the
|
|
genesis target at the floor, three CPU stub miners: two at the default fee and one control at `--dev-fee 0`), then
|
|
`igneum-miner payouts` on the peer node. The numbers are in `docs/bench-log.md` under "the software dev fee measured".
|
|
|
|
## Public text
|
|
|
|
- Litepaper, "For miners", "What a miner's hour looks like": the fee paragraph.
|
|
- Homepage, the miner section's download note.
|
|
- `docs/fud-ledger.md`: entry E18 (software-level, switchable, the audit).
|