Lightning Network の基本原理

Lightning Networkの基本原理 お知らせ
Table of Contents

この記事は、Lightning Network の論文を元に作成している。全体のおおまかな和訳はリンクを参照されたい。

Lightning Network とは

Lightning Network(以下:LN)とは、ノード間にチャネルを作りそのチャネルを通して少額のコインを送受信することができるアイデアである。LN を使用することでブロックチェーンに追加されるトランザクション量を減らすことができ、トランザクションにかかる手数料も低く処理することができる。

チャネルの開設

アリスとボブの2者間でチャネルを開設すると仮定する。まず両者は Funding Transaction(以下:資産トランザクション)を作成する。資産トランザクションは以下のような構造になっている。

INPUT OUTPUT
0.5 BTC from Alice 1.0 BTC to Multisig
0.5 BTC from Bob

入力はそれぞれ(アリスとボブ)からチャネルで使用するコインを選択している。出力はアリスとボブで作成した 2-of-2 マルチシグアドレスに入力のコインがデポジットされている。チャネル内でコインの送受信を行う際には、両者の合意のもとでこのマリチシグアドレスから支出する必要がある。

コミットメントトランザクション

資産トランザクションを作成した後、両者は最初のコミットメントトランザクションに署名して交換する。コミットメントトランザクションは親(資産トランザクション)の出力から支出する。コミットメントトランザクションは各当事者に現在の残高をそれぞれ支払うためのトランザクションである。資産トランザクションをブロードキャストすると、チャネルにデポジットした相手との合意がなければコインを移動させたり自分に払い戻すことができない。チャネル相手との合意が取れない場合に備えて、資産トランザクションをブロードキャストする前にコミットメントトランザクションを作成しておく必要がある。コミットメントトランザクションは予め署名され、キーを交換しておくことで、資産トランザクションが不慮にブロックチェーンに入ってしまった時にいつでもコミットメントトランザクションをブロードキャストできるようにする。そうすることで、マルチシグアドレスにロックされた資産を回収することが可能になる。

しかし、現在の残高を更新しようとするとこの構造は崩れる。残高を更新するためには、コミットメントトランザクションの出力値を更新しなければならない(資産トランザクションはブロックチェーンに入力されており、変更することはできない)。両者が新しいコミットメントトランザクションに合意し、署名を交換すると、どちらかのコミットメントトランザクションをブロードキャストすることができる。資産トランザクションの出力は一度しか換金することができないため、これらのうち1つだけが有効となる。


出典:https://lightning.network/lightning-network-paper.pdf

例:アリスとボブがチャネルの残高を、0.4 をアリス、0.6 をボブにすることに合意し、それを反映するコミットメントトランザクションを作成すると、どちらかのコミットメントトランザクションをブロードキャストすることができる。実質的には、両当事者がいずれかの残高をブロードキャストするために署名し、署名を交換しているため、どのコミットメントトランザクションをブロードキャストするかを制限することはできない。

取り消し可能トランザクション

古いコミットメントトランザクションがブロードキャストされることを防ぐ必要があり、LN では古いコミットメントトランザクションがブロードキャストされた場合に執行される罰則を設けている。資産トランザクションの全ての支出(コミットメントトランザクション)は2つの半分に署名されたトランザクションを持っている。1つはアリスが署名してボブに与えたもの(C1b)、もう1つはボブが署名してアリスに与えたもの(C1a)である。どちらかは、受け取ったコミットメントトランザクションをブロードキャストすることができるが、その際には、自分のバージョンに相手の署名を含めて署名することで、ブロードキャストすることができる。例えば、ボブは既にアリスから C1b の署名を受け取っているため、トランザクション C1b をブロードキャストすることができる(アリスの署名を含め、ボブ自身が C1b に署名する)。

古いトランザクションの取り消しは、出力を取り 消し可能シーケンス成熟契約(RSMC:Revocable Sequence Maturity Contract) にすることで発生することができる。あるトランザクションを無効にするためには、古い取引が誤ってブロードキャストされた場合にすべての資産を相手に与えることを双方の当事者によって署名され、交換される。誤ったブロードキャストは、同じ最終出力の異なる2つのコミットメントトランザクションを作ることによって特定されるが、自分自身への支払いは RSMC によって負担されている。


出典:https://lightning.network/lightning-network-paper.pdf

