路径 B
代付签一条消息,付一点 KSA 手续费。出块者几秒内收录它,并替你付结算所需的比特币手续费。
- 约 5 秒快轨确认
- 用 KSA 付费
- 不需要比特币
公开 signet
Ksana 是一条智能合约链:约五秒确认,并把每个区块写进比特币。哪些区块算最终,只由比特币的链决定,中间没有跨链桥,没有委员会,也没有排序器。
Signet 实时
01一笔操作的一生
每笔操作都要经过三道印记,一道比一道更有分量。钱包会显示它走到了哪一道;应用按涉及的金额,决定等到哪一道。
约 5 秒
出块者把你的操作收进一个快轨区块,每个节点都重放一遍。新状态立即生效:余额变了,合约也看得到。
下一个比特币区块
区块头和条目随一笔结算交易写进比特币。从此任何人都能从比特币上读到它们,谁也扣不下来。
6 个确认,约一小时起
每个节点和索引器都按同一条规则,从比特币的链上判定最终性。要推翻一个最终的区块,就得重组比特币本身。
02工作原理
Ksana 用自己的工作量证明链换取速度,把一切需要长久留存的交给比特币:每个区块的记录,以及哪些区块已经最终的判定。
快轨约 5 秒确认
比特币约 10 分钟一块
示意图,未按比例:一个比特币区块约跨过 120 个快轨区块。
人人都能挖,用普通 CPU 跑 Argon2id。同时挖出的区块不会被丢弃,而是并入一个区块 DAG(GHOSTDAG);每个区块都写明它看到的比特币区块,也就是它的锚定。
一对比特币交易,先提交、后揭示,在 Taproot 见证里装着紧凑的区块头和操作本身。一批转账只占几百字节的见证数据。
一个区块的数据在比特币上有了 6 个确认,每个节点只凭比特币就会得出同样的结论。一条更重、却没有及时把自己写进比特币的链,夺不走主链。
03为什么是 Ksana
索引器只连 bitcoind。它用比特币上的数据重新执行每个区块,核对每个状态根。哪怕所有 Ksana 节点都下线,这条链也还在。
Ksana 从不保管你的比特币。KSA 是这条链自己的资产;BTC 留在比特币上,合约照样看得到它的流动。
账户就是一把 Taproot 密钥,你的 Ksana 账户和比特币共用一个地址。Unisat 与 Xverse 用 BIP322 签署 Ksana 操作。
把操作放进你自己的比特币交易。一旦确认,每个出块者都必须收录它,否则他们的区块无效。
Argon2id,每次哈希用 2 MiB 内存。主网从零个 KSA 起步,每一枚都是出块奖励。
用 Rust 编写、编译成 WebAssembly,gas 精确计量。合约能读六块深的比特币区块头,用 Merkle 证明核验比特币付款,还能看到携带这次调用的那笔交易。
04两种提交方式
签一条消息,付一点 KSA 手续费。出块者几秒内收录它,并替你付结算所需的比特币手续费。
把操作放进你自己的比特币交易。确认之后,每个出块者都必须收录它:谁也拦不住你。
手上只有比特币?可以充值:用一笔比特币付款,从兑换合约买到 KSA,然后走路径 B。
05KSA
KSA 用来支付代付操作的手续费和合约的 gas。新的 KSA 只以出块奖励的形式出现,在区块数据写进比特币之后才发放;奖励按一张跨越几十年的时间表减半。
主网尚未上线。signet 上的 KSA 是没有价值的测试币。
奖励、手续费与携带者报酬KSA 发行量(百万)
上线后的年数
06开发
给浏览器和 Node 用的 TypeScript SDK,用 Rust 编写、编译成 WebAssembly 的合约,包办其余一切的命令行客户端,以及在这三者之下的 JSON-RPC。
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); // 节点若在别的网络上,这里会拒绝
const wallet = new UnisatAdapter(); // 钱包的 Taproot 地址就是你的 Ksana 账户
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 }, // 路径 B:手续费用 KSA 支付
max_gas: 10_000n, // 一笔转账正好用 10,000 gas
action: {
kind: 'AssetTransfer',
asset: ksaAssetId(),
to: parseAccount('tb1p…', btcNetworkOf(params)),
amount: 100_000_000n, // 1 KSA:8 位小数
},
},
wallet, // 钱包里签一次 BIP322,不花一聪比特币
);
const { op_id } = await rpc.submitOp(op); // 约 5 秒快轨确认#![cfg_attr(target_arch = "wasm32", no_std)]
extern crate alloc;
use ksana_contract_sdk::{self as sdk, storage, CallResult};
sdk::entry!(dispatch);
/// 一个谁都能加一的计数器;每次加一都发出一个事件。
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"),
}
}# 新建一把私钥,并显示其账户的 signet 地址
ksana-cli key --chain signet alice.key
# 走路径 B 转 1 KSA(金额以基本单位计:KSA 有 8 位小数),并等到它执行
export KSANA_RPC=https://signet.ksana.network/rpc
ksana-cli transfer --chain signet --key alice.key --to tb1p… --amount 100000000 --fee-token 1 --wait
# 等它所在区块的数据有了六个比特币确认,同一笔操作就显示 btc_final
ksana-cli op <op_id>08进展
已完成
共识规则已于 2026 年 10 月 5 日冻结。此后的任何改动,都要走升级时间表。
已完成
内部安全审计,重组与扣留区块的对抗测试,模糊测试,以及节点对照索引器、长达五小时的浸泡测试。
进行中
运行在比特币的公开 signet 上,有种子节点、索引器、网页钱包和水龙头。只用测试币。
下一步
尚未上线。signet 要先运行至少四周,在真实的手续费市场上观察结算和携带者报酬。
输入关键词,搜索文档的每一页。