BOLTでの、中継ノードを挟んだ送金の転送について説明していく。
基本は2ノード間の送金と同じで、送金の反映前と反映後の2動作になる。
ただ、いくつか前提があるため、そこから始めたい。
送金は、いくつかのノードを中継していくことになる。
各ノード間はチャネルでつながっているため、そのチャネルを使わせてもらうことになる。
そのため、ノードが要求する手数料を払いつつ転送することになる。
支払いには期限を指定するが、送金の真ん中で先に期限が切れるようなことが起きると、払い損が生じてしまう可能性がある。
そうならないよう、期限は送金先から順に長くなるように設定しなくてはならないし、各ノードごとに「最低限このくらいの期間はほしい」という要求があるので、それを満たす必要もある。
また、どのノード/チャネルを経由するかは送金するノードが送金時に決定して、update_add_htlcのonion_routing_packetに載せる。
よって、送金するノードは以下の情報を持っていなくてはならない。
- 送金先までの各ノード(node_id)
- ノード間のチャネル(short_channel_id)
- 各ノードが要求する手数料
- 各ノードが要求する期限
BOLTでは、この情報は各ノードが発信することになっている。
その発信方法もBOLTメッセージを使っていて、BOLT7で規定されている。
ノードの情報はnode_announcementメッセージによって、チャネルの情報はchannel_announcement、channel_updateメッセージによって通知される。
ノード名やアドレス(IPv4、IPv6など)、ノードの色などはnode_announcementで通知される。
ノード名やノードの色というのは直接BOLTの送金に関係があるものではなく、一覧などを作成した場合に見やすくするためのものと思われる(少なくとも、BOLTメッセージで出てくるのはここだけである)。
それ以外はチャネルの情報になる。
channel_announcementでは、short_channel_idと、そのチャネルの両端のノードのnode_id、およびそこで使われるブロックチェーンの種類(genesis block)が通知される。
channel_updateでは、それぞれのノードが要求する手数料や期限などの情報が通知される。
これらの情報から、送金元→送金先の経路を作ることになる。
経路の作り方については、最近になって推奨が追加されていた。
経路情報を作れば、そこからはBOLT4に従ってonion_routing_packetを作成し、update_add_htlcメッセージを送信する。
次回は、送金元がメッセージ送信するところから説明する。