ライトニング・ネットワークのチャネル内の送金の仕組みや方法について解説しています。基本的なことをお伝えしておりますので、この記事を読んで頂くことで今後のライトニング・ネットワークに関する情報についてもより理解を深めやすくなると思います。また、コミュニティー内の質問も多く収録しておりますので一度目を通してみてください。
ライトニングネットワークのチャネル内の仕組みと基礎
今回は、テレグラムの「Tokyo Dragons Den」というグループ内で非常にわかりやすいやりとりがあったので共有致します。
Q:ライトニング・ネットワークについて1つ疑問があるのでご教授頂きたいのですが、A→C、A→B→Cといった形で送金をする場合には、その取引記録等は最終的に誰が保管する事になるのでしょうか?デポジットしているBTCの増加減の事ではなくAとCの取引をしたという記録の保管先についての質問です。

A・B・Cがそれぞれ保持します。ABの部分はABが保持して、BCの部分はBCがそれぞれ保持します。
ライトニング・ネットワークではチャネルに関する部分が少し複雑になっています。上記の質問と回答の意味がそもそも分からないという方がほとんどではないでしょうか?
この記事を読んでいただくことで、最終的には上記の質問と回答の意味を理解して、ライトニング・ネットワークのチャネル内の送金に関する基礎を理解頂けます。
ライトニングネットワーク チャネル内の送金の仕組み
ライトニング・ネットワークのチャネル(*1)内での送金に関して下記より図を用いて説明致します。前提として黒い玉はキャパシティ(デポジットされたBTC)を表しており、Bobを「A」Aliceを「B」とします。また、後ほど登場するTomは「C」とさせて頂きます。
*1 チャネル:例えば、「A→B」という取引を行う場合には、まずはじめにチャネルを開く必要があり「A→B」の部分の「→」の部分がチャネルとなります。
上図はA→Bのチャネルを表しています。
A→Bというチャネルを通して、黒い玉を2個送金すると、チャネル内の残高が書き換わります。この状態でチャネルを閉じ(精算す)ると、この残高がそれぞれオンチェーン(ブロックチェーン上)で処理されます。
上図から分かるようにA←Bという送金を実現するためには、いったんAからBに黒い玉を送金しないとA←Bの送金はできません。では、A→B→Cはどうやるかというと、この玉突きの連携です。
これがA→B→Cの連携状態です。
この状態のとき、AからCに2つ黒い玉を送金するためにはどうしたら良いでしょうか?
答えは、AからBに送金、BからCに送金するという連携が必要になります。
ここで重要なのはBはAから受け取った黒い玉をCに送っているわけではないということです。あくまでチャネルはAとB、BとCの間だけで成り立っているので、Aのコインが直接Cに送金されるというわけではありません。
つまりライトニング・ネットワークは、チャネルのバランス(残高)を玉突きのようなイメージで行ったり来たりさせることで、あたかも送金されているような感じに見えるという仕組みなのです。
チャネルの精算と残高の記録
次にチャネルを閉じた際のブロックチェーンへの記録についてお話します。
チャネルを閉じるのに必要な情報はAとB、BとCがそれぞれの間で保持しています。AとBが合意すればAとBの間の残高を閉じて精算できます。BとCも同様に双方の合意によってチャネル間の残高を閉じて精算することができます。ちなみにAは、BとCのチャネルを勝手に精算することはできません。
POINT:チャネルを精算するということは、AとBの精算時の残高をブロックチェーン上に記録することを意味します。ライトニング・ネットワークはチャネルを開くことからはじまり閉じることで終わります。手数料は唯一この時に発生します。
チャネルを閉じるとブロックチェーン上に最終残高だけが記録されます。それまでの間に、黒い玉がチャネル内を何回移動しようが、その履歴についてはAとBの当事者しかわからないようになっています。
このようにA→Bのようなチャネルが沢山作られ、A→B→Cというように繋がっていくと、それがネットワークとなり様々なところに送金可能になるのです。現在ライトニング・ネットワーク内のチャネルは23861個つくられています。また総デポジット量は652BTC(2019年2月7日現在)です。
Lightning Network Search and Analysis Engine
視覚的にライトニング・ネットワークのチャネルを確認することができて面白いですよ。
ライトニングネットワークの送金網とAMP
A→B→C→Dという送金があったとします。
この時Bは、最終着金者がDであることは知りません。Bは、Aからの送金をCにバケツリレーするという命令だけうけて実行しているだけにすぎず、その先Dまで行くということは関知できません。同じように、Cは、Bからの送金をDに送るだけで、それがはじめはAからの送金だったということはわかりません。
つまり、ルーティングする人は前後だけしかわからないという仕組みになっています。しかし、AとDは、お互いがどのようなルートでいくら送金したかというのは記録を保持しているので知ることができます。当事者だけが全体を知っているという形になっています。
「ライトニング・ネットワーク内の送金は全て検閲される」という噂がありますが、上記の仕組みを理解していればFUDであることがわかります。
さらにAMPというものがあります。
これは送金経路をいくつかに分けるというしくみです。
たとえばAからXに黒い玉を3個を送りたいとします。
- A→B→Xというルートで1個送金
- A→C→D→Xというルートで1個送金
- A→P→Q→Xというルートで1個送金
3つのルートからの送金をひとまとまりにして送金することができます。
そうすると、それぞれ途中の経路の人は、全体の送金がいったいどうのように行われているのかを知るすべは殆どないでしょう。ということでライトニングは経由者(=ハブ)が検閲できるという話も正しいですが…
- 送金経路を知ることができる範囲は前後まで
- AMPで送金すると全体像は把握不可能
なので、全体としてはオンチェーンよりも匿名性が増し、チェーン解析のようなこともできないと考えられます。
質問と大石氏の回答
Q:ライトニングはこのリレー途中で外部からの阻害行為を仕組的に予防してることにもなるのでしょうか?
Community A:LNはHTLCという技術を使ってトラストレスな仕組みを構築しており、外部からの阻害および参加者同士の裏切り行為を防止しています。結構複雑なので自分もなかなか理解できなかったのですが、以下の記事がたぶん一番わかりやすいかも?https://zoom-blc.com/lightning-network
HTLCというのは、Hashed Timelock Contractの略でBTCをロックされたアドレスに送金して、一定の条件を満たすことで資金の取り出しが可能となります。この仕組みを用いることで赤の他人ともトラストレスな取引が実現します。
Q:オフチェーンの仕組がなぜこんなに早い送金を実現してるのでしょうか?
Community A:ご存知と思いますが、オンチェーントランザクションは新規BTCの供給スケジュールを固定にするためにどうしてもブロックタイム10分の制限があります。オフチェーンの場合はそこに依存しないので、参加者同士での接続のみで次々にチャネルを更新できるので早いです。
オフチェーンはブロックチェーン外の処理ということです。
Q:リレー途中で阻害されても、一時的にロックして到達先から承認されないと(自分のチャンネル内の?!)全て取引が破棄されるので、セキュリティーが担保される感じでしょうか
Community A:自分の理解だと、ロックしているものを無理やり解除するしようとすると損するため実質できない、ということだと思います。
Q:最終的にブロックに記録されるのはライトニングで決済されたかなり後になってからトランザクションとして記録されるイメージでよいのでしょうか?
Community A:ブロックに記録されるのは、ペイメントチャネルを閉じたときですね。たしか現状は時間の制限はないので、ずっと開きっぱなしでもいけるはずです。

