Mine it
Qnero's proof of work is RandomX, stock rx/0, with the same algorithm and
the same constants Monero uses.
node.qnero.io:3333
stratum, live
A rig that mines Monero mines Qnero with a config change. The node serves the stratum dialect xmrig speaks to a Monero pool, so the miner is stock and unpatched. No stake, no validators, no foundation keys in consensus, and no algorithm nobody has hardware or software for.
Mining is solo and there is no pool. Testnet QNR is worth nothing, the chain may be reset without notice, and the reward goes to the key the node was started with. What a rig has actually done, in figures.
What you need
A built node and a wallet. Release builds are mandatory: a proof takes about 0.2 s in release and minutes in debug. The repository README carries the build preconditions.
The miner key is secret-bearing and cannot spend. Its holder can pick that miner's rewards out of the tree, so keep it with the seed. A node without one refuses to start.
The node's own miner
Every authoring node runs an in-process RandomX miner in light mode, one thread by default, so a local chain produces blocks with no rig attached.
--mining-threads N sets the thread count and 0 turns
the in-process miner off, so only external rigs mine. Values above the machine's own
parallelism are refused. Light mode is an order of magnitude slower than a rig
carrying the full 2 GiB dataset.
./target/release/qnero-wallet keygen
export QNERO_MINER_KEY=$(
./target/release/qnero-wallet \
miner-address)
nice -n 19 \
./chain/target/release/qnero-node \
--dev --tmp \
--rewards-miner-key \
"$QNERO_MINER_KEY" \
--rewards-inner-hash <hash>
Open the stratum port, then run a stock xmrig
Nothing is paid to the login
The -u login is a worker label. This is a solo-mining endpoint: every
block the rig finds pays its reward to the key in
--rewards-miner-key, whatever the login says.
--stratum-host defaults to loopback. A rig on another machine needs
0.0.0.0 and a firewall rule you chose.
The dialect is Monero's
The endpoint speaks the Monero stratum dialect xmrig uses: login,
job pushes with blob, target,
seed_hash and next_seed_hash, submit and
keepalived. A stale share is answered with a retryable message so the
rig keeps its pool. An authoring pause closes sessions with a retryable message too,
and rigs reconnect on their own timer.
nice -n 19 \
./chain/target/release/qnero-node \
--dev --tmp \
--rewards-miner-key \
"$QNERO_MINER_KEY" \
--rewards-inner-hash <hash> \
--stratum-port 3333 \
--mining-threads 0
nice -n 19 xmrig \
--threads=2 --algo rx/0 \
-o 127.0.0.1:3333 \
-u qnero-rig -p x --no-color
Stratum flags
| Flag | Default | What it does |
|---|---|---|
--stratum-port PORT |
off | Opens the endpoint xmrig connects to. Requires an authoring node |
--stratum-host ADDR |
127.0.0.1 | Bind address. A rig on another machine needs 0.0.0.0 and a firewall rule you chose |
--stratum-share-difficulty D |
5000 | Per-connection share difficulty, clamped per job to the block difficulty |
--stratum-max-connections-per-ip N |
16 | Connections one address may hold. Several rigs behind one NAT gateway arrive from a single address |
--stratum-share-timeout S |
600, rising with the share difficulty | How long a logged-in session has to produce an accepted share before it is closed. The ceiling is 7200 s |
The port is off by default and binds loopback by default. When it is open it is bounded like anything an unauthenticated peer can reach: 8 KiB lines, 64 connections, a per-address cap, a 30-second login window from connection open, one accepted share per share timeout after login, a write deadline, a bounded number of share hashes in flight and a per-connection submit budget. What it cannot bound is a peer that reconnects every window and mines nothing. That is the known limit of an unauthenticated endpoint, and a port exposed to a network belongs behind an address allowlist or a pool.
Seed rotation and difficulty
The seed rotates the way Monero's does
Every 2048 blocks, lagged 128 blocks, resolved along the block's own ancestry. Both constants are runtime constants and are read by the node.
At the 120-second target, 2048 blocks is 2.84 days, which is Monero's own rotation cadence to the hour. The block count and the wall clock both match, so a rig pays the same dataset rebuild here as it pays there and no more often. The lag is 128 blocks, 4.3 hours, and that is how long before the turn every job already carries the coming seed: a full-mode rig has that long to build its next 2 GiB dataset in the background.
Difficulty adjusts per block
The adjustment is Homestead's and its bucket is the target times the natural logarithm of 2, so at 120 seconds the neutral band is 83 to 166 seconds: an honest block leaves difficulty flat, a faster one raises it by 1/2048 and a much slower one lowers it by up to 99/2048. That divisor is what makes the average land on the target: block arrival is Poisson, so a chain settles at the divisor over ln 2, which is the 120 seconds the chain declares. The floor is 128, so a chain at the floor can climb.
A chain climbing from the floor to a live difficulty costs about 13 250 blocks and about 2.0 days for one 3 500 H/s rig. The band is dead in both directions and a chain settles at whichever edge it arrives from: climbing, it stops at the bottom and sits at about 83-second blocks; falling, it stops at the top and sits at about 166. A network that has lost its miners runs at 1.39 times the target until hash rate comes back.
The figures, and what they are not
One workstation, 20 cores, WSL2, on a --dev --tmp chain at the 12-second
dev preset. None of these is a network hash rate, because no network exists.
A stock xmrig mined a local chain. That is the whole of the evidence, six rig sessions on one workstation on the 12-second dev preset. The strongest: a rig mined 190 of the 199 blocks in its own two-minute window, one login, no reconnects, 478 shares accepted and none rejected, the chain reaching block 211. Three later sessions sealed 128, 215 and 189 blocks from 334, 508 and 455 accepted shares. The first session reached 84 blocks in 4 minutes 2 seconds with only 10 of them mined by the rig, which is a number to read with its cause: the node dropped 17 of the rig's 65 block-worthy shares as superseded seals, a defect fixed since, and at that difficulty almost any nonce was a block for the in-process miner too.
The node is more than an order of magnitude slower per thread than the rig, 32.9 H/s against about 450, and that is the intended shape: the in-process miner exists so a local chain produces blocks with no rig attached. Read the 32.9 H/s figure as one thread of light-mode RandomX on one box. Read the 900 H/s figure as one rig on one box, derived from that one session's accepted shares and cross-checked against the rig's own speed line. Neither says anything about a network.
Where to point a rig
The public testnet came up on 2026-09-15 and was relaunched on 2026-09-22 at a fresh genesis: a chain spec and a genesis both wallets bind to, a seed node, a public RPC endpoint, a faucet, a stratum port, and Qloak and silQ Road pointed at it through the one runtime JSON each already reads. Balances belong to the genesis they were mined under and did not carry over. The software behind it is pre-alpha and the chain may be reset without notice.
Public RPC
One WebSocket endpoint, the address below, which is what Qloak and silQ Road each take in their runtime JSON. Run your own node instead and point them at that.
wss://rpc.qnero.io
testnet, live
Faucet
Testnet coin for a wallet that has none. A transfer needs funds in the pool, and a faucet drip is how they first arrive without a rig.
faucet.qnero.io testnet, live
Stratum
Mining stays solo. This is the testnet node's own stratum port, and its reward is paid to the key that node was started with. Point a rig at your own node instead and the reward is yours.
node.qnero.io:3333
testnet, live