WATTx WATTx Docs

WATTx documentation

The operator manual. How to run a node, mine on any of seven algorithms, merge-mine WATTx alongside the chain you already mine, stake and delegate, deploy contracts to the EVM, inscribe ordinals, and talk to every public endpoint.

The whitepaper explains why WATTx is built this way. This explains how to use it.

Hybrid PoW/PoS · X25X seven-algorithm mining · AuxPoW · EVM · UTXO

What WATTx is

WATTx is a hybrid Proof-of-Work / Proof-of-Stake blockchain with a UTXO ledger and a full Ethereum Virtual Machine layered over it, built on a QTUM Core foundation. Three things make it unusual:

  • Seven mining algorithms in one chain. SHA256d, Scrypt, Ethash, RandomX, Equihash, X11 and kHeavyHash all produce valid WATTx blocks, each with its own independent difficulty. Whatever hardware you own — ASIC, GPU or CPU — there is a lane for it.
  • Merged mining with every one of them. If you already mine Bitcoin, Litecoin, Monero, Dash, Zcash, Kaspa, Ethereum Classic or Altcoinchain, you can point the same work at WATTx and earn on both chains for no additional energy.
  • PoW and PoS compete for the same blocks. There is no fixed split. The 50 WTX subsidy goes whole to whoever produced the block, so emission divides between mining and staking exactly in proportion to how much each side actually contributes.

On top of that sit an EVM for Solidity contracts, a UTXO layer that carries ordinal inscriptions, offline staking with delegation, and a trust-tier system that pays reliable validators more.

Two ledgers, one chain

WATTx has a UTXO layer (coins, staking, ordinals) and an EVM account layer (contracts, tokens). A contract call is a UTXO transaction carrying a special output that the EVM executes. This is inherited from QTUM's Account Abstraction Layer, and it is the single most important thing to understand before you write tooling — see Smart contracts.

Network specifications

Ticker
WTX
Block time
120 s
Block reward
50 WTX
Max supply
21,000,000
Halving
210,000 blocks
Super staker min
20,000 WTX
ParameterValueNotes
ConsensusHybrid PoW / PoSBoth produce blocks; no split within a block
Mining frameworkX25X7 algorithms, independent difficulty each
Block time120 secondsnPowTargetSpacing = 120
Block subsidy50 WTXPaid whole to the block's producer
Halving interval210,000 blocks≈ 9.7 months at 120 s
Maximum supply21,000,000 WTX50 × 210,000 × 2 — Bitcoin's geometric schedule
Coinbase maturity100 blocks≈ 3.3 hours
Stake maturity500 blocksDynamic — halves with every reward halving
Super staker minimum20,000 WTXnMinValidatorStake
Offline stakingFrom block 1Delegation available since genesis
Smart contractsEVM / Solidity ≤ 0.8.xLondon, Shanghai, Cancun and Pectra all active from genesis
Token standardsQRC-20, QRC-721Byte-compatible with ERC-20 / ERC-721
P2P port3888
RPC port3889
PremineNoneNo ICO, no founder allocation, fair launch from block 0
If you have seen different numbers

Some older material quotes a 10 WTX reward, a 1,051,200-block halving and a 1-block coinbase maturity. Those are testnet or pre-launch values. The figures above were read out of src/kernel/chainparams.cpp on the mainnet build and cross-checked against a live node.

Activation schedule

MilestoneHeightStatus
Genesis — pure PoW0Active
Offline staking / delegation1Active
X25X multi-algorithm activation2,000Active
Per-algorithm difficulty retarget2,000Active
PoS difficulty fix (16-second stake mask, 4× convergence)2,000Active
Coinbase maturity v22,500Active
PoW → hybrid PoW/PoS transition5,000Active
AuxPoW merged mining210,000Scheduled
RandomX native activation210,000Scheduled
FCMP privacy210,000Scheduled
Shielded coinbase210,100Scheduled

Ethereum hard forks — Muir Glacier, London, Shanghai, Cancun and Pectra — plus every QIP and the standard BIPs are all active from genesis, so the EVM is current from block 0.

Public endpoints

ServiceEndpointProtocol
EVM JSON-RPChttps://rpc-wtx.wattxchange.appEthereum JSON-RPC over an adapter. Read-only for external callers — see Smart contracts.
UTXO & ordinals APIhttps://ord-api.wattxchange.appREST, CORS open
Public merged-mining stratumpools.wattxchange.app:3333Stratum, RandomX lane
Explorerhttps://wtx-explorer.wattxchange.appWeb
Only the RandomX stratum port is public

The public pool advertises RandomX on 3333 only. The other six algorithm ports were closed after a real incident: an algorithm with no sustained hashrate drifts to the difficulty floor, and at the floor a phone can sweep full-reward blocks for almost no work — one did, for about 224 WTX on the SHA256d lane. The block subsidy is not coupled to difficulty, so this is a fairness and cheap-reorg problem rather than an inflation one. A port is re-opened when its algorithm has committed baseline hashrate behind it. Run your own merged pool (below) if you want the other six now.

Running a node

Download the release for your platform. The Linux and macOS archives contain wattxd (daemon), wattx-cli (RPC client) and wattx-qt (graphical wallet); Windows ships wattx-qt.exe with its DLLs. Android has an APK; iOS is in progress.

# start the daemon
./wattxd -daemon

# follow the sync
./wattx-cli getblockchaininfo
./wattx-cli getconnectioncount

# stop cleanly — always do this rather than killing the process
./wattx-cli stop
The release binary needs its bundled library path

RandomX ships as a shared object next to the binary, so run the daemon from its own directory with LD_LIBRARY_PATH=. if you started it from elsewhere: LD_LIBRARY_PATH=. ./wattxd -daemon. A daemon that exits immediately with a missing librandomx.so is this and nothing else.

What good looks like

$ ./wattx-cli getblockchaininfo
{
  "chain": "main",
  "blocks": 20136,
  "headers": 20136,
  "difficulty": 110063.59,
  "moneysupply": 914595,
  "verificationprogress": 1,
  "initialblockdownload": false,
  "pruned": false
}

blocks == headers and initialblockdownload: false means you are synced. moneysupply is the circulating WTX.

Reorgs are normal here

Seven algorithms racing for the same block slots means WATTx reorganises far more often than a single-algorithm chain — typically every 50 to 150 blocks, and usually one block deep. Anything that indexes WATTx must handle reorgs by finding the real common ancestor and replaying from there. An indexer that assumes a linear chain will silently lose data; ours did exactly that until it was fixed.

Configuration

~/.wattx/wattx.conf on Linux, %APPDATA%\WATTx\wattx.conf on Windows, ~/Library/Application Support/WATTx/wattx.conf on macOS.

# --- rpc ---
server=1
rpcuser=wattxrpc
rpcpassword=<long random string>
rpcport=3889
rpcbind=127.0.0.1
rpcallowip=127.0.0.1

# --- network ---
listen=1
port=3888

# --- staking ---
staking=1
# reservebalance=0

# --- optional indexes (needed by explorers and some APIs) ---
# txindex=1
# addressindex=1
# logevents=1        # EVM logs — required for eth_getLogs style queries
FlagUse it when
-daemonRunning headless
-datadir=<path>Keeping several chains or wallets side by side
-txindex=1You need getrawtransaction for arbitrary transactions
-logevents=1You need EVM event logs — required for contract log queries
-reindexOne-shot repair after a corrupt block index. The chain is small, so this takes seconds, not hours
-rpcwallet=<name>Several wallets loaded; every wallet RPC needs to be told which
addressindex=1 is not enough on its own

Setting it in the config does not retroactively populate it, so getaddressbalance and getaddressutxos answer "No information available" on a node that was not reindexed with it. Either reindex, or use scantxoutset, which works for any address with no index at all. Our public UTXO API takes the second route.

Addresses and wallets

Address formats

FormLooks likeDerivationUsed for
Legacy P2PKHW… (base58, version 73)m/44'/22356'/0'/0/0Coins, staking, delegation, contract calls
SegWitwx1q…bech32, hrp wxCoins, ordinal funding
Taprootwx1p…m/86'/22356'/0'/0/0Ordinal inscriptions
EVM0x… (20 bytes)HASH160(pubkey) of your legacy keyContract identity
The single most important thing on this page

A WATTx EVM address is HASH160(pubkey) — the same 20 bytes as your legacy W… address. It is not keccak(pubkey)[12:], which is what Ethereum and MetaMask use. So an Ethereum-derived address is a syntactically valid recipient on WATTx and utterly unspendable: it has no UTXO-layer counterpart, no key that can sign for it, and no rescue path. An ERC-721 minted to a MetaMask address on WATTx is frozen forever. We learned this by freezing a badge.

Always derive your WATTx EVM address from a WATTx key — the desktop wallet, the browser extension and the Mining Game's HD wallet all do this correctly. fromhexaddress / gethexaddress convert between the two forms.

Wallets

WalletPlatformDoes
wattx-qtLinux, Windows, macOSFull node, built-in miner, staking and delegation UI, contract deploy and call, built-in Solidity compiler
WATTx MobileAndroid (iOS soon)Light client, sending, delegation, QR
WATTx Wallet extensionChrome (MV3)Self-custody WTX, ordinal inscription, window.wattx provider for dApps, and contract transactions from the browser
Mining Game HD walletIn-gameOne BIP-39 seed → payout addresses for WTX, HTH, BITN, BSV and EVM

All of them derive WTX at m/44'/22356'/0'/0/0 with base58 version 73, so one seed opens the same wallet everywhere.

# create an address
./wattx-cli getnewaddress "label"

# what is its EVM form?
./wattx-cli gethexaddress "WYourAddress…"

# and back
./wattx-cli fromhexaddress "0x…"

# is this address mine?
./wattx-cli validateaddress "WYourAddress…"

Backups

./wattx-cli backupwallet "/path/to/wallet-backup.dat"
./wattx-cli walletpassphrasechange "old" "new"   # encrypt first if you have not

A staking node has to hold its wallet unlocked, so it is a hot wallet by definition. Keep the bulk of your coins in cold storage and delegate — delegation never moves your coins.

Hybrid PoW/PoS consensus

Blocks can be produced by a miner or by a staker. They compete for the same slots and the subsidy is not split — the whole 50 WTX goes to whoever produced that block.

