# HODL invoice LNの送金を払い戻すことは難しい。しかし、在庫確認や処理の成功を待つため送金を仮受付した状態で決済を先延ばしにしたい場合がある。(クレジットカードのホールド・仮決済と同じ) これを実現する方法としてHODL invoiceと呼ばれるものがある。 ## Preimageを返すタイミング 通常のLNの送金では目的地までの各ホップにおいてPreimage hashを使ったHTLCが用意され、最終目的地に到達した際にPreimageを使って各HTLCが逆順に資金を移動可能にして決済する。 では、最終目的地がPreimageを返すタイミングを遅らせるとどうなるか。HTLCのタイムアウトまでにPreimageを開示すれば通常通りの送金処理が行える。 あえてしばらく経ったのちに支払いをキャンセルしたい場合、「そんなPreimage知らねえ」などのエラーを返すことで各HTLCが逆順でロールバックする。この場合、最初に送金したノードの知識も、手数料も必要なく返金することができる。 ## 注意点 - HTLCの保管時間が長くなる場合はInvoiceの段階でCLTV(ロックタイム)を長めに指定したほうが良い。 - 1つのチャネルで同時に保有できる未解決HTLC数には上限がある。LNDではデフォルトで144個まで。トランザクションサイズの上限に制限されるので、これ以上は無理。 - 有事の際にオンチェーンで決済する費用が高くなるので、未解決HTLCを多数持つことは推奨されない。 - 解決時にルート上のノードがオフラインになっていて時間内に復活できなければ、そこから送金者までが結局オンチェーンで決済されるリスクがある。 - 送金した時点で、返金してもらえるかはトラストが必要ではある。 - 送金ウォレットからすると支払いが成功しているのかわからないため、UIが混乱しがち。 - 脆弱性と隣合わせのハックなので長期的に使えるかは不明。ただしペイメントネットワークという本分があるので、需要さえ示せれば同様な機能は何らかの形で存続すると感じる(個人的意見) ## 結論 HODL invoiceを使うことでPreimageの開示のタイミング、あるいは非開示を選択し、不明の送金者に対して無料で返金することができる。しかし、注意点を考慮するとインボイスをホールドする時間が短いユースケースが望ましい。