たれながし.info

とあるITエンジニアの備忘録

ビットコインの発行上限と上限に達する日付を計算してみる

ビットコインの発行上限と上限に達する日付をPythonで計算してみます。

f:id:tarenagashi_info:20210808232522p:plain:h300

はじめに

最近ビットコインについて学んでいて、発行上限があることを知ったので計算してみます。

ビットコインの発行上限について

  • ビットコインには発行上限がある
  • 2009年、最初のマイニング報酬は1ブロックで50BTCだった
  • 210,000ブロック採掘されるとマイニング報酬は半分になる
  • 1ブロックは平均10分でマイニングされるので、約4年 = 約2,100,000分でマイニング報酬は半分になる
  • マイニング報酬が1satoshi(1億分の1BTC=1satoshi)未満になるとビットコインの新規発行が終了する
  • ビットコインの新規発行が終了してもビットコインが終了するわけではない

発行上限の計算

プログラム

Pythonでマイニング報酬が半分になる日付(半減期を迎える日)と発行上限を計算します。

import datetime

income = 50 # 最初のマイニング報酬
halflife = 210000 # 半減期
sum = 0 # 発行総数
dt = datetime.date(2009, 1, 3) #最初のブロック(ジェネシスブロック)が生成された日

while (income > 10**-8):
    print("{}\t発行総数={}".format(dt, sum))
    sum = sum + income * halflife
    dt = dt + datetime.timedelta(days=halflife/(6*24))
    income = income / 2

print("{}\t発送総数={}".format(dt, sum))

実行結果

2009-01-03      発行総数=0
2012-12-31      発行総数=10500000
2016-12-28      発行総数=15750000.0
2020-12-25      発行総数=18375000.0
2024-12-22      発行総数=19687500.0
2028-12-19      発行総数=20343750.0
2032-12-16      発行総数=20671875.0
2036-12-13      発行総数=20835937.5
2040-12-10      発行総数=20917968.75
2044-12-07      発行総数=20958984.375
2048-12-04      発行総数=20979492.1875
2052-12-01      発行総数=20989746.09375
2056-11-28      発行総数=20994873.046875
2060-11-25      発行総数=20997436.5234375
2064-11-22      発行総数=20998718.26171875
2068-11-19      発行総数=20999359.130859375
2072-11-16      発行総数=20999679.565429688
2076-11-13      発行総数=20999839.782714844
2080-11-10      発行総数=20999919.891357422
2084-11-07      発行総数=20999959.94567871
2088-11-04      発行総数=20999979.972839355
2092-11-01      発行総数=20999989.986419678
2096-10-29      発行総数=20999994.99320984
2100-10-27      発行総数=20999997.49660492
2104-10-24      発行総数=20999998.74830246
2108-10-21      発行総数=20999999.37415123
2112-10-18      発行総数=20999999.687075615
2116-10-15      発行総数=20999999.843537807
2120-10-12      発行総数=20999999.921768904
2124-10-09      発行総数=20999999.960884452
2128-10-06      発行総数=20999999.980442226
2132-10-03      発行総数=20999999.990221113
2136-09-30      発行総数=20999999.995110556
2140-09-27      発送総数=20999999.99755528

結果をグラフ化してみました。

f:id:tarenagashi_info:20210808232522p:plain

考察

発行上限について

プログラムによる計算結果では、2140年9月27日に上限「20,999,999.99755528 BTC」を迎える結果となりました。
多くの書籍で、2140年に発行上限を迎えると書いてあるので、概ね合っていそうです。
ちなみに、実際の発行上限は「20999999.9769 BTC」らしいです。下記URLに書いてありました(浮動小数点の制度の問題で、0.9769を2進数で表すのは難しいのでしょう)。

cryptoitalia.org

半減期について

ビットコインはこれまで3回半減期(マイニング報酬の半減)を迎えていて、プログラム計算結果と実際の日付は以下通りとなります。
実際の日付の方がプログラムによる計算結果より早いので、実際の1ブロックの平均マイニング時間は10分より短いのでしょう。

半減期 プログラム計算結果 実際の日付 日付の差
1回目 2012-12-31 2012-11-28 33日
2回目 2016-12-28 2016-07-09 172日
3回目 2020-12-25 2020-05-11 228日

ちなみに…
半減期を3回迎えているということは、全ビットコインの87.5%以上は既に発行済み(誰かの所有物)ということになります。そして、2036年頃には全量の約99%は発行完了となります。

f:id:tarenagashi_info:20210807191855p:plain:h300