LINEで送る
Pocket

bitcoin-core-version-update

ビットコインを送金する際には手数料が掛かる。ビットコインネットワークでは約10分毎にブロックが生成され、全てのトランザクションがブロックに書き込まれる。ビットコインの送金手数料は、生成されるブロックが持つスペース(理論上4MB Block Weight分)という供給と、ブロックに書き込まれるトランザクションの数という需要によって決定される。その意味でビットコインの手数料も一つの市場によって決定されていると言ってもいい。取引所からの送金手数料は基本的には一律、ウォレット使用時の手数料はユーザーが設定した優先度に応じて自動で計算されるため、手数料の仕組みに関してはウォレットを使用したことのあるユーザーでもあまり意識したことはないのではないだろうか。本記事ではバージョン0.14と0.15を比較しつつ、ビットコインの手数料に焦点をあててみたい。

手数料計算の難しさ

手数料は需給関係で決まると書いたが、ブロックスペースを巡る需要と供給を完璧に予測するのは不可能だ。なぜならブロックの生成頻度にはバラツキがあり、数秒で生成されることもあれば、数十分かかることもあるからだ。これはビットコインのブロック採掘の仕組みによるもので、長期的にある数値に収束するとしても、短期的に予測することは難しい。予測が難しいのは需要についても同様である。トランザクションの増減には曜日ごとの周期性はあるが、例外も存在するため、ブロックスペースに対する需要の予測も難しい。

またユーザーによって緊急度も異なる。トランザクションの承認を急ぐユーザーもいれば、一週間以内に承認されるのであれば急がないというユーザーもいる。Mempoolという未承認のトランザクションが保存される領域の状況を確認することにより、次のブロックにトランザクションを取り込ませるために、どの程度の手数料が必要か予測することはできても、従来の仕組みでは100ブロック以内に取り込ませるために必要な手数料計算はできない。またMempoolはマイナーごとに個別に生成されるため、あるマイナーが確認できるMempoolは、別のマイナーのMempoolとは完全には一致しない。

v0.14での手数料計算の仕組み BucketsとTarget

Bucket

Bitcoin Coreでは各トランザクションを支払われた手数料に応じてbucketsと呼ばれるグループに分類していく。bucketは1s/Bからスタートし、1.1 s/B 、1.21 s/B…9,400s/Bというように10%ずつ増えていく。

Targets

targetはトランザクションがMempoolに入ってからブロックに取り込まれるまでのブロック数のこと。v0.14では1~25ブロックまでのtargetが記録される。targetという名称は、この値が指定したブロック数以内にトランザクションを取り込ませるのに、いくらの手数料が必要かを計算するために用いられるためだ。

支払われた手数料と承認の関係を計算するために以下の数値を用いる。

A: Mempoolにおいて各bucketに分類されたトランザクションの数

B: 各target-bucketペアにおいて、targetブロック以内でブロックに取り込まれたトランザクションの数

A÷Bで特定の手数料を支払った際に、targetブロック以内に取り込まれる確率を算出できる。ただし、この確率が過去のデータに基づく点には注意が必要だ。また古いデータよりも新しいデータにより大きな意味を持たせるために指数移動平均を用いて、重み付けを行う。約2.4日分古くなるごとに重みは半分ずつ低減していく。

一ブロック古くなるごとに0.2%ずつ重みが減らされていくため、346ブロック(約2.4日)で重みは半減する計算だ。
※346×10÷60÷24=2.4028

estimateSmartFee()

手数料計算は以下の手順で行われる。
1. ユーザーは何ブロック以内にトランザクションを承認させたいかを提示する
2. 手数料の大きいBucketから順に、その手数料でユーザーが希望するブロック数以内にトランザクションが承認される確率が95%を下回るか調べていく
3. 95%以上の確率を確保できるbucketの中で最も安い手数料が選ばれ、該当するbucketの中央値が返される

v0.15での変更点

  • 十分な過去データの確保による外れ値への耐性。データが十分ではないときはデフォルト値を返す。
  • bucketのサイズを半分にすることにより、より精度の高い手数料計算が可能。10%から5%に変更。
  • 1008ブロック(約1週間)までのtarget指定が可能に。
  • ConserrvativeとEconomicalの二つモードを追加。Concervativeは手数料計算に、より長いタイムスパンを用い直近の変化に大きな影響を受けない。Economicalはトランザクション数が減っているときに有効で、トランザクションが急増した場合には承認が遅くなるというリスクはあるものの、手数料の大きな削減が期待できる。承認されない場合は手数料を増加することが可能なので、ウォレットのデフォルト設定はEconomicalになる。
  • 全てのアルゴリズムは3つの異なる期間で繰り返される。それぞれtargetが12ブロック用、48ブロック用、1008ブロック用である。
  • v0.14の手数料計算では確率95%が基準値として用いられていたが、v0.15では60%でtargetの半分のブロック数以内、85%でtargetのブロック数以内、95%でtargetの倍のブロック数以内にトランザクション取り込まれる手数料が返される。

ビットコインの手数料計算はトランザクションの混雑具合を適切に反映しておらず、ユーザーが自身で手数料を設定しない限り不必要に高い手数料を払わなければいけない状況が発生することもあったが、今回のアップデートにより手数料計算はかなり改善されそうだ。


What’s new in Bitcoin Core v0.15 — part 2
Better fee estimates #10199