Node

Two jobs. Do not mix them.

TN10 is a local kaspad plus a CPU miner paying a kaspatest: address. Mainnet is a real node. Public P2P is optional. This page does not tell you to mine mainnet.

Lab notes from a Windows run, 7 Sep 2026, plus official docs. Pin: rusty-kaspa v2.0.1 or newer. There is no official kaspa.exe. The node is kaspad / kaspad.exe.

TN10 mine tKASMainnet public node
Flag--testnet --netsuffix=10no --testnet
Addresskaspatest:kaspa: (wallet only; this guide is node-only)
Miner port16210do not mine here
P2Ptestnet16111 mainnet
Coinsworthlessreal KAS
Explorertn10.kaspa.streamkaspa.stream

TN10 + tKAS

Local kaspad on Testnet-10 plus a CPU miner paying a kaspatest: address.

What this is

A local kaspad on Testnet-10 plus a CPU miner paying a kaspatest: address. tKAS is faucet money. Official line: CPU only so you do not own a tiny testnet.

0. Download, then move it

GitHub puts the zip in Downloads. Do not run from there. Browser plus OneDrive plus kaspa-miner (3).exe is how paths break.

Get rusty-kaspa latest: Windows rusty-kaspa-*-win64.zip, Linux rusty-kaspa-*-linux-amd64.zip, macOS rusty-kaspa-*-osx.zip. CPU miner: kaspanet/cpuminer.

Make a dedicated folder and copy the unzipped files there. Windows: C:\Kaspa\tn10\. Ubuntu / Linux / macOS: ~/kaspa/tn10/. Confirm you see kaspad.exe or kaspad (sometimes in bin/).

Windows after unzip:

New-Item -ItemType Directory -Force -Path C:\Kaspa\tn10
Copy-Item "$env:USERPROFILE\Downloads\rusty-kaspa-*\*" C:\Kaspa\tn10 -Recurse

Linux / macOS:

mkdir -p ~/kaspa/tn10
unzip -o ~/Downloads/rusty-kaspa-*-linux-amd64.zip -d ~/kaspa/tn10
chmod +x ~/kaspa/tn10/kaspad ~/kaspa/tn10/kaspa-wallet ~/kaspa/tn10/rothschild

If the zip dumped a bin/ subfolder, cd there. Copy the miner into the same folder. Rename long GitHub names: kaspa-miner-v0.2.7-win64-amd64 (3).exe becomes kaspa-miner.exe.

1. Get a kaspatest: address

Must start with kaspatest:. A kaspa: address is the wrong network.

Kaspa-NG: network Testnet-10, create wallet, copy receive address. CLI: kaspa-wallet in the node zip, against a running TN10 node with --utxoindex. Throwaway: rothschild in the same zip can print a key plus address. Save the key if you want that bag.

Paste the full string into tn10.kaspa.stream search. If it rejects it, you chopped the address or used mainnet. Faucet is optional: faucet-tn10.kaspanet.io. You do not need it to mine.

2. Start the node (terminal 1, leave it open)

Windows PowerShell:

cd C:\Kaspa\tn10
dir kaspad.exe
.\kaspad.exe --testnet --netsuffix=10 --utxoindex

Ubuntu / Linux / macOS:

cd ~/kaspa/tn10
./kaspad --testnet --netsuffix=10 --utxoindex

One line. Enter once. Closing this window kills the node. One kaspad only. Windows Firewall: allow private networks.

Fails already hit: command from your home folder is “not recognized” (you are not in the dedicated folder). Two commands glued on one line makes --rpclisten-borsh=default.\kaspad.exe and “invalid IP”. Missing --testnet puts you on mainnet by accident.

3. Wait until it is actually synced

Order: validating pruning-point proof (levels counting down). Receiving UTXO set chunks (--utxoindex is slow, hundreds of millions of UTXOs). “Finished receiving the UTXO set” then importing (looks frozen; do not kill it). Live tip: Accepted N blocks via relay every second.

Only step 4 is ready. Plan 1 to 2 hours on a home line.

4. Start the miner (terminal 2)

Node stays up. You do not hard-close kaspad to free the miner. Rename the long miner filename first if needed.

Windows:

cd C:\Kaspa\tn10
.\kaspa-miner.exe --testnet --mining-address kaspatest:YOUR_ADDRESS -s 127.0.0.1 -p 16210 -t 1

Linux / macOS:

cd ~/kaspa/tn10
./kaspa-miner --testnet --mining-address kaspatest:YOUR_ADDRESS -s 127.0.0.1 -p 16210 -t 1

