igneum/docs/design/miner-dev-fee.md
igneum-labs 7eed16a29a Pre-public scrub, the text pass (7 October 2026, 19:5x UK): no founder name, personal login, earlier business or personal address in any tracked text file, and a gate check that keeps it so
The sweep (main's item 1): 199 tracked text files, 783 lines. The founder's full name, first name and possessive become "the founder" (sentence starts capitalised); the lowercase operating-system user name in WSL paths and commands becomes <user>; the second owner login becomes "the second owner login"; the three earlier businesses and the two other brands become "the other business", "the earlier entity", "the earlier business" and "another brand"; the Chrome profile rule names the igneum.network profile, not the profile's label. The standing commit login igneum-labs is not a founder term here: the fresh-repository step renames it in the history (docs/plans/history-rewrite.md, tools/repo/fresh-repo.sh).

The patterns never appear in plain text in the tree (a plaintext list would be the hit): tools/ci/founder-strings.b64 (perl regex, tab, a sample per row) is read by tools/ci/founder-strings-check.sh (every tracked text file, perl, known-failed first: the self-test plants each row's sample in a fixture and the hit must name the file), by tools/community/discord-hooks.mjs (the guard's founder and business rows; the test takes its fixtures from the samples) and by tools/repo/fresh-repo.sh (the business names of the rewrite rules). site/forbidden-strings.txt carries the same patterns as b64: lines, decoded case-insensitive by site/scrub.mjs and tools/ci/launch-gates-check.mjs (whose fixture now plants an encoded made-up name). The check runs in the gate's tree checks on every merge.

Not in this commit, by main's word: the 105 commit messages and 40 personal-identity commits that need the history rewrite (listed, not run), and the secrets found by gitleaks over the history (reported with owners).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:39:50 +00:00

72 lines
4.9 KiB
Markdown

# The miner software's dev fee
Decision (the founder, 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 founder'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).