Mine it
Qnero's proof of work is RandomX, stock rx/0, with the same algorithm and
the same constants Monero uses.
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.
A stock xmrig mined a local devnet. 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. There is no public chain to point a rig at, there is nothing to earn, and there is no pool. Every command on this page starts a chain of your own.
What you need
A built node and a wallet. Release builds are mandatory: a leaf 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 coinbase notes 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 devnet 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 a shielded note 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 64 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 of 64 blocks is 2.1 hours. Whether to raise it above the maximum reorg depth is the one part of the schedule still open.
Difficulty adjusts per block
The adjustment is Homestead's and its buckets scale with the target, so at 120 seconds the neutral band is 100 to 200 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. 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 600 blocks and about 2.4 days for one 900 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 100-second blocks; falling, it stops at the top and sits at about 200. A network that has lost its miners runs at double the target until hash rate comes back.
The devnet 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.
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 devnet 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.
When there is something to point a rig at
A public testnet is the next milestone: a chain spec and a genesis both wallets can bind to, seed nodes and a bootnode list, released node builds, a public RPC endpoint, a faucet, and Qloak and silQ Road pointed at it through the one runtime JSON each already reads. The design draft estimates 10 to 12 weeks to a private testnet.
These are the addresses it will use. None of them answers yet.
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 a note in the pool, and a faucet drip is how the first one arrives without a rig.
faucet.qnero.io testnet, live
Stratum
Mining stays solo. The endpoint a rig connects to is the one your own node opens
with --stratum-port, and the reward is a note for the key that node was
started with.