Port 16210 is TN10 gRPC, not mainnet 16110. -t 1 is one CPU thread. Enough on TN10.

5. Check rewards

tn10.kaspa.stream address lookup. explorer-tn10.kaspa.org was unreliable. Coinbase stays Confirming until mature. Blue good, red bad. Then bring the address to the playground.

Change address: Ctrl+C the miner only. Restart with the new kaspatest: string. Old coins stay on the old address.

GPU, if you still insist

Official line is still CPU only on TN10. GPU is allowed by physics, not by etiquette. One card can own a network that sits around tens of MH/s. There is no public GPU pool for tKAS.

BzMiner to the node: bzminer -a kaspa -w kaspatest:YOUR_ADDRESS -p node+tcp://127.0.0.1:16210 --nc 1. Some builds want solo+tcp://. Do not use stratum+tcp://pool....

Or tmrlvi/kaspa-miner GPU build, -t 0 for GPU only. After Toccata, old miners can hash and still submit invalid blocks. Then use stratum-bridge.exe from the same zip, miner to 127.0.0.1:5555. Do not port-forward stratum.

SymptomActual cause
not recognizedWrong folder. cd to the directory that contains the exe
invalid IP / glued flagsTwo commands pasted as one line. One command, then Enter
Reconnect loop / connection refusedWrong port (16210 vs 16211 vs 16110), node not listening, or still importing UTXOs
Invalid addressYou used kaspa: or chopped the string
Hashing, zero blocks, rejected submitPre-Toccata miner vs Toccata templates. Use the stratum-bridge path
Mining instantly at startNode not synced. You forked yourself
Pool dashboard on Wooly or F2You are on mainnet. Stop

Mainnet public node

Follow real KAS. Public P2P is optional. No miner in this guide.

What this is

Follow real KAS. This is not a miner guide. Do not add --testnet. Same release zip, different folder: C:\Kaspa\mainnet\ or ~/kaspa/mainnet/.

Hardware

SSD. 16 GB RAM minimum, 32 GB more comfortable. 4+ cores. Tens of GB free. Stable link. Mainnet after Crescendo and Toccata is heavier than TN10.

Start

Linux / Ubuntu / macOS:

cd ~/kaspa/mainnet
./kaspad --utxoindex

Windows:

cd C:\Kaspa\mainnet
.\kaspad.exe --utxoindex

Optional local RPC. Keep it local:

./kaspad --utxoindex --rpclisten=127.0.0.1:16110

Do not expose 16110. IBD is long. Same rule: do not kill during UTXO import. One process per data dir.

You are synced when

Logs look like live tip: accepted blocks via relay, steady processed N blocks, not receiving UTXO set or pruning-level validation. Then a wallet can attach to 127.0.0.1:16110.

Background (optional)

Foreground is fine for learning. Linux user systemd or tmux on Mac. One kaspad per data dir. Two processes on the same data dir is a lock or corruption.

Update: stop cleanly, overwrite kaspad, start again. Stay on 2.0.1+ (Toccata). Same data dir. Do not delete the DB unless the release notes say to resync.

Public is optional

You can sync forever as a private follower. Public means others can dial in on P2P 16111/tcp on a real public IP.

Router: forward 16111 to this machine. Firewall allow 16111 (sudo ufw allow 16111/tcp on Ubuntu). Do not bind P2P to 127.0.0.1. Need a real public IP. CGNAT means you will never list. RPC stays private. Public node is not open RPC.

Check on kaspa.stream

kaspa.stream/nodes. Use Check your node. If the crawler sees you, the page highlights you. Want user agent kaspad:2.0.1 (Toccata). Wait 10 to 30 minutes after opening the port.

Extra port test: kaspa.host on mainnet 16111. Not listed means private follower. That is still a valid node. The chain does not require you to be on the public list.

Do not mix

Wrong flag, wrong prefix, wrong pool.

WrongWhat happens
--testnet on the mainnet folderyou sync TN10
kaspa: on the TN10 minerwrong network or fail
Wooly / F2 / K1 while mining tKASmainnet KAS
Two kaspad on one DBlock or corruption
Binaries left in Downloadspath and (3).exe mess
GPU or ASIC on public TN10you can own a tiny network

TN10: dedicated folder, synced testnet node, one CPU thread on 127.0.0.1:16210, kaspatest: address.

Mainnet: dedicated folder, kaspad --utxoindex, optional 16111, then kaspa.stream/nodes.