10 KiB
Igneum Miner for HiveOS
The Igneum miner as a HiveOS custom miner: igneum-hive-<version>.tar.gz holds the Linux igneum-miner, igneumd,
the two GPU workers (igneum-worker-cuda for NVIDIA, igneum-worker-opencl for AMD) and the four hooks Hive runs
(h-manifest.conf, h-config.sh, h-run.sh, h-stats.sh). Built on 4 October 2026. Hive itself is untested: the
scripts were self-tested with stub binaries (selftest.sh) and the binaries were cross-compiled on a Mac; the first real
run on a Hive rig is still to come. Report what breaks.
A HiveOS rig mines only. The package (make-hive-package.sh) carries igneumd, igneum-miner and the two
workers; no igneum-prove-host, no igneum-prove-export, no SP1 GPU server. So a rig on this package earns from the
80% lottery share and nothing from the 20% proving share until a Linux prover build is published. The Ubuntu rig
installer (packaging/linux/README.md, branch rig-install, commit dd632c1) carries a prover unit that idles in state
setup for the same reason; its per-card table is the fuller version of the one below. What each card could do once
the prover ships, from the app's default (app/igneum-app/src/provedefault.rs at 440fd59 on proving-v1: proving on
at 24 GB or more, off below) and from the proving agent's S_p curve of 5 October 2026 (docs/bench-log.md, "proving
v1": jobs memsweep-pc2-pv1, memminer-pc2-pv1 and the S_p curve, one RTX 5090, SP1 6.8.1's GPU server):
| Card | Once a Linux prover ships | Measured on 5 October 2026 |
|---|---|---|
| 8 GB | mines only | the prover's floor is 13.9 GB for an empty shard |
| 12 GB | mines only; proves nothing on this SP1 build | the same 13.9 GB floor |
| 16 GB | in practice mines only: proves empty shards alone, nothing beside the miner | 13.9 GB alone; 15.7 GB beside the miner leaves nothing for the display |
| 24 GB | proves the adopted v1 shard (30,000 pgas) from the fee switch at DAA 210,000, nothing before it | 20.4 GB alone, about 22 GB beside the miner (approximate, not measured on a 24 GB card); the prototype shard at 28.3 GB does not fit |
| 32 GB | mines and proves, prototype shard included | 28.3 GB alone, 30.0 GB beside the miner, 2.5 GB spare |
Flight Sheet
| Field | Value |
|---|---|
| Miner | Custom |
| Installation URL | https://<host>/igneum-hive-<version>.tar.gz (the archive from make-hive-package.sh, published on the download host) |
| Miner name | igneum |
| Wallet and worker template | 0x<40 hex>.%WORKER_NAME%: the payout address is an EVM address you hold the key for; the part after the dot labels this rig's keys |
| Pool URL | grpc://<your node>:26610 (your own igneumd, solo mining), local to run the bundled node on the rig, or pool://<pool host>:4463 to mine to a pool (spec 09; NODE=local in the extra config adds a verifier node for voting) |
| Pass | empty |
| OVERRIDE | the devnet's consensus override as one JSON object on its own line, needed with local: OVERRIDE={"difficulty_v2_activation_daa":33000,"proving_v0_activation_daa":84100,"fees_v1_activation_daa":210000,"finality_v3_activation_daa":135200} is the four-field object 0.3.10 shipped; after the 0.3.11 switch it has nine fields, and the downloads page carries the live one. Set OVERRIDE from the downloads page when it changes. A rig without it is refused: its node runs on genesis parameters, prints another digest, and every devnet peer drops it (h-run.sh warns in the main log) |
| Extra config arguments | DEV_FEE=1 IDENTITIES=auto WORKER=auto VOTE=1 (one per line also works); PEERS=a:26611,b:26611 for the bundled node; NODE=local or NODE=grpc://host:26610 for the verifier node in pool mode; EXTRA="..." for more miner flags |
| IDENTITIES | vote keys per card: 8 for a card with 8 GB or more, else 2 (IDENTITIES=auto applies that rule, per card, from nvidia-smi or the amdgpu sysfs; 8 when neither answers; a number overrides it for every card). The rule is the app's (app/igneum-app/src/detect.rs) |
Solo mining: each card mines block templates from the node and the block reward pays the wallet in the template (80% of each block to its finder, 20% to the proving pool; the protocol takes no fee for anyone).
Pool mining (5 October 2026, pool/README.md): with pool://host:4463 each card runs igneum-miner ... --pool host:4463 --evm-address <wallet> --worker-name <label>-gpuN; the pool names this rig's own vote key in every header (one key per
rig, IDENTITIES is ignored), pays the wallet by PPLNS on the EVM side, and the miner takes no software dev fee in pool
mode (the pool's fee, printed in its welcome line, is the only fee). With NODE=local the bundled node runs beside the
cards as the verifier: the miner checks the pool's seeds and templates against it, votes with the rig's key through it
and submits found blocks there too. Without a node the rig hashes and does not vote. Untested on a Hive rig, like the rest
of this package.
The dev fee
The Igneum miner software takes a 1% dev fee the way every GPU miner does (lolMiner, T-Rex): one block template in
100 is requested with the dev payout address instead of yours. It is a counter, not a random draw, so it is exactly
1 in 100 and anyone can audit it from the source (igneum/miner/src/main.rs, "Software dev fee") or from the chain
(igneum-miner payouts grpc://<node>:26610 lists blocks per payout address). DEV_FEE=0 in the extra config turns it
off. The miner prints its own line at start, in each GPU's log:
dev fee 1% (1 block in 100) to 0x<address>; --dev-fee 0 turns it off
The protocol carries no fee: this is the software's, and any other miner client is welcome.
What the hooks do
| Hook | What |
|---|---|
h-config.sh |
writes igneum.conf from the Flight Sheet (node URL, wallet, label, DEV_FEE, IDENTITIES, WORKER, VOTE, PEERS, EXTRA, OVERRIDE); refuses an OVERRIDE that is not {...}; resolves IDENTITIES=auto to IDENTITIES_GPU<N> keys by VRAM; refuses a wallet that is not 0x + 40 hex |
h-run.sh |
starts the bundled node when the URL is local (writes data/override-params.json from OVERRIDE and passes --override-params-file; warns when OVERRIDE is empty; copies the node's switch lines and its Consensus params digest line into the main log), waits for the node, exports the hourly program pack (igneum-miner export-pack), then one igneum-miner per GPU with its worker (--identities from IDENTITIES_GPU<N>, else IDENTITIES); restarts a miner that exits (exit 42 = program change without prepare support: the pack is re-exported first); per-GPU logs <log>.gpu<N>.log, merged into the main log |
h-stats.sh |
per-GPU hash rate from each miner's last STATUS line (now=<MH/s>), accepted and rejected totals, dev-fee block count, temperatures and fans from Hive's gpu-stats (else nvidia-smi), uptime, version |
Stats JSON (what Hive reads from $stats): hs (kH/s per GPU), hs_units (khs), temp, fan, uptime (s),
ver, ar ([accepted, rejected]), algo (igneum), bus_numbers, plus dev_fee_blocks (ours). $khs is the total.
Requirements on the rig
- NVIDIA: the driver (
libcuda.so.1) and NVRTC (libnvrtc.so.12, from a CUDA 12 toolkit or the NVRTC redistributable on the library path). The worker compiles the hourly program at run time with NVRTC; without the library it says so and the miner retries. Hive images ship the driver; whetherlibnvrtc.so.12is present depends on the image, untested. - AMD: an OpenCL ICD (
libOpenCL.so.1from ROCm or amdgpu-pro). The OpenCL worker compiles the program through the ICD. - The bundled node (
local) keeps its chain data under the miner folder (data/); a devnet chain is small today. It needs OVERRIDE (the Flight Sheet table): compare thenode: Consensus params digest:line in the main log with the digest on the downloads page; a different one means the override is stale and the node is refused. - Ports: the bundled node listens on 26611 (p2p) and answers RPC on 127.0.0.1:26610 only.
Shipped packs (0.3.22)
make-hive-package.sh --kit <zip> (repeatable) puts program-pack kits under packs/ in the archive: the class v4 sub-version 3
kit (eight packs, program_id a785001687d8688a for the shared devnet's epoch 0) and Devnet 3's epoch-0 pack
v4-devnet3-epoch0 (program_id fce15bf61030be57, exported under igneum-pow 017e7037 over genesis 4020cb43 as epoch and
era seed, day bytes for 7 October UTC). They are the rig's FIRST-START convenience: h-run.sh seeds packs/devnet from the
shipped pack only when the node's own export left nothing, so a rig mines from its first start; the pack is dated, and a rig
starting after epoch 0 (3,600 DAA) re-exports from its own node as before. The shipped pack is never the authority; the
pack-id gate reads program.json's program_id.
Building the package
infra/cross/build-linux.sh # igneumd and igneum-miner for Linux (cargo-zigbuild), into infra/cross/out
infra/cross/build-workers-linux.sh # the two workers (zig c++ and zig cc), into infra/cross/out-workers
packaging/hive/make-hive-package.sh # the archive, sha256 and the Flight Sheet lines; NODE_OUT=infra/cross/out-v2 to pick a build
packaging/hive/selftest.sh # bash -n, a stub package, the three hooks the way Hive runs them
Known gaps (4 October 2026)
- Never run on Hive. The hook contract follows Hive's custom-miner README (archive
name-version.tar.gzwith the directoryname/;h-config.shandh-stats.share sourced;$khsand$stats), approximate until a rig confirms it. - GPU order: the CUDA device index is assumed to follow
nvidia-smiorder and Hive'sgpu-statsarrays (NVIDIA first); a mixed NVIDIA and AMD rig may show temperatures against the wrong card. - Each card runs its own
igneum-minerand node connection; the node's template RPC serves them all. - Before this change no package carried the override:
h-run.shstarted the node without--override-params-file, so alocalrig was refused by every devnet peer (release 0.3.11, section 5, C41). Still untested on a rig. - No prover in the package (the second paragraph above): the rig earns nothing from the proving share until a Linux prover build ships.