ペイメントチャネルのサイズ変更をするスプライシング(Splicing)
Splicingはペイメントチャネルのサイズを変更するための仕組みです。サイズを小さくする場合はSplicing-out、大きくする場合はSplicing-inと呼んだりします。現状のLNでチャネルのサイズを変更するには、一度チャネルを閉じて開き直す必要があり、これには2つのトランザクションが必要になります。Splicingを使うことでこのトランザクションを1つに纏めることができます。さらに、というよりこれが要点ですが、Splicingでチャネルサイズを変更している間(この新しいチャネルが未承認の場合)でも、既存のチャネルでルーティングを継続することができます。
既存のチャネル(これは閉鎖中のチャネルとも呼べる)と開設中のチャネルが共存するなか、どうやってルーティングをしているかというと、既存のチャネルのコミットメントにHTLCが追加・削除される場合、開設中のチャネルにも同じ金額のHTLCを追加・削除します。このHTLCは両コミットメントに共存していますが(コミットメントはオフライン上のデータであることに注意)、HTLCがオンチェーンに展開される場合、最終的にブロックチェーンに刻まれるのはどちらか一方なので、チャネル間の残高の整合性は担保されます。
Splicingの仕様は以下リンクに詳しいです。
- Splice draft (feature 62/63) by rustyrussell · Pull Request #863 · lightning/bolts (github.com)
- Alternative splicing specification proposal with detailed examples (github.com)
また、Splicingではinteractive-txと呼ばれる新しい仕様も必要になり、その仕様は以下のリンクに詳しいです。
interactive-txは、チャネル開設時にOpenerだけでなくAccepterにもfunding_txのためのインプットを追加できるようにするもので、より柔軟にfunding_txを構成することが可能になります。もともとinteractive-txはdual-fundingのための仕様として策定が進められていましたがSplicingでもこの仕様を活用することになったみたいです。