ライトニングが使いやすくなる!?サブマリンスワップとは

posted in: Bitcoin, Lightning | 0 |
Reading Time: 1 minute

アトミックスワップとは

コインの交換を2者間で行うことです。通常は、株式の売買でも仮想通貨の売買でも取引所が売り手と買い手の仲介役となり取引を行うことが一般的です。仲介役の役割は、売買相手をマッチングさせたり、取引の執行を確実に行うことです。例えば、アリスがビットコインを売って、ライトコインを買いたい場合を想定してみましょう。まずは、取引所がライトコインを売ってビットコインを買いたい相手ボブを見つけてくれます。そして双方がそれぞれのコインを取引所に預けます。双方がコインを送金したことを確認後、取引所はアリスへライトコインを、ボブへビットコインを送金します。これがザックリとしたコイン交換の1つの方法です。しかし、もし取引所なしでこの取引を実行しようとする場合、相手を信用する必要があります。例えば、アリスがボブへビットコインを送金したのにボブがライトコインを送金してくれない場合やその逆も然り。そのリスクを回避するために第3者として取引所が仲介してくれます。

しかし、取引所はその仲介役を買って出てくれる一方で、取引の数パーセントを手数料として取ることがあります。そこで、アリスとボブの2者間で取引をする場合、相手を信頼することなく完全に取引を実行するための方法をアトミックスワップと呼び、スマートコントラクトを使うことで可能になります。


サブマリンスワップとは

では、本ブログの本題のサブマリンスワップについてです。サブマリンスワップとは、オンチェーンの資金とオフチェーンの資金を交換する方法で、Alex Bosworthによってプロトタイプが開発されました。

アリスはライトニングネットワークを使いたいと考えますが、ライトコインしか持っていません。こんな時はサブマリンスワップの出番です。アリスがライトコインを資金としてライトニングネットワークへチャージすることはできませんが、ここでサブマリンスワップを提供してくれるボブがいたとします。まず、アリスは自身のライトニングネットワーク対応ウォレットから請求書(インボイス)を作成し、ボブへ渡します。次にボブはその請求書からあるスマートコントラクトを作成し、特別なライトコインアドレスを生成し、アリスへ渡します。アリスは、その特別なライトコインアドレスへコインを入金します。ボブは、その入金を確認後(この時点ではまだライトコインはまだボブのものではありません)、アリスからもらった請求書に対しライトニングペイで支払いをします(この時点でアリスの目的は達成されました:ライトニングに資金がチャージされました)。支払いが完了するとレシートが受理できます。このレシートが重要で、これを使うことで先に生成した特別なライトコインアドレスからコインを取り出すことができるのです。これでボブもライトコインを受け取ることができ、コインの交換が完了しました。


背面下では

ボブが作成したスマートコントラクトは下記のようになります。

if(hash(preimage) == invoiceId){
    checkSig(presentedSig, sendtoPubkey)
}else if(height > refundHeight){
    checkSig(presentedSig, refundPubkey)
}

ここで重要なのがpreimageです。これはアリスが発行した請求書と関連付けされており、請求書の支払いが完了すると支払い者にレシートとして渡されます。このpreimageのハッシュ値を取るとinvoiceIdとなります。なので、ボブが作ったこの契約の1行目は、請求書の支払い後に受理するレシートを使うとコインをボブのライトコインアドレスへ移動できるこをと表しています。また、3行目については、ボブが請求書を支払わずにある一定時間が過ぎると、アリスのライトコインアドレスへ移動できるというものです。


ユーザーのメリット

どれほど需要があるか分かりませんが、現状ではライトコインしか保有しておらず、ライトニングを使おうと思う場合、一度ShapShitなどでライトコインからビットコインへ交換してからライトニングへチャージするという流れになります。それが直接ライトコインからライトニングへチャージができるので簡単になりますね。

また、ユーザーが、取引所に預けたコインを使ってライトイングネットワークを始める時、もし取引所がまだライトニングに未対応であった場合でも、取引所はスワップ提供者を探しだし、その人にユーザーの請求書を渡します。スワップ提供者は特別なアドレスを生成し取引所に送付します。取引所がユーザーのコインをその特別なアドレスに送金した後、スワップ提供者はライトイングペイでユーザーの請求書の支払いをします。これでユーザーは取引所に保管してあったコインを使ってライトイングネットワークに資金をチャージすることができます。


スワップの応用~エコシステム構築~

販売者にとってライトニングでの一番の問題は受取が難しいことです。ユーザーが販売者と直でペイメントチャネルを開いていれば問題ないのですが、そうでない場合、販売者とチャネルを開設している相手とのチャネルバランスにおいて、相手側にある程度の資金がないといけません。そこで上記のスワップを応用します。

販売者であるトムはキャロルとペイメントチャネルを開設しおり、アリスもキャロルとチャネルは開設済みだとします(各チャネルバランスは以下の通り)。この状況でアリスはトムへ支払いをすることはできません。トムとキャロルとのチャネルバランスが2:0であるため、キャロルからトムへ送金する残高がないからです。トムが支払いを受け取るためにはトムとキャロルのチャネルバランスを2:0から1:1などにする必要があります。

Tom 2 -- 0 Carol 0 -- 2 Alice


そこでトムはキャロルに1BTCの請求書を要求します。トムは受け取った請求書からスワップ用の特別な(ここでは例として)ビットコインアドレスを生成し、キャロルへ入金依頼を出します。キャロルがオンチェーンのビットコインアドレスへ入金後、トムはキャロルへ1BTCライトニングペイをする。支払い後レシートを受理し、それを使い特別なビットコインアドレスからトムのオンチェーンアドレスへ移動させる。この時点でチャネルバランスが2:0から1:1へなりました。これでチャネルのリバランスが完了し、アリスから支払いを受け取れる状態になりました。

Tom 1 -- 1 Carol 0 -- 2 Alice


トムはキャロル経由でアリスからの1BTCの支払いを受け取ることができたました。

Tom 2 -- 0 Carol 1 -- 1 Alice


疑問点

キャロルがオンチェーンのビットコインを持っている必要があり、そのビットコインをオンチェーンからオフチェーンへ移動させることの動機がないと、上記取引は成立しないと思います。


最後に

Alexのプレゼンの最後の言葉が印象的でした。彼は「おそれないで」と言及しており、よくライトニングネットワークやLappの開発において諦める方がよくいます。良いアイディアを出したり、開発などに貢献する方々は、それぞれ努力をしています。コミュニティに貢献するのに、あなたが秀才である必要はなく、それぞれができる限りにのことを精一杯し、その積み重ねによって技術が開発、浸透してくるのです。


参考

Alex BosworthによるScaling Bitcoinのプレゼン

上記プレゼンの要約はここ

コメントを残す