今週、ライトニングネットワークにおいてZero-confチャネルを可能にする仕様変更がライトニングの仕様群であるBOLTに正式にマージ(採用)されました。BOLTはライトニングノード同士の通信やインボイスなどの形式を定めた仕様群で、多数あるライトニングノードの実装は最大限の相互運用性を実現するにはすべてに対応する必要があります。(逆に、相互運用性に関係のないデータの保存形式やAPI、UIなどは規定されていません。)

https://github.com/lightning/bolts/pull/910

さらに、Spiral (旧Square Crypto)がRustという言語を使って開発するオープンソースのライトニングノード実装「LDK」にはすでにzero-confチャネルの機能が追加されました。BOLTの策定を主導したRusty Russell氏とともにSpiralのMatt Corallo氏が中心となって推し進めた機能の1つだからです。

主にLSPとユーザーの間での利用を念頭に置いたZero-confチャネルについて、概要と長所・短所を見ていきます。

LSP(ライトニングサービスプロバイダー)とは、ライトニングネットワークを利用する上で便利なサービスをエンドユーザーに提供する事業者のことです。例えばノンカストディアルウォレットでオフラインの支払い受け取りを可能にするなど、一般的には「ある程度信用できる相手」としてLNのユーザビリティを改善する事業者のことを言います。

ゼロ承認とは

ビットコインでは署名されたトランザクションは各ノードを伝播していき、その過程で各ノードのメモリ上の未承認トランザクション領域(メモリプール) に保持されます。ゼロ承認取引とは、支払いの受け手のメモリプール上での確認をもって決済と見なすことを言います。5年くらい前までは聞くことがありましたが、今では強く非推奨されているため見かけません。

もちろんブロックチェーンに取り込まれたわけではなく、確実に取り込まれる保証もありません。例えば手数料相場が急騰して未承認取引が増え、そのままサイズ上限に達したメモリプールから脱落してしまったり、あるいは送金者がより高い手数料で同じコインを自身に送るトランザクションを配信し、それが先に取り込まれることで当初の未承認取引が無効となる可能性があります。

このことからゼロ承認取引を受け付けても良い相手は「そのトランザクションがもし決済されなかった場合、再び請求すれば払ってもらえる」という信用のある相手のみです。

ZERO-CONFチャネル

さて、ライトニングチャネルの開設もFunding Txというトランザクションを伴います。従来はすべてのライトニングチャネルについて開設に必要な承認数を一律に扱っていたノードがほとんどでしたが、今回はチャネル開設に必要な承認数minimum_depthを相手毎に設定するための変更が追加されました。

珍しい反例としては、ライトニングノード実装のEclairは従来より金額によって必要な承認数を調整しているようです。
https://github.com/.../eclair/channel/HelpersSpec.scala...

minimum_depthを0に設定するメリットは、信用できる相手とであればブロックチェーンを待たずに即時にチャネルが開設できることです。手数料相場が不安定なときに開設の手数料を節約することもできます。

注意点として、ここで信用力が求められるのは「チャネル内で最初にBTCを持つ側」という点で、開始残高がゼロの側には求められません。これはZero-confチャネルが二重支払いなどによって「消失する」場合を考えれば理解できます。そのチャネル上で残高が増えた側が損をするためです。

ライトニングチャネルにはscid (ショート・チャネルID)という固有のIDが存在し、これはFunding Txのブロックチェーン上の位置を示します。しかし、Zero-confチャネルの場合はscidを導けないので、代わりにscid_aliasという固有のチャネル名を設定できるようになりました。Funding Txがブロックチェーンに取り込まれた後も継続して使用できます。

ちなみにライトニングチャネルを他のノードに認識してもらうためにはオンチェーンで作成したことを証明しなければならないため、Zero-confチャネルは当初はUnannounced Channel (いわゆるPrivate Channel)となり、ブロックチェーンに取り込まれた後にPublic Channelとして存在をアピールすることができるようになります。

ZERO-CONFチャネルはLSP向け

その特徴から、Zero-confチャネルは主にノンカストディアルウォレットを提供するLSP向けの機能と考えられます。

一般的なユーザーが初めてLNウォレットをインストールし、すぐに資金を受け取りたいとき、新しいチャネルが数承認を得るまで待たされることは非常に悪いUXになります。Zero-confチャネルに対応することで、ユーザーはアプリをインストールした瞬間から資金を受け取ることができます。

もちろん、一定数の承認が得られるまでZero-confチャネル上で受け取った資金についてはLSPがチャネルの開設を取り消さないことをトラストする必要があり、資金面ではカストディアルに近い状態です。(普通はゼロ承認取引をカストディアルとは表現しないので、厳密には違いますが)

Spiralが開発するLDKは「簡単にライトニングウォレットを実装するためのライブラリ集」なので、彼らが採択を推進したZero-confチャネルもモバイルとの相性の良さも説明がつくでしょう。

個人的にはライトニングはこのように部分的に信用によって効率化できる部分が多く、これからもノード同士が互いの信用度に応じて個別に運用できる範囲が広がることで進化していくと考えています。