Eltoo: SIGHASH_ANYPREVOUTによるバインディング技術
Eltooはペイメントチャネルの残高更新の仕組みを簡素化する仕組みです。現状のライトニングネットワークに使われているペイメントチャネルはペナルティ型で、一方が不正をすると他方が全額没収することができる仕組みになっています。ペナルティ型のペイメントチャネルは、残高が更新される度にその更新に使われた鍵情報(revocation key)を保存する必要があり、データ容量を圧迫してしまいす。Eltooでは最新の残高に関するデータのみ保存するだけでよくなります。
Eltooの実現にはBIP118のSIGHASH_ANYPREVOUTと呼ばれる新しいSIGHASHタイプが必須で、ソフトフォークが必要です。Eltooの俯瞰図は以下が詳しいです(eltoo with Anyprevout and Taprootより抜粋)。またこちらの記事も日本語で詳しく解説されています。
Eltooでは、チャネルのライフサイクルを3つに分けて考えます。
- セットアップ:funding_txとupdate_txを作る
- ネゴシエーション:update_txとsettelment_txを作る
- セトルメント:協調的な場合はclose_txを作り、非協調的な場合はupdate_txとsettlement_txをブロードキャストする
ネゴシエーションは送金をする度に実行されます。ここで重要なのはupdate_txが消費できるtxは複数あることです。上図のUpdate:3を見ると、そのtxが消費できるtxはFunding:0、Update:1,Update:2の3つあることが分かります。現状ではtxに署名をする場合、そのtxが消費するtxをインプットとして指定する必要があります。しかしSIGHASH_ANYPREVOUTではインプットを指定することなく署名できるようになるので、どのtxに対しても有効な署名済みtxになります。そのため、もし相手がSettle:1の残高でセトルメントを実行しようと思いUpdate:1をブロードキャストしたとしても、最新の残高であるUpdate:3とそのセトルメントであるSettle:3をブロードキャストすることで不正を防ぐことができます。