ARPABLE
アープらしいエンジニア、それを称賛する言葉・・・アーパボー!
ブロックチェーン

ライトニングネットワークとは

ライトニングネットワークについて

トランザクションのパフォーマンス問題

ビットコインのアーキテクチャは2008年サトシ・ナカモトが論文を発表して以来、多くの研究者や技術者が開発されてきましたが、その仕様上の制限から、パフォーマンスに関する問題が長らく指摘されてきました。

この点に関する詳細は以下のサイトをご参照ください。
ビットコインのパフォーマンス問題

トランザクションの流れを復習しよう

それでは何故ここまでビットコインの取引には時間がかかるのでしょうか?

この問題を明確にするために今までのおさらいも兼ねて、トランザクションが発生してから取引が確定するまでの処理手順を簡単にまとめました。
※)トランザクションの詳細を知りたい方は以下のブログを参考にしてください。
  ・プロックチェーントランザクションとは(1)
  ・ブロックチェーントランザクションとは(2)

  1. 送金を想定してトランザクションを作成する。
    元手(UTXO)をINPUTにセットし、送金先(アドレス)、送金額、手数料をOUTPTにセットする。
  2. マイナーはトランザクションプールにある約2000個~4000個のトランザクションを束ねてブロックを作成しマイニングを行う。
    このマイニングの作業は約10分で終わるよう調整されている。
  3. マイニングに成功したら、そのブロックをネットワークにブロードキャストし、各ノードから承認が得られたら、ブロックチェーン本体に連結される。
  4. そのブロック以降6つのブロックが連結した段階で確定する(取引が確定する)

ビットコインの仕様上の問題とは

ビットコインのパフォーマンス問題には主に以下の2点の仕様がかかわってます。

  1. ブロックサイズは1MBと定義されている
    (通常2000個~4000個のトランザクションしか入らない)
  2. ブロックは平均して10分毎に1つしか生成できない
    (2週間に1度、ナンス発見の難易度Difficulty Bitsで調整されている)

上記に関する対策としてはブロックサイズを8MB、あるいはそれ以上に拡張できるように変更したビットコインキャッシュがありますが、結果的にビットコインからハードフォークして(別の仮想通貨)しまいました。

に関してはビットコインのコンセンサスアルゴリズムにPoW(Proof of Work)を使用している限り改善するのは難しいとされてます。

このように取引に時間がかかるという問題を抱える中で、マイナーはより高い手数料のトランザクションを優先して処理するため、手数料(ガス代)が高止まりするという副作用も問題となってます。

このような一連の問題を解決するために登場したのがライトニングネットワークです。

ライトニングネットワークとは

ライトニングネットワークの登場

これまでこのような問題を解決するためにさまざまな対策が検討されてきましたが、今回紹介するライトニングネットワークはその中でも有力な技術の一つといわれてます。

パフォーマンスに問題のあるブロックチェーン(これをオンチェーンと呼ぶ)への書き込みの代わりに、オフチェーンと言われるブロックチェーンの外側のペイメントチャネル(後述)で取引を行うクレジットカード並みの数千~数万TPSの処理が可能となります。

今回はそのライトニングネットワークの特徴や現状とその仕組みについて紹介します。

ライトニングネットワークとは

Lightning Networkのホワイトペーパーは、Joseph Poon氏 と Thaddeus Dryja氏
によりを2015年に発表され、その後複数の団体により詳細な仕様が開発されました。
例えば、Lit(MIT DCI)、Lightningd(Blockstream) 、Lnd(Lightning Labs )に
よる実装等があります。

ビットコインは、ブロックチェーン上(これをオンチェーンと呼びます)で実現されていますが、Lightning Networkでは、ブロックチェーンの外側(これをオフチェーンと呼びます)で取引を実現する技術です。

この技術は、階層構造のようなので、ブロックチェーンをを第一階層とし、その上位にもう一つの階層を作るため第二階層(セカンドレイヤー)技術とも呼ばれます。

具体的には、ビットコインのトランザクション(取引情報)を、確定するのに時間のかかるブロックチェーン上に記録するのではなくその外側のレイヤであるペイペントチャネルに記録していきます。

それによりクレジットカード並みの数千~数万トランザクション/秒、あるいはそれ以上の取引が可能となる上、都度ブロックに記録する必要がないためマイナーに支払う手数料が不要になるという利点も生まれました。

2つの課題

この技術の実現には、トランザクション展性(※1)と相対的タイムロックトランザクション(※2)の作成という2つの問題の解決が必要でしたが、前者はSegWitが、後者は新しいOPコードが導入されたため2017年から注目されてきた技術です。

※1)SegWit(※)SegWitの詳細はこちらを参照して下さい。

※2)相対的タイムロックトランザクションとは
特定の時間に達するまでトランザクションもしくはアウトプットを使用可能
にしない、という機能です
トランザクションが承認されてからの相対時間でタイムロックが指定できます。
例えば、トランザクションが承認されてから24時間後とか、100ブロック後とい
うように指定できます。

ライトニングネットワークの仕組み

理解するための要素技術

ライトニングネットワークの仕組みを理解するために必要な要素技術を簡単に説明します。

❶マルチシグネチャー

1つのトランザクションの承認に複数の署名を割り当てる技術。
具体的には当事者間で2-of-2マルチシグアドレスを作り、そのアドレスへビットコインをロックします

❷ペイメントチャネル

ブロックチェーンを介さず、オフチェーン上(セカンドレイヤ上)で当事者間で送金を即時決済する技術。