That design choice matters: it means the PoW/PoS emission ratio is not a governance parameter anybody chose, it is an emergent measurement of how much each side actually contributes. If staking participation collapses, miners produce more blocks and earn more; if hashrate leaves, stakers do.

Combined difficulty

Combined = PoW_Difficulty^0.6 × PoS_Difficulty^0.4
           where PoS_Difficulty = 100 / staking participation rate

Both mechanisms feed the network's security number, with PoW weighted slightly higher to keep mining worthwhile.

What an attacker has to do

Compromise both sides at once. Renting hashrate is not enough while stakers keep producing blocks, and acquiring stake is not enough while miners keep producing them. Add seven independent algorithm difficulties and there is no single hardware market deep enough to rent a majority from.

Block selection

When a PoW and a PoS solution appear together, the first valid block a majority of nodes receives wins. Ordinary nakamoto tie-breaking — but combined with seven algorithms it is also why reorgs are frequent on WATTx.

X25X — seven algorithms, one chain

Active since block 2,000. Each algorithm keeps its own independent difficulty, so hashrate arriving or leaving on one lane never disturbs the others.

#AlgorithmHardwareTypeChains you may already be mining
0SHA256dASICHashBitcoin, Bitcoin Cash, Bitnet, any SHA256d chain
1ScryptASIC / GPUMemory-hardLitecoin, Dogecoin, Flopcoin, Trollcoin
2EthashGPUMemory-hardEthereum Classic, Altcoinchain, EGAZ, Octaspace
3RandomXCPUCPU-optimisedMonero, Etica
4EquihashGPU / ASICMemory-hardZcash, Horizen, BitcoinZ
5X11ASIC / GPUChained hashDash, DigiByte, Help The Homeless
6kHeavyHashGPU / ASICMatrix-heavyKaspa

Why seven

  • Hardware inclusivity. Three hardware classes, seven lanes — no one hardware type can monopolise block production, and a CPU owner is not competing against an ASIC farm.
  • Difficulty isolation. Per-algorithm retargeting means a hashrate migration on one lane cannot stall the chain on another.
  • Merged-mining reach. Seven algorithms covers virtually every major PoW chain in existence, which is what makes AuxPoW more than a nice idea.
The empty-lane problem, stated openly

Per-algorithm difficulty is the right design and it has one sharp edge: an algorithm with no miners retargets down to the floor, and because the block subsidy is fixed rather than proportional to work, a trivial amount of hashing on an empty lane earns a full-reward block. That has happened. The durable fixes are a per-algorithm minimum difficulty floor, or coupling reward to work — both consensus changes. Until one ships, the operational mitigation is not to publish a lane with no baseline hashrate behind it.

Mining

Solo, from the node

./wattx-cli getnewaddress "mining"
./wattx-cli generatetoaddress 1 "WYourAddress…"
./wattx-cli getmininginfo

wattx-qt has the same thing behind a button. Solo CPU mining will find blocks on a young chain and essentially never on a mature one — use a pool or merge-mine.

Pool mining

Point any miner that speaks the algorithm's usual stratum dialect at a WATTx-compatible pool. The public pool runs the RandomX lane:

# RandomX, e.g. xmrig
xmrig -o pools.wattxchange.app:3333 -u WYourWTXAddress -p x -a rx/0

# generic stratum form
stratum+tcp://pools.wattxchange.app:3333

The stratum speaks the wire protocol each algorithm's miners expect — the XMRig login/job/submit dialect on RandomX, Bitcoin's mining.subscribe / mining.authorize / mining.submit on SHA256d, Scrypt and X11, eth_getWork / eth_submitWork on Ethash, and the nheqminer Zcash-stratum format on Equihash. Existing miners work unmodified.

Your login is your payout address

Use your WATTx W… address as the stratum username. There is no account to register.

Which lane should you mine?

You ownLaneRealistic outcome
A CPURandomXThe only lane with sustained public hashrate. Real competition, real difficulty.
A SHA256d ASICSHA256d, merged with Bitcoin or BitnetBest return per watt in the system — you were mining anyway.
A GPUEthash or Equihash, merged with ETC/Altcoinchain or BitcoinZDual-earning proven on both.
A Scrypt / X11 / kHeavyHash ASICThat lane, merged with Litecoin / Dash / KaspaDual-earning proven on all three.

If you already mine anything on a supported algorithm, merged mining is strictly better than mining WATTx directly — same hardware, same power, two payouts.

AuxPoW merged mining

Do the work once, get paid on two chains. All seven X25X algorithms support merged mining, and it has been proven end-to-end on real parent chains for every one of them.

How it works

  1. Commit. You build a parent-chain block whose coinbase (or, for chains without a spendable coinbase, whose designated commitment field) contains a hash commitment to the WATTx block you want to produce.
  2. Mine it normally. Nothing about the parent chain's mining changes. Your hardware, your pool software, your usual work.
  3. Find a solution. When you find one good enough for the parent chain, you have also — for free — found one good enough for WATTx, because WATTx's difficulty is lower.
  4. Submit both. The parent solution goes to the parent chain. The AuxPoW proof — the parent header, the commitment and the merkle branch linking them — goes to WATTx.
  5. WATTx verifies it canonically. It recomputes the parent chain's own proof-of-work with the real algorithm, and checks that the parent block commits to the exact WATTx block being submitted. One share, two blocks.

