Sweepless Submarine Swaps
以下のツイートに興味深いことが書いてありました。それはSweeplessという名のサブマリンスワップです。今回はSweepless Submarine Swapsについての備忘録を記載しました。このスワップの仕様はまだ未公開なため、自分なりの推測で書いています。
まずMuSig2です。MuSig2はシュノア署名を活用して1つのアドレスにマルチシグアドレスを集約するテクニックです。マルチシグアドレスの場合、そこからコインを移動させるには参加者分の署名およびスクリプトをブロックチェーンに書き込む必要があります。一方、MuSig2の場合は署名を1つに集約することができるため、ブロックチェーンに書き込むデータサイズが低減でき手数料の節約になります。また、署名が1つに集約されており書き込むスクリプトも通常のものと変わりがないためプライバシーが向上します。
次にSweepless Swapsです。SweeplessなSubmarine Swapsは、Scriptless Scriptsの1つであるアダプター署名によるアトミックスワップの応用だと考えられます。アダプター署名を使うことで、アトミックスワップによるコイン交換をHTLCのようなスクリプトを使わずに実現することができます(アダプター署名によるスクリプトレスなアトミックスワップについてはこちらの記事を参照してみてください)。このアダプター署名はシュノア署名にプリイメジを追加することで作成します。以下にSweepless Swapsの流れを記載します。
- アリスはプリイメジとそのハッシュ、2-of-2マルチシグの1つの公開鍵およびそのアダプター署名を作成し、ハッシュ、公開鍵、アダプター署名をボブへ渡す。
- ボブはハッシュを使いLNインボイスを生成する。また、マルチシグの残りの公開鍵とそれに対する自身の署名を作り、インボイス、マルチシグアドレス、署名を渡す。
- アリスはインボイスへ支払いをする。(※この時ボブはこの支払を決済できない)
- ボブはアリスからの支払いが来ていることを確認したら、マルチシグへコインを送金する。
- アリスはアダプター署名、ボブの署名、プリイメジを使い完全な署名を組み立て、マルチシグにデポジットされたコインを引き出す。
- ボブは5で公開された署名からプリイメジを計算し、3の支払いを決済する。
上記のようにアダプター署名を使うことでHTLCを構成することなくサブマリンスワップをすることができました。上記ではマルチシグアドレスを使っていますが、これをMuSig2に置き換えることでさらに手数料を低減させることができます。
もし5でアリスがコインを回収しなかった場合、ボブは一定時間経過後に資金を回収する必要があります。その場合はTaprootのスクリプトパスを使いHTLCのタイムアウトによる払い戻しの条件句を実行すれば良さそうです。
まとめると、Taprootのキーパスでは2-of-2マルチシグをMuSig2で構成し、アダプター署名を使いアトミックスワップを実行します。払い戻しができるようにスクリプトパスを使いタイムアウトを設けます。これをP2TRアドレスとして生成してサブマリンスワップをさせることで、外部からみると普通の送金と区別がつかず、また手数料も大幅に低減させることができると考えられます。
以上、駆け足な感じでしたがSweepless Submarine Swapsの仕組みについて考察してみました。