暗号通貨とそれらが織りなす経済圏について⑦

ライトニングネットワーク。

前回までは、二者間(双方向)ペイメントチャネルの具体的なフローについて触れました。

よし、次こそ、アトミックスワップだ!と思って終えていたのですが、アトミックスワップを調べていて、HTLCという言葉が出てきまして。うんうん、このHTLCを使っているのがアトミックスワップ。そして、アトミックスワップは第三者を介さず、異なるチェーン同士で送金することができる(ただし一定の条件をクリアしているチェーン同士であれば。)と。うんうん。

・・・HTLCってなあに?

ということで、またも私は迷路に入り込んでしまったようです。。

HTLCを理解するイコール、アトミックスワップもそうなのですが、むしろ、ライトニングネットワークを理解するということでもあったのです。なので、今回は、ライトニングネットワークの仕組みについての理解を書いておきます。ここちゃんとやっておかないとと思いまして。

HTLC(Hashed Timelock Contract)は結構難しくて、最近の私のバイブル参考文献「ブロックチェーン・プログラミング」の力を借りても、「うーん、難しーいなー」と今回はさすがにダメかと絶望してしまったのですが、またもや安土さんの以下記事に最終的に助けていただき、ようやく理解の扉を開くことができました!前回の記事でも、即レスをくださり、本当にありがとうございます・・・。

https://techmedia-think.hatenablog.com/entry/2016/08/16/125739

https://techmedia-think.hatenablog.com/entry/2016/08/21/125736

今までのペイメントチャネルは二者間の、双方向のペイメントチャネルだったのですが、今度は、間に仲介者を挟んだ状態で、中間者を経由して最終の送金先に送金するようにできる仕組みが、いうなれば三者間、複数者間ペイメントチャネル。

という表現は厳密には異なるようでして(ド文系の私には理解しやすいのですが)、前回のが「双方向ペイメントチャネル」で、今回の中間者を経由したものは「HTLCを利用した双方向ペイメントチャネル」というようです。なるほどー。

そして後者こそが、ライトニングネットワークという技術で、ビットコインセカンドレイヤーの拡張として各社実装を進めており、今かなり注目されています。

では、HTLCですね。こほん。繰り返しますがド文系の私にとって、ライトニングネットワークについてネットに落ちている情報は、申し訳ないことにほとんどが読んでも「?」か、逆にとっても簡略化されたものだったので、後者を読んで理解できたつもりになっていたのですが、このHTLCの仕組みが理解できて、初めてライトニングネットワークに触れた気になりました。


では、またストーリーで理解しましょう(逆にこれが無いと理解できない私)。

アリス、ボブ、キャロルがいて、アリスはキャロルに1BTCを送りたいとします。

前はアリス→ボブに送ればよかったのですが、今回は、ボブを経由して、キャロルに送らなければなりません。

つまり、ボブ→キャロルに送ってもらう必要があるのです。しかも、アリス→ボブに送った後では、ボブが持ち逃げするかもしれないので、ボブ→キャロルに送られたことを確認してから、アリス→ボブに送ることにします。

いやいやそんなん、ボブに何のメリットがあるんですか。しかも、百歩譲ったとしても、ボブが優しい人で、送ってくれることになったとしても、アリスが嘘ついてたら?ちゃんとアリス→ボブに送られる保証があるんですかと。その二つをちゃんと担保しなければ、成立しないわけですよね。

ボブのメリットは、すみませんがよく分からんっす。裏側で走る手数料かな。

でも、1BTCを送るための担保=保証の仕組みは、何となく分かりました。その仕組みの重要な構成要素が、前に出てきたシークレットと、有効期限です。

今回、上記のアリス→キャロルへの送金を実現するための条件は、

・キャロルが持つシークレットを、トランザクションの有効期限が切れる前にキャロルに吐かせ、ボブに伝え、アリスもそれを知る

ということなのです。なのです、というかそう理解しております。

?という感じなので、一つずつ流れを見ていきましょう。

