こんばんは。ライトニングは少額送金を安い手数料で行えるため、従来より気軽にビットコインを使った送金ができる点で画期的です。しかし、送金時に「オンチェーンなら○サトシかかるよ!」とか「累計で○サトシ節約したよ!」と表示されるとテンションが上がるのではないかと思いつきました。(ライトニングノードを運用するユーザーが集まるDiamond Handsコミュニティの誰かの発言に着想を得ました。) そこで、累計で節約した手数料を計算する方法を考えてみます。
もちろん、いくつか大事かつ非現実的な前提があります。「次のブロックに取り込まれる可能性が高い中で安めの手数料設定で計算する」「最安のトランザクション形式を使ったと仮定する」「オンチェーン送金が不可能・非現実的な送金額でも送金したことにする」という条件で、どのようにしたら求められるか考えてみます。
必要なデータ
まず、計算に必要なデータを考えてみましょう。
実際に支払ったLNの手数料は過去の送金データを取得することで簡単に求められます。例えばLNDならLightning.ListPaymentsというAPIやlncli listpaymentsというコマンドから取得することができます。それぞれの送金について、UNIX時間で支払った日時と、送金にかかった手数料をsatsあるいはmsatsで入手できます。(正確さにこだわるならmsats/1000で参照するのが良いでしょう。)
オンチェーンで支払っていた場合にかかっていた手数料の計算はもう少し難しいです。
まず、最安のトランザクション形式ですが、2022年現在は1 input 2 output (宛先+お釣り)ですべてのアドレスがP2WSH (native segwit)という仮定だと、1送金あたり141 vbyteと求められます。これに手数料率sats/vbyteをかけて小数点未満を切り上げたものが、オンチェーントランザクションの手数料です。
次に手数料率ですが、特定の時間についてこれを取得するのがこのプロジェクトの一番厄介な部分なので、次の部分で説明します。