Download v29.4.1.knots20260508rc5 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 RC5 directory

Check the build against SHA256SUMS and SHA256SUMS.asc in that directory. Do not set chain=testnet4. Keep the same data directory if you already have a mainnet node.

1. Knots on mainnet

Minimal bitcoin.conf. txindex=1 is not required for DATUM or getblocktemplate. Working nodes often add extra knobs such as consensusrules=rdts, blake2b_headline, maxtipage, and a larger mempool. blocknotify via /NOTIFY or killall -USR1 both work:

server=1

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
# blake2b.height == 961640 and blake2b.active == true
# deployments.reduced_data.height == 961640 and active == true

2. DATUM Gateway

Clone the BLAKE2b and header-v2 gateway from CONVOY:

git clone https://github.com/CONVOYMining/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 RC5 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",
    "allow_hasher_time_rolling": false
  },
  "datum": { "pool_host": "", "pooled_mining_only": false }
}
datum_gateway -c /path/to/datum_gateway_config.json

CONVOY serves BLAKE2b / header-v2 jobs when GBT advertises !blake2b. There is no pow_algorithm setting.

Solo needs pool_host empty and pooled_mining_only false. CONVOY's built-in defaults turn pooled mining on and point at a CONVOY pool host. If you empty the host and leave pooled mining on, the process exits. Their example config is a pool example; do not use it as the solo recipe. Solo can omit abw_verify_all_shares_on_disclosure.

3. Miners

This chain is on BLAKE2b now. CONVOY only serves BLAKE2b and BLAKE2b-sia header-v2 jobs. It will not mine SHA256d. If GBT does not advertise blake2b, it serves no work. SHA256d hardware was useful through block 961639 and cannot add blocks here.

Point the miner at your stratum URL. The username can be any worker name DATUM accepts. A payout address is a common choice.

Confirm GBT advertises blake2b:

bitcoin-cli getblocktemplate '{"rules":["segwit","blake2b"]}'
# expect "!blake2b" in rules

4. Optional peer

addnode=OTHER_HOST:8333

What working looks like

Quick health checks

  1. Miners stay connected and jobs refresh on new tips.
  2. Shares are accepted. You are not flooded with unknown-work or high-hash rejects.
  3. The BLOCK FOUND hash equals the new chain tip.
  4. GBT from a supporting client shows !blake2b.

Common mistakes

Checklist

  1. RC5 from the URL above, using your existing mainnet data directory if you already have one.
  2. DATUM from CONVOY at 56c31f4 or later.
  3. BLAKE2b and BLAKE2b-sia miners on stratum port 23334.
  4. Confirm the BLOCK FOUND hash matches the tip. Ignore a benign dual-submit duplicate.