Mainnet launch runbook
The difficulty schedule (ASERT) is anchored at the genesis block's timestamp. A genesis in the past keeps difficulty at the minimum until the chain catches up; a genesis in the future makes mining impossible until then. So the mainnet genesis time is set once, at launch, to the announced launch moment. Everything below is in order; do not skip steps.
T minus 2 weeks
- Freeze consensus:
docs/SPEC.md§13 open items resolved, external review findings closed (docs/SECURITY-REVIEW.md),go test ./...and the fuzzers green on Linux, macOS and Windows. - Decide the launch moment
T(unix seconds, UTC). Announce it publicly with the genesis message that will be embedded. - Final names: chain name, unit name, address prefix (
HRPinconsensus/params.go), ports, user agent. Changing the HRP after this point invalidates every printed address. - Stand up at least three seed nodes (
deploy/README.md) on testnet first; confirm they peer with each other.
T minus 1 day
- Mine the genesis block for
T:
It prints the nonce and hash. Pastego run ./cmd/genesis -time <T> -message "<the announced message>" mainnetTintogenesisTimeand the nonce intoMainNet'sgenesisSpecinconsensus/params.go. Record the hash inREADME.md. go test ./consensus/must pass (TestGenesisBlocksValidchecks the proof of work, the chain tag and the round trip).- Set the DNS seeds and hardcoded seed IPs in
cmd/argonmined/main.goandcmd/argonmine-app/main.go. Create the DNS records. - Build the release:
scripts/release.ps1 -Version 1.0.0(orscripts/release.sh 1.0.0). Publish the zips andSHA256SUMS; sign the checksum file with a key announced in advance. - Deploy the release to the seed nodes with
-network mainnet. They will sit at height 0 and refuse to mine untilT(block timestamps must exceed the genesis time).
T
- Start mining on at least one node you control so the first blocks arrive
on schedule; stop when public hashrate takes over. Never premine: the
genesis coinbase is unspendable by rule and the first real block is at
height 1, after
T. - Watch
getblockchaininfoon every seed: heights equal, same best hash. - Start the explorer against a seed node; it also serves work to browser miners.
T plus 1 hour and later
- Check ASERT behaviour:
difficultyshould move smoothly toward the 600-second target as hashrate arrives. If blocks are coming faster than one per minute for over an hour, something is wrong with the anchor; stop and investigate before more coins are issued. - Keep the signing key and seed node credentials offline. Rotate the RPC tokens.
- Tag the release commit; from now on every consensus change is a scheduled hard fork with a version bump (SPEC §3.2).
Abort criteria
Abort before T if any of: tests red, a seed node unreachable, a review
finding of High or Critical severity open, or the genesis hash in the release
binaries does not match the one you mined. After T, a consensus bug means a
coordinated restart with a new genesis; announce, do not patch silently.