ここまででChannel Establishment、Normal Operation、Channel Closeの主要な説明を行ってきた。
今回は、現状(2017/12前半)のBOLTについてまとめておく。
BOLTのコミットはこちらである。
2017/12/7に、以下の記事が掲載された。
Lightning Protocol 1.0: Compatibility Achieved ✅ – Lightning Developers – Medium
これを掲載した時点(2017/12/20)で、またBOLTとしてv1.0はリリースされていない。
記事で、c-lightning、eclair、lndの3ノードアプリ間で統合テストが通ったという内容であった。
基本的には、現在の内容からは大きく変更せずにv1.0として固めるのだろうと思われる。
issueもあるものの、現在はドキュメントとしての整備が行われているようで、最近のコミット内容は英語の文法や見栄えのような習性が多い。
v1.0には入れないが、次のv1.1に入れたいという内容は上がってきている。
https://github.com/lightningnetwork/lightning-rfc/milestone/1
現状のBOLT仕様ではいくつか数値の制限があるので、amountや期間に関係するものをいくつか挙げておく。
Channel Establishment
- funding_satoshisは224(=16,777,216 satoshis = 167.8mBTC)未満
- max_accepted_htlcsは483まで
- minimum_depthが大きすぎる場合は、チャネルとして拒否する
funding_satoshisは、チャネルにfundingする額である。
当初は、funding_satoshisなどの額については4byteで管理していたのだが、Litecoinではコーヒーも飲めないということで8byte管理になったようである。
なお、ブロックチェーンの種類はopen_channel/accept_channelにgenesis blockのハッシュを載せることで表している。
max_accepted_htlcsは、受入可能なHTLC数ということで、送金反映でHTLCが消える前に別の送金が行われるなどしてHTLCがたまっていった場合の上限と考えている。
この半端な数字は、違反した相手から取り戻すときのことを考慮しているようである。
minimum_depthは、相手がチャネル開設を要求してきた(open_channelを送信)とき、自分はfunding transactionを認めるのにconfirmationがこれだけ必要になる、という下限である。
表現として「大きすぎる(unreasonably large)」は曖昧だが、ノードを立てた人の感覚を重視しているのかもしれない。
Normal Operation
- onion_routing_packetに記載できるホップ数は20まで
- amount_msatは0より大きい
ホップ数は最大で20もあるため、update_add_htlcメッセージは1,366byteと固定のBOLTメッセージで一番大きくなっている。
また、onion_routing_packetは送金経路を隠蔽するようにできているため、ホップ数にかかわらず1,366byte送信する必要がある。