Proven parent chains

AlgorithmParent provenNotes
SHA256dBitcoin, BitnetReal bitcoind-accepted parent blocks alongside WATTx AuxPoW blocks
ScryptLitecoinReal litecoind-accepted parent blocks
RandomXMoneroReal keccak and CryptoNote tree hashing, monerod-accepted
X11DashCanonical X11 vendored into consensus
EthashAltcoinchain, Ethereum ClassicTrustless: the parent's extraData must commit to the exact WATTx block
EquihashBitcoinZ (Zhash 144,5 and 48,5)Consensus verifies the Wagner solution canonically
kHeavyHashKaspaCanonical cSHAKE256 + matrix PoW with keyed-blake2b, cross-validated against kaspad byte for byte
Verification is canonical, not cosmetic

Each algorithm's proof is checked by recomputing that chain's actual proof-of-work inside WATTx consensus, and by verifying that the parent block's commitment binds to the specific WATTx block. There is no path where a parent header that did not really commit to your WATTx block is accepted, and a zero-hash or malformed proof fails closed rather than open. This was not free — earlier builds had fail-open holes on the Ethash, RandomX and Equihash paths, and each one was a free-block vulnerability until it was closed.

The point of it

WATTx does not want its own dedicated hashrate. It wants a slice of the hashrate that already exists. Every ASIC pointed at Bitcoin, every GPU on Ethereum Classic, every CPU on Monero can add its work to WATTx for zero marginal energy — and in return WATTx pays those miners to keep smaller networks alive rather than concentrating on the largest chain. A miner who merge-mines does not have to choose between the big chain and the small one.

Running a merged-mining pool

The daemon has a merged stratum built in. It polls each configured parent chain for work, builds a combined job, serves it on that algorithm's port in that algorithm's native wire protocol, and submits solutions to both chains.

./wattx-cli startmultimergedstratum '<json config>'
./wattx-cli getmergeminingdashboard
./wattx-cli stopmultimergedstratum

Ports are assigned from a base in algorithm order:

OffsetAlgorithmMiner protocol
base + 0RandomXXMRig — login / job / submit
base + 1SHA256dBitcoin stratum
base + 2ScryptBitcoin stratum
base + 3Ethasheth_getWork / eth_submitWork
base + 4EquihashZcash stratum (nheqminer)
base + 5X11Bitcoin stratum
base + 6kHeavyHashKaspa

Per-chain share gates

One share difficulty cannot serve a SHA256d ASIC and a RandomX CPU at the same time, so each parent-chain entry takes its own optional share_nbits or share_difficulty overriding the pool-wide value. Set them per lane or your CPU miners will never submit anything and your ASICs will drown you.

Three operational facts that will cost you an evening

Configuration applies at daemon start. Stopping and restarting the stratum does not reload it — restart the daemon.

Kaspa timestamps are milliseconds. Divide by 1000 before the aux time-window check, or every kHeavyHash proof is rejected as out of range.

Equihash needs equihash_n and equihash_k per chain. BitcoinZ mainnet is 144,5; the 48,5 parameters are a different chain entirely.

Ethash needs a committed-header cache

Ethash merged mining is trustless — the parent's extraData must commit to the exact WATTx block — which means the parent node must seal a header byte-identical to the one the stratum job was built from. Because the parent's sealing header churns on every recommit, the stratum keeps a job per seal-hash rather than per parent height. Even done correctly there is a structural ceiling around 70–80 %: the parent commits to the WATTx tip as of its last recommit, and if the WATTx tip advances before the parent seals, that committed block is stale. That is inherent to trustlessly merge-mining a chain whose blocks are faster than the parent's recommit interval.

The 1 % pool fee

Merged-mining pools in the WATTx ecosystem contribute a 1 % fee that funds the Mining Game economy. That is what makes the game's rewards backed by real mining revenue rather than by token emission — and it is why the game exists at all.

Solo staking

  1. Hold WTX in a wallet you control. Any amount stakes; more stakes proportionally more often.
  2. Wait for maturity. A UTXO must have 500 confirmations and must not have moved during that window. At 120-second blocks that is about 16.7 hours. The threshold halves at every reward halving.
  3. Unlock for staking only.
    ./wattx-cli walletpassphrase "YOUR_PASSPHRASE" 99999999 true
    The trailing true is what makes it staking-only: the wallet can sign coinstakes but cannot sendtoaddress. That is the flag you want on an always-on node.
  4. Check it is working.
    ./wattx-cli getstakinginfo
    Look for staking: true and a non-zero weight. Compare weight to netstakeweight — that ratio is roughly your share of PoS blocks.
  5. Stay online. A staking node that is offline when its coin's turn comes simply misses it.
Stake weight = Σ (mature UTXO values)
A UTXO is mature when confirmations ≥ 500 and it has not moved in that window.
"staking: false" with the wallet unlocked

Almost always the wallet is locked, or locked without the staking-only flag. Note also that a staking-only unlock cannot send — so if a service on that node needs to pay out, it needs a full unlock at send time. Plan for that before you arm anything automated.

