Skip to content

Instantly share code, notes, and snippets.

@ksmithbaylor
Last active April 7, 2025 14:30
Show Gist options
  • Save ksmithbaylor/5cf4c948fa6395f18afba122546d030c to your computer and use it in GitHub Desktop.
Save ksmithbaylor/5cf4c948fa6395f18afba122546d030c to your computer and use it in GitHub Desktop.
Bitcoin Total Supply Calculation
require 'bigdecimal'
def btc(n)
value = BigDecimal(n) / 1_0000_0000
a, b = value.to_s('F').split('.')
"#{a}.#{b.ljust(8, '0')} BTC"
end
BLOCKS_PER_HALVING = 210_000
INITIAL_REWARD = 50_0000_0000
total_supply = 0
(0..).each do |i|
divisor = 2 ** i
reward = INITIAL_REWARD / divisor
break if reward == 0
halving_total = reward * BLOCKS_PER_HALVING
old_supply = total_supply
total_supply += halving_total
puts "Halving #{i}:"
puts " block reward = 50.00000000 / 2 ^ #{divisor} = #{btc(reward)}"
puts " halving total = 210,000 blocks x #{btc(reward)} = #{btc(halving_total)}"
puts " total supply = #{btc(old_supply)} + #{btc(halving_total)} = #{btc(total_supply)}"
puts
end
puts "Block reward is now 0!"
puts "Final total supply is #{btc(total_supply)}"
Halving 0:
block reward = 50.00000000 / 2 ^ 1 = 50.00000000 BTC
halving total = 210,000 blocks x 50.00000000 BTC = 10500000.00000000 BTC
total supply = 0.00000000 BTC + 10500000.00000000 BTC = 10500000.00000000 BTC
Halving 1:
block reward = 50.00000000 / 2 ^ 2 = 25.00000000 BTC
halving total = 210,000 blocks x 25.00000000 BTC = 5250000.00000000 BTC
total supply = 10500000.00000000 BTC + 5250000.00000000 BTC = 15750000.00000000 BTC
Halving 2:
block reward = 50.00000000 / 2 ^ 4 = 12.50000000 BTC
halving total = 210,000 blocks x 12.50000000 BTC = 2625000.00000000 BTC
total supply = 15750000.00000000 BTC + 2625000.00000000 BTC = 18375000.00000000 BTC
Halving 3:
block reward = 50.00000000 / 2 ^ 8 = 6.25000000 BTC
halving total = 210,000 blocks x 6.25000000 BTC = 1312500.00000000 BTC
total supply = 18375000.00000000 BTC + 1312500.00000000 BTC = 19687500.00000000 BTC
Halving 4:
block reward = 50.00000000 / 2 ^ 16 = 3.12500000 BTC
halving total = 210,000 blocks x 3.12500000 BTC = 656250.00000000 BTC
total supply = 19687500.00000000 BTC + 656250.00000000 BTC = 20343750.00000000 BTC
Halving 5:
block reward = 50.00000000 / 2 ^ 32 = 1.56250000 BTC
halving total = 210,000 blocks x 1.56250000 BTC = 328125.00000000 BTC
total supply = 20343750.00000000 BTC + 328125.00000000 BTC = 20671875.00000000 BTC
Halving 6:
block reward = 50.00000000 / 2 ^ 64 = 0.78125000 BTC
halving total = 210,000 blocks x 0.78125000 BTC = 164062.50000000 BTC
total supply = 20671875.00000000 BTC + 164062.50000000 BTC = 20835937.50000000 BTC
Halving 7:
block reward = 50.00000000 / 2 ^ 128 = 0.39062500 BTC
halving total = 210,000 blocks x 0.39062500 BTC = 82031.25000000 BTC
total supply = 20835937.50000000 BTC + 82031.25000000 BTC = 20917968.75000000 BTC
Halving 8:
block reward = 50.00000000 / 2 ^ 256 = 0.19531250 BTC
halving total = 210,000 blocks x 0.19531250 BTC = 41015.62500000 BTC
total supply = 20917968.75000000 BTC + 41015.62500000 BTC = 20958984.37500000 BTC
Halving 9:
block reward = 50.00000000 / 2 ^ 512 = 0.09765625 BTC
halving total = 210,000 blocks x 0.09765625 BTC = 20507.81250000 BTC
total supply = 20958984.37500000 BTC + 20507.81250000 BTC = 20979492.18750000 BTC
Halving 10:
block reward = 50.00000000 / 2 ^ 1024 = 0.04882812 BTC
halving total = 210,000 blocks x 0.04882812 BTC = 10253.90520000 BTC
total supply = 20979492.18750000 BTC + 10253.90520000 BTC = 20989746.09270000 BTC
Halving 11:
block reward = 50.00000000 / 2 ^ 2048 = 0.02441406 BTC
halving total = 210,000 blocks x 0.02441406 BTC = 5126.95260000 BTC
total supply = 20989746.09270000 BTC + 5126.95260000 BTC = 20994873.04530000 BTC
Halving 12:
block reward = 50.00000000 / 2 ^ 4096 = 0.01220703 BTC
halving total = 210,000 blocks x 0.01220703 BTC = 2563.47630000 BTC
total supply = 20994873.04530000 BTC + 2563.47630000 BTC = 20997436.52160000 BTC
Halving 13:
block reward = 50.00000000 / 2 ^ 8192 = 0.00610351 BTC
halving total = 210,000 blocks x 0.00610351 BTC = 1281.73710000 BTC
total supply = 20997436.52160000 BTC + 1281.73710000 BTC = 20998718.25870000 BTC
Halving 14:
block reward = 50.00000000 / 2 ^ 16384 = 0.00305175 BTC
halving total = 210,000 blocks x 0.00305175 BTC = 640.86750000 BTC
total supply = 20998718.25870000 BTC + 640.86750000 BTC = 20999359.12620000 BTC
Halving 15:
block reward = 50.00000000 / 2 ^ 32768 = 0.00152587 BTC
halving total = 210,000 blocks x 0.00152587 BTC = 320.43270000 BTC
total supply = 20999359.12620000 BTC + 320.43270000 BTC = 20999679.55890000 BTC
Halving 16:
block reward = 50.00000000 / 2 ^ 65536 = 0.00076293 BTC
halving total = 210,000 blocks x 0.00076293 BTC = 160.21530000 BTC
total supply = 20999679.55890000 BTC + 160.21530000 BTC = 20999839.77420000 BTC
Halving 17:
block reward = 50.00000000 / 2 ^ 131072 = 0.00038146 BTC
halving total = 210,000 blocks x 0.00038146 BTC = 80.10660000 BTC
total supply = 20999839.77420000 BTC + 80.10660000 BTC = 20999919.88080000 BTC
Halving 18:
block reward = 50.00000000 / 2 ^ 262144 = 0.00019073 BTC
halving total = 210,000 blocks x 0.00019073 BTC = 40.05330000 BTC
total supply = 20999919.88080000 BTC + 40.05330000 BTC = 20999959.93410000 BTC
Halving 19:
block reward = 50.00000000 / 2 ^ 524288 = 0.00009536 BTC
halving total = 210,000 blocks x 0.00009536 BTC = 20.02560000 BTC
total supply = 20999959.93410000 BTC + 20.02560000 BTC = 20999979.95970000 BTC
Halving 20:
block reward = 50.00000000 / 2 ^ 1048576 = 0.00004768 BTC
halving total = 210,000 blocks x 0.00004768 BTC = 10.01280000 BTC
total supply = 20999979.95970000 BTC + 10.01280000 BTC = 20999989.97250000 BTC
Halving 21:
block reward = 50.00000000 / 2 ^ 2097152 = 0.00002384 BTC
halving total = 210,000 blocks x 0.00002384 BTC = 5.00640000 BTC
total supply = 20999989.97250000 BTC + 5.00640000 BTC = 20999994.97890000 BTC
Halving 22:
block reward = 50.00000000 / 2 ^ 4194304 = 0.00001192 BTC
halving total = 210,000 blocks x 0.00001192 BTC = 2.50320000 BTC
total supply = 20999994.97890000 BTC + 2.50320000 BTC = 20999997.48210000 BTC
Halving 23:
block reward = 50.00000000 / 2 ^ 8388608 = 0.00000596 BTC
halving total = 210,000 blocks x 0.00000596 BTC = 1.25160000 BTC
total supply = 20999997.48210000 BTC + 1.25160000 BTC = 20999998.73370000 BTC
Halving 24:
block reward = 50.00000000 / 2 ^ 16777216 = 0.00000298 BTC
halving total = 210,000 blocks x 0.00000298 BTC = 0.62580000 BTC
total supply = 20999998.73370000 BTC + 0.62580000 BTC = 20999999.35950000 BTC
Halving 25:
block reward = 50.00000000 / 2 ^ 33554432 = 0.00000149 BTC
halving total = 210,000 blocks x 0.00000149 BTC = 0.31290000 BTC
total supply = 20999999.35950000 BTC + 0.31290000 BTC = 20999999.67240000 BTC
Halving 26:
block reward = 50.00000000 / 2 ^ 67108864 = 0.00000074 BTC
halving total = 210,000 blocks x 0.00000074 BTC = 0.15540000 BTC
total supply = 20999999.67240000 BTC + 0.15540000 BTC = 20999999.82780000 BTC
Halving 27:
block reward = 50.00000000 / 2 ^ 134217728 = 0.00000037 BTC
halving total = 210,000 blocks x 0.00000037 BTC = 0.07770000 BTC
total supply = 20999999.82780000 BTC + 0.07770000 BTC = 20999999.90550000 BTC
Halving 28:
block reward = 50.00000000 / 2 ^ 268435456 = 0.00000018 BTC
halving total = 210,000 blocks x 0.00000018 BTC = 0.03780000 BTC
total supply = 20999999.90550000 BTC + 0.03780000 BTC = 20999999.94330000 BTC
Halving 29:
block reward = 50.00000000 / 2 ^ 536870912 = 0.00000009 BTC
halving total = 210,000 blocks x 0.00000009 BTC = 0.01890000 BTC
total supply = 20999999.94330000 BTC + 0.01890000 BTC = 20999999.96220000 BTC
Halving 30:
block reward = 50.00000000 / 2 ^ 1073741824 = 0.00000004 BTC
halving total = 210,000 blocks x 0.00000004 BTC = 0.00840000 BTC
total supply = 20999999.96220000 BTC + 0.00840000 BTC = 20999999.97060000 BTC
Halving 31:
block reward = 50.00000000 / 2 ^ 2147483648 = 0.00000002 BTC
halving total = 210,000 blocks x 0.00000002 BTC = 0.00420000 BTC
total supply = 20999999.97060000 BTC + 0.00420000 BTC = 20999999.97480000 BTC
Halving 32:
block reward = 50.00000000 / 2 ^ 4294967296 = 0.00000001 BTC
halving total = 210,000 blocks x 0.00000001 BTC = 0.00210000 BTC
total supply = 20999999.97480000 BTC + 0.00210000 BTC = 20999999.97690000 BTC
Block reward is now 0!
Final total supply is 20999999.97690000 BTC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment