Stuckless Payment

Stuckless Payment

以前の記事では、ライトニング決済は送金経路の追跡ができてしまう可能性があることについて触れ、そこからルーティング手数料の中抜きができてしまう攻撃方法についてお話しました。また、HTLCに使われるシークレットとそのハッシュの替わりにスカラーとそのポイントを使うペイメントポイントを用いるとことで、送金経路の追跡を困難にする方法を紹介しました。本記事ではペイメントポイントを使うことで、現在のライトニング決済が抱える「送金詰まり」という問題を解決できるStuckless Paymentについて紹介したいと思います。

ライトニング決済での送金は2段階に分けて行われます。最初の段階ではHTLCを使ってロックした資金を送信するフェーズです(セットアップ)。HTLCが送信者から受信者まで無事にたどり着くと、受信者はシークレットを使ってHTLCにロックされた資金を回収するフェーズが開始されます(公開フェーズ)。このHTLCを使った2段階方式には送金詰まりが起こるケースがいくつかあります。
以下の図を見てみましょう。中段の例ではセットアップ時にボブがHTLCをキャロルへルーティングしない場合です。下段の例では、ボブはキャロルから受け取ったシークレットをアリスへ渡さない場合です。送金が詰まった場合、HTLCにロックされた資金は一定期間後に返金されますが、アリスはそれまで待たないといけません。

送金詰まりが起きた場合、アリスが取れる行動としては以下の2つがあります。

  1. 同じインボイスに対して別ルートで送金する
  2. 新しいインボイスをキャロルから貰い送金する

1.の場合、別ルートで送金が成功するかもしれません。しかし、その後もしボブがセットアップ・公開フェーズを正常に再開すると、アリスは二重で支払いをしたことになります。これは以前の記事で書いたとおり、実際に僕自身も経験があります。2.の場合も同じで、新しいインボイスに対して支払いをしても、送金詰まりが起きている決済が解消しない限り二重支払いをしてしまう可能性があります。ではこの送金詰まりを解消するStuckless Paymentとはどういうものか以下で見ていきましょう。

Stuckless Payment

Stuckless PaymentはNayutaの権藤さんによって去年LNメーリングリスト上で提案されました。Stuckless Paymentでは、アップデートフェーズとよばれるフェーズをセットアップと公開フェーズの間に追加することで送金詰まりを解消させるというものです。

前回記事のペイメントポイントのフローでは、セットアップでアリスはキャロルへ(b+c)を渡していました。Stuckless Paymentのセットアップでは(b+c)を渡さず、かわりにキャロルが「セットアップが完了したよ」というメッセージACKを応答として返します。アリスはこの応答を受け取ると、(b+c)をキャロルへ渡し、キャロルはaをアリスへ渡します(上記図の中段)。その後公開フェーズが開始されますが、この時点ですでにアリスはレシートであるaを受け取っているので、仮にボブが(a+b)を公開せずとも支払いは完了しているのです。これによって公開フェーズでの送金詰まりが解消されました。

では、Stuckless Paymentはどのようにセットアップ時における送金詰まりを解消できるのでしょうか?それは、アリスは別ルートでセットアップを開始することができることです。なぜならアリスは(b+c)をキャロルへ渡していないからです。仮にボブが悪者で、キャロルへのルーティングをしなかった場合、キャロルはアリスへACKを返せないので、アリスは(b+c)を渡しません。そのためアリスはトムを経由したルートでセットアップを開始することができます。もしこのセットアップでACKによる応答があれば、そのルートを使ってアップデートフェーズと公開フェーズを開始すればいいのです。

たとえ送金詰まりが発生してしまっても、安全に決済を再試行できるというところがStuckless Paymentのポイントです。ルーティングによる送金詰まりを防ぐことはできませんが、それでも二重支払いする心配なく別ルートでの送金が再試行できるのです。

参考サイト

https://suredbits.com/payment-points-part-2-stuckless-payments/

100