Delegation and super stakers

Offline staking has been active since block 1. You delegate your staking rights to a super staker; your coins never move and never leave your wallet.

As a delegator

# delegate to a super staker, agreeing to their fee (percent)
./wattx-cli setdelegateforaddress "<superStakerAddress>" <fee> "<yourAddress>" <gasLimit> <gasPrice>

# check it landed
./wattx-cli getdelegationinfoforaddress "<yourAddress>"

# undo it
./wattx-cli removedelegationforaddress "<yourAddress>" <gasLimit> <gasPrice>
  • Non-custodial. The delegation is a contract record, not a transfer. Nobody can spend your coins.
  • Any amount. There is no delegator minimum.
  • Cold-storage compatible. Your keys can stay air-gapped; only the hot super staker node is online.
  • Rewards land on your address, minus the super staker's fee.

As a super staker

./wattx-cli setsuperstaker "<yourAddress>" true
./wattx-cli listsuperstakercustomconfig
./wattx-cli getstakinginfo
  • 20,000 WTX minimum self-stake (nMinValidatorStake).
  • Run 24/7. Uptime is what your trust tier — and therefore your multiplier — is measured on.
  • Publish your fee and keep it stable. Delegators can leave in one transaction.
Superstaking versus plain staking

Accepting delegations requires the address index, which on some builds triggers a full reindex. Plain solo staking needs no index at all. If you only want to stake your own coins, do not turn on superstaking.

Trust tiers

PoS networks have a lazy-validator problem: a node that is offline half the time still earns roughly in proportion to its stake, so there is no economic pressure to be reliable. Trust tiers add that pressure.

TierUptimeMultiplier
Bronze95 %1.0×
Silver97 %1.25×
Gold99 %1.5×
Platinum99.9 %2.0×

Uptime is measured over rolling windows and tiers move dynamically — this is a continuously earned status, not a badge you keep. A Platinum validator earns double a Bronze one on the same stake, which is a large enough gap to justify real infrastructure: a UPS, a monitored host, an automatic restart. That is exactly the intent.

Tokenomics

Max supply
21,000,000
Block reward
50 WTX
Halving
210,000 blocks
Premine
None

The dual halving

Every halving does two things at once. It halves the block reward, controlling inflation — and it halves the staking maturity requirement, widening access.

EraHeightRewardStake maturity
0050 WTX500 blocks16.7 hours
1210,00025 WTX250 blocks8.3 hours
2420,00012.5 WTX125 blocks4.2 hours
3630,0006.25 WTX62 blocks2.1 hours
4840,0003.125 WTX31 blocks1 hour
51,050,0001.5625 WTX15 blocks30 minutes

The reasoning is progressive decentralisation. Early on, a high barrier selects for committed stakers and gives the young chain its security. Later, as the reward per block shrinks, the barrier shrinks with it and security comes from breadth of participation instead of depth of individual commitment. In the final eras maturity is near-instant.

Fair launch

Zero premine. No ICO, IEO or IDO. No founder allocation. Every WTX in existence was mined or staked, starting at block 0.

Smart contracts (EVM)

Full EVM, Solidity up to 0.8.x, QRC-20 and QRC-721 tokens that are byte-compatible with ERC-20 and ERC-721. Every Ethereum hard fork through Pectra is active from genesis. What is different is how a transaction reaches the EVM.

The Account Abstraction Layer

A WATTx contract transaction is a UTXO transaction carrying a special output script. Three opcodes carry the EVM payload:

OpcodeByteScript shape
OP_CREATE0xc1OP_4 <gasLimit> <gasPrice> <bytecode> OP_CREATE
OP_CALL0xc2OP_4 <gasLimit> <gasPrice> <data> <address20> OP_CALL
OP_SPEND0xc3Contract spending its own funds

The sender is recovered from the input scriptSig, which is why contract calls must spend legacy P2PKH inputs — and why the contract's view of "who called me" is HASH160(pubkey), your legacy address as 20 bytes.

From the CLI

# deploy
./wattx-cli createcontract "<bytecode-hex>" [gasLimit] [gasPrice] [senderAddress]

# read-only call — free, no transaction
./wattx-cli callcontract "<contractAddr>" "<data-hex>"

# state-changing call, optionally sending WTX
./wattx-cli sendtocontract "<contractAddr>" "<data-hex>" <amount> [gasLimit] [gasPrice] [senderAddress]

# what happened?
./wattx-cli gettransactionreceipt "<txid>"
./wattx-cli searchlogs <fromBlock> <toBlock>      # needs -logevents=1

wattx-qt has a built-in Solidity compiler and a contract UI; you can also compile with solc and deploy the bytecode from the CLI.

MetaMask cannot sign a WATTx contract transaction

MetaMask, Rabby and every other Ethereum wallet produce Ethereum-style signatures over an Ethereum transaction. WATTx needs a UTXO transaction with an AAL output, signed with the UTXO key. An adapter can present an Ethereum JSON-RPC surface and re-sign through a node wallet, which is how rpc-wtx.wattxchange.app serves reads — but it cannot sign for your key. Anything that needs a user to sign a contract transaction must go through the WATTx wallet extension or the node wallet.

