SSP の Solana

·7 分で読める·SSP Editorial Team 著
SSP Academy カバー:SSP の Solana

SSP の Solana

Solana は速く、安く、そして実際にステーブルコインが動く場所として存在感を増しています。同時に、セルフカストディのマルチシグを正しく作るのが歴史的にもっとも難しかったチェーンでもあります——暗号技術が難しいからではなく、Solana のアカウントモデルが「複数の当事者が管理する一つのアドレス」を、Bitcoin におけるそれよりはるかに奇妙な対象にしてしまうからです。

SSP は、あなたが Bitcoin と Ethereum ですでに使っているのと同じ 2-of-2 マルチシグで SOL と SPL トークンを保管します。鍵は片方がブラウザ拡張に、もう片方があなたのスマートフォンにあり、すべてのトランザクションで両方が必要です。この記事では、それが Solana に限って何を意味するのか——アドレスがどう導出されるか、手数料を誰が払うのか、あなたの端末が何を検証するのか、そしてすでにご存じのチェーンと本当に異なる部分はどこか——を説明します。

ダークモードの SSP Wallet における Solana チェーン画面

セルフカストディの席から見た Solana

Solana は、トランザクションを一件ずつではなく並列に処理する単一のグローバルなステートマシンです。自分の鍵を持つ人にとっては、スループットの見出しよりも次の三つの性質のほうが重要です。

第一に、すべてはアカウントです。あなたの残高、トークンの mint、プログラムのコード、そしてそのプログラムが保存するデータ——いずれもアドレスと所有者を持つアカウントの中に存在します。第二に、アカウントには賃料がかかります。オンチェーンに存在し続けるには、アカウントはその大きさに比例した最低限の SOL 残高を保持しなければなりません。この預け入れはアカウントを閉じれば返還されますが、どこかから出てくる必要のある本物のお金です。第三に、トランザクションはすぐに期限切れになります。通常の Solana トランザクションは直近の blockhash を参照し、おおよそ 1 分後には無効になります。

これらはいずれも 2 台の端末による署名に直接の影響を及ぼし、SSP ではいずれも覆い隠さず明示的に扱われています。生の情報がほしい方には、アカウントと賃料のモデルについては Solana 自身のコアドキュメントが一次資料です。

作成者のいないアドレス

Solana のマルチシグ設計の多くでは、ウォレットは作成されなければなりません。誰かがそれを成立させるトランザクションを送り、得られるアドレスはそのトランザクション中に選ばれた入力——典型的にはランダムな使い捨ての鍵——に依存します。実際上の効果として、作成者が生み出すまでアドレスは存在せず、それ以前に入金を受け取ることもできません。

SSP のオンチェーンプログラムは違う動き方をします。あなたの Vault アドレスは、ソート済みのメンバー集合と承認しきい値から取った指紋であり、それ以外の何物でもありません。メンバーが誰で何人の承認が必要かを知っている人なら誰でも、チェーンに何かが触れる前に、オフラインでアドレスを計算できます。登録はパーミッションレスです。プログラムは、提示されたメンバーが本当に主張どおりのアドレスへハッシュされるかを確認するだけなので、登録しても「誰が支出できるか」は何ひとつ変わりません。

その結果、信頼しなければならない作成者も、特権的な登録者も、管理者鍵も存在しません。支出はプログラム内部のしきい値チェックだけによって管理されます。全体像がほしければ、なぜ Solana のマルチシグアドレスは難しいのかが根本の問題を、自己起動する Solana マルチシグがプログラムそのものを扱い、SSP と Squads V4 の比較が項目ごとの対照になります。

2-of-2 というモデル自体が初めてなら、2-of-2 マルチシグとは何かから始めてください。

なぜ 2 台の端末に durable nonce が必要だったのか

期限切れが生む問題はこうです。拡張機能がトランザクションを組み立てて署名します。次にスマートフォンがそれを承認しなければなりません。部屋を出て食事をして戻ってくれば、そのトランザクションが参照していた blockhash はとうに死んでおり、すべてを組み直すことになります。

SSP はこれを、あなたのマルチシグアドレスから導出される durable nonce アカウントで解決します。トランザクションは直近の blockhash ではなく、実際にトランザクションが着地したときにだけ進む nonce を参照します。署名の猶予はストップウォッチであることをやめます。数分後でも数時間後でもスマートフォンで承認でき、トランザクションは依然として有効です——それでも使えるのは一度きりです。実行すれば nonce が進むからです。

