BTCの2100万枚の発行上限をbitcoin coreから追ってみた
概要
最近、ビットコインの仕組みについて解説する動画をよく見ますが
2100万枚の発行上限に対して、
「設定されている」「決まっている」
という解説を目にします。
先人達が解説しているものも多くあると思いますが、改めてどのような仕組みなのかを
Bitcoin Coreの実装から追ってみようと思います。
Bitcoin Coreについて
Bitcoinのホワイトペーパーが発表されたあと、サトシ・ナカモト氏がリリースしたオリジナルの Bitcoinソフトウェアの直系子孫です。
- ブロックチェーンを完全に検証するフルノード
- Bitcoinウォレット
の2つを含みます。
ソースコードは、Githubで管理されています。
Bitcoinノード運用者(マイナー)の多くは、このBitcoin Coreの実装を運用しています。
マイナー報酬計算のロジック
ブロック発掘時のマイナー報酬計算のロジックは、以下のようになっています。
src/validation.cpp - GetBlockSubSidy
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
// Force block reward to zero when right shift is undefined.
if (halvings >= 64)
return 0;
CAmount nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
nSubsidy >>= halvings;
return nSubsidy;
}
1行ずつ見ていきましょう。
引数
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
int nHeight
- ジェネシスブロック(0番目)から数えて何番目のブロックか
- www.blockchain.com/explorer によると、この記事を書いている2025/7/26 17:30 JST頃は907,245
- この記事の計算では、 907,245 を使います
const Consensus::Params& consensusParams
- コンセンサスに関するパラメータ群
- nSubsidyHalvingInterval: マイナー報酬を半減するブロック長の間隔
- src/kernel/chainparams.cppを見ると、210,000が入ることが分かります。
半減期の回数を計算
これまでに発生した半減期の回数(現在のブロック長 / 半減するブロック長間隔)を計算します。
2025/7/26時点で、907,245 / 210,000 = 4.302142... ≒ 4回目になります。
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
半減期の回数が64回以上となった場合、マイナー報酬は0になります。
これは 後述の nSubsidy が符号付き64bitで、64回以上の半減の意味がないからですね。
if (halvings >= 64)
return 0;
初期マイナー報酬定義
初期マイナー報酬額を定義します。
CAmount nSubsidy = 50 * COIN;
COINは定数(100,000,000 = 1億)になります。参考: src/consensus/amount.h
※ (1BTC / 1億)が取引の最小単位で、1satoshiとも言われます
マイナー報酬額計算
初期マイナー報酬から、半減期の回数分、右ビットシフトを行います。
2025/7/26時点で、50BTCから4ビットシフトした3.125BTC(312,500,000 satoshi)がマイナー報酬になります。
nSubsidy >>= halvings;
return nSubsidy;
今までは、この様に推移してきました。
0回目(2009/01/03) : 50BTC (5,000,000,000 satoshi)※GENESISブロック作成日
1回目(2012/12/28) : 25BTC (2,500,000,000 satoshi)
2回目(2016/07/09) : 12.5BTC (1,250,000,000 satoshi)
3回目(2020/05/11) : 6.25BTC ( 625,000,000 satoshi)
4回目(2024/04/20) : 3.125BTC( 312,500,000 satoshi)
...
2進数で見てみましょう。
実際には半減期は32回発生します。(50億が32bitなので、32回以降はゼロになる)
+----------------------------------------------+
| 3 2 1 0 |
| 5432-1098-7654-3210-9876-5432-1098-7654-3210 |
+----------------------------------------------+
0回目: | 0001-0010-1010-0000-0101-1111-0010-0000-0000 |
1回目: | 0000-1001-0101-0000-0010-1111-1001-0000-0000 |
2回目: | 0000-0100-1010-1000-0001-0111-1100-1000-0000 |
...
発行上限
発行上限は、
50BTC + 25BTC + 12.5BTC + ... ≒ 100BTC
100BTC * 210,000ブロック(マイナー報酬を半減するブロック長) = 21,000,000BTC
となります。
まとめ
誤りや補足があれば、コメント欄で教えてくれたら嬉しいです。
Discussion