Debugging a reverted contract transaction

The EVM adapter's eth_call does not faithfully simulate msg.value or reverts, so a simulation that looks fine can still revert on chain. Use the UTXO-side gettransactionreceipt instead — it carries excepted and exceptedMessage with the actual revert string.

block.chainid is 81, not 22356

The RPC adapter reports chain id 22356 so wallets and tooling can distinguish WATTx, but the EVM's own block.chainid is 81. Anything that has to agree with on-chain state — most importantly EIP-712 signatures — must use 81. Signing a typed-data domain with 22356 produces a signature that every contract on WATTx will reject. Read a contract's real domain with eip712Domain() (0x84b0196e) rather than assuming. This cost us one reverted 100,000-WTX mint before we found it.

Two more adapter facts worth knowing

eth_accounts returns null, so provider.getSigner() throws "accounts is not iterable". Construct the signer explicitly against a known address instead (new JsonRpcSigner(provider, address) in ethers v6).

tx.wait() is unreliable — the adapter re-hashes transactions and can synthesise phantom replacement transactions from UTXO change outputs. To confirm a deploy, scan blocks for your exact creation calldata rather than waiting on a hash.

Receipts can also carry a badly checksummed address. Always re-checksum with getAddress(addr.toLowerCase()) before using it, or ethers throws.

EVM from the browser

The WATTx Wallet extension is the answer to "MetaMask cannot do WATTx". It already holds UTXO keys and signs UTXO transactions, so it can build the AAL output itself.

It injects a window.wattx provider. Install it, then:

// connect — returns UTXO addresses and the derived EVM address
const acct = await window.wattx.connect();
//  { addresses: {...}, evm: "0x…" }

// the caller identity a contract will see
const from = await window.wattx.getEvmAddress();

// a state-changing contract call
const txid = await window.wattx.sendToContract({
  to:       "0xContractAddress",
  data:     "0xa9059cbb…",       // abi-encoded calldata
  value:    0,                    // WTX in satoshi
  gasLimit: 250000,               // default
  gasPrice: 40                    // satoshi, default
});

// deploy
const { txid, address } = await window.wattx.deployContract({ bytecode: "0x60806040…" });

// ordinals
await window.wattx.inscribe({ contentType: "image/png", dataBase64, toAddress });

// plain coins
await window.wattx.sendWTX({ to: "wx1q…", amount: 100000000 });

Security model

  • Per-origin connect grants are persisted; every inscription raises a fresh confirmation window showing content type, size and estimated cost.
  • Every contract transaction raises its own approval screen.
  • createWallet, importWallet and exportBackup are locked to chrome-extension:// senders — a web page can never call them.
  • The origin is taken from the browser's sender, never from the page's claim about itself.
  • Keys are BIP-39; the create flow forces you through writing the phrase down before it shows you the wallet. Encryption at rest is still on the list.

Ordinals and the UTXO API

WATTx carries ordinal inscriptions on its UTXO layer, using the same commit/reveal envelope shape as Bitcoin ordinals. Inscribe from the wallet extension, from nft.wattxchange.app, or from the wattx-ord CLI.

The public API

GET  https://ord-api.wattxchange.app/health
GET  /address/:addr/utxo          # works for W…, wx1q… and wx1p…
GET  /address/:addr/balance
GET  /tx/:txid                    # includes raw hex (needed for nonWitnessUtxo)
POST /tx            {"hex":"…"}   # broadcast

GET  /inscription/:id             # raw content, served with its own content-type
GET  /inscriptions                # block-scan discovery
GET  /ord/inscriptions            # rich index: owner, transfers, size
GET  /ord/inscription/:id
GET  /ord/address/:addr
GET  /ord/content/:id
GET  /ord/status

CORS is open, so a browser dApp can call it directly. It uses scantxoutset rather than the address index, which means it works against any node with no reindex — at the cost of scanning the UTXO set per query, which is fine on a chain this young.

Envelope encodings differ between builders

The wattx-ord CLI and the wallet extension emit the content-type tag as OP_1 (0x51) with the body tag as a pushed 0x00; some other builders emit 01 01 plus a bare OP_0. An indexer that parses only one form silently finds zero inscriptions on a chain that has them. Accept both.

Reorg handling is not optional here

WATTx reorganises every 50–150 blocks. An indexer whose reorg path wipes its state but rewinds only a few blocks will erase the very range that held the data and never rescan it — and it will look perfectly healthy, reporting indexedHeight at tip with zero results. Keep a rolling window of block hashes, find the true common ancestor, and replay from there. A full rescan of the chain takes about 25 seconds, so there is no reason to cut corners.

Privacy

FCMP privacy transactions Block 210,000

Full-chain membership proofs bring shielded transactions to the base layer, with shielded coinbase following at block 210,100. Shielded outputs mature after 10 blocks; shielded coinbase outputs after 100.

Stealth addresses

The sender derives a one-time address from the recipient's public key. Only the recipient can detect and spend it, and every payment lands on a distinct, unlinked address — so a published address never becomes a public transaction history.

Cross-chain privacy pools

