前回、ノード間のネゴシエーションを行った。
ネゴシエーション後、最初に送信するBOLTメッセージは”init”である。
https://github.com/lightningnetwork/lightning-rfc/blob/master/01-messaging.md#the-init-message
描画ツールの都合上、initがシーケンスのようにやりとりしているようになってしまったが、実際はどちらが先に送信しても良い。
ただし、initを受信するまでは次のBOLTメッセージを送信することはできない。
initメッセージはglobalとlocalのfeatureをパラメータとして持つ。
featureの内容は、BOLT#9に記載されている。
https://github.com/lightningnetwork/lightning-rfc/blob/master/09-features.md
featureのデータは最短長になるように送信しなくてはならない。
例えば、現時点ではgolbalfeaturesの定義が無いので「0x00」を送信したくなるが、立てるビットがない場合には送信する必要がないため、ここではgflenを0にして、パラメータ自体を送信しないようにする。
あるいは、奇数ビットについては受信側で無視して良いことになっているため、そういうデータなら送信してもよい。
チャネル接続後、ネットワークが切断されて再接続する場合は、initメッセージのあとに”channel_reestablish”を送信する。
再接続については、説明を省略する。
https://github.com/lightningnetwork/lightning-rfc/blob/master/02-peer-protocol.md#message-retransmission
参照
https://github.com/nayutaco/ptarmigan/blob/development/ucoin/src/ln/ln_msg_setupctl.c