igneum/docs/testnet/README.md

12 KiB

Igneum public testnet: identity, parameters and reset policy (ADOPTED 5 October 2026; genesis RE-CUT 7 October 2026)

Every value in this file was proposed on the night of 4 October 2026 and ADOPTED by the owner on 5 October 2026, as proposed (sign-off recorded in docs/plans/release-0.3.6.md). The genesis below is the one the proposal computed; its values did not change at the sign-off, so the hash stands. The code was written on the node fork's branch testnet-params (worktree vendor/igneum-node-testnet, forked from finality-fixes at 6aa69a45) and merged on 5 October 2026 into the fork's release-0.3.6 (worktree vendor/igneum-node-036), with one change the sign-off added: the devnet and the simnet keep the prototype fee set until a height switch (fees_v1_activation_daa) or a fees object in the override file moves them; the testnet and the mainnet carry calibrated v1 from genesis (section 3). The devnet's switch is DAA score 210,000 (5 October 2026, docs/plans/fee-switch-devnet.md). The three seed nodes went up on 5 October 2026 from the 5 October genesis (docs/plans/testnet-go.md); nothing mines until the owner's go.

RE-CUT 7 October 2026 (the project lead's approvals of 09:3x UK, docs/plans/ledger-decisions.md "Decisions (7 October 2026, 09:3x UK)"): one cut with 18 decimals (O-2.6, the 16-byte coinbase subsidy), EmissionSchedule::TESTNET_1, and every switch on from genesis. The genesis hash and the consensus digest below are the re-cut's; the seeds still hold the 5 October chain at height 0 and move to the re-cut binary only on the project lead's go (docs/plans/testnet-go.md, the cut-over runbook). Fork branch testnet-genesis-2-node (release-0.3.18-node e69e8a39, the decimals branch df2fbd03, the vote-or-burn removal 420f9305).

1. Identity

Field Devnet (live today) Testnet (adopted) Where
Network id (handshake string, data directory) igneum-devnet igneum-testnet-1 consensus/core/src/network.rs, NetworkId::to_prefixed
Network type and suffix Devnet, none Testnet, suffix 1 config/params.rs, From<NetworkId>: only suffix 1 resolves; any other suffix is refused
EVM chain id 4463 4462 consensus/core/src/evm.rs, evm_chain_id (mainnet 4461)
Address prefix igneumdev igneumtest crypto/addresses
gRPC port 26610 26810 network.rs, default_rpc_port
P2P port 26611 26811 network.rs, default_p2p_port (a later suffix takes the next port)
wRPC Borsh, JSON 27610, 28610 27810, 28810 network.rs
EVM JSON-RPC port 26790 26890 igneum/exec/src/config.rs, default_evm_rpc_port
DNS seeders none seed1.testnet.igneum.network, seed2.testnet.igneum.network, seed3.testnet.igneum.network (A records on deSEC, infra/seed-nodes/dns.sh; Nuremberg, Ashburn, Singapore) TESTNET_PARAMS.dns_seeders
Override file (--override-params-file) allowed refused, as on mainnet kaspad/src/daemon.rs
IGNEUM_POW_* environment ignored by the node from this branch (G12: the params' schedule is installed on every start) ignored kaspad/src/daemon.rs

Start a node on it: igneumd --testnet (the flag --testnet is "Use the Igneum test network"; --netsuffix defaults to 1 in kaspad/src/args.rs since 5 October 2026, so --netsuffix=1 is implied). The public JSON-RPC is https://rpc.testnet.igneum.network (seed1, nginx with TLS and a rate limit, an allowlist of eth_* and igneum_* read methods plus eth_sendRawTransaction; infra/seed-nodes/rpc/).

2. Genesis

Field Value Note
Timestamp 1,791,158,400,000 ms = 2026-10-05T00:00:00Z (0x1a1095c3400) frozen; adopted 5 October 2026
Bits 0x1d100000 (2^28 expected hashes per block) the devnet's launch difficulty, sized for a few hundred MH/s; the DAA takes over after 150 samples (600 blocks); re-size to the announced launch fleet
Nonce, DAA score 0, 0
UTXO commitment empty
Coinbase payload message igneum-testnet-1 | 2026-10-05 | coins here have no value | resets are announced after the OP-FALSE script, as the devnet's igneum-devnet. FINAL 5 October 2026 (fork branch testnet-infra, 1c19441d): the proposal's "proposed, not final" was dropped before the first public node started, as docs/plans/release-0.3.6.md section 6 required. The message never changes again on igneum-testnet-1
Coinbase payload subsidy field 16 little-endian bytes, one IGN = 10^18 base units the 18-decimal layout (O-2.6, docs/design/base-unit.md section 3); block 1 merges the genesis and reads this field at the network's unit
Hash 01294fd322704dc28fbef0e7a5ef86d6ee260ac5efaf88891cdba661b5fd58ac RE-CUT 7 October 2026, computed on igneum-build-1 by print_genesis_hashes (two runs: the merkle root first, then the header hash over it), pinned by test_genesis_hashes and igneum_testnet_identity. The 5 October hash 87617621... (8-byte subsidy layout, the chain the seeds hold at height 0 until the cut-over) and the proposals 52a3e6a9... and 494fc9a3... are void
Merkle root bcd0e8fb1099aeb3cc1370b50e6dec9f615e204374b2097f25b2438e7d22f49f same (5 October: 44acfc40...)
Consensus digest 9390d235ad1543e2aa4b49013092bd45e39a917f312610e2bd1816a65c9071e7 exchanged in the p2p handshake; a peer with another digest is refused. Pinned by igneum_testnet_identity; the whole object as override-file JSON is infra/seed-nodes/testnet-object.json (print_testnet_object). The 5 October digest b7d8c915... is void. The devnet's c562d70e... is unchanged

3. Consensus parameters

Parameter Testnet (adopted) Devnet today Why
Block rate 1 per second 1 per second spec 02
Difficulty rule Igneum dual-lane, v2 and v3 from genesis (difficulty_v3_activation_daa 0) dual-lane, v2 from DAA 33,000, v3 by the override file a fresh chain has no pre-switch history
Finality parameters FinalityParams::MAINNET: 30-day weight window (2,592,000 DAA), dust 100, presence 240, 8 aggregators, 30-day equivocation ban, min DAA 2,592,000, certificate fold 6, leave delay 3,600 DEVNET: 2-hour window, dust 5, presence 20, fold 3 the testnet runs the rule the mainnet will run; the first lock needs 30 days of weight, which is the point of a testnet
Finality rule v3 from genesis from the override file fresh chain
The DAA-second finality rule (C1) from genesis (finality_daa_rule_activation_daa 0): a checkpoint every 30 s of chain time at any block rate by the override file re-cut 7 October 2026
The signed leave item (W7) from genesis (finality_leave_activation_daa 0, delay 3,600 DAA s): a key that announces its departure is in no denominator an hour later never until the 95 percent signal the project lead, 6 October 2026, question 4
The signing bonus, no burn from genesis (signing_bonus_activation_daa 0, signing_bonus_bps 1,000): a tenth of a silent producer's subsidy share moves to the proving pool; nothing is ever destroyed; vote-or-burn is out of the tree (420f9305) never the project lead, 7 October 2026, row 2
Consensus proof verification from genesis (proving_consensus_verify_daa 0) under the shard program id 0x2b1a81cb...ef7a and the aggregator id 0x474678f3...3896 of proving/igneum-prove/elf/manifest.json (pinned 2026-10-05T16:20:38Z); a node whose embedded keys differ refuses to start; a Windows node verifies through the installed igneum-prove-host and refuses to start without it off the project lead, 6 October 2026, question 3
Program class v4 from genesis, unconditional (program_class_v4_activation_daa 0, signal window 0) v4 by miner signal fresh chain
The latency ladder active from genesis at rung 0 (latency_ladder_activation_daa 0, window 86,400 DAA, seven windows at 90 percent to step): rungs 27, 35, 53 passes admissible; 88 inadmissible (quiet-core re-measure 7 October 2026, 08:46 UK: 10.85 ms cold with the SMT sibling loaded, over the 10 ms gate); 173 and 267 inadmissible never the project lead, 7 October 2026, row 3
Base unit 18 decimals (base_unit_decimals 18): one IGN is 10^18 base units, the EVM's wei, the bridge is the identity 8 (sompi) the project lead, 6 October 2026, question 5; docs/design/base-unit.md
Proving v0 payouts from genesis from the override file fresh chain
PoW schedule epoch 3,600 DAA, lead 600, day 86,400,000 ms (the defaults) same
Coinbase payload limit 16,384 (the finality section) same
Fees FeeParams::CALIBRATED_V1 from genesis (fees_v1_activation_daa 0; docs/analysis/base-fee-floor.md): B_p 120,000 pgas, S_p 30,000, intrinsic 300, modexp 10 + 1 per 10 bytes, floors 100 gwei per gas and 10,000 gwei per pgas FeeParams::PROTOTYPE (B_p 30 M, 1 gwei), kept on the 0.3.6 node so the live chain does not change rules between builds; moves to v1 by the fees_v1_activation_daa height switch in the override file (docs/plans/release-0.3.6.md, section 5) spec 05 section 5.10
Emission EmissionSchedule::TESTNET_1 at 18 decimals: 100 IGN a block at 1 bps, a monthly glide with a two-year half-life, a 90-day ramp from 10 percent, a tail of 1 percent of supply a year from the month the glide first pays under it (about year 11.4), no hard cap (docs/analysis/tail-emission.md) CURRENT: 31.69 IGN per block in year one, halving every two years, cap 4 billion the project lead, 7 October 2026, row 1; the testnet coins have no value whatever the schedule says

Everything else (mass limits, GHOSTDAG k, merge depth, pruning) is the devnet's set, unchanged.

4. Reset policy

Rule Adopted 5 October 2026
Coins Testnet IGN has no value, cannot be bought, sold or redeemed, and is not a claim on anything at mainnet. Mainnet starts from an empty genesis. No airdrop, no points, no promise tied to a testnet balance
When the chain resets When a consensus rule changes (the lottery hash, the difficulty rule, finality, the fee table, the execution rules) and a height switch is not the right tool; or when the chain is broken beyond a height switch
Notice At least N = 7 days ahead, on igneum.network (the download page and the live page), in the app through the update manifest's note, and in the engineering log. A reset without notice is a bug report, not a policy
What carries over Nothing. Balances, contracts, nonces and history start again. Addresses stay valid (an address is a key)
Identity after a reset A consensus-changing reset takes the next suffix (igneum-testnet-2, chain id unchanged at 4462, P2P port 26812), so a node on the old rules never completes a handshake with the new chain
The devnet Keeps resetting without notice; it is a developer network. Its chain id 4463 stays separate
Who decides The project, by the sign-off that this file records; the parameters the genesis rules leave to miners (B_p, the floors) move by 60% signalling once the testnet has miners (spec 5.5)

5. What stands between this file and a public testnet

Item State
Sign-off of every value above done: adopted by the owner on 5 October 2026, as proposed
--netsuffix default 1 under --testnet done 5 October 2026 (fork testnet-infra 1c19441d)
Seed nodes and the DNS seeder list done 5 October 2026: three Hetzner seeds (infra/seed-nodes/seeds-testnet.tsv), the three names in TESTNET_PARAMS.dns_seeders; docs/plans/testnet-go.md
The public RPC and explorer the RPC is https://rpc.testnet.igneum.network (5 October 2026); the explorer is not built
The prover's table mirror and fixtures docs/analysis/base-fee-floor.md section 4
The app's testnet build branch testnet-app (5 October 2026): the packaged file's network, peers, public_rpc; the testnet's ports, seeds and node directory in app/igneum-app/src/config.rs; the release engineer cuts 0.4.0 from it at go
The params digest in the handshake (X18) done: 9390d235... for the re-cut object
The seeds on the re-cut genesis NOT DONE: the three seeds hold the 5 October chain at height 0; the cut-over (new binary, wiped data directory, the digest line read back on each) runs on the project lead's go, docs/plans/testnet-go.md
Terms on the download page site/index.html#testnet-terms, on branch testnet-prep with this file