❸2-of-2マルチシグアドレス

「マルチシグ」とは、秘密鍵が複数あり、有効な数の秘密鍵が揃わないと送金できないアドレスの事です。
2-of-2とは2人が秘密鍵を持っていて2人の鍵がそろわないと取引が成立しないアドレスです。
2-of-3とか3-of-5というのは3人の内2人の鍵が、また5人の内3人の鍵が必要となるアドレスの事です。

❹HTLC(Hashed Time Lock Contract)

HTLCとは以下の2つの鍵を持った送金用ビットコインを入れた貯金箱です。
※)トランザクションに詳しい方は、所定時間の前後でアンロック方式が変わるマルチシグスクリプトを持ったUTXOと考えると分かりやすいですね。

  1. タイムアウトするまでは鍵Aで空けることができる
  2. タイムアウト後は鍵Bで空けることができる

それではこれから直接つながってない2社間の送金を、Lightning Networkで実現仕組みを見ていきます。

 ペイメントチャネル

ペイメントチャネルとはオフチェーンで直接取引をするチャネルのことで、ブロックチェーンと異なりその取引記録は当事者間でのみ共有され、ブロックチェーンへは書き込まれません。

具体的な手順は以下の通りです。

  1. 2-of-2マルチシグアドレスを生成し、ビットコインを預託する。
    このトランザクションはブロックチェーンに書き込まれます。
  2. ペイメントチャネルを開設し当事者間で好きなだけ送受信する。
    預託した金額内であれば、当事者間のビットコインの取引が、瞬時に且つ何度でも無料で実現可能となります。
  3. マルチシグアドレスから最終残高をお互いのアドレスへ送金する(清算)
    それぞれのトランザクションはブロックチェーンに書き込まれます。

マルチホップペイメントチャネル

ここでは、虎杖君がパンダ君を仲介者として五条さんに送金する場合を想定してます。

ペイメントチャネルでは2者間の送金なので1つのペイメントチャネルで十分でしたが、複数の相手に送金したい場合、その数だけペイメントチャネルを作るとすると手間がかかり実用的ではありません。

そのような場合に有力な手段がマルチホップペイメントで、すでに開設されているペイメントチャネルを経由することで、第3者へビットコインを送金することができます。

上の図でいうと、虎杖君がパンダ君が運営するパンダチャネル経由で五条さんに送金をするとなると、そのチャネルを信頼する仕組みが必要となります。

例えば、虎杖君がパンダチャネルに送金しても、それをそのまま持ち逃げされてしまうかもしれませんね。

このような信頼モデルを回避するために、前述した相対的タイムロックトランザクション、即ち、HTLC(Hash Time Lock Contract)と呼ばれるビットコインのスマートコントラクトが使われます。

このスマートコントラクトは、五条さんの持つ鍵のハッシュ値を使ってビットコインをロックし、鍵を使うとロックの解除ができるような仕組みとなっています。

マルチホップペイメントのフロー

以下は虎杖君が五条さんに送金する際のマルチホップペイメントのフローとなります。
(参考:Bitcoin wikiのHash Time Locked Contracts)

送金してもらいたい人が送金者に対してインボイスを発行する

3BTC(ビットコイン)を送金してもらいたい方の五条さんは、先ず乱数(以下、pre-image)を作成してからハッシュ値をsha256で算出します、
そして送金してもらいたい額とハッシュ値をインボイスに載せて虎杖君に送信します。

インボイスを受け取ったら中継者に送金をする

インボイスを受け取った虎杖君はペイメントチャネル経由でパンダ君にハッシュ値でロックしたHTLCで3BTCを送金します。
この時のHTLCは所定時間前後で以下ようにアンロック条件が変わるよう設定します。
①パンダ君の署名とpre-imageがあること
②7日後以降は虎杖君の署名があること

従って、この時点ではパンダ君はまだpre-imageを持ってませんので3BTCを取り出すことはできません。
またパンダ君が五条さんに送金せずに7日間が過ぎた場合には、虎杖君は自分自身の署名で3BTC取り返すことができます。

中継者は指定された送金先に送金する

パンダ君は五条さんにハッシュでロックしたHTLCで3BTCを送金します。
(注意)この時送付されるHTLCは虎杖君からパンダ君に送付されたHTLCは使用するペイメントチャネルが異なるため、額は同じですが全く別物と考えてください。

この時のHTLCは所定時間前後で以下のようにアンロック条件が変わるよう設定します。
①五条さんの署名と、五条さん自身が持つpre-imageをパンダ君に渡すこと
②3日後以降はパンダ君の署名があること

従って、五条さんはパンダ君にpre-imageを渡せば3BTCを手に入れることができます。
また、パンダ君は五条さんからpre-imageをもらえれば、虎杖君から届いた3BTCを取得することができます。

一方、五条さんから送付されるはずのpre-imageが3日たっても来なければ、パンダ君は自分の署名だけで3BTCを取り戻すことができます。

送金された人から中継者へ通知

五条さんはpre-imageと自分の署名を使って3BTCを取得したら、パンダ君に通知します。

中継者から送金者へ通知

パンダ君は五条さんから送付されたpre-imageと自分の署名で3BTCを取得したら、虎杖君に通知します。l

 

Lightning Networkは、このようにHTLCを使うことで、中継者を信頼することなく、ペイメントチャネルを経由して直接つながっていない当事者間の送金を実現しています。

(アーパボー)