HTLCで送金できる最小金額の考察

安全な送金

Lightning Networkでは1円以下の送金も可能ですが、ある金額以下の送金は実は安全ではないのをご存知でしょうか。ここでは安全の定義をHTLC(Hash Time Lock Contract)と呼ばれるスマートコントラクトを使った送金とします。このコントラクトを使うと、複数のノードを経由し、ブロックチェーンへの書き込みをせずにビットコインの送金が可能となります。

しかし、このHTLCを使った送金には最低金額があり、この金額以下ではHTLCを使った送金はできません。そもそもHTLCはコインをロックしたスクリプトで、LN上での送金中に問題が生じた時、このHTLCをブロックチェーン上へ展開して資金の回収をします。ビットコインにはdust limitという送金可能な最小金額があり、この値は(Native Segwitの場合)294satsとなっています。そのため、LN上でHTLCを使った送金もこの金額以上である必要があります。

LN上でこのdust limit以下で送金する場合、HTLCは使えないのでどうするかと言うと、この金額以下はマイナーのトランザクション手数料とみなして送金されます。LN上での送金が正常に完了すれば、dust limit以下の金額は自身の残高に反映されます。もし、送金が失敗してブロックチェーン上へ展開されると、このコインはマイナーへの手数料として勘定されます。これについてはこちらの記事で紹介しているので読んでみてください。HTLCはdust limit以下では使えませんが、これ以上の金額であれば問題ないのでしょうか。実は、dust limit以上の送金でもHTLCが使えない場合があります

HTLCの最小金額

LNではcommitment_txと呼ばれるビットコインの取引データを2者間で署名・交換することでブロックチェーン外で送金を行います。commitment_txのアウトプットには自身へのアドレスを指すto_localと相手のアドレスを指すto_remoteがあり、この各アウトプットへのコインの量を更新していくことで、お互いの残高を管理しています。例えばアリスからボブを経由してキャロルへ送金する場合、commitment_txのアウトプットにHTLCを追加することになります。この時、dust limit以下の送金であれば、HTLCが追加されることはなく、その金額はcommitment_txがブロックチェーンへ展開される場合、マイナー手数料となります。

以下では送受信が同時に4つ行われている状態のcommitment_txを例にとって解説していきます(参考例元はこちら)。前提条件は以下とします。

dust_limit:546

fee_per_kw:5000

commitment_txのweight:724

offered/received_htlcのweight:172

htlc_timeout_txのweight:663

htlc_success_txのweight:703

2つの送金に使うoffered_htlc#1, #2の金額はそれぞれ5000, 1000 sats

2つの受金に使うreceived_htlc#1, #2の金額はそれぞれ7000, 800 sats

この条件下で、将来オンチェーン上でoffered_htlc#1からコインを回収する場合、htlc_timeout_txを使うことになるのですが、このtx_weightは663なので、tx_feeは663 * 5000 / 1000 = 3315となり、3315 + 546は5000より小さいので、offered_htlc#1はcommitment_txへ追加することができます。次にoffered_htlc#2を見てみます。offered_htlc#2からコインを回収するためのhtlc_timeout_txに係るtx_feeは3315なので、3315 + 546は1000より大きくなります。そのため、このoffered_htlc#2を追加しても将来回収することができないのが現時点で分かっているので追加することができません。received_htlc#1, #2も同様な方法でHTLC追加できるか計算します。そうするとcommitment_txへ追加できるのはoffered_htlc#1, received_htlc#1と分かるので、commitment_txのweightは724 + 172 + 172 = 1068となり、tx_feeは1068 * 5000 /1000 = 5340となります。また、HTLC追加できなかったoffered_htlc#2, received_htlc#1がtx_feeとして加算されるので、実際のcommitment_txに係るtx_feeは5430 + 1000 + 800 = 7140となります。

以上のように、将来回収するためのhtlc_timeout/success_txのアウトプット金額が手数料よりも高い場合に限りHTLCを追加することができるのです。上記の例では1000satsの送金でもHTLCが追加できませんでした。手数料がさらに高騰している期間では、例えば100sat/vBの場合、10000sats以上の送金時でもHTLCが追加されないでしょう。これを一般化すると以下となります。

HTLCの最小金額 > (fee_per_kw * htlc_timeout/success_tx weight) /1000 + dust_limit

まとめ

HTLCによる送金はオンチェーンでの回収が可能なため安全な送金であることについて紹介しました。また、HTLCで送金できる最小金額はオンチェーンの手数料率により変動することが分かりました。HTLCを使わない送金は安全とは言えないかもしれませんが、そのリスクに見合う金額(例えば1円)であれば問題ないと思います。またリスクを知ることで、リスク回避をする上で重要です。LNにはHTLCの特徴を狙った攻撃がいくつかあるので、次回はその攻撃について紹介したいと思います。

Remaining : 0 characters / 0 images
100

Sign up / Continue after login

Related stories

Writer

ちょビットコイナー

Share

Popular stories

LNノードの運用益はどれぐらい?パート1

1155

LNノードの運用益はどれぐらい?パート3

640

猫でも分かるLightning Network解説!

577