Bitcoin MagazineのLightning Networkを使ったクロスチェーン取引の拡張についての記事が出てた↓ので見てみる。
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. 続いて、TX1
のw
コインをアリスの公開鍵に送るTX2
を作成する。このTX2
のnLocktimeには48時間後までロックするよう設定する。
4. アリスはTX2
をボブに送ってIF分岐のマルチシグの1つであるボブの署名をしてもらう
5. ボブはTX2
の署名をしたTX1
をアリスに返す
6. ボブから署名済みのTX2
を受け取ったアリスはTX1
をBitcoinネットワークにブロードキャストする
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
コインを入手する。
TX1
もTX2
はそれぞれアリスとボブの署名があればいいだけなので、↑はSegwitを必要とせず払い戻し用トランザクションTX2
とTX4
が作れる。
共通のシークレットx
を利用して、2つのブロックチェーン上でそれぞれのコインをロックし、xが明かされるとそれぞれのチェーンで交換したコインを入手できるようになっている。この時大事なのはx
を作った側(↑ではアリス)が作成するトランザクション(↑ではTX1
)のロックタイムより、相手が作成するトランザクション(↑ではTX3
)のロックタイムの方を短く設定しておく必要がある。
基本的な仕組みはHTLCs↓
techmedia-think.hatenablog.com
特殊なアルトチェーンを使った解決策
↑の方法は、アルトチェーン側の特別なサポートを必要とせずBitcoinとアルトコインを交換できる。ただ欠点はnLocktimeで、相手が取引を行わない場合nLocktimeで指定した期間まで資金がロックされることである。特殊なアルトチェーンを使うことで、こういった欠点の無い形でアトミックにコインを交換する方法もある。
アリスがアルトチェーン、ボブがBitcoinでそれぞれコインを保持しているとする。
- まずボブは普通にBitcoinを送るトランザクションを作成し、署名を行い、そのトランザクションの
txid
を算出する。その後、txid
とその入力のスクリプトと署名をブランクにしたトランザクションをアリスに送る。 - アリスは、そのトランザクションのハッシュを計算する。これを
blankhash
と呼ぶ。続いてblankhash
とtxid
を引数にとるbitcointxid
opcodeを使ってアルトコインを送るトランザクションを構成し、アルトチェーンのネットワークにブロードキャストする。 - ボブはアルトチェーンでトランザクションが承認されるのを待ち、その出力が事前に合意していた内容かどうか検証する。内容が問題なければボブは元々の署名付きのトランザクションをアリスに送り、アリスはそれをBitcoinネットワークにブロードキャストしてBitcoinを入手する。
ただ、これで正常にクロスチェーンのAtomic Swapをするためには、アルトコイン側のチェーンで以下のルールが必要になる。
bitcointxid
というopcodeは、引数に与えられたtxid
のトランザクションをBitcoinのブロックチェーン上で確認し、そのトランザクションの入力のスクリプトと署名をブランクにして計算したハッシュがblankhash
と同じでその出力が使用可能な場合、trueを返す。(このためアルトチェーンのクライアントはBitcoinのブロックチェーンと通信する)- アリスがブロードキャストしたアルトチェーンのトランザクションは、
bitcointxid
に渡したtxid
のトランザクションがBitcoinのネットワーク上で確認されなくても構築することができる。 - ただし、そのトランザクションの出力はBitcoinネットワーク上で対象のトランザクションが確認できるまで、使用可能にはならない。
- アルトチェーン側のトランザクションの入力は、Bitcoinのネットワークで対象のトランザクションが確認されその出力が使用可能な状態になるまで、何回でも他のトランザクションの入力として使える。ただ、最終的に使われる入力はBitcoinのトランザクションで最初に確認された
txid
を使用しているトランザクションになり、その他の同じ入力を使っているトランザクションは無効になる。
※ 実際にこういうことしてるアルトチェーンってあるんだろうか?
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を改善することにもなる。例えば、BitcoinとBitcoinの決済がLitecoinのピアを経由して行った方が安価な経路になるケースが考えられる。また複数のコインを扱っているユーザはPayment Channelを使ってそれぞれのコインのバランスを調整することができる。
課題
Lightning Netoworkを利用したクロスチェーン取引にはいくつかの課題がある。
1つはDoS攻撃からの保護。Lightning Networkの仕組み上、トラストレスな構成で仲介者が資金を盗むことができないようになっている反面、仲介者が決済プロセスを阻止or停止する可能性がある。これを解決するには、非協力的なピアのチャネルをクローズする必要がある。ただ、この攻撃を行う場合、非協力的なピアもチャネルを開く必要があるので、チャネルにコインがロックされその攻撃コストは高くなる。
しかし、チャネルを閉じ攻撃者が処罰されたか確認するためには、決済チェーンに関係した各ピアが全ての参加者を監視できる必要がある。
また当然のことながら、Lightning Networkがデプロイされる必要があり、そのためにはSegwitがアクティベートされる必要があるが、まだアクティベートされる様子はない。
所感
- ペグではなく、Atomic Swapみたいにクロスチェーン間の取引を利用した仕組みをベースにした拡張を考えるのもおもしろそう。
- Lightning NetworkとAtomic Swapをどうマージするのか仕組みが気になる。
- Lightning Networkでクロスチェーン取引をする場合、その仲介者は実質的にコインの交換業者のような役割を果たしてる。