Develop with pleasure!

福岡でCloudとかBlockchainとか。

Lightning Networkを使ったクロスチェーン取引

Bitcoin MagazineのLightning Networkを使ったクロスチェーン取引の拡張についての記事が出てた↓ので見てみる。

bitcoinmagazine.com

Atomic Swap

そもそもBitcoinとアルトコインの相互運用というのは、別に新しいことではなく、2013 年にTier Nolanが紹介している↓

Atomic cross-chain trading - Bitcoin Wiki

Atomic cross-chain trading

クロスチェーンの取引をアトミックに行う際の課題は、2人の当事者アリスとボブがいて、それぞれ別々の暗号通貨を持っている状況で、第三者を信頼することなくお互いのコインをアトミックに交換することにある。非アトミックであればアリスがボブにコインを送り、コインを受け取ったボブがアリスにコインを送ることができるが、この場合ボブがアリスにコインを送らなければ、ボブがアリスのコインを盗んで終わりになってしまう。

第三者や取引相手を信頼することなく、この交換を行う方法として↓の2つが挙げられている。

シークレットの交換とロックタイムを使った解決策

シークレットとロックタイムを利用したアトミックな取引は以下のような仕組みで行われる。

1. アリスはランダムな数値xを生成する(xはこの時点でアリスのみが知っている)
2. アリスはwコインを以下のscriptPubkeyに送るTX1を作成する

IF
    2 <アリスの公開鍵> <ボブの公開鍵> 2 CHECKMULTISIGVERIFY
ELSE
  HASH160 <H(x)> EQUAL <ボブの公開鍵> CHECKSIGVERIFY
ENDIF

3. 続いて、TX1wコインをアリスの公開鍵に送るTX2を作成する。このTX2のnLocktimeには48時間後までロックするよう設定する。
4. アリスはTX2をボブに送ってIF分岐のマルチシグの1つであるボブの署名をしてもらう
5. ボブはTX2の署名をしたTX1をアリスに返す
6. ボブから署名済みのTX2を受け取ったアリスはTX1Bitcoinネットワークにブロードキャストする
7. 続いてボブが、vアルトコインを以下のscriptPubkeyに送るTX3を作成する

IF
    2 <アリスの公開鍵> <ボブの公開鍵> 2 CHECKMULTISIGVERIFY
ELSE
  HASH160 <H(x)> EQUAL <アリスの公開鍵> CHECKSIGVERIFY
ENDIF

8. 続いてTX3のwコインをボブの公開鍵に送るTX4を作成する。このTX4のnLocktimeには24時間後までロックするよう設定する。
9. ボブはTX4をアリスに送ってIF分岐のマルチシグの1つであるアリスの署名をしてもらう。
10. アリスから署名済みのTX4を受け取ったボブはTX3をアルトコインのネットワークにブロードキャストする。
11. アリスはxを使ってTX3のELSE分岐の条件の署名を行いvコインを入手する。
12. アリスがvコインを入手するトランザクションがアルトコインのネットワークにブロードキャストされるとボブはxの値が分かるので、そのxを使ってTX1のELSE分岐の条件の署名を行いwコインを入手する。

TX1TX2はそれぞれアリスとボブの署名があればいいだけなので、↑はSegwitを必要とせず払い戻し用トランザクションTX2TX4が作れる。

共通のシークレットxを利用して、2つのブロックチェーン上でそれぞれのコインをロックし、xが明かされるとそれぞれのチェーンで交換したコインを入手できるようになっている。この時大事なのはxを作った側(↑ではアリス)が作成するトランザクション(↑ではTX1)のロックタイムより、相手が作成するトランザクション(↑ではTX3)のロックタイムの方を短く設定しておく必要がある。

基本的な仕組みはHTLCs↓

techmedia-think.hatenablog.com

特殊なアルトチェーンを使った解決策

↑の方法は、アルトチェーン側の特別なサポートを必要とせずBitcoinとアルトコインを交換できる。ただ欠点はnLocktimeで、相手が取引を行わない場合nLocktimeで指定した期間まで資金がロックされることである。特殊なアルトチェーンを使うことで、こういった欠点の無い形でアトミックにコインを交換する方法もある。

