Get started
Run a node, create a wallet, send a shielded payment. Roughly fifteen minutes, no build toolchain, no cryptography to implement.
What ZKas is
- Chain
- fork of rusty-kaspa (kaspad v2.0.1 lineage), GHOSTDAG BlockDAG
- Block rate
- 1 BPS (
target_time_per_block = 1000 ms), ~1s confirmation - Proof of work
- kHeavyHash, byte-identical to Kaspa mainnet — unmodified ASICs work with zero configuration
- Privacy
- shielded-by-default. Value lives in an Orchard (Halo 2) pool; the coinbase reward is minted directly as a shielded note. There is no transparent output type on mainnet
- Units
- 1 ZKAS = 100,000,000 sompi (8 decimals)
- Addresses
- bech32, HRP
zkas:·zkastest:·zkasdev:·zkassim: - Network id
zkas-mainnet(wire and datadir identity)- Merged mining
- with Kaspa via aux-PoW, active from genesis. Optional — native mining always works
- Coinbase maturity
- 100 blocks (~100 s)
- Shielded spendable
- 600 blocks (~10 min) — a note is spendable once its anchor matures
Four constraints that invalidate most feature ideas
- No virtual machineNo contracts, no shared mutable state, no scripts on notes. An AMM, order book, perpetual or lending pool cannot exist on the base chain.
- Single assetA note carries one
NoteValue: u64with no asset id. A stablecoin or any second asset requires a circuit fork. - No ZIP-32 accountsOne seed → one full viewing key → one incoming viewing key. Scoped or revocable disclosure means using a separate seed.
- Nullifiers are a MuHash accumulatorNo non-membership proof exists, so uniqueness registries and anti-double-pledge semantics cannot be enforced on-chain.
The Limits page lists what is unbuilt, what is structurally impossible, and what can be done beside the chain instead.
Networks and ports
| Network | gRPC | P2P | wRPC borsh / json | Seeder |
|---|---|---|---|---|
| mainnet | 16810 | listen 16811 · dial 16111 | 17810 / 18810 | seed.zkas.info |
| testnet-10 | 16820 | 16821 | 17820 / 18820 | none — standalone |
| simnet / devnet | 16850 / 16860 | 16851 / 16861 | — | none |
16111 is also Kaspa's mainnet P2P port, so a ZKas node listens on and advertises 16811 while still dialing 16111, where the seeders live. A ZKas node therefore coexists with a Kaspa parent on one host out of the box. Details in Run a node.Run a mainnet node
kaspad --appdir=./zkas-node \ --rpclisten=127.0.0.1:16810 \ --listen=0.0.0.0:16811 \ --utxoindex
That is a pruned node and it is what most people should run. Whether you also need --shielded-history=on or --archival depends entirely on how old the coins you must see are — pick your node mode.
Send your first payment
- Start the wallet daemonIt scans, proves and broadcasts. Point it at your node.
zkas-walletd --network mainnet \ --rpc-server 127.0.0.1:16810 \ --listen 127.0.0.1:8501 \ --wallet-dir ./wallets --allow-default-token
- Create a walletThe seed is returned once. Store it like any private key.
curl -s -X POST localhost:8501/api/wallet/create \ -H 'content-type: application/json' -d '{"birthday":0}' - Wait for spendability, not just syncPoll
spend_ready. A freshly received note needs ~10 minutes before it can be spent, because spends prove against a matured anchor.curl -s localhost:8501/api/status | jq '{synced,spend_ready,blocks_behind}' - SendThe memo is encrypted and readable only by the recipient — up to 512 bytes.
curl -s -X POST localhost:8501/api/wallet/send \ -H 'content-type: application/json' \ -d '{"to":"zkas:...","amount_fc":1.0,"memo":"hello"}'
txids, not txid. A large send is split across several standard-size transactions, because one shielded transaction can spend at most 38 notes. See notes, not coins.Try it on testnet-10 first
testnet-10 mirrors mainnet's full feature set — shielded coinbase, Toccata, multi-producer anchors, dev fee, 1-BPS emission — but keeps an easy-PoW genesis so a CPU can bootstrap it. It has no public seeder, so run it standalone.
# node kaspad --testnet --utxoindex --enable-unsynced-mining # miner: native kHeavyHash, all cores zkas-miner -s 127.0.0.1:16820 -a <your zkastest: address> -t 0 # join a peer manually (no seeder on testnet) kaspad --testnet --addpeer=<ip>:16821
Get a zkastest: address from a --network testnet walletd. Everything else behaves as mainnet does.
Where to go next
zkas-rusty at zkas-v1.0.9. Byte layouts, endpoint shapes and parameters are read from source; figures marked measured come from the live mainnet node. If this page contradicts the code, the code is right — report it.