Use the network
The public signet
Ksana’s public test network runs on Bitcoin’s signet. Use it to try wallets, apps, contracts and nodes with coins that have no value.
On this page
The public signet is the Ksana network to use today. It runs on Bitcoin’s public signet, the test network Bitcoin Core joins with -signet, so its settlements are real Bitcoin transactions in real signet blocks, mined by signet’s miners. Mainnet has not launched.
| Network name | signet (--chain signet for the node, the indexer and the CLI) |
| Chain ID | 1002 |
| Bitcoin network | signet: addresses start with tb1, accounts with tb1p |
| Started | 13 October 2026, anchored at signet height 326,234 |
| Genesis config | signet/genesis.json in the repository |
What the project hosts
The project runs one server at signet.ksana.network with Bitcoin Core on signet, two seed nodes that produce and settle blocks, an indexer that checks them, the web wallet, a KSA faucet and a small Bitcoin RPC proxy. Everything else on the network is run by whoever joins: you can follow the chain with your own node, check it with your own indexer, and mine.
| Service | Address | Called from other origins |
|---|---|---|
| Web wallet and explorer | https://signet.ksana.network/ |
|
| Node JSON-RPC over HTTP | https://signet.ksana.network/rpc |
yes |
| Node JSON-RPC over WebSocket | wss://signet.ksana.network/rpc |
yes |
| Indexer JSON-RPC | https://signet.ksana.network/indexer |
no |
| Bitcoin RPC proxy | https://signet.ksana.network/btc |
no |
| KSA faucet | https://signet.ksana.network/faucet |
no |
| Seed node P2P | {{signet.p2p}} |
Only the node’s RPC answers browser pages from other origins (it is served with CORS *). A web app on its own domain can call https://signet.ksana.network/rpc directly from the browser, but reaches the indexer, the Bitcoin RPC proxy and the faucet only through its own server. Command-line tools and servers can call all of them.
curl -sS https://signet.ksana.network/rpc -H 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"ksana_getChainInfo","params":[]}'{"jsonrpc":"2.0","id":1,"result":{"chain_id":1002,"tip":{"height":"258","hash":"ab98f9995f46bd51d890ea0fe9b83e302b6c432ef99b8873dcca657e0428ba0a"},"daa_score":"12028","protocol_version":2,"next_upgrade":null,"max_known_version":2,"finalized":{"height":"241","hash":"0cb65c0a51c1200757560f9ed1a2aa28f5a01a236bbdda8005120eb609a8ae6b"}}}The JSON-RPC reference lists every method of the node and the indexer.
The faucet
The faucet sends 100 KSA from its genesis allocation to any signet account, as an ordinary path B transfer. The web wallet calls it for you; from anywhere else, POST a JSON body with your account:
curl -sS https://signet.ksana.network/faucet -H 'content-type: application/json' \
--data '{"to": "tb1pg3geczvz5sj89cetm8vs7z5z9xrf0gvsekwg4skj8g47ar2c690surwrec"}'{"op_id":"92e22273a7fab8430c6ae16b69b1f649fa4056aa2a0c3f27d10bf38e77908a0d","to":"44519c0982a42472e32bd9d90f0a82298697a190cd9c8ac2d23a2bee8d58d15f","amount":"10000000000","nonce":"4"}to takes a signet Taproot address or the account as 64 hex digits. The answer comes once the node has accepted the transfer into its pool, not once a block includes it: follow op_id with ksana-cli op or ksana_getOpStatus. amount is in base units (KSA has 8 decimals).
A GET returns the faucet’s own state:
curl -sS https://signet.ksana.network/faucet{"chain_id":1002,"account":"de6603f052fd5bfaae5678a2a20ae6ae4fe4ae00c89db70a2efea7429851afc0","address":"tb1pmenq8uzjl4dl4tjk0z32yzhx4e87ftsqezwmwz3wl6n59xz34lqqlgaqc2","balance":"9999939999999988","amount":"10000000000","cooldown_hours":24,"waiting":0}waiting counts the transfers the faucet has sent that no block has included yet.
Faucet limits
| Limit | Answer when it is reached |
|---|---|
| One request per account every 24 hours | 429 this account already received KSA; it can ask again in N hour(s) |
| Five requests per client address a day | 429 this address has asked too often today |
| 30 requests per client address a minute | 429 too many requests from this address; slow down |
| About 120 transfers an hour for everyone together | 429 the faucet is busy; try again in a few minutes |
| 48 transfers waiting for a block | 503 the faucet has many transfers waiting for a block; try again in a minute |
Every error is a JSON object {"error": "<message>"}, and the 429 and 503 answers carry a Retry-After header in seconds where the wait is known. A malformed body or account gets 400 with the reason, and a refusal by the node 502 the node refused the transfer: ….
The Bitcoin RPC proxy
https://signet.ksana.network/btc lets the web wallet build and broadcast path C and top-up transactions without a Bitcoin node of your own. It passes four bitcoind methods, one JSON-RPC request per call, with their parameters checked:
| Method | Notes |
|---|---|
getblockcount |
cached for 2 seconds |
getblockchaininfo |
cached for 2 seconds |
estimatesmartfee |
a target of 1 to 1008 blocks, cached for 60 seconds |
sendrawtransaction |
the signed transaction in hex |
curl -sS https://signet.ksana.network/btc -H 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"estimatesmartfee","params":[2]}'{"jsonrpc":"2.0","id":1,"result":{"feerate":0.00001045,"blocks":2}}It also passes two GET paths of mempool.space’s signet API: esplora/block-height/0 and esplora/address/<tb1p…>/utxo, which lists the coins of a signet Taproot address. Every other method is refused, scantxoutset included: one scan of signet’s UTXO set takes 30 to 50 seconds. Each client address may make 120 requests a minute, 20 of them broadcasts and 30 of them Esplora requests.
The proxy has no wallet methods. ksana-cli’s path C and top-up commands fund their transactions from a wallet in your own bitcoind, as ksana-cli shows.
Signet bitcoin
You need sBTC only for what pays Bitcoin fees yourself: a path C operation, a top-up, or settling the blocks you mine. Path B transfers and the faucet need none. Get sBTC from any public Bitcoin signet faucet; the project does not run one.
Send it to your Taproot address, the same one that holds your KSA. A path C transfer at 2 sat/vB costs about 700 sats of fee, so a few thousand sats go a long way. A producer that settles its own blocks needs more: Run a node gives the amounts.
How the signet differs from mainnet
The signet runs the same rules as mainnet and shares most of its values: blocks every 5 seconds, GHOSTDAG with K = 16, six Bitcoin confirmations to finality, the same gas limits, Argon2id with 2 MiB, and the same carrier shares. These values differ:
| Parameter | Signet | Mainnet |
|---|---|---|
| Chain ID | 1002 | 1000 |
ANCHOR_DEPTH (how far a block’s anchor trails the Bitcoin tip) |
1 | 2 |
NATIVE_CONFIRMATIONS |
1 | 3 |
| A path C operation is included after | 2 Bitcoin confirmations | 5 Bitcoin confirmations |
| Reward per reward slot | 9.9 KSA | 4.2 KSA |
| Halving period, in DAA score | 25,228,800, every period the same | 12,500,000, then 25,000,000, then 50,000,000 |
| KSA cap | 1,000,000,000 | 210,000,000 |
| Genesis allocation | 100,000,000 KSA to the faucet, 10,000,000 to the operator account | none |
Lowest difficulty (pow_limit_bits) |
0x207fffff |
0x1f00ffff |
devnet, the local network on Bitcoin’s regtest, has the signet’s values except chain ID 1001 and ANCHOR_DEPTH 0. Parameters lists every value for the three networks.
When nobody sends operations, the signet’s producers make empty blocks, which are up to 120 times harder than a block with entries, so an idle signet slows from about a block a minute to about one every ten minutes. The first operation brings back blocks every few seconds. Mining explains this two-speed difficulty.
Restarts from genesis
Before mainnet, a change to the consensus rules restarts the signet from genesis with a new signet/genesis.json. A restart starts a new chain: balances, contracts and operation history do not carry over, while your keys and addresses stay valid and hold nothing on the new chain.
After a restart:
- Pull the repository for the new
signet/genesis.jsonand the code that goes with it. - Start your node and indexer with a new data directory. A data directory keeps the genesis config it was made with, and the node and the indexer refuse it with
data directory belongs to a different genesis config. - Ask the faucet for test KSA again.