バルブの調整によるペイメントネットワークの安定化 #LightningNetwork
ライトニングネットワークは各ノードがペイメントチャネルを開設することで、巨大なペイメントネットワークを形成する。送り手はこのペイメントネットワークを通して送金することで、受け手と直接チャネルを開設しなくてもよい。以下の図は各ノードがペイメントチャネルを開いており、送信者は複数チャネルを跨いで送金をするライトニングネットワークのイメージである。
画像引用元 https://docsend.com/view/e67t2yst5yvjjt76
しかし、このペイメントネットワークにおいて特定の経路を指定して繰り返し送金をしていると送金ができなくなる。これはチャネル内の資金が一方へ偏ってしまうからである。これをチャネル流動の枯渇などいう。特定経路での送金や人気サービスへの決済が頻繁に行われるとチャネル流動が枯渇する。実際のライトニングネットワークではこのチャネル流動の枯渇が多々起きており、それが原因で送金が遅延したり失敗したりしているのが現状である。
このチャネル流動の枯渇や送金の失敗を低減させる手法にhtlc_maximum_msat
の設定がある。これは自ノードがルーティングする最大値を設定するパラメーターで、例えばB-C間のチャネル容量が100でチャネルバランスが60:40であった場合、BからCへの送金は最大で60までしかできないが、htlc_maximum_msat
の値はデフォルトではチャネル容量に等しいので、この場合100となる。この値はネットワーク全体に公開されている。ここでAがCへ100コイン送金しようとした場合、htlc_maximum_msat
が100であるB-C間のチャネルを選択しA→B→Cという経路を作り送金を試みる。しかし、実際にはB-C間でルーティング可能な容量は60までなので、送金に失敗する。AはB-C間のチャネルは枯渇していると分かるので、別な経路を作り再度送金を試みることになる。ここで問題なのはhtlc_maximum_msat
の値が実際にルーティングできる金額よりも大きいため、Aはその経路で送金を試みないと枯渇していることを知れない。もしB→Cのhtlc_maximum_msat
が60であれば、Aはその経路を選択せずに済む。なので、各ノードが自分のチャネルバランスに応じてhtlc_maximum_msat
を適宜更新すれば、送金者は不要な送金を試行せずにすむことになる。
htlc_maximum_msat
はチャネル流動を調整できるので、これを水道管のバルブにみたて自分のチャネルバランスに合わせてバルブを締めたり緩めたりして、チャネルの流動を調整することができる。しかし同時に、htlc_maximum_msat
をチャネルバランスと同じ値で公開することは自分の資金残高を公開しているのと同じで、さらにチャネル開設している相手側の資金残高も公開していることになる。これではプライバシー的によくない。
そこで以下の記事では、このバルブ調整を確率過程に従って調整することで、ある程度プライバシーを保ちつつチャネル流動の調整をしようという提案をしている。
上記の記事ではマルコフ連鎖と呼ばれる確率過程を使ったモデリングを提案している。マルコフ連鎖とは、未来の挙動が現在の値・状態のみで決定するものである。こちらの記事は天気予報をマルコフ連鎖をつかってモデル化していて、マルコフ連鎖のイメージを掴むのに簡潔にまとまっていた。
htlc_maximum_msat
の値をマルコフ連鎖を使って現在のチャネルバランスからある定常分布にそって更新しようとしているのが上記記事のアイディアである。自分はまだ本記事を読み切っていないので、マルコフ連鎖によってどのくらいペイメントチャネルの安定化が期待できるのか分からないが、また時間のできた時に最後まで読んでみようと思う。
(Title photo by Peter Herrmann on Unsplash )