One or Zero?

興味のある様々なことについて

(WIP) LightningNetwork の状態を更新する新たな仕組みである eltoo について

4月30日、Blockstream によって eltoo と呼ばれるプロトコルがアナウンスされたので、それについてまとめてみる。

注)Work In Progress です。また、短期間でパパっと書いた記事なので技術的に誤りを含む可能性があります。update していく予定ですので 、ご留意&ご指摘願います。

ひとことで言うと

記事を読むのがめんどくさい人、時間のない人のために、誤解を恐れずに eltoo を短く説明してみる。

ひとことで言うと、「Deposit からの合意した資金の配分を、2種類のtransaction をつなげていき、一つ前の状態を無効化することによってupdate していくためのプロトコル」です。従来のLNプロトコルでは、互いに「ズルをしたら損をする」という仕組みで牽制することでオフチェーンでトラストレスな取引を可能としていましたが、そもそも eltoo では前の状態を invalidate(無効化) するのでズルはできないというわけだ。

と、これだけ読んでも詳細についてはよくわからないと思うので、気になる方は以下を読んでください(未完成)。

概略

従来のLightning Network のプロトコルでは、Funding(deposit) Transaction、Commitment Transaction、Closing Transaction の3つのトランザクションを用いて状態の遷移を行う(参考)。すなわち、

  1. Funding(チャネルopen)
  2. Commitment (状態の更新)
  3. Closing(チャネルclose)

というように役割分担される。Funding transaction によってマルチシグアドレスにデポジットし、、Commitment Transaction を何度か作るすることによって状態を更新し、Closing Transaction によってその名の通りチャネルをCloseする。

しかしeltoo においては、少々違う方法で契約の状態をトラストレスに遷移させるようだ。

まず、詳細については後に譲るが、マルチシグアドレスにデポジットをしたりすることで、 Setup を行う。そのデポジットのoutput を参照してトランザクションを作成するのは従来と変わらない。異なるのは、2つトランザクションのペアを作成するという点だ。

一つはupdate transaction 、もう一つは settlement transaction と呼ぶ。update transaction は最新のtransaction のoutput を参照して新たな output を作る。settlement transaction は最新のupdate transaction から、両者が合意した配分で資金を分配する output を作成する。

新たに update transaction を作成し、一つ前の状態を無効化することで状態を更新できる。これを繰り返すことによってトランザクションのチェーンができるが、これらすべてのトランザクションをbroadcast するわけではもちろんない。eltoo では、最後のsettlement transaction を、途中の幾つかの update transaction をショートカットして初めのoutput に接続させるのである。これには、SIGHASH_NOTINPUT という新たに提案された flag を使用する。

詳細

論文においては、簡単のため、オンチェーンの理想化した状態でのプロトコルの説明を行い、それをオフチェーンに移動させている。オンチェーンのままだとスケールはしないが、それのほうがeltoo を直感的に理解しやすいからだ。本記事でもそれに則ってまとめる。

オンチェーンにおける更新プロトコル

ここでは、オンチェーンにおいて eltoo のプロトコルを考える。オンチェーンなので、すべてのトランザクションは broadcast、ブロックチェーン上で承認されるものとする。

eltoo のオンチェーンプロトコルでは次の3つのフェーズがある。

  • setup phase
  • negotiation phase
  • settlement phase

setup phase

negotiation phase

settlement phase

https://blockstream.com/images/blog/eltoo/offchain.png

従来のLN プロトコルとの共存

https://blockstream.com/images/blog/eltoo/lightning-layers.png