リレー途中で悪さや障害があると、送金全体が失敗する仕組みになっています。なので資金が途中でスタックしてしまうというようなことはないようになっています。技術的にはHTLCという仕組みを使っています。
最終的にオンチェーンでコインを使いたければチャンネルを閉じてコインをオンチェーンに戻す必要があります。ただしその必要がなければチャンネルはずっと開けっぱなしでもOK ですし、オフチェーンの世界でなんで何度でも使って送金したり受取することができますので、 そのまま財布として使い続ければ問題なしです。送金の都度チャネルを閉じる必要はありません
Q:Bluewalletに関してはペメントチャンネルを意識せずに使えてるように感じますが、他のウォレットだとチャンネルを閉じるか開けとくか任意に設定出来る感じでしょうか?もし他に代表的なお勧めのウォレットなどあれば教えていただけると幸いです

Lightning Wallet というのが、チャネルの設定ふくめていろいろできるようになってます。私もこれをつかってます。(android のみ)
Q:ただの質問になってしまい恐縮ですが、追加でBTCをライトニング・ネットワークに入金する場合は、チャネルを閉じる必要はない。ライトニング・ネットワーク外のウォレットにBTCを出金する場合、チャネルを閉じる必要がある。という理解で大丈夫でしょうか?

今のところチャネルにお金がなくなった時に外からBTCを入金するというのができないのですが、サブマリンスワップという方法を使うとこれができるようになります。ただし通常のオンチェーン手数料がかかります。あとスプライシングと言ってチャネルの容量を後から増減できるような技術も今後できるようになるようです。
以上
ここまで読んで頂けたのであれば最初の質問にも答えられるようになっているはずです。試しにもう一度見直してみてください。また、それ以上に全体像の理解ができたのではないでしょうか?
今後もライトニング・ネットワークに関する記事を増やしていきたいと思います。
あわせて読んでほしい記事
[blogcard url=”https://atomic-temporary-106217043.wpcomstaging.com/bitcoin-qa2/”%5D
おかげさまで現在お友達が1057名を突破しました。仮想通貨の最新情報や重要なファンダ情報などを「プッシュ通知」にて誰よりもはやくお届けします。
Follow @imai_ryoujihttps://platform.twitter.com/widgets.jsTweet