💰

BTCの2100万枚の発行上限をbitcoin coreから追ってみた

に公開

概要

最近、ビットコインの仕組みについて解説する動画をよく見ますが
2100万枚の発行上限に対して、
「設定されている」「決まっている」
という解説を目にします。

先人達が解説しているものも多くあると思いますが、改めてどのような仕組みなのかを
Bitcoin Coreの実装から追ってみようと思います。

Bitcoin Coreについて

Bitcoinのホワイトペーパーが発表されたあと、サトシ・ナカモト氏がリリースしたオリジナルの Bitcoinソフトウェアの直系子孫です。

  • ブロックチェーンを完全に検証するフルノード
  • Bitcoinウォレット
    の2つを含みます。

ソースコードは、Githubで管理されています。
https://github.com/bitcoin/bitcoin

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: マイナー報酬を半減するブロック長の間隔

半減期の回数を計算

これまでに発生した半減期の回数(現在のブロック長 / 半減するブロック長間隔)を計算します。
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