Download v29.4.1.knots20260508rc4 for your architecture (for example x86_64-linux-gnu or aarch64-linux-gnu) from the test directory. These are not the published files on bitcoinknots.org:
test.bitcoinknots.org RC4 directory
Check the build against SHA256SUMS and SHA256SUMS.asc in that directory. Do not set chain=testnet4.
Install RC4 as an upgrade of a fully synced mainnet node. First run published Knots 29.4.knots20260508 until the tip is current, then replace that binary with RC4 and keep the same data directory. Get 29.4 from the 29.4.knots20260508 files or from the Bitcoin Knots download page.
1. Knots on mainnet
Minimal bitcoin.conf:
server=1
txindex=1
blake2b_headline=8-30 NYPost Deride And Conquer
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
rpcuser=USER
rpcpassword=PASS
# optional: notify DATUM on new blocks
blocknotify=curl -fsS -o /dev/null http://127.0.0.1:7152/NOTIFY
Default P2P port is 8333. Forward inbound TCP 8333 on your router to this machine so other nodes can connect to you. Default RPC port is 8332. Leave RPC on localhost.
bitcoin-cli getblockchaininfo
bitcoin-cli getdeploymentinfo # hardfork.height == 961640
2. DATUM Gateway fork
git clone https://github.com/innerhat-dev/datum_gateway.git
cd datum_gateway
# build per README (cmake + libmicrohttpd, jansson, curl, libsodium, …)
Use a build that includes commit 56c31f4 (pow: Include header-v2 bit in BLAKE2b H1 commitment version) or later. Without that change, share proof of work will not match Knots RC4 GetHash.
Example datum_gateway_config.json:
{
"bitcoind": {
"rpcuser": "USER",
"rpcpassword": "PASS",
"rpcurl": "http://127.0.0.1:8332"
},
"stratum": { "listen_addr": "0.0.0.0", "listen_port": 23334 },
"api": {
"listen_addr": "0.0.0.0",
"listen_port": 7152,
"admin_password": "CHANGE_ME",
"modify_conf": true
},
"mining": {
"pool_address": "bc1q…your_mainnet_address…",
"coinbase_tag_primary": "MyTag",
"coinbase_tag_secondary": "8-30 NYPost Deride And Conquer",
"pow_algorithm": "auto"
},
"datum": { "pool_host": "", "pooled_mining_only": false }
}
datum_gateway -c /path/to/datum_gateway_config.json
- UI:
http://HOST:7152(digest auth usesadmin_password) - Stratum:
stratum+tcp://HOST:23334
Keep "pow_algorithm": "auto". Do not force "blake2b" before block height 961640. Set coinbase_tag_secondary to exactly 8-30 NYPost Deride And Conquer. Knots requires the headline bytes in the coinbase. This DATUM build does not copy coinbaseaux.blake2b_headline into the coinbase for you, so the secondary tag is how those bytes get into scriptSig.
3. Miners
| When | Work | Useful hardware |
|---|---|---|
| Tip at or below block 961639 | SHA256d | S9 / Bitaxe / similar |
| Tip at or after block 961640 | BLAKE2b (header v2) | BLAKE2b and BLAKE2b-sia miners |
Point the miner at your stratum URL. The username can be any worker name DATUM accepts. A payout address is a common choice.
After activation, confirm GBT advertises blake2b:
bitcoin-cli getblocktemplate '{"rules":["segwit","blake2b"]}'
# expect "!blake2b" in rules; coinbaseaux.blake2b_headline should be hex for 8-30 NYPost Deride And Conquer
4. Optional peer
addnode=OTHER_HOST:8333
What working looks like
Before activation (tip at or below block 961639)
- Knots syncs mainnet.
getdeploymentinfoshows hardfork block height 961640 andactive: false. - GBT does not yet require blake2b: no
!blake2binrules.coinbaseauxis typically empty even if the client advertises blake2b support. - DATUM with
autoserves SHA256d stratum jobs. SHA256d miners connect, get work, and submit shares. - BLAKE2b and BLAKE2b-sia miners are not useful yet. They need BLAKE2b jobs after the hardfork.
At and after activation (tip at or after block 961640)
getdeploymentinforeports hardforkactive: true.- GBT from a client that supports blake2b shows
!blake2bandcoinbaseaux.blake2b_headline(hex for8-30 NYPost Deride And Conquer). - DATUM
autoswitches to BLAKE2b / header v2 jobs (Sia-style notify: commitmentcoinb1, JSON merkle[], longerntimeandnoncefields, and related fields). - A BLAKE2b or BLAKE2b-sia miner connects, hashes, and submits shares. Hashrate shows up in DATUM stats and the UI.
- On a real block you should see
BLOCK FOUND - <hash>, and the new tip hash should be that same hash. - Knots accepts the block via
submitblock. A second log line sayingduplicateis normal. DATUM submits twice; one path wins. - You should not see intermittent
high-hashon valid BLAKE2b or BLAKE2b-sia blocks if DATUM is at56c31f4or later. Older builds hashed H1 without wire bit0x80000000, so DATUM's block hash often disagreed with Knots: about a coin-flip on easy regtest, and almost all rejects at real difficulty.
Quick health checks
- Miners stay connected and jobs refresh on new tips.
- Shares are accepted. You are not flooded with unknown-work or high-hash rejects.
- After the hardfork, the
BLOCK FOUNDhash equals the new chain tip. - The node has
blake2b_headline=8-30 NYPost Deride And Conquer, DATUM's secondary tag is8-30 NYPost Deride And Conquer, and those headline bytes are present in the coinbase.
Common mistakes
- Forcing
"pow_algorithm": "blake2b"before block height 961640 produces bad templates and rejects. - If the node is set to
8-30 NYPost Deride And Conquerbut the coinbase never contains8-30 NYPost Deride And Conquer, Knots rejects the block withHeadline is wrong. - DATUM older than
56c31f4can printBLOCK FOUNDand then intermittent or frequenthigh-hash. - Setting
chain=testnet4or peering on 48333. Mainnet P2P is 8333. - Leaving 8333 closed on the router. The node can still make outbound peers, but inbound peers cannot reach you.
Checklist
- A mainnet datadir fully synced on published Knots 29.4, then RC4 from the URL above, with
blake2b_headlineset to8-30 NYPost Deride And Conquer. - DATUM fork at
56c31f4or later,auto, and secondary tag8-30 NYPost Deride And Conquer. - Through block 961639: SHA256d miners. From block 961640: BLAKE2b and BLAKE2b-sia miners on stratum port 23334.
- Watch the tip reach block height 961640, then start BLAKE2b miners.
- Confirm the
BLOCK FOUNDhash matches the tip. Ignore a benign dual-submitduplicate.