例:1 BTC がコミットされた資産トランザクションがあり、ボブが最新のコミットメントトランザクション(C1b)をブロードキャストすると、アリスが 0.5 BTC 支出できる一方でボブは 0.5 BTC 得るまで 1000 承認を待つ必要がある。アリスの場合、ボブが正しいコミットメントトランザクションをブロードキャストしたことを認めると、このトランザクションは完全にクローズされる。コミットメントトランザクションがブロックチェーンに入って 1000 ブロックが経過したあと、ボブは取り消し可能デリバリートランザクションをブロードキャストすることができる。ボブは C1b が取り消されていないことを証明するために 1000 ブロック待つ必要がある。1000 ブロック後、取り消し可能デリバリートランザクションはブロックに含めることができるようになる。もし、当事者が 1000 ブロックよりも前にブロックに入れようとした場合、そのトランザクションは 1000 回の承認が行われた後まで無効となる(その時点で出力がまだ償還されていない場合は有効となる)。

新しいコミットメントトランザクション作成による無効化

各当事者が最新のコミットメントトランザクションをブロードキャストしてクローズする一方で、新しいコミットメントトランザクションを作ることを選択して古いものを無効にする可能性もある。


出典:https://lightning.network/lightning-network-paper.pdf

アリスとボブは 0.5 BTC ずつ持っている現在の残高を、アリスが 0.4 BTC、ボブが 0.6 BTC に払い戻すように更新したいとする。アリスとボブは新しいコミットメントトランザクション(C2a / C2b)を作成して前のトランザクション(C1a / C1b)を無効にし、後にボブが誤った C1b をブロードキャストした場合、アリスはチャネル内のボブの全ての資産を手に入れることができる。なぜなら、ボブは C1b を決してブロードキャストしないことをペナルティを通してアリスに証明しているため、C1b がブロードキャストされた瞬間にアリスはボブの資産を回収することができる。実質的に、当事者で違反対策トランザクションを構築することによって、過去のコミットメントをブロードキャストしないことを証明している。この合意に違反した時にチャネル内の全ての資産を失うため、当事者はこれを受け入れることができる。

HTLC(Hashed Timelock Contract)

複数のチャネルをまたいだ移転を可能にすることは Hashed Timelock Contract(HTLC)という追加の契約が必要である。HTLC の目的は、グローバルステートをハッシュを通して複数ノードを横切ることである。グローバルステートは、プリイメージの開示を通じた時間的なコミットメントと時間ベースの資源解放によって確保されている。取引的「ロッキング」はコミットメントを通じてグローバルに発生し、任意の時に一人の参加者は次の参加者へプリイメージ R についての知識を持っているかどうか開示する責任がある。

これを達成するために、HTLC はあるチャネル当事者に情報を開示すると同時に、nLockTime を使用して特定の日程をすぎると有効になるトランザクションを作ることができなければならない。チャネル当事者は HTLC での以下の項目に合意する。

  1. もし3日内でボブが、ハッシュ値 H から知らない 20 バイトのランダムな入力データ R をアリスに作ることができたら、アリスはボブに 0.1 BTC 支払うことでその契約を済ませる。
  2. もし3日が経過したら、上記の条項は意味がなくなり、清算手続は無効となるため、当事者双方は3日を経過した後は、和解して支払いを請求しようとしてはいけない。
  3. いずれかの当事者は、本契約の参加者双方が同意する限り本契約の条件に従って参加者が選択した任意の方法で支払いを行い、本契約を早期に終了させることができる。
  4. 上記の条件に違反した場合、本契約にロックされている資金の最大のペナルティが課せられ、相手に支払われる。


出典:https://lightning.network/lightning-network-paper.pdf

アリスとボブは 0.5 ずつの残高を示すコミットメント1から残高を更新したいと仮定する。アリスは3日以内に R を知ることを条件にボブに 0.1 送りたいを考えている。もしボブが R を作ることができず3日が過ぎると、アリスは自分のお金を戻したい。

新しいコミットメントトランザクションはアリスとボブへの現在の残高の払い戻し(Output0,1)が含まれている。Output2 は HTLC で、輸送中の資金を記述します。アリスの 0.1 が HTLC で負担されるので残高が 0.4 に減っており、ボブは 0.5 のままである。この新しいコミットメントトランザクション(C2a / C2b)は支出可能な2つの HTLC 出力を持っている。双方向ペイメントチャネルと同様に、一方がコミットメントをブロードキャストしたとき、相手への支払いは正当と見なされるだろう。

最後に

この論文はドラフト版であり、実際の Lightning Network で使用されていない、もしくは更新されているアイデアもあると考えられる。そのため、現在の LN の概要を知りたければBOLT(Basic of Lightning Network Technology)を参照されたい。

タイトルとURLをコピーしました