Live status #
Poll of /testnet-status.json,
refreshed every 60 seconds. The exporter source is
contrib/testnet/status-monitor/.
Cards show “n/a” when the corresponding upstream is
unreachable; the whole panel turns warning-yellow when the JSON is
more than 5 minutes stale.
Last 5 blocks
| Height | Age | Tx | ||
|---|---|---|---|---|
| loading… | ||||
1. Connect a node #
Build (or download) b3chaind from
github.com/b3chain/b3chain
on the b3chain-main branch (or any released
v0.1.x-testnet tag), then run:
b3chaind -chain=test
That's it. The DNS seed at testnet-seed.b3chain.org
returns the operator-run seed nodes
(seed1 = 166.88.4.250,
seed2 = 151.158.1.22,
seed3 = 151.158.1.60);
your node will connect and start syncing the chain. See the
runbook
§2 for the recommended b3chain.conf with explicit
addnode= lines.
Connection parameters
| Setting | Value |
|---|---|
| Chain name | test |
| Magic bytes | b3 c1 02 0e |
| P2P port | 18533 |
| Default RPC port | 18534 |
| Bech32 HRP | tb3 |
| HD coin_type | 1 (BIP44 testnet) |
| Genesis hash | 4b3f758b306086eca0a95c68020ab74cb87c652b1788780fa3235306bb3d4006 |
| DNS seed | testnet-seed.b3chain.org |
2. Get test coins #
Generate a new bech32 address with your wallet:
b3chain-cli -chain=test getnewaddress "" bech32 # returns tb3...
Paste it into the faucet at
faucet.b3chain.org.
The faucet hands out 0.5 tB3C per request, with a
24-hour cooldown per IP and per destination address. A JSON
status endpoint is at
/status.
The faucet is a small Flask service in the public source tree:
contrib/testnet/faucet/app.py.
3. Explore the chain #
A live block explorer is at explorer.b3chain.org. It is a deployment of btc-rpc-explorer pointed at one of the operator-run testnet nodes — nothing custom, so any compatible explorer can do the same.
Programmatic status feeds:
/testnet-status.json— structured live status (the panel above), updated every 60 s/testnet-status.txt— human-readable seed snapshot- Explorer API:
https://explorer.b3chain.org/api/blockset al. (see runbook §9)
4. Mine blocks #
Three options, in increasing order of hashrate. All three target the
same algorithm: B3PoW-Scratch v1.1.1 (post-F-1, live since
genesis). The retired BLAKE3(BLAKE3(header)) algorithm
is not accepted on any b3chain network — the pool and
every full node reject those shares.
Solo mining with the reference CPU miner
b3chain-cpuminer.py defaults to B3PoW-Scratch v1.1.1.
The --legacy-blake3d flag exists only for
cross-checking historical headers against the retired double-BLAKE3
algorithm and will not produce valid B3Chain shares — the
miner emits a stderr warning when that flag is passed.
Anyone can mine on testnet. The reference CPU miner talks to your
local node via JSON-RPC and submits valid blocks via
submitblock.
pip install blake3 # required by the B3PoW-Scratch Python reference
b3chain-cli -chain=test getnewaddress "" bech32
# tb3...your-address...
python3 contrib/miner/b3chain-cpuminer.py \
--rpcconnect=127.0.0.1 \
--rpcport=18534 \
--rpcuser=USER \
--rpcpassword=PASS \
--coinbaseaddr=tb3...your-address...
Testnet uses an early-difficulty-guard regime for the first 10 000
blocks (nEarlyDifficultyGuardHeight in
src/kernel/chainparams.cpp),
so a single CPU thread can produce blocks at roughly the
10-minute target.
Pool mining via Stratum
The public pool at
stratum+tcp://pool.b3chain.org:3333 validates every
share against the canonical B3PoW-Scratch v1.1.1 algorithm exactly
the way b3chaind does. Reward scheme is PPLNS over
the last 4032 weighted shares; pool fee is 1%. Usernames are
<email>.<workerName> for verified accounts
at pool.b3chain.org, or
<tb3address>.<workerName> for anonymous
miners.
python3 contrib/miner/b3chain-cpuminer.py \
--stratum stratum+tcp://pool.b3chain.org:3333 \
--user alice@example.com.cpu1 --pass x \
--threads 2 --json-log shares.jsonl
Worker name / share format / vardiff / payout policy are documented in runbook §7. The wire-protocol implementer contract is in contrib/testnet/pool/docs/STRATUM-PROTOCOL.md.
B3Miner-1 FPGA
The B3Miner-1 reference FPGA mining card (XCKU5P + ESP32-S3 + Ethernet) is the intended high-end miner for B3PoW-Scratch. Build and flash instructions are in contrib/miner/b3miner-firmware/README.md. Point the card at the same Stratum endpoint above; the onboard dashboard handles the credentials.
After bitstream configuration the firmware reads
REG_ID over SPI; it must return 0xB3110002
(v1.1.1 build 0002 — the F-1 fix bumped this from the
original 0xB3110001 build 0001). Older bitstreams mine
the pre-F-1 v1.1.0 algorithm and are rejected by the v1.1.1
firmware.
What about a GPU miner?
There isn't one, and there isn't going to be one on this tree.
B3PoW-Scratch is GPU-hostile by design: its 1 MiB
sequential, data-dependent scratchpad destroys GPU throughput. The
historical CUDA tree at
contrib/miner/b3chain-gpuminer/
is deprecated: it still compiles, but it only computes the
retired double-BLAKE3 algorithm and is kept only as a worked
example of the Stratum V1 + JSONL pipeline. It will not produce
valid mainnet or testnet shares.
5. Operator notes #
The seed network is intentionally small at bootstrap: one
operator-run host (seed1) carries the pool, faucet, explorer, and
status monitor in addition to b3chaind; seed2 and
seed3 are seed-only nodes in different geographic regions for
redundancy. Anyone can join at any time — just run
b3chaind -chain=test.
Repository layout
| Path | What's there |
|---|---|
contrib/deploy/bootstrap-testnet-node.sh |
Idempotent script: fresh Ubuntu host → running b3chaind testnet under systemd |
contrib/testnet/faucet/ |
Flask faucet + systemd unit + installer |
contrib/testnet/miner/ |
Always-on CPU miner systemd unit + installer |
contrib/testnet/pool/ |
Reference Stratum V1/V2 pool stack (Node/TypeScript) |
contrib/testnet/explorer/ |
btc-rpc-explorer (Node.js + systemd) installer with B3C rebrand patches |
contrib/testnet/status-monitor/ |
Python exporter feeding /testnet-status.json (this page) |
contrib/testnet/monitor/ |
Cron-driven seed status snapshot ⇒ /testnet-status.txt |
contrib/monitoring/51attack-watch.py |
Long-running 51%-attack detection daemon (JSONL + webhook alerts). See operator tools. |
Chain-recovery tools (M-14)
Every seed runs the v1.1.3 M-14 operator-pinned chain-recovery
RPCs (finalizeblock, unfinalizeblock,
parkblock, unparkblock,
getfinalizedblockhash) and, in production, the
51attack-watch.py monitoring daemon described in
doc/security/51-MONITORING-OPS.md.
The end-to-end response procedure for a deep reorg, hashrate
drop, or pow-budget storm is in
RESPONSE-RUNBOOK-51ATTACK.md;
a one-page summary of both lives at
testing/operator-tools.html.
6. Found a bug? #
Testnet bugs are exactly what we want before mainnet. Report any
consensus oddity, reorg longer than 2 blocks, sync stall, RPC
inconsistency, or wallet weirdness via the channels described in
/testing/reporting.html, or
file an issue directly at
github.com/b3chain/b3chain/issues.
Include the testnet block height, your node version
(getnetworkinfo), and the journal log
(journalctl -u b3chaind-testnet --since '1 hour ago').
Security disclosures go to security@b3chain.org.