Deposit USDT on Ethereum, BSC or Polygon in fixed denominations (100, 1K, 10K, 100K). The deposit locks in that chain's pool contract; a LayerZero message creates a shielded commitment on WATTx in a 20-level incremental merkle tree. You generate a zero-knowledge proof off-chain and withdraw to any supported chain. Fixed denominations defeat amount correlation, the proof establishes validity without revealing the deposit, and withdrawing on a different chain breaks single-chain analysis outright.

WATTxSecret Live

secret.wattxchain.org — AES-256-GCM encryption performed entirely in your browser, self-destructing messages with configurable expiry (1–30 days) and view limits (1–10 views), no server-side storage, no cookies, no analytics. The key never leaves your machine, which means we could not read your messages even if we were asked to.

Ecosystem

ANS — WATTx Name Service Planned

Human-readable .wtx names mapping to addresses, contracts and IPFS content, resolved natively in wallets and dApps.

Bridges

WTX moves to and from the EVM world through a bridge desk, and WATT — the Mining Game's token — moves between EVM chains over a self-hosted LayerZero mesh.

RailMovesBetweenMechanism
WTX ⇄ WATT desknative WTX ⇄ WATT v2WATTx ⇄ Altcoinchain / PolygonHTLC in-leg on the EVM side, watched deposits on the WTX side. Priced by a virtual AMM over real reserves, or minted at the circulating-supply ratio.
WATT omnichainWATT v2Altcoinchain ⇄ PolygonLayerZero OFT — burn on source, mint on destination, one supply
ALT omnichainnative ALTAltcoinchain ⇄ PolygonNative lockbox on ALT, mint/burn OFT on Polygon
Privacy poolsUSDTEthereum / BSC / Polygon ⇄ WATTxLayerZero message + ZK withdrawal proof

Use them at bridge.wattxchange.app. The desk publishes live quotes and a route finder:

GET https://bridge.wattxchange.app/api/info
GET https://bridge.wattxchange.app/api/prices
GET https://bridge.wattxchange.app/api/quote?direction=WTX_TO_WATT&amount=100&dest=0x…
GET https://bridge.wattxchange.app/api/route?from=WTX&to=POL&amount=100
Why the WTX side is a desk, not an atomic swap

Users cannot sign transactions on the WATTx EVM — the compatibility layer re-signs through the node wallet — so WTX has to move on the UTXO layer, and the two legs cannot be atomically linked. The design compensates where it can: the EVM leg is a real HTLC with your refund path always intact, the desk pays the WTX side first and only then claims your lock, and it refuses to touch a lock with less than six hours left on it.

If a swap sits at "waiting for your deposit"

The desk needs three confirmations. If WATTx has stopped producing blocks, the deposit cannot reach them and the desk waits rather than paying. It publishes the chain tip age and shows a banner when the tip is more than fifteen minutes old, so a mining stall reads as a network pause rather than a stuck swap. Funds are refundable throughout, and it pays automatically once blocks resume.

Full bridge documentation, including every contract address, lives in the Mining Game docs.

The Mining Game

The Mining Game is where WATTx's mining economy becomes something you can hold. It is an NFT mining-rig builder whose rewards are funded by real node income — including the 1 % fee from merged mining pools.

  • Collect component NFTs — cases, processors, GPUs, ASICs, frames — and assemble them into rigs.
  • Point a rig at a pool. The pool is backed by a real validator, masternode or staking node; whatever that node earns is split among the pool's miners by effective power and paid out on-chain.
  • Components you are not mining with can be staked powered-off to mint WATT; rigs that are mining burn WATT as fuel, 99 % destroyed and 1 % to the pool host.
  • Lock 100,000 WATT and you can host your own pool, turning your node's income into a game economy — and your own rigs then mine for free.
  • WTX is a first-class payout coin (target id 1), and WTX bridges to WATT through the desk.

RPC reference

Everything below is wattx-cli <command>, or a JSON-RPC POST to http://127.0.0.1:3889 with your rpcuser / rpcpassword.

curl -s --user "$RPCUSER:$RPCPASS" -H 'content-type: application/json' \
  http://127.0.0.1:3889/ \
  --data '{"jsonrpc":"2.0","id":1,"method":"getblockchaininfo","params":[]}'

Chain and blocks

CommandDoes
getblockchaininfoHeight, difficulty, money supply, sync state
getblockcount · getbestblockhashTip height and hash
getblock <hash> [verbosity]A block. Verbosity 2 includes full transactions
getblockhash <height>Hash at a height
getrawtransaction <txid> [verbose]Needs -txindex=1 for arbitrary transactions
sendrawtransaction <hex>Broadcast
scantxoutset start '[…]'UTXOs for any descriptor — no index required
getconnectioncount · getpeerinfoNetwork health

Mining

CommandDoes
getmininginfoDifficulty, hashrate, block template state
generatetoaddress <n> <addr>Solo-mine n blocks
getblocktemplateWork for external miners
startmultimergedstratum '<json>'Start the built-in merged-mining stratum on all configured algorithms
stopmultimergedstratumStop it. Configuration changes need a daemon restart, not a stratum restart.
getmergeminingdashboardPer-algorithm port, parent chain, job and share state

Staking and delegation

