Lightning Network BOLTの概要について、書いていくシリーズ。
今回は、announcementについて書きます。
転送(1)で簡単に紹介しましたが、BOLT#7でannouncement関連のメッセージが定義されています。
- node_announcement
- channel_announcement, channel_update
node_announcementは、alias名やIPアドレスなど、node自体の情報を展開しています。
相手nodeに接続したい場合は、このnodeからIPアドレスを調べ、接続させることでしょう。
1つのchannelには2つのnodeが関係するので、channel自体のannouncementメッセージ(channel_announcement)と、それぞれのnodeが持つchannel情報のannouncementメッセージ(channel_update)があります。
送金を転送するfeeなどは各nodeが主張できるので、通る方向によってfeeが異なる場合もあります。
このannouncementですが、Lightning Nodeをログ出力する状態にしてコマンドラインから実行するとわかりますが、相手nodeに接続すると、取りあえず大量に送信されてきます。
接続して最初に送信するinitメッセージで、相手nodeが持つchannel関連のannouncement情報を同期させるかどうか選べる(initial_routing_syncフラグ)のですが、だいたいは「同期する」にしているため、相手は持っている情報を送りつけるし、自分も持っている情報を送りつけます。
ならば、initial_routing_syncをオフにすればいいじゃないか、と思ってしまいますが、testnetではお金を掛けずにchannelを作ることができるためか、作って放置されるchannelが結構あります。
そういうchannelの情報しか持っていなかった場合、送金の転送をしたくても使用できないルートしか見つけることができなくなってしまうのです。
それを避けるため、取りあえず同期させようとしているのだと思います。
この辺りについては効率が悪いので、BOLTで解決していくのではないかと思われます。