まず、ボブは、アリスがちゃんと1BTCを用意しており、それを自分に対して支払うことを保証してほしいです。

それには、アリス→ボブへ1BTCを支払う内容のコミットメントトランザクション(以下、トランザクションをTxとする)をまたそれぞれが作ります。ボブへの支払いを保証するために、以下のようなTxを作り、互いに交換します。

A:アリスの書くコミットメントTx=以下宛先条件と金額(1BTC)

ア)1,000ブロック経過後(CSV)、シークレットRとボブの秘密鍵で入手可能

イ)ボブのシークレットが分かれば、アリスの秘密鍵で入手可能

ウ)2週間経過後(CLTV)、アリスの秘密鍵で入手可能

B:ボブの書くコミットメントTx=以下宛先条件と金額(1BTC)

ア)シークレットRとボブの秘密鍵で入手可能

イ)アリスのシークレットが分かれば、ボブの秘密鍵で入手可能

ウ)2週間経過(CLTV)かつ1,000ブロック経過後(CSV)、アリスの秘密鍵で入手可能

・・・なんやこれ、と。

前回にちょっと立ち戻りましょう。前回は、共同資金プール(オープニングTx)から7BTCをアリスに渡し、3BTCをボブに渡すようにするためには、アリスが書くコミットメントTxでは、アリス(自分)宛の送金金額7BTCを書いて、残りのボブ(相手)が受け取るはずの3BTCの宛先条件として、もしそのTxがボブ(相手)に渡した後、ブロードキャストされた場合にボブ(相手)は3BTCをすぐには取り出せないが、アリス(自分)はボブ(相手)のシークレットを知っていれば、アリス(自分)の秘密鍵で3BTCを入手できてしまう不正防止爆弾方式でしたよね。

これによって、お互いのシークレットを交換した段階で、一つ前の(最新ではない)トランザクションを正にしようとしてブロードキャストするとオウンゴールよろしく自滅することで、不正を働くことを心理的に防ぐ仕組みになっていました。

なのですが、まず、条件が一個増えてますね。ただシンプルにいきましょう。まず、ボブが書いた方の、イ)「アリスのシークレットが分かれば、ボブの秘密鍵で入手可能」から。これは、前回と同じです。先ほど記載した、アリスから見ればボブの、ボブから見ればアリスの、お互いの不正を防止するためのものです。

なんだかまだ分かりづらい気もしますが、アリスはボブの書いたコミットメントTxを入手=互いに交換するので、それを不正にブロードキャストしたとするならば、その時点でアリスのシークレットをボブは知っているので、ボブの秘密鍵で1BTC入手できてしまうよ、というものです。不正防止だと思えばシンプルです。

はい、次。

ア)「シークレットRとボブの秘密鍵で入手可能」これは、よく見ると、アリスが書いたものも、ボブが書いたものも、同じですね。記載間違いか?と思ったのですが、そんなわけはないですね。アリス側に「1,000ブロック経過後(CSV)」という条件は付いていますが、ボブに支払われる、という意味では同じです。Rを知ったボブであれば、入手できるわけです。

そりゃそうですよね、もともと1BTCをアリス→ボブに支払い、それを保証することによってボブ→キャロルに支払ってもらうためのものですから。

で、最後。ウ)「2週間経過(CLTV)かつ1,000ブロック経過後(CSV)、アリスの秘密鍵で入手可能」これが一番難しいんですよね。ただこれも、ボブ側・アリス側も同じくアリス宛の支払いになっていて、1BTCを拠出しているのはアリスということに注目します。アリスは、1BTCをキャロルに届けたい。ただそのための行動が誰によっても成されないままに時間が経過すると、時間切れで1BTCはアリスの元に戻るよ、というだけなのです。資金の出元への保証ですね。

なので、この場合、アリスより拠出される1BTCをボブは欲しいとします。アリスに戻されてしまっては困るわけですね。そうすると、シークレットRが必要ですね。それは誰が持っているかというと?キャロルです(割愛しましたが、Rはキャロルが持っていて、そのハッシュをボブ→アリスに送るところから始まります)。なのでボブは、キャロルからRを入手する必要があります。その方法は2つあり、キャロルがRをブロードキャストするか、コソっとボブに教えるかです。

