Path B
SponsoredSign one message and pay a small fee in KSA. A producer includes it within seconds and pays the Bitcoin fee to settle it.
- Fast-confirmed in about 5 s
- Fee in KSA
- No bitcoin needed
Public signet
Ksana is a smart-contract chain that confirms in about five seconds and writes every block into Bitcoin. Which blocks are final is decided by Bitcoin’s chain alone: no bridge, no committee, no sequencer in between.
Signet, live
01The life of an operation
Every operation passes three marks, each a stronger promise than the last. The wallet shows which one it has reached, and an application decides by the amount at stake which one to wait for.
about 5 seconds
A producer includes your operation in a fast-lane block, and every node replays it. The new state is live: balances move, contracts see it.
the next Bitcoin block
The block’s header and entries ride into Bitcoin in a settlement transaction. From then on anyone can read them from Bitcoin, and no one can withhold them.
six confirmations, from about an hour
Every node and indexer decides finality from Bitcoin’s chain with the same rule. Undoing a final block means reorganizing Bitcoin itself.
02How it works
Ksana runs its own proof-of-work chain for speed and leans on Bitcoin for everything that must last: the record of every block, and the decision about which blocks are final.
Fast laneconfirms in about 5 s
Bitcoina block about every 10 min
Not to scale: one Bitcoin block spans about 120 fast-lane blocks.
Anyone can mine, with Argon2id on an ordinary CPU. Blocks found at the same time are merged into a block DAG (GHOSTDAG) instead of thrown away, and each one names the Bitcoin block it saw: its anchor.
A commit and reveal pair of Bitcoin transactions carries compact block headers and the operations themselves in a Taproot witness. A batch of transfers costs a few hundred bytes of witness.
When a block’s data has six Bitcoin confirmations, every node reaches the same verdict from Bitcoin alone. A heavier chain that never wrote itself into Bitcoin in time cannot take over.
03Why Ksana
The indexer talks only to bitcoind. It re-executes every block from the data on Bitcoin and checks each state root. If every Ksana node went dark, the chain would still be there.
Ksana never holds your bitcoin. KSA is the chain’s own asset; BTC stays on Bitcoin, where contracts can still see it move.
An account is a Taproot key, so your Ksana account and your bitcoin share one address. Unisat and Xverse sign Ksana operations with BIP322.
Put your operation in a Bitcoin transaction of your own. Once it confirms, every producer must include it, or their blocks are invalid.
Argon2id with 2 MiB per hash. Mainnet starts with zero KSA and every coin is a block reward; for the first four years a fifth of each reward goes to the project’s block share account.
Rust compiled to WebAssembly, with exact gas. Contracts read Bitcoin headers six blocks deep, verify Bitcoin payments with Merkle proofs, and see the transaction that carried their call.
04Two ways in
Sign one message and pay a small fee in KSA. A producer includes it within seconds and pays the Bitcoin fee to settle it.
Put the operation in your own Bitcoin transaction. After its confirmations every producer must include it: nobody can keep you out.
Only hold bitcoin? Top up: buy KSA from an exchange contract with a single Bitcoin payment, then use path B.
05KSA
KSA pays for sponsored operations and contract gas. New KSA appears only as block rewards, paid once a block’s data has landed on Bitcoin, and the reward halves on a schedule that stretches over decades.
Mainnet has not launched. Signet KSA is test money with no value.
Rewards, fees and the carrier rewardKSA issued, millions
Years after launch
06Build
A TypeScript SDK for browsers and Node, contracts in Rust compiled to WebAssembly, a command-line client for everything else, and a JSON-RPC under all three.
import {
KsanaRpcClient,
SIGNET,
UnisatAdapter,
VMOP_VERSION,
btcNetworkOf,
fromHex,
ksaAssetId,
parseAccount,
signVmopWithWallet,
} from '@ksana/sdk';
const rpc = new KsanaRpcClient('https://signet.ksana.network/rpc');
const params = await rpc.getParams(SIGNET); // refuses a node on another network
const wallet = new UnisatAdapter(); // the wallet's Taproot address is your Ksana account
const account = fromHex((await wallet.getAccount()).account, 32);
const { nonce } = await rpc.getAccount(account);
const { path_b } = await rpc.estimateFee();
const op = await signVmopWithWallet(
{
version: VMOP_VERSION,
chain_id: params.chain_id,
account,
nonce,
fee: { kind: 'Token', amount: 2n * path_b.amount }, // path B: the fee is paid in KSA
max_gas: 10_000n, // a transfer uses exactly 10,000 gas
action: {
kind: 'AssetTransfer',
asset: ksaAssetId(),
to: parseAccount('tb1p…', btcNetworkOf(params)),
amount: 100_000_000n, // 1 KSA: 8 decimals
},
},
wallet, // one BIP322 signature in the wallet, no bitcoin spent
);
const { op_id } = await rpc.submitOp(op); // fast-confirmed in about 5 s#![cfg_attr(target_arch = "wasm32", no_std)]
extern crate alloc;
use ksana_contract_sdk::{self as sdk, storage, CallResult};
sdk::entry!(dispatch);
/// A counter anyone can bump; every bump is an event.
pub fn dispatch(method: &str, args: &[u8]) -> CallResult {
match method {
"init" => {
sdk::decode::<()>(args)?;
storage::write(b"count", &0u64);
sdk::ok(&())
}
"bump" => {
sdk::decode::<()>(args)?;
let count: u64 = storage::read(b"count")?.unwrap_or(0);
let next = count.checked_add(1).ok_or(b"overflow".to_vec())?;
storage::write(b"count", &next);
sdk::emit(&("bumped", sdk::caller(), next));
sdk::ok(&next)
}
"count" => sdk::ok(&storage::read::<u64>(b"count")?.unwrap_or(0)),
_ => sdk::revert("unknown method"),
}
}# A new key, and its account's signet address
ksana-cli key --chain signet alice.key
# Send 1 KSA on path B (amounts in base units: KSA has 8 decimals) and wait until it executes
export KSANA_RPC=https://signet.ksana.network/rpc
ksana-cli transfer --chain signet --key alice.key --to tb1p… --amount 100000000 --fee-token 1 --wait
# The same op reads btc_final once its block's data has six Bitcoin confirmations
ksana-cli op <op_id>07Run it
Follow the chain, check every block against Bitcoin, mine on a CPU, and settle the blocks you mine.
Run a nodeRebuild the whole chain from bitcoind alone, with no Ksana node in the loop, and verify every state root.
Run an indexerPaths B and C and top-ups from Unisat or Xverse, on the hosted signet page or against your own node.
Use the wallet08Where it stands
Done
The consensus rules were frozen on 5 October 2026. Any change from here on goes through the upgrade schedule.
Done
Internal security audits, adversarial tests of reorgs and withheld blocks, fuzzing, and a five-hour soak test of nodes against the indexer.
Now
Running on Bitcoin’s public signet with a seed node, an indexer, the web wallet and a faucet. Test coins only.
Next
Not launched. The signet runs for at least four weeks first, to watch settlements and the carrier reward on a real fee market.
Type to search every page of the docs.