Ksana
中文

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.

Ask the node for the chain tip
curl -sS https://signet.ksana.network/rpc -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"ksana_getChainInfo","params":[]}'
Output
{"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:

Shell
curl -sS https://signet.ksana.network/faucet -H 'content-type: application/json' \
  --data '{"to": "tb1pg3geczvz5sj89cetm8vs7z5z9xrf0gvsekwg4skj8g47ar2c690surwrec"}'
Output
{"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:

Shell
curl -sS https://signet.ksana.network/faucet
Output
{"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
Shell
curl -sS https://signet.ksana.network/btc -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"estimatesmartfee","params":[2]}'
Output
{"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.json and 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.