読者です 読者をやめる 読者になる 読者になる

Develop with pleasure!

福岡でCloudとかBlockchainとか。

HTLCsを利用した中間者を経由するBitcoinの支払い

Bitcoin Lightning Network Payment Channel

前回の双方向Payment Channel↓に続いて、Bitcoin MagazineのLightning Network記事の第二弾であるHTLCsを使ったネットワークの作成部分についてみてみる。

techmedia-think.hatenablog.com

bitcoinmagazine.com

ネットワーク

前回の記事でアリスとボブの間で双方向のPayment Channelを構築する方法が説明されたが、今回はアリスが1BTCを三人目の登場人物キャロルに支払いたいケースを考える。

本来であればアリスとキャロルは両者の間でPayment Channelをオープンする必要があるが、キャロルとボブが既にChannelを持っている場合は、そのChannelを使ってボブを経由してキャロルに支払いをすることができる。アリスがボブに1BTC支払い、ボブがキャロルに1BTCを支払う。

ただこの場合、アリスがボブに1BTC支払ったとして、ボブが本当にキャロルにその1BTCを支払うかが疑わしいし、ボブが実際に支払っていてもキャロルが支払われていないと主張するとアリスはどちらが嘘をついているのか分からない。

そのためアリスはキャロルに1BTC送る際に、キャロルにランダムな文字列(シークレット)を作ってそのハッシュをアリスに伝えるよう指示する。続いてアリスはキャロルにボブに元のシークレットとBitcoinを交換するよう指示する。一方アリスは、ボブがアリスにキャロルしか知らないシークレットをアリスに提供した場合、ボブにBitcoinを与えると伝える。

そうなるとボブはキャロルから送られたシークレットの見返りにキャロルに1BTCを送る。

その後アリスは、ボブとキャロルの間でシークレットとBitcoinの交換がされていることを知っているので、キャロルがBitcoinを受け取ったと推定でき、安心してボブにBitcoinを送ることができる。

一見みんな上手くいっているように思えるが、このシナリオではボブがアリスとキャロルを信頼する必要がある。ボブがキャロルにBitcoinを送った際にキャロルがちゃんと必要なシークレットを送ってくれると信頼する必要があるし、そのシークレットをアリスに伝えると報酬としてBitcoinがもらえるということを信頼している。Bitcoinの取引は保証される必要があるので、ボブががキャロルにBitcoinを送った場合、アリスからBitcoinが入手できることが保証されないといけない。

そこでHash Time-Locked Contracts (HTLCs)が登場する。

Hash Time-Locked Contracts

HTLCsでは、アリスはボブにそのままBitcoinを送るのではなく、新しいマルチシグアドレスに送る。このアドレスにロックされたBitcoinは以下の2つの異なる方法でアンロックすることができる。

  • ボブがボブの署名とシークレットでアンロックする。
  • アリスの署名でアンロック可能だが、CLTV-timelockされており、アリスが署名したトランザクションをブロードキャストできるのは2週間後。

ボブは、署名とシークレットを使ってBitcoinを自分のアドレスに送るトランザクションの作成とブロードキャストを、2週間以内に行えばBitcoinを確実に入手できる。このようにしてシークレットとBitcoinを交換する取引が保証される。

これによりボブはシークレットをアリスに提供した場合のみBitcoinを要求することができる。そのトランザクションBitcoinネットワークにブロードキャストされることでそのシークレットをアリスも参照できるようになる。
またボブがずっとアリスにシークレットを提供しないケースでは、CLTVでロックしたBitcoinをアリスが取り戻す。

アリスとボブのみでなくボブとキャロルの間にもHTLCを確立する。キャロルがボブにBitcoinを要求する際、ボブは見返りとしてシークレットを入手する(ブロックチェーン上に現れる)。HTLCを利用することでボブは、アリスからのBitcoinの入手の保証と同様に、キャロルからシークレットの入手を保証する仕組みになる。ボブはキャロルがブロックチェーン上に公開したシークレットをアリスとのHTLCに含めることで、アリスにBitcoinを要求できる。こうやって2つのChannelが効果的にリンクされる。

この際、アリスがボブからBitcoinを取り戻すことができる前に(2週間経てばアリスの秘密鍵Bitcoinを入手できるようになるので)、ボブがキャロルからシークレットを入手することが重要になる。アリスが彼女のBitcoinを2週間経過して取り戻した後にボブがキャロルからシークレットと取得しても、ボブにとっては損するだけで意味がない。そのためボブとキャロルのHTLCのタイムアウトは、アリスとボブのHTLCのタイムアウトの期限より前に設定する必要がある。例えばアリスとボブのHTLCのタイムアウトが2週間であれば、ボブとキャロルのHTLCのタイムアウトはそれより短い10日に設定する。

処理フロー

上記のHTLCsを利用したボブを経由するBitcoinの支払いフローをまとめると↓のようになる。

f:id:techmedia-think:20160816103807p:plain

所感

  • アリスとボブのHTLCのロックタイムより、ボブとHTLCのロックタイムを短く設定する必要があり、かつそれぞれトランザクションは別になるので、相対的なロックを行うOP_CSVではなく絶対時間でロックするOP_CLTVを使うと。
  • シークレットがブロックチェーン上に記録されるということは、トランザクションのブロードキャストが発生するので、その場合Payment Channelがクローズするということになるんじゃないの?と思ったけど、それは次の記事に書かれてるみたい。