Mining pool software for VerusCoin (VRSC) written in Node.js: a stratum server for VerusHash2.2 using VerusCoin's real "Equihash-compatible" stratum wire protocol (the same shape real Zcash-family pools use, NOT the standard Bitcoin Stratum protocol most other pools in this fleet use), block accounting through the pool wallet, and batch payouts. It is a fork of cryptonote-nodejs-pool by Dvandal (GNU GPL v2), adapted for VerusCoin's real node (a Komodo/PBaaS-based fork with Zcash Sapling transactions). Live example: https://vrsc.pool-pay.com.
- Stratum server (plain TCP and TLS ports). Unlike the Bitcoin-stratum coins in this fleet, VRSC's
wire protocol has NO
coinb1/coinb2/merkle branches sent to miners: the pool receives a COMPLETE candidate block from the node's owngetblocktemplate(header, coinbase, merkle root, and the VerusHash2.2 "solution" bytes, which also carry this chain's PBaaS/Merkle-Mountain-Range commitments) and only ever varies the header's 32 byte nonce field before hashing and submitting.mining.notifycarries 9 fields (job_id, version, prevhash, merkleroot, finalSaplingRoot, ntime, nbits, clean_jobs, solution);mining.set_target(a raw 256 bit target) replacesmining.set_difficulty;mining.submitis[worker, job_id, ntime, nonce, solution]with no separate extranonce2 -- the "nonce" IS the client's whole remaining nonce-field content. Seelib/pool.jsandlib/blockBuilder.js's own module comments for the full byte-level detail and the real mistakes found and fixed getting here. - IMPORTANT operational requirement, unique to this chain: the node itself (not this pool) builds
the real coinbase transaction via
CreateNewBlock(), paid to whatever-mineraddress=<address>names in the node's ownVRSC.conf(or the wallet's default reserve key if that's unset). This pool takes that coinbase VERBATIM -- it does NOT build its own coinbase the way every other coin here does, because the solution's own PBaaS/MMR commitments are computed over the node's exact transaction set INCLUDING the coinbase, and substituting a different one invalidates them (submitblockthen fails with "CheckBlock Merkle Mountain Range (MMR) root mismatch", not a PoW-only rejection). Before running this pool, setmineraddress=<the pool's own VRSC address>inVRSC.confand restart the node, or every block this pool finds will pay the node's own wallet instead of the pool. - VerusHash2.2 proof of work over a 140 byte Zcash-style header (version, hashPrevBlock,
hashMerkleRoot, hashFinalSaplingRoot, nTime, nBits, a 32 byte nonce -- NOT Bitcoin's 4 byte nonce)
followed by a 1344 byte "solution" the node provides (VerusHash is a plain single hash, not an
Equihash puzzle to solve -- the solution is fixed metadata, passed through unchanged except its
nonce). Checked with a small C++ helper (
hasher/verushash), vendored and byte-verified from the real node's own VerusHash2.2 source. - Hybrid PoW/PoS chain: VerusCoin has both a PoW chain (VerusHash2.2, what this pool mines) and a
separate PoS staking mechanism (its own
chainstake/block-staking rules). This pool only ever builds and submits PoW blocks viagetblocktemplate/submitblock-- it has no PoS/staking logic at all. - Accounts are VerusCoin addresses (base58
R...P2PKH, orb...P2SH -- VRSC does NOT use bech32), optionally.workeror+worker, with a reward mode prefixprop:(shared, default) orsolo:. - Reward: no mandatory developer/community coinbase output on VRSC (unlike several other coins in
this fleet) -- the whole
coinbasevaluegoes to the pool's own address. Subsidy follows VerusCoin's real multi-era table (src/pbaas/crosschainrpc.cpp's hardcoded mainnet eras), NOT a simple Bitcoin halving -- seelib/reward.js's own header comment for the exact era table and the live cross-check performed against a realgetblocktemplate. - Payments and unlocker as in Bitcoin-based pools (
sendmany/wallet RPC,gettransaction, real coinbase maturity 100 blocks --blockUnlocker.depthkept safely above that).
Real upstream VerusCoin/VerusCoin. Needs a gcc12+ toolchain
(see this fleet's own notes on building it with an isolated micromamba toolchain on an older host).
VRSC.conf needs rpcuser/rpcpassword/rpcport as usual, PLUS mineraddress=<pool address> (see
above -- this is not optional for a pool, unlike every Bitcoin-stratum coin here).
Built, node fully synced, live submitblock round-trip verified against the real mainnet node
(2026-10-20/21). Payments stay in dryRun until a real block matures and pays out correctly.