Run your own gateway
You build the block. The pool only dictates the coinbase split. Needs a Bitcoin Knots BLAKE2b node; the full walkthrough is below.
- Node: Bitcoin Knots v29.4.2 (BLAKE2b build), bootstrapped from our snapshot in minutes instead of a day. Not 29.4.1: it does not enforce the long-maturity rule active since height 973,440 and can build invalid blocks.
- Gateway: ratum-gateway, or a CONVOY gateway built past PR #15. Older builds truncate payouts to about 15 outputs.
- ASICs: stratum+tcp://<your-gateway>:3333, username = a worker name (paid to your gateway's address) or address.worker to pay a different one.
- Your gateway appears on the Gateways tab within one job.
Point a rig at us
Same coinbase payouts, no node to run. Use the region with the lowest ping.
Ping is measured from this browser to each region's front door over HTTPS; your ASICs on the same network will see about the same.
Use a wallet that speaks the BLAKE2b chain (Knots or Shrike). Never import a seed phrase anywhere to "claim" BTCB2.
Bootstrap your own node and gateway
- A Linux box with Docker, 40 GB free disk and an open port 3333 on your LAN
Any x86-64 or arm64 machine works: a NUC, an old laptop, a Raspberry Pi 5 with an SSD. Install Docker from docs.docker.com.
- Save this as docker-compose.yml
Replace the two CHANGE-ME passwords with anything random. The node bootstraps itself from our snapshot (refreshed nightly) on first start and verifies the checksum.
docker-compose.ymlservices: knots: image: ghcr.io/p2block/pool-knots:latest restart: unless-stopped environment: BTC_NETWORK: main PRUNE_MB: "20000" RPC_PASSWORD: CHANGE-ME-rpc BLOCKNOTIFY_URLS: http://gateway:7152/NOTIFY SEED_URL: volumes: ["knots-data:/data"] ports: ["8333:8333"] gateway: image: ghcr.io/p2block/pool-gateway:latest restart: unless-stopped depends_on: [knots] environment: NODE_RPC_URL: http://knots:8332 NODE_RPC_PASSWORD: CHANGE-ME-rpc POOL_ADDRESS: bc1q…yourpayoutaddress COINBASE_TAG_PRIMARY: P2BLOCK COINBASE_TAG_SECONDARY: myrig PRIME_HOST: (set DATUM_HOST) PRIME_PORT: "28915" PRIME_PUBKEY: (set PRIME_PUBKEY) STRATUM_PORT: "3333" VARDIFF_MIN: "32768" REQUIRE_ADDRESS_USERNAME: "false" # your gateway: workers send just a name and are paid to POOL_ADDRESS API_ADMIN_PASSWORD: CHANGE-ME-admin ports: ["3333:3333"] volumes: knots-data: {} - Start it and watch the node catch upshell
docker compose up -d docker compose logs -f knots
First start downloads the snapshot, then Knots syncs the last few blocks. Done when the log shows initialblockdownload=false or UpdateTip lines with today's date.
- Point your ASICs at the gatewaystratum+tcp://<gateway-lan-ip>:3333user: myrig-1pass: x
On your own gateway a plain worker name is enough: everything is paid to POOL_ADDRESS. Use address.worker only if a rig should pay a different address.
- Verify
Your gateway shows on the Gateways tab as myrig within one job, and your address on My miner after the first share. Your share of the next block, and the 1.0% fee, are visible on Next block before it is found.
Which port for your ASIC
| Model | Hashrate | Power | Port | Start diff | Login | First share | Notes |
|---|---|---|---|---|---|---|---|
| Goldshell SC6 SE | 17 TH/s | 3,300 W | 3333 | 32,768 | admin / 123456789 | ~10 s | Sia mode; vardiff climbs within a minute |
| Goldshell SC5 Pro | 11 TH/s | 2,820 W | 3333 | 32,768 | admin / 123456789 | ~15 s | Sia mode; vardiff climbs within a minute |
| Goldshell HS5 (Sia) | 5.4 TH/s | 1,500 W | 3333 | 32,768 | admin / 123456789 | ~1 min | Turn Handshake mode off |
| Innosilicon S11 | 4.3 TH/s | 1,380 W | 3333 | 32,768 | admin / dragonadmin | ~1 min | Needs stratum+tcp:// prefix |
| iBeLink BM-S3+ | 25 TH/s | 4,000 W | 3335 | 262,144 | admin / ibelink | ~30 s | High-difficulty port |
| Antminer A3 | 815 GH/s | 1,275 W | 3334 | 8,192 | root / root | ~90 s | Low-difficulty port |
| Obelisk SC1 | 550 GH/s | 500 W | 3334 | 8,192 | admin / admin | ~2 min | Low-difficulty port |
If something looks wrong
| Symptom | Cause | Fix |
|---|---|---|
| Connected, 0 H/s, rejects with code 23 | Starting difficulty too high for the unit | Use the lower-difficulty port for your model |
| Pool shows "Dead" on the ASIC | Missing port or missing stratum+tcp:// | Copy the full URL from above |
| Every share rejected, code 24 | Username is not a BLAKE2b-chain address | Use a bech32 address from Knots or Shrike |
| Gateway connected, nothing on the pool | Node still syncing, or gateway build too old | Check the Gateways tab for template height and version |
| Snapshot checksum mismatch | Download interrupted mid-file or a stale mirror | Re-run the curl line; -C - resumes and the .sha256 is re-checked |
| Paid less on one block | Your window share was lower at that moment | The miner page shows your share per block |