アリスがアルトチェーン、ボブがBitcoinでそれぞれコインを保持しているとする。

  1. まずボブは普通にBitcoinを送るトランザクションを作成し、署名を行い、そのトランザクションtxidを算出する。その後、txidとその入力のスクリプトと署名をブランクにしたトランザクションをアリスに送る。
  2. アリスは、そのトランザクションのハッシュを計算する。これをblankhashと呼ぶ。続いてblankhashtxidを引数にとるbitcointxid opcodeを使ってアルトコインを送るトランザクションを構成し、アルトチェーンのネットワークにブロードキャストする。
  3. ボブはアルトチェーンでトランザクションが承認されるのを待ち、その出力が事前に合意していた内容かどうか検証する。内容が問題なければボブは元々の署名付きのトランザクションをアリスに送り、アリスはそれをBitcoinネットワークにブロードキャストしてBitcoinを入手する。

ただ、これで正常にクロスチェーンのAtomic Swapをするためには、アルトコイン側のチェーンで以下のルールが必要になる。

※ 実際にこういうことしてるアルトチェーンってあるんだろうか?

Lightning Networkを利用したクロスチェーン取引

Lightning NetworkはBitcoin向けに設計されているけど、Bitcoinのコードベースからフォークしているアルトコイン(LitecoinやDogecoin、Zcashなど)であれば同様にLightning Networkをホストできる。

Lightning Networkは↑のAtomic Swapの仕組みと同様、HTLCsを利用していて、これによって、アリスとボブがそれぞれキャロルとPayment Channelをオープンしていれば、アリスとボブ間にPayment Channelが開いてなくても、キャロルを経由してコインを送付できるようになっている。この時アリスとボブは仲介者キャロルを信頼する必要はない。

その際、どういったトランザクションを構成するかは↓ techmedia-think.hatenablog.com

Lightning NetworkとクロスチェーンのAtomic Swapは、基本的な仕組みは同じで、このプロセスをマージすることでLightning Networkを利用したクロスチェーン取引が可能になるという話(記事では仕組みについては書かれていない)。Bitcoinとアルトコインの両方のブロックチェーンでチャネルをオープンしているピアは、アルトコインとBitcoinを交換するPayment Processorとして機能する。

例えばアリスがボブからPCを購入しようとしていて、ボブは1 BTCを請求するがアリスがLitecoinしか持っていない場合。幸いにもキャロルがアリスとの間にLitecoinのPayment Channelをオープンしていて、ボブとの間にはBitcoinのPayment Channelをオープンしていたとする。この時アリスはキャロルに200Litecoinを送り、キャロルはボブに1 BTC送る。この取引はHTLCsで構成されており、キャロルをトラストレスなPayment Processorとして利用できる。

またアリスとボブがそれぞれBitcoinとLitecoinのチャネルをキャロルとオープンしている場合、資金を交換することもできる。アリスがキャロルに200 Litecoinを送り、キャロルはそれをボブに送る。ボブはその後1 BTCをキャロルに送り、キャロルはそれをアリスに送る。これもまはHTLCsで構成されており、キャロルをトラストレスなアルトコインの交換所として利用できる。

クロスチェーンのLightning NetworkはBitcoinのLightning Networkを改善することにもなる。例えば、BitcoinBitcoinの決済がLitecoinのピアを経由して行った方が安価な経路になるケースが考えられる。また複数のコインを扱っているユーザはPayment Channelを使ってそれぞれのコインのバランスを調整することができる。

課題

Lightning Netoworkを利用したクロスチェーン取引にはいくつかの課題がある。

1つはDoS攻撃からの保護。Lightning Networkの仕組み上、トラストレスな構成で仲介者が資金を盗むことができないようになっている反面、仲介者が決済プロセスを阻止or停止する可能性がある。これを解決するには、非協力的なピアのチャネルをクローズする必要がある。ただ、この攻撃を行う場合、非協力的なピアもチャネルを開く必要があるので、チャネルにコインがロックされその攻撃コストは高くなる。

しかし、チャネルを閉じ攻撃者が処罰されたか確認するためには、決済チェーンに関係した各ピアが全ての参加者を監視できる必要がある。

また当然のことながら、Lightning Networkがデプロイされる必要があり、そのためにはSegwitがアクティベートされる必要があるが、まだアクティベートされる様子はない。

所感

  • ペグではなく、Atomic Swapみたいにクロスチェーン間の取引を利用した仕組みをベースにした拡張を考えるのもおもしろそう。
  • Lightning NetworkとAtomic Swapをどうマージするのか仕組みが気になる。
  • Lightning Networkでクロスチェーン取引をする場合、その仲介者は実質的にコインの交換業者のような役割を果たしてる。