Develop with pleasure!

福岡でCloudとかBlockchainとか。

LNピアのデータを保管するピアストレージ

先月ピアストレージの仕様がBOLTにマージされた↓

https://github.com/lightning/bolts/blob/master/01-messaging.md#peer-storage

ピアストレージ

ピアストレージというのは、LNでピアから受け取った任意の暗号化データを受け入れるオプションサービス。

チャネルのバックアップ情報などを暗号化した上でピアに都度保管してもらい、リカバリーが必要になった際に、ピアに以前送ったデータを送ってもらいリカバリーに使用するといった使い方が可能になる。CLNとかはSCB(Static Channel Backup)の拡張という位置づけで実装してるみたい。

データサイズの上限は約65KB(65531 byte*1)で、任意のBLOBデータを保存できる。暗号化されているのもあり、データを受け取ったピアも中身が分からないので、送信したノードが解釈できれば何でも良さそう。BOLTでは特に暗号化方式も定義されておらず、送信したノードが後でデータを受けっとたときに、データの完全性が確保される方法で暗号化されていればいいと。

サポートの通知

ピアストレージをサポートするノードは、機能フラグoption_provide_storageをアドバタイズする。

ピアストレージ用のメッセージ

ピアストレージをサポートするにあたって2つの新しいメッセージが導入されている↓

peer_storage

BLOBデータを送信し、データの保管を依頼するメッセージ。実際のデータのサイズを隠すため、送信者はデータが65531 byteになるまでパディングする。

メッセージを受け取ったノードは、送信者との間にチャネルを開いている場合は、メッセージを保管する必要がある。チャネルを開いていない場合は、保管してもしなくてもいい(対価があれば保存する場合もある)。

また、一応レート制限があり、1分あたり1回以上のペースでpeer_storageが送信された場合は、受信側は遅延を発生させる。このため、送信者が想定する最新のデータと実際に保存されているデータが異なる可能性があることに注意。

peer_storage_retrieval

保存している最新のBLOBデータをピアに送信するメッセージ。ピアと再接続し、initメッセージを交換した後に(channel_reestablishより前に)、このメッセージを使って保存しているデータを送信する。その際、ピアとのチャネルがすべて閉じられていて、BLOBを削除する場合は、すくなくとも2016ブロック待つ必要がある。

peer_storage_retrievalメッセージでBLOBデータを受け取ったピアは、そのデータが古かったり、無関係なデータであった場合は、warningメッセージを送信する可能性がある。

各ノード実装の対応状況

各ノード実装のピアストレージの対応状況は↓

CLN

SCBをリモートピアに送信するSCBの拡張という位置づけ。

github.com

Eclair

モバイルウォレットを提供するLSPを対象とし、ユーザーがスマホを交換したい場合などに、チャネルを復元できるようにするみたい。

github.com

LDK

現状は、ノード間でバックアップのデータをやり取りできる機能をまず実装したという段階っぽい。

github.com

LND

現時点でまだPRはマージされていない↓

github.com

*1:BOLT8で定義されているライトニングメセージの最大サイズが65535 byteなのでそれを超えないように選択された値