Submarine Swaps
一言でいうとBitcoin(オンチェーン)とライトニング(オフチェーン)でアトミックスワップが可能になる仕組み
サブマリン・スワップの3つのステップ
サブマリンスワップとは、オンチェーンとオフチェーンのデジタル資産間(オンチェーンで保有するビットコインとライトニングネットワーク上のビットコイン間など)の取引です。サブマリン・スワップは、カストディやカウンターパーティーリスクなしに実行できる特殊な種類のアトミック・スワップです。
カウンターパーティーリスクがないため、サブマリンスワップは、バックグラウンドチェックや契約上の取り決めといった追加の障壁なしに実行することができます。両当事者が資産の交換に成功するか、スワップが失敗するかのどちらかである。しかし、どちらかが相手の資金を持ち逃げすることはない。
こうしたトラストレス性を実現するために、オンチェーン取引ではライトニングネットワークと同じハッシュタイムロックコントラクト(HTLC)が利用されています。オンチェーンBTCが送金される前に、ライトニングトランザクションの受信者は、ランダムな32バイトの秘密であるプリイメージを生成します。このプリイメージはハッシュ化され、オンチェーンおよびオフチェーンでの支払いのためのHTLCを構築するために使用されます。
1. ビットコインのスマートコントラクトを生成する
オンチェーン決済の送信者は、このプリイメージのハッシュを知り、受信者と公開鍵の交換を行った後。送信者は以下のプロパティを持つビットコインアドレスを生成することができます。期間限定で、そのコントラクトで保有する資金を、プリイメージと受信者の有効な署名を知って振り込むことができる。その後、送信者の署名だけで請求できる。
オンチェーン取引の送り手と受け手の双方がこのスクリプトを生成し、検証することができる。送り手は、オフチェーンでサトシを受け取るか、失敗してもBTCの返還を請求できることが分かっているので、安全にBTCをこの契約に移動させることができます。正確な取り決めにもよりますが、送金者は返金不可のライトニングペイメントを前払いで要求することもあります。これは、スマートコントラクトに出入りする際の取引手数料や、資金が一定期間ロックされることによる機会費用の補償に使用されます。
code:Loopで使用される典型的なビットコインのスマートコントラクトの例
OP_SIZE 32 OP_EQUAL
OP_IF
OP_HASH160 <ripemd160(swapHash)> OP_EQUALVERIFY
<receiverHtlcKey>
OP_ELSE
OP_DROP
<cltv timeout> OP_CHECKLOCKTIMEVERIFY OP_DROP
<senderHtlcKey>
OP_ENDIF
OP_CHECKSIG
2. ライトニングインボイスの生成と支払い
次のステップでは、オンチェーン資金の送信者は、ステップ1のスマートコントラクトから同じプリイメージを使用してライトニングネットワークの請求書を生成します。請求書の正確な金額は、送信されたBTCと同じかもしれませんし、手数料を含む/差し引くかもしれません。最終的には、両当事者の取り決めに依存するため、事前に合意しておく必要があります。
また、取引失敗の可能性を減らすために、ライトニングの請求書を事前に提示し、オンチェーン資金の受取人が支払いに応じられるかどうか、またどの程度のコストで支払えるかを判断できるようにする場合もあります。
スマートコントラクトで資金の決済が確認された後、ライトニングインボイスを支払っても問題ない。このLightningの支払いを請求するために、オンチェーン資金の送り手はプリイメージを公開する必要があり、これで受け取り手はビットコインのスマートコントラクトから資金を請求できるようになる。
3. スマートコントラクトからビットコインを請求する
オフチェーン資金はオンチェーン決済の送り手のLightningウォレットに、オンチェーン資金はスマートコントラクトに保持されたままとなります。その署名とLightning決済で得たプリイメージを使って、オンチェーン資金を請求することができます。HTLCの有効期限が切れる前に確認する必要があり、そうでなければ送信者が自分の資金も取り戻すことができるリスクがあります。一般に、replace-by-feeは、当初は低い手数料で資金の掃討を試み、期限が近づくにつれて徐々に手数料を高くしていくという使い方ができる。
サブマリン・スワップは何のためにあるのですか?
サブマリン・スワップはライトニング・ノードの流動性管理を容易にします。また、チャンネルの容量を使い果たした場合に補充するためにも使用できます。
Loopでサブマリンスワップを利用する
Loopは、オフチェーンのサトシをオンチェーンの支払いと交換(Loop Out)、またはその逆(Loop In)することを容易にする私たちの流動性サービスです。これは、インバウンドの流動性を得るため、またはチャネルを閉じることなくライトニングノードからオンチェーン支払いを行うために便利です。
Alex BosworthがLondon Bitcoin DevsでSubmarine swapを説明するのを見る
https://www.youtube.com/watch?v=eB_HkYb7Y2M
Submarine Swapの課題(NLoopより抜粋) Channel の状態管理には Lightning Loop が使用されているが以下の懸念点がある
BTC 以外の swap をサポートしていない
チャネルの開閉を減らすことができたが、Bitcoinのオンチェーン送金は行っているので手数料がそこそこかかる
NLoopではBitcoin以外も対応しているため手数料が抑えられる。(例: Litecoin を使ってLN残高チャージ)
swap 相手に制限がある
Lightning Loop では、 Swap を行う相手のサーバーは、 Lightning Labs が運用する物に限られる
ソフトウェアはクローズドソース
Lightninglabs 側がインバウンドキャパシティを取得するために、チャンネルを閉じる可能性がある
高い手数料を取られても別の選択肢がない
サーバーサイドがクローズドソースであるため、自分たちがサービスを提供する側になる可能性が閉ざされている。