[LN#006]Establish Channel (後半)

前回に引き続き、Establish Channelの説明を行う。
今回は後半の処理である。

前半の最後で、funderがfunding transactionの展開を行ったので、それが安定するまで待つ。
どのくらい待つかは、fundee側のaccept_channel.minimum_depthによって決められる。
minimum_depth以上のブロック数が経過すると、双方がfunding_locked メッセージを送信する。

メッセージではnext_per_commitment_pointを交換するが、これは次の鍵を生成するためのper_commitment_pointになる。
per_commitment_pointは鍵を生成するための重要な情報で、これ以降、commitment transactionの配分を変更するたびにBOLTメッセージを交換するが、配分を変更したことを確定するために、そこまでに使っていたper_commitment_pointの秘密鍵(per_commitment_secret)を相手に渡す。

per_commitment_secretと他のbasepoint情報があれば、相手が違反して古い配分のcommitment transactionをブロックチェーンに公開したとしても、そのトランザクションの出力をすべて手に入れることができる。
このしくみについては別の機会に説明するが、ここではper_commitment_point と per_commitment_secretの重要性だけ覚えておいていただきたい。

funding_lockedメッセージを交換すると、チャネルが開設したことになる。
状態名としては「Normal Operation」となる。
Normal Operationになると、相手のノードに対して送金することができるようになる。

ここまででチャネルは開設したが、チャネルの情報を他に転送できるかどうかは別の問題である。
チャネル情報を展開するのは、BOLT#7に記載されているannouncementという動作になり、チャネル開設とは別の次元で動いている。
展開するためにまた別のデータに署名するannouncement_signaturesというメッセージがあるが、funding transactionの経過ブロック数として最低でも6ブロックを必要としている。
そのため、accept_channel.minimum_depthが6より小さい場合は、Normal Operation状態になれたとしても、まだチャネル情報を他に展開することができず、よって送金をしてもらうことができない。

最後に、少し図が大きいがEstablish Channelの全体シーケンスを以下に示す。

image