₿ --
iOS App 🤖 Android APK
be pybløck ↗

PYBLOCK-WAVICLES

Bring your own node · DATUM · SHA-256

LIVE Your node builds the block · the pool only sets the split port :23124
--
Hashrate 1m
--
Workers
--
Window fill

Hashrate · last 24h

Point your miner here

Port 23124 · ASIC only
stratum+tcp://pool.pyblock.xyz:23124

Username YOUR_BITCOIN_ADDRESS Password anything

Your node builds the block. The pool only sets the split: everyone with work in the window, by work · fee 0.4% with your own node, 2.9% through PyBLØCK’s stratum · paid in the coinbase. The pool never holds a sat.

Next block · who gets paid

—
to miners · block value − fee (—)
— of the window credited—
MinerHashrate · 10 minShare of windowWould receiveLast share
The window is empty right now.

Would receive = the split the pool dictates right now: everyone with work in the window, by work, minimum 1,000 sats. If a block is found by a miner whose firmware can only carry a small coinbase, the split is pro-rated among those who fit — never kept by the pool.

Blocks found on WAVICLES · SHA-256

BlockWhenBuilt byPaid to minersPool outputMiners paid
Loading…

Pool output = exactly the fee (0.4% on work from your own node, 2.9% on work through PyBLØCK’s stratum, per identity). Everything else is paid to the window in that same coinbase, by share of work (minimum 1,000 sats per identity; below that your share goes to the other miners, never to the pool).

Node runners connected

GatewaySoftwareSharesWorkConnectedLast share
No gateway connected right now.

—

Pool history
Pool hashrate
Window credited · miners
Blocks per day
Node runners · connections
Shares per hour

Collecting history…

Connect · your DATUM gateway

"mining": {
  "pool_address": "YOUR_BITCOIN_ADDRESS",
  "coinbase_tag_secondary": "your-name"
},
"datum": {
  "pool_host": "pool.pyblock.xyz",
  "pool_port": 28925,
  "pool_pubkey": "2c8852c169493033cf4fc6df8554978361e0f5250f6821b4d2e81118cbed8005915a6696e219f84adb15249b5beaec534a97768e1e3ba57abc7d2afe8b55e865",
  "pool_pass_workers": true,
  "pool_pass_full_users": true,
  "pooled_mining_only": true
}
  1. mining.pool_address = your Bitcoin address. Your share of every block is paid there, in the coinbase.
  2. mining.coinbase_tag_secondary = your name. It goes on-chain in the scriptsig: PyBLOCK-WAVICLES/your name.
  3. Point your miners at your own gateway, never at the pool. Any SHA-256 ASIC works (Antminer, Whatsminer, Avalon, Bitaxe, NerdQAxe…).

Needs a synced Bitcoin node (Knots or Core) and a DATUM gateway: OCEAN’s datum_gateway, CONVOY, or the Umbrel / StartOS packages. The pubkey is also published live at wavicles_api.php?chain=sha256 → pool.datum.pubkey, so you never have to trust a number copied off a web page.

No node? Mine through PyBLØCK’s stratum

ASICs can point straight at stratum+tcp://pool.pyblock.xyz:23124, username YOUR_BITCOIN_ADDRESS.worker, any password. Same window, same coinbase payout — but the block is built by PyBLØCK’s node, not yours, and the fee is 2.9% instead of 0.4%. Bring your own node whenever you can.

Troubleshooting & node settings
Symptom in the gateway logCauseFix
decryption failedpool_pubkey wrong or truncatedcopy the full 128-hex key (click the config block), restart the gateway
Handshake OK but 0 shares on the poolminers point at the pool instead of your gatewayminers go to gateway-IP:stratum-port, never to :28925
“pool-only” coinbase in a blockthe template left no room for the payout outputsblockreservedweight=100000 in your node’s bitcoin.conf (Knots / Core 29+)
connects, then drops every few minutes with a new gateway key each timethe gateway restarts right after the handshake: its node returns no work (RPC misconfigured or not synced)read the gateway log after “DATUM Pool MOTD”; on your node run bitcoin-cli getblocktemplate '{"rules":["segwit"]}'
your identity shows work but payout 0 / “not payable”the miner username on your gateway is a worker name, not an addressminers log in with a Bitcoin address (bc1q… / 1… / 3…); a worker after a dot is fine: bc1q….rig1
few identities paid in a blocka coinbase budget too small for the payout listpool-side, every gateway gets the 16 KB class (~400 payouts). Nothing to change on your side.

