
Kaspa が SSP にやってきます——それを支えるライブラリはオープンソースです
SSP への Kaspa 対応が近づいています。Bitcoin、Ethereum、Solana ですでにお使いのものと同じ 2-of-2 マルチシグです。鍵の一方は SSP Wallet に、もう一方は SSP Key にあり、両方が同意しない限り何も動きません。エンタープライズ向けボールトでも Kaspa が使えるようになります。
そこにたどり着くには、まだ存在していなかったものを作る必要がありました。本日は、すでに公開済みの部分をご紹介します。@runonflux/kaspa-core は、Kaspa の取引とマルチシグのためのオープンソース TypeScript ライブラリで、MIT ライセンスで公開されています。
なぜ最初にライブラリを作ったのか
Kaspa の追加を検討した際、見つけられる限りの Kaspa 向け JavaScript パッケージを調査しました。しかし、Kaspa のマルチシグ取引を最初から最後まで実際に構築し署名できるものは一つもありませんでした。それこそが SSP に何よりも必要な機能です。
公式の方法は、Kaspa の Rust コードを WebAssembly にコンパイルしたものを使うことです。優れたソフトウェアですが、SSP には適していません。SSP Key は WebAssembly が使えない React Native 上で動作し、ブラウザ拡張機能は軽量である必要があります。WebAssembly のバンドルだけで 11 MB を超えてしまいます。
そこで私たちは、Kaspa の取引ルールを純粋な TypeScript でゼロから書き上げました。アドレス、スクリプト、M-of-N マルチシグ、署名ハッシュ、Schnorr 署名、手数料と「質量」(mass)の計算、そしてインプットの選択です。実行時の依存関係は、広く使われ監査済みの @noble 暗号ライブラリの 2 つだけで、ブラウザ、拡張機能、Node、React Native で変更なしに動作します。
どのように検証したか
ウォレットのコードにとって「動いているように見える」は基準になりません。このライブラリは、Kaspa ノードそのものと同一であることを証明できるように作られています。
- Kaspa 自身のコードと照合。 テストスイートは、コンセンサスに関わるすべての関数をリファレンスノード実装である rusty-kaspa と照合し、ライブラリで署名した取引をその実際のスクリプトエンジンで実行します。1-of-1 から 15-of-15 までのすべての M-of-N の組み合わせが含まれます。
- 実際のメインネットデータ。 メインネット上の既存の取引 ID と署名を正確に再現します。
- 資金を伴うメインネット取引。 SSP 型の 2-of-2 送金、2-of-3、そしてエンタープライズ型の 4-of-7、6-of-10、10-of-15 マルチシグを含む 15 件の実際の取引をこのライブラリで構築・署名し、ネットワークに受け入れられました。そのすべてにおいて、ノードによる取引の質量の計算は私たちの計算と完全に一致しました。
- 敵対的レビュー。 複数回のセキュリティレビューで、署名者をだます方法や手数料を水増しする方法を重点的に探しました。重大な問題は見つからず、指摘事項はすべて回帰テストとともに修正されています。レポートはコードと一緒に公開されています。
オープンなコードは、再現可能なビルドと同じ原則の一部です。何があなたの取引に署名しているのかについて、私たちの言葉を信じるしかない状況であってはなりません。
SSP での Kaspa はこうなります
あなたの Kaspa ボールトは、SSP の通常の導出パスで両方のデバイスから導出される Kaspa マルチシグアドレス(kaspa:p で始まります)になります。送金は他のチェーンと同じように行われます。SSP Wallet が自分の半分を準備して署名し、SSP Key が受取人、金額、手数料を表示し、そこであなたが承認して初めて取引がネットワークに届きます。新しいチェーン上での、同じ 2-of-2 モデルです。
Kaspa 特有のいくつかの点が設計に影響しました。
- 各デバイスが金額を自ら確認します。 Kaspa の署名は、署名するインプットの金額にしかコミットしません。そのため、渡された金額を信用するデバイスは手数料についてだまされる可能性があります。SSP では、各デバイスが署名前に使用されるコインを独自に照会し、自分のボールトに対してのみ署名します。
- 取引 ID は署名前に確定します。 Kaspa の取引 ID には署名が含まれないため、SSP はどちらの鍵も署名する前に、取引を最終的な ID に固定できます。
- 手数料の上限が組み込まれています。 手数料には上限があるため、誤った手数料見積もりが高くつくミスにつながることはありません。
企業向けには、SSP Enterprise ボールトが M-of-N 承認で Kaspa に対応し、Kaspa の標準上限である 1 ボールトあたり 15 鍵まで利用できるようになります。
最初のリリースに含まれないもの
大きなものを雑に出すより、小さなものをきちんと出したいと考えています。最初のリリースはメインネット上の KAS そのものが対象です。KRC-20 トークン、Kaspa テストネット、Kaspa のメッセージ署名、Kaspa 向け WalletConnect はリリース時点では含まれません。
いつ
Kaspa 対応は SSP Wallet、SSP Key、SSP Enterprise 全体に実装済みで、現在は最終テストの段階にあります。利用可能になった際には、リリースノートとともにここでお知らせします。それまでは有効にするものもダウンロードするものもありません。そうでないと言う人がいれば、それは私たちではありません。
それまでの間も、開発者の方は今日からこのライブラリを使えます。npm では @runonflux/kaspa-core として、GitHub では RunOnFlux/kaspa-core で公開されています。


