[LN#011]送金 (5)

前回はcommitment transactionの構成と、その送金先に指定するoutput(to_local, to_remote, Offered HTLC, Received HTLC)について説明した。
今回は、その送金先について解説する。


to_local outputは、通常は以下のようなunlocking scriptを使って使用する(通常ではない=古いcommitment transaction)。

image

ここのto_self_delayは、open_channel/accept_channelで相手が指定したto_self_delayを使用する。
この値はOP_CSV(CHECKSEQUENCEVERIFY)の判定に使われ、このトランザクションを展開してからto_self_delay以上のブロックが経過しないと展開できない。

このスクリプトはunlockingのためにlocal delayedsecretkeyで署名する必要があるため、commitment transactionを展開した人(=delayedsecretkeyを知っている人)が使えるようになっている。


to_remote outputは、P2WPKHへの送金になる。
スクリプトではないため、何もせずに使用できる。

これは、commitment transactionを展開していない人への送金になっている。


Offered HTLC outputsは、commitment transactionをどちらが展開したかによってunlocking scriptが変わる。

 

自分が展開

この場合は、2-of-2になっていて、署名として自分と相手の両方が必要になる。
相手の署名は、commitment_signedのhtlc_signatureで受け取る。

image

自分が展開したOffered HTLC outputは、自分が相手に送金したHTLCになるため、通常は「相手が受け取らずにタイムアウトしたときに取り戻す」ときに解くことになる。

相手に署名してもらうためには、トランザクションが確定している必要がある。
そのトランザクションはHTLC-Timeout Transactionという名前になっている。

image

 

相手が展開

相手が展開したcommitment transactionに載っているOffered HTLC outputsは、自分が受け取る予定のため、payment_preimageを必要とする。

image

これは自分だけで処理できるため、解いた後の送金先を指定できる。

image


Received HTLC outputsも同様に、どちらがcommitment transactionを展開したかによって変わってくる。

 

自分が展開

この場合は2-of-2になっていて、署名はOffered HTLC outputsと同じくcommitment_signedメッセージで受け取っている。
また、自分が受け取る予定のため、payment_preimageも必要である。

image

相手に署名してもらうためには、トランザクションが確定している必要がある。
そのトランザクションはHTLC-Success Transactionという名前になっていて、構成はHTLC-Timeout Transactionとほぼ同じである。

image

 

相手が展開

相手が展開したReceived HTLC outputsは、自分の送金に対応している。
それを使用できるようになるのはタイムアウトした場合である。

image

こちらについては、送金先を自由に決めることができる。

image


commitment transactionをブロックチェーンに展開した後の送金先について説明した。
次回は、BOLTメッセージを使ってお互いが同意してチャネルを閉鎖する場合について解説する。