[LN#016]転送 (3)

引き続き、Lightning Network BOLTの送金転送について説明していく。
前回は、update_add_htlcで各チャネルでHTLCが追加されるところまでだったので、今回はHTLCの反映について説明する。


HTLCの反映は2点間の送金と同じで、update_fulfill_htlcメッセージを使用する。
必要となるのは、invoice作成元が持っているpayment_preimageという、invoiceに入っていたハッシュ値(このブログでは「請求書ID」と記載している)の元になる値である。
2点間であれば、送金した相手がpayment_preimageを持っているが、転送している場合は相手が持っているのかはわからない(送金元ノードと送金先ノードだけはわかる)。

以下のことは覚えておいてよいだろう。
・送金元は、送金先までのルート(どのノードを経由させるか)を作成する
・ルート情報は暗号化されている
・ルート情報を受け取ったチャネルは、1つ先までの転送情報を復号できる
・送金先は、次の送金先が無いということがわかるし、請求書IDの元データを自分が持っていることも確認できる。

update_fulfill_htlcに載っているpayment_preimageがHTLCの請求書IDの元データだとわかれば、HTLCを減らしてamountに反映することができる。
これは、通常の送金と同じである。
違うのは、update_add_htlcを別チャネルに転送したのと同じように、update_fulfill_htlcも同じルートで戻していくことになる点である。
update_add_htlcにはルート情報が載っているが、update_fulfill_htlcにはルート情報がないので、各自の責任で戻していくことになる。


送金の転送についての説明は、以上となる。
最後に、3者で転送した場合の簡単なシーケンスを図で示す。

image

BOLTではHTLCを、送金する方を「offered HTLC」、着金する方を「received HTLC」と呼んでいる。
図では、青い方がoffered HTLC、赤い方がreceived HTLCとしている。
反映の際には、offered HTLCは自分のamountから減らして相手のamountを増やし、received HTLCは自分のamountを増やして相手のamountを減らす。