nonce アカウントは初回送金時に作成され、初回送金のコストに賃料が現れる 2 つのアカウントのうちの一つです。durable nonce と 2 台の端末による署名がさらに踏み込みます。

手数料は誰が払うのか

Solana では、トランザクションの手数料を負担するアカウントを fee payer と呼び、それは署名しなければなりません。生まれたばかりのマルチシグにとって、これは厄介な起動時の問題を生みます。Vault は自分の SOL を動かすためのトランザクション代として SOL を必要としますが、賃料の必要なアカウントはまだ存在していないのです。

SSP は paymaster を使います。SSP relay は fee payer として署名するアカウントを運用し、ネットワーク手数料と必要な賃料を立て替え、同じトランザクションの中であなたの Vault から返済を受けます。別の手順もなければ、与信もなく、あなたの 2 つの署名なしに返済が起きる余地もありません——返済は、あなたの端末が承認する提案の中に同乗しています。

腹に落としておく価値のある帰結が二つあります。

  • ガス代のためにアドレスへ事前に SOL を入れておく必要はありません。 SOL を受け取り、SOL を送るだけです。アカウントは初回送金の時点で作成されます。
  • 初回の送金はそれ以降より高くつきます。 初回はマルチシグアカウントと nonce アカウントの恒久的な賃料を支払います。以降の送金はネットワーク手数料をわずかに上回る程度です。正確な数値は本シリーズの手数料の記事にあります。

paymaster という概念になじみがなければ、ガススポンサーシップと paymaster の解説が一般的な型を扱っています——SSP は EVM チェーンで同じ考え方をすでに使っており、SSP の Ethereumで説明しています。

何を保有できるのか

SSP の Solana はネイティブの SOL と SPL トークンに対応します。標準で Circle の公式 USDC mint と Solana 上の FLUX を含み、Vault の中に見つかったその他の SPL トークンも SSP が解決します。

多くの人がつまずく区別はこれです。Solana では、トークンをメインのアドレスに保有するわけではありません。各トークンは、あなたのアドレスが所有する専用の関連トークンアカウントの中に、mint ごとに一つずつ存在します。そのアカウントにも賃料が必要で、だからこそ、そのトークンを一度も持ったことのない相手に SPL トークンを送ると少し高くつきます——相手のトークンアカウントを存在させるための費用を払っているのです。SSP はエラーで失敗する代わりに送金の一部として自動的に作成します。詳細は本シリーズのトークンアカウントの記事が解きほぐします。

ダークモードの SSP Wallet で Solana の送金を作成する画面

署名の前にあなたの端末が確認していること

Solana のトランザクションは、Bitcoin のトランザクションにはない不透明さを持ちます。そのトランザクションが何をするのかは命令データの中にあり、ウォレットはまずそれをデコードしなければ、真実を何ひとつ伝えられません。サーバーから言われたことをそのまま表示するだけのウォレットは、あなたにサーバーを信頼せよと求めているのです。

そこで SSP は、オープンソースの @runonflux/solana-multisig ライブラリを用いて、あなた自身の端末上でバイト単位にデコードします。受取人、金額、トークンの mint は生バイトから読み出され、表示されている内容と突き合わされます。両者が食い違えば署名は強制的にブロックされます。そこでの不一致は表示上の不具合ではなく、能動的な攻撃を示すからです。SPL 送金では、トークンの小数桁数が署名される命令そのものに埋め込まれるため、異なる小数桁数を主張する mint はオンチェーンプログラムに拒否されます。

同じ原則がプログラムをも律します。メインネットのビルドは公開されたソースから再現可能であり、SSPWVu7dtTDkZYmDx73StqV46PioSmdiNE7igpjHK1r にデプロイされたバイトコードは独立に再ビルドして突き合わせられます。セキュリティの主張は、あなた自身がそれを確かめられる範囲でしか価値を持ちません。

はじめかた

SSP WalletSSP Key を最新版に更新し、チェーンセレクターから Solana を有効化してください。v2 のバッチ同期を使えば、スマートフォン上の 1 回の承認で、他の任意のチェーンとまとめて有効にできます。SSP をまだまったく設定していないなら、はじめての SSP ウォレットを設定するが出発点です。

そこから先、Solana は SSP の他のどのチェーンとも同じように振る舞います。Portfolio の合計に算入され、送金は受取アドレスを全文表示したまま作成 → 確認 → 承認という同じ流れをたどり、すべてのトランザクションが 2 台の端末によって共同で署名されます。メインネット公開のお知らせに、何がいつ出荷されたかがまとまっています。

この記事をシェアする

関連記事