そうすると、キャロルがなんで自分のRをブロードキャストなり伝達する必然性があるのか?という点については、ボブと同じで、キャロルも1BTC欲しいからなんです。

次のTxとして、ボブとキャロルの間にも、交換するためのコミットメントTxが発生します。ただ、全くさっきのアリス・ボブ間のそれと同じです。

B2:ボブの書くコミットメントTx=以下宛先条件と金額(1BTC)

ア)1,000ブロック経過後(CSV)、シークレットRとキャロルの秘密鍵で入手可能

イ)キャロルのシークレットが分かれば、ボブの秘密鍵で入手可能

ウ)1週間経過後(CLTV)、ボブの秘密鍵で入手可能

C:キャロルの書くコミットメントTx=以下宛先条件と金額(1BTC)

ア)シークレットRとキャロルの秘密鍵で入手可能

イ)ボブのシークレットが分かれば、キャロルの秘密鍵で入手可能

ウ)1週間経過(CLTV)かつ1,000ブロック経過後(CSV)、ボブの秘密鍵で入手可能

ほぼ、先ほどのアリス→ボブへの1BTCの支払いと同じですよね。

唯一違うのが、ウ)が1週間ということぐらいです。これはボブとキャロル間の取引を、アリスとボブより先に終わらせる必要があるから期限を短く設定しておく、ということだそうですが、この説明がちょっと難しくて。なのでこう理解しました。

要はこの1週間だの2週間だのっていうのが一番のミソで、「BTCの入手、つまりはTxの実行にタイムリミットを設定してあり、そのリミットを過ぎると相手にBTCが戻ってしまうが、それより前にシークレットを使えば自分にBTCが手に入る心理」を利用しているんですよね。

なので、キャロルはボブに、1週間以内にシークレットを吐くか?どうするか?ということを試されているわけですし、ボブはアリスに2週間以内に同じくキャロルのシークレットを吐くか?どうするか?ということを試されているわけです。

ふつうに考えれば、吐きますね。1BTC欲しいんで。で、キャロルの吐き方は、戻ると2つあり、キャロルがRをブロードキャストするか、コソっとボブに教えるか、でしたが、ブロードキャストしても全然いいのです。むしろ普通はブロードキャストだと思います。ブロードキャストされれば、ボブもRを知ることができますし、アリスも知ることができます。

ただ、そうすると、取引がクローズしてしまいますよね。そう、ブロードキャストするということは、取引を確定させ、開いていたチャネルを閉じ、ブロックチェーンに記録することを示すので、それでオンチェーンに戻ってしまいます。

ただ、実は、お互いに取引を続けることに合意をすれば、そのまま新たなコミットメントトランザクションを作成し、前回記事で書いたように2回目、3回目・・・と継続することができます。で、最後、確定させたい時に、ブロードキャストすればいいわけです。

そのために、キャロルは、チャネルを維持することの意思表明として、ブロードキャストするのではなく、Rを、ボブに伝達します。Rをボブに伝達しさえすれば、ボブはそれで1BTCをアリスから受け取る条件が整うので、もう有効期限など気にする必要はなく、新たに作成するコミットメントトランザクションは通常の形式に戻します。CLTVタイムロックを外した、いつもの不正防止の条件のみですね。

後は、ボブもアリスとの間に交換したコミットメントTxをブロードキャストしてアリスにRを知らせるか、また維持したい場合には、キャロルと同じく、アリスにRを知らせ、継続の意思表示をします。

なんだか面白い、人間の欲望の裏をかいたシステムだな、と感心します。

ふぅ。今日はここまで。次回は、どこへ行くのか分かりませんが、スケーリングによる流動性の話からそろそろ一度離れて、もともとのトークンエコノミーのお話に戻ろうと思います。

今夜もありがとうございました。