Node tip: blockreservedweight=100000 in bitcoin.conf. Your miners’ firmware sets how many payouts a coinbase can carry: modern firmware takes big coinbases and pays the whole window; a stock ~730-byte coinbase fits ~15, and then the split is pro-rated among those who fit — never kept by the pool.

DATUM endpoint pool.pyblock.xyz:28925 · pool pubkey 2c8852c169493033cf4fc6df8554978361e0f5250f6821b4d2e81118cbed8005915a6696e219f84adb15249b5beaec534a97768e1e3ba57abc7d2afe8b55e865

Running your own node · FAQ

The one thing people get wrong: your address goes in two places, and they do different jobs. In mining.pool_address it decides who gets paid if you ever mine without the pool, and the gateway will not even start without a valid one. On each miner, as the Stratum username, it decides who gets credited in the window. Set both.
What do I need, and in what order?

Three pieces, set up in this order. 1. A Bitcoin node (Knots or Core), fully synced. 2. A DATUM gateway on the same machine or LAN, pointed at your node over RPC and at WAVICLES over the internet. 3. Your miners, pointed at your gateway. Do not skip ahead: a gateway whose node is still syncing has no work to hand out.

Where exactly does my payout address go?

In the gateway config as mining.pool_address (required — with an invalid one the gateway exits in under a second), and on each miner as the Stratum username. The username is what the window credits.

Does the gateway check that my miner’s username is a real address?

No. It forwards the username as it was typed. The check happens here: a username that is not a payable Bitcoin address earns nothing. Re-check after changing a username: your row in the Node runners table should show shares.

My gateway shows up connected, but 0 shares. What now?

We are talking to your gateway and nothing is hashing into it. Most often: no miner is pointed at the gateway yet, or the miners are pointed at :28925, which is where your gateway talks to us and never where miners go.

What happens if WAVICLES goes offline?

That is what pooled_mining_only decides. Left at true, as we publish it, your gateway drops your miners rather than mine without a pool. Set to false, your node keeps building blocks on its own and any block it finds pays 100% to mining.pool_address.

Do I only get paid when my own node finds a block?

No, and this is the whole point of the pool. Every block found by anyone on WAVICLES pays everyone with work in the window, by share of work, in that same block’s coinbase. Nothing to withdraw.

Is there a minimum, and what does the fee cost me?

Minimum: 1,000 sats accrued in the window; below that your share is spread across the miners who do clear it, never kept by the pool. Fee: 0.4% when your own node builds the block, 2.9% when you mine through PyBLØCK’s stratum.

Which gateway build should I run?

Any current DATUM gateway: OCEAN’s datum_gateway, CONVOY, or the Umbrel / StartOS packages, pointed at a synced Bitcoin node with blockreservedweight=100000.

How it works

  1. DATUM, not a stratum. Your gateway builds the whole block from your own node and submits it. The pool only answers with the coinbase split.
  2. Work window. Accepted work is credited to your address in a rolling window of 8× the network difficulty. Any block found by anyone in the window pays everyone in it, by share of work.
  3. Paid in the coinbase. The block value minus the fee goes to everyone with work in the window, minimum 1,000 sats per identity. Nothing is ever owed and nothing is held.
Verify a block yourself
  • Output 0 of every coinbase is OP_RETURN PYBLOCK-TON618 ‖ hash(snapshot). The snapshot (window, params, split) is public and cannot change after the block exists.
  • Recompute the split from public data: hash(snapshot) == the OP_RETURN, the split recomputed from window + params == the snapshot’s payees, every payee paid on chain.
  • The scriptsig carries PyBLOCK-WAVICLES/<node-runner> — the node that built the block.
curl -s 'https://pool.pyblock.xyz:8443/wavicles_api.php?chain=sha256&mode=snapshot&hash=<HASH>' -o snaps/<HASH>.json
python3 tools/verify_wavicles_block.py --height H --conf bitcoin.conf --snapshot-dir snaps

Verifier + pool source: gitlab.com/astrolexis-group1/wavicles-prime (MIT).