CommandDoes
getstakinginfostaking, weight, netstakeweight, expected time
walletpassphrase "<pass>" <seconds> trueUnlock for staking only — cannot send
setsuperstaker <addr> trueAccept delegations at that address
listsuperstakercustomconfigYour super staker configuration
setdelegateforaddress <staker> <fee> <you> <gasLimit> <gasPrice>Delegate. Your coins never move
getdelegationinfoforaddress <addr>Who you delegate to, and at what fee
removedelegationforaddress <addr> <gasLimit> <gasPrice>Undelegate
listsinceblock <hash>New wallet activity, including matured coinstakes

Smart contracts

CommandDoes
createcontract <bytecode> [gasLimit] [gasPrice] [sender]Deploy
callcontract <addr> <data>Read-only, free
sendtocontract <addr> <data> <value> [gasLimit] [gasPrice] [sender]State-changing
gettransactionreceipt <txid>Receipt with excepted / exceptedMessagethe way to debug a revert
searchlogs <from> <to> [addresses] [topics]EVM logs — needs -logevents=1
getaccountinfo <addr>Contract balance, storage and code
gethexaddress · fromhexaddressConvert between W… and 0x…

Wallet

CommandDoes
getnewaddress ["label"] · getbalanceThe basics
listunspent [minconf]Your UTXOs. Note it omits locked outputs
lockunspent <unlock> [outputs] [persistent]Keep coin selection away from reserved UTXOs, across restarts
sendtoaddress <addr> <amount>Needs a full unlock, not a staking-only one
validateaddress <addr>Valid, and is it mine
backupwallet <path>Do this
listreceivedbyaddress <minconf> … trueIncludes zero-confirmation receipts — how a service spots an incoming deposit early

EVM JSON-RPC

https://rpc-wtx.wattxchange.app speaks Ethereum JSON-RPC — eth_blockNumber, eth_call, eth_getBalance, eth_getTransactionReceipt and friends — so ethers.js and web3.js can read WATTx contracts normally. It cannot sign for your key; see Smart contracts.

curl -s https://rpc-wtx.wattxchange.app \
  -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'

Troubleshooting

The daemon exits immediately

Missing librandomx.so. Run it from its own directory with LD_LIBRARY_PATH=..

getstakinginfo says staking: false

The wallet is locked, or unlocked without the staking-only flag. Run walletpassphrase "<pass>" 99999999 true — the trailing true is the whole point.

A staking node cannot send

Correct, and deliberate. A staking-only unlock signs coinstakes and nothing else. A full unlock is needed at send time.

getaddressbalance returns "No information available"

addressindex=1 in the config does not backfill. Reindex, or use scantxoutset.

My indexer says it is synced but shows nothing

Its reorg path wiped the state without rewinding far enough. See Ordinals.

My EIP-712 signature is rejected as a bad signature

You signed with chain id 22356. The EVM's block.chainid is 81. Read the contract's real domain with eip712Domain().

provider.getSigner() throws "accounts is not iterable"

The adapter's eth_accounts returns null. Construct the signer explicitly against a known address.

tx.wait() hangs or resolves on the wrong transaction

The adapter re-hashes transactions and can synthesise phantom replacements from change outputs. Confirm a deploy by scanning blocks for your exact creation calldata.

"bad address checksum" from a receipt

Receipts can carry badly checksummed addresses. Re-checksum from lowercase before use.

An NFT I minted cannot be transferred

It went to an Ethereum-derived address. That address is unsignable on WATTx and there is no rescue. See Addresses — this is the one mistake with no undo.

The node is stuck on a corrupt block index

One-shot -reindex. The chain is small; it takes seconds.

Merged-mining config changes do not take effect

Stopping and starting the stratum does not reload configuration. Restart the daemon.

Glossary

TermMeaning
WTXWATTx's native coin.
WATTThe Mining Game's ERC-20 fuel and reward token on Polygon, Altcoinchain and WATTx. Distinct from WTX.
X25XWATTx's seven-algorithm mining framework, each algorithm with its own difficulty.
AuxPoWAuxiliary proof-of-work. Work done on a parent chain counted as WATTx work — merged mining.
Parent chainThe chain you were already mining, whose blocks carry the WATTx commitment.
AALAccount Abstraction Layer — the UTXO output that carries an EVM call or deploy.
OP_CREATE / OP_CALLThe script opcodes (0xc1 / 0xc2) that carry EVM payloads.
QRC-20 / QRC-721WATTx's token standards. Byte-compatible with ERC-20 / ERC-721.
CoinstakeThe special transaction a staking node produces when it wins a PoS block.
Stake maturityConfirmations a UTXO needs before it can stake. 500 today, halving with each reward halving.
Super stakerA node with ≥ 20,000 WTX self-stake that accepts delegations for a fee.
DelegationAssigning staking rights to a super staker. Non-custodial — your coins never move.
Trust tierBronze / Silver / Gold / Platinum — an uptime-earned reward multiplier from 1.0× to 2.0×.
FCMPFull-chain membership proofs — base-layer shielded transactions, activating at block 210,000.
Stealth addressA one-time address derived from the recipient's public key; only they can spend it.
Ordinal / inscriptionData written permanently into a UTXO's witness and tracked as a transferable artifact.
Combined difficultyPoW^0.6 × PoS^0.4 — the chain's real security number.