Verify chain state
Run or query a node, compare explorers, and check accepted transactions without trusting one hosted screen.
Verify yourself
The goal is not to make every reader a node operator on day one. The goal is to show the route away from one hosted explorer, one wallet UI, or one dashboard when you need stronger assurance.
Mainnet commands move around with releases. Check the source links before touching real funds.
Start here
Run or query a node, compare explorers, and check accepted transactions without trusting one hosted screen.
Open the Rusty Kaspa CLI route, inspect help, confirm network, and avoid signing until key storage is clear.
Use testnet or TN12 before mainnet. Testnet coins are for learning, not value storage.
Use wRPC and accepted-transaction replay when an app needs to prove that a txid, payload, or output really landed.
Use a documented API for address history, acceptance checks, block ranges, and KRC token data when a prototype cannot run its own indexer yet.
Mental model
Use an explorer to see whether a transaction appears accepted. This is convenient, not the final trust model.
Compare another explorer, API, wallet, or indexer view. If two hosted views disagree, slow down.
Check network, address, balance, transaction history, fee, and signing intent inside wallet software you control.
Run or query a node when you need to verify chain state without depending on a hosted interface.
Independent verification means climbing this ladder when the situation matters. It does not mean every normal payment requires every step.
Hosted API
The Kaspa Developer Platform is a hosted API for chain data, transaction checks, block queries, KRC20 token data, and a node RPC proxy. It is useful for prototypes, dashboards, exchange/wallet integrations, and second-source checks.
Batch-check txids for acceptance, accepting block hash, and confirmation count.
curl --request POST \
--url https://api.kas.fyi/v1/transactions/acceptance \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '{"transactionIds":["<txid>"]}'
Read a bounded DAA-score range. KDP limits these ranges to 100 scores per request.
curl --request GET \
--url https://api.kas.fyi/v1/blocks/daa-score/{daa_score_start}/{daa_score_end} \
--header 'x-api-key: <api-key>'
For paginated jobs, advance the range deliberately and record the last checked score.
Read blocks by blue score when that is the progress marker your app stores.
curl --request GET \
--url https://api.kas.fyi/v1/blocks/blue-score/{blue_score_start}/{blue_score_end} \
--header 'x-api-key: <api-key>'
Use cursor pagination for large address histories. Cache carefully and handle rate limits.
curl --request GET \
--url 'https://api.kas.fyi/v1/addresses/<address>/transactions?limit=100' \
--header 'x-api-key: <api-key>'
Amounts are sompi strings, not floats. Hashes are 64-character hex strings. Addresses use the kaspa: prefix. API timestamps are Unix milliseconds.
1 KAS = 100000000 SOMPI
amount: "31112708372"
blockTime: 1749531022210
Send the API key in x-api-key. Watch rate-limit headers, request-unit cost, 401 errors for key issues, and 429 errors for backoff.
ratelimit-limit: 500;w=1
ratelimit-remaining: 490
x-request-cost-ru: 10
API keys, rate limits, pricing, and provider uptime are product dependencies. Production apps should plan their own node, indexer, or redundant provider path when reliability, privacy, or scale matters.
KDP is a useful hosted read path. Protocol status still comes from source, releases, KIPs, nodes, and network evidence.
Mainnet
Prerequisites: Docker for the container route, or Rust/Cargo for the source route. A node can verify chain state; it does not create or protect wallet keys by itself.
Docker route with persistent storage:
docker pull kaspanet/rusty-kaspad:latest
mkdir -p ~/kaspa-data
docker run -d --name kaspa-node --restart unless-stopped \
-v ~/kaspa-data:/app/data \
-p 16110:16110 -p 16111:16111 -p 17110:17110 -p 18110:18110 \
kaspanet/rusty-kaspad:latest
Basic container checks:
docker ps
docker logs --tail=80 kaspa-node
Source-build route from the Rusty Kaspa README:
git clone https://github.com/kaspanet/rusty-kaspa
cd rusty-kaspa
cargo run --release --bin kaspad
Mainnet node with UTXO indexing:
cargo run --release --bin kaspad -- --utxoindex
Use --utxoindex when wallet or UTXO queries need indexed UTXO state. Let the node sync before treating its answers as current.
Wallet and RPC
From a Rusty Kaspa checkout:
cd cli
cargo run --release
Use this as the current source-backed entry into the Rusty Kaspa terminal RPC and wallet runtime. Before creating wallets or signing anything:
Confirm whether the CLI is connected to mainnet or testnet before creating or importing wallet material.
Find where wallet files, keys, and local state are stored. Do not guess.
For every transaction, inspect address, amount, fee, network, and whether it is a send, sweep, or self-transfer.
Use tiny amounts first, then verify the accepted txid through independent sources.
wRPC
Rusty Kaspa documents wRPC as optional and disabled by default. For JSON wRPC:
cargo run --release --bin kaspad -- --utxoindex --rpclisten-json=default
This lets SDKs and scripts query node state over WebSocket. Bind carefully on public machines. A public RPC endpoint is infrastructure, not a wallet safety boundary.
Use wRPC when an app needs to read accepted transactions, inspect payload-capable routes, or compare indexer state against node-observed chain state.
Testnet
Generic Rusty Kaspa testnet route:
cargo run --release --bin kaspad -- --testnet
Older hard-fork testnet guides used explicit suffixes, for example:
kaspad --testnet --netsuffix=10 --utxoindex
cargo run --bin kaspad --release -- --testnet --netsuffix=10 --utxoindex
For TN12/Toccata work, verify the current netsuffix, release, endpoint, and flags from active public docs before running. TN10 examples are historical context, not TN12 instructions.
Builder Evidence links the public site to the TN12 proof lab when you want accepted testnet examples.
TN12 practice
TN12 is where covenant, payload, and replay experiments can be practiced before mainnet behavior changes. In the TN12 repo, the basic route is:
git clone https://github.com/parker2017code/tn12-covenant-vault-demo
cd tn12-covenant-vault-demo
npm ci
npm run check:all
npm run check:tn12
npm run playground:wallets
Then fund only the printed kaspatest: addresses with faucet tKAS, inspect txids in the TN12 explorer, and replay before believing app state. Anything with --submit is a real TN12 broadcast.
Status: testnet practice. Mainnet wallet, custody, and Toccata activation claims need mainnet evidence.
Toccata reminder
Toccata/TN12 command examples stay in the testnet or targeted lane until public activation evidence, Rusty Kaspa releases, official docs, and working tool commands show that the behavior is live on mainnet.
Sources
Hosted API for address history, transaction acceptance, block ranges, KRC20 data, and node RPC proxy access. Useful for prototypes and second-source checks.
Node, SDK, query, explorer, and testnet entry points.
Integration docs for RPC, payloads, accepted transactions, and node infrastructure.
github.com/kaspanet/rusty-kaspa
Current node, wallet, CLI, Docker, and wRPC source commands.