ビットコイン半減期とは、ビットコインプロトコルにおいて、ブロック報酬がその現象が起こる前の丁度半分になる現象のことである。これは、時間の経過とともにBTCの供給量を徐々に一貫して発行する方法として、ビットコインのコードに初期リリースから書かれてある重要な規則の一つである。新しいBTCの発行は一定の割合で始まり、コインの総配布量が21,000,000に達するまで徐々に減っていくように作られている。この数値はコードの中で定数や変数として明示的に設定されているわけではないが、この半減期現象がいつ発生するのか、ブロック報酬がどのように計算され、マイナーに分配されるのかがコードで定義されている。
新しいブロックが作成されると、マイナーは新しく作成されたブロックをノードネットワークに送信する。そして、ノードはそのブロックがブロック上の最大データ量や最大コイン数などのネットワークのルールに従っているかどうかを確認する。これは、ブロックを作成する際にマイナーに与えられるブロック報酬である。あるノードがブロックを有効と判断すると、そのブロックを保存して他のノードに伝播し、短時間のうちにすべてのノードがこの新しく作られたブロックを検証して保存し、ブロックチェーンを継続する。
コードには、半減期のタイミングとブロック報酬を決めるルールが含まれている。ブロック報酬は21万ブロックごとに半分になる。2009年にビットコインプロトコルが初めて稼動したとき、最初のブロック報酬は50BTCだった。ビットコインプロトコルの最初のブロックから、210,000ブロック後に3回ぐらい半減している。ブロック報酬は平均10分ごとに支給される。つまり、ブロックチェーン上で21万ブロックが採掘された後、およそ4年ごとに半減が起こる。
次の4回目の半減期は2024年4月頃に予定されている。その時点から、ブロック報酬は1ブロックあたり3.125に半減される。このビットコインの半減とブロック報酬は、ゼロに達し、21,000,000BTCがすべて採掘された時点で停止される。これはおよそ2140年頃に起こるようにコードが書かれている。合計32の半減期があり、各半減期はブロック報酬を以前のブロック報酬の半分になる。以下は、ブロック報酬を受け取るためのコードスニペットである。
このコードは、ブロック報酬の量を定義し、半減期までの報酬量の半分に減少するスケジュールのコードである。この報酬がゼロになると、ビットコインの総供給は32回半減した後に停止される。
このコードの行は、半減の数を計算している。
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
“halvings”という整数は、最も近い整数を切り捨てた値になる。“nHeight”はブロックチェーン上の現在のブロック数である。新しいブロックが作成され、ブロックチェーンに追加されると、そのブロックは長く/高くなっていく。この記事を書いている時点で、ビットコインの「ブロックの高さ」は808934ブロックである。“nSubsidyHalvingInterval”は、以下のビットコインのコードベースで定義されているように、静的な値で、210,000ブロックに設定されている別の半減が発生する前に経過しなければならないブロック数である:
ブロック報酬
以下のコードにはCOINという定数がある。その意味を見てみよう。
CAmount nSubsidy = 50 * COIN;
COINとは、以下のようなコードで指定される値である。ビットコインの割り切れる最小単位の合計であり、サトシである。1BTCには100,000,000 satoshi(サトシ)が含まれる。
/** The amount of satoshis in one BTC. */ static constexpr CAmount COIN = 100000000;
つまり、報酬はコインの数に乗じられ、それがサトシとなる。ブロック報酬が50BTCの場合、報酬は5,000,000,000サトシになる。
以下のコメントでは、ブロック報酬は21万ブロックごと、つまり約4年ごとに半減されるようにしている。
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
nSubsidy >>= halvings;
上記のコードの意味を見てみよう。ここで最も重要なのは「>>」演算子、別名「ビット単位の右シフト」である。これはC++プログラミング言語の標準演算子で、ここでは非常に重要である。2で割るのと同じ結果になる。現在の半減期(3回目)の例を見てみよう。nSubsidyは固定数で、50 * 100,000,000(50BTC)であり、演算子は>> 3である。ビット単位の右シフト1回で、2進数から右端の最後の桁が削除される。この2進数を10進数に変換すると、最初の半減期の報酬が得られる。
100101010000001011111001000000000 = 5,000,000,000satoshis = 50 BTC
1回目の半減期後、
10010101000000101111100100000000 = 2,500,000,000 satoshis = 25 BTC
2回目の半減期後、
1001010100000010111110010000000 = 1,250,000,000 satoshis = 12.5 BTC
3回目の半減期後、
100101010000001011111001000000 = 625,000,000 satoshis = 6.25 BTC
次の4回目の半減期は2024年4月に予定されている。その後の報酬は以下のようになる。
10010101000000101111100100000 = 312,500,000 = 3.125 BTC
このようにビットコインのブロック報酬は、210,000ブロックごと(およそ4年ごと)に半減期を迎える。
下記の表を作って、BTCの累計と合計報酬を計算してみた。これは見るだけでもワクワクするような結果となった。ビットコインがどれだけよく考えて作られているかがわかる。
2100年の半減期に採掘される予定のBTC数を見ると、4年間で合計3BTC以下である。驚くべきデータは2104年から2140年までの累計報酬である。1BTCを採掘するのにマイナーのエネルギーと世界中のマイナー計算能力をすべて使っても36年ぐらいかかるここになっている。今から100年後、この資産がどれほどの価値を持つことになるのかは想像すらできない。ビットコインがもたらす価値交換の意味は、現在の私たちの頭脳で理解できるものではない。これからの世代の未来はとても明るくなると思う。ビットコインは暴力を伴わない戦争であり、そのインセンティブは非常に高く、誰でも、どの国も無視したり逃げたり、遠ざけたりすることはできない。
この記事の前に、価値交換やお金についても書いたことがある。興味があればそちらも読んでみてください。ビットコインのコードについては今後も記事を書いていく予定です。
ここまでお読みいただきありがとうございます。それでは、また次回。
One reply on “ビットコイン半減期とブロック報酬”
[…] 難易度は、ターゲットハッシュの先頭にゼロを足したり減らしたりすることで実際に変更される。このターゲット・ハッシュは、全てのマイナーが打ち負かそうとしている特定のハッシュである。ターゲットハッシュと比較して、前面のゼロの数が等しいか多いランダムコードを生成したマイナーが勝者として選ばれ、ブロックが作成されてブロックチェーンに追加される。このアルゴリズムは、マイナーが早く採掘するためにマシンとそのスペックを上げることができるため、より速い速度でブロックが作成されることを防ぐために設定されたものである。ビットコインのプロトコルの最も重要な特徴の1つは、他の不換紙幣と比較してインフレ率が安定して予測可能であることだ。難易度調整アルゴリズムとその最大量2,100万枚は、前の記事「ビットコイン半減期とブロック報酬」で書いたように、ビットコインプロトコルを興味深いものにしており、ある程度予測可能で信頼性の高いシステムになっている。 […]