# What is short pseudocode for determining the total number of bitcoins mined?

Here's what I have so far:

``````total_epochs = current_block_height % 210000
total_coins = 0;

for(i = 1; i <= total_epochs; i++) {
reward = 100 / 2^(i * 210000 / 210000);
total_coins += 210000 * reward;
}
``````

But this overaccounts for the total coins. Any simpler strategy that works?

With a\b representing integer division and a%b the remainder of this division:

``````  blocks_per_epoch = 210000;
initial_reward = 5 * 10^9;

current_epoch = current_block_height \ blocks_per_epoch;
blocks_in_current_epoch = (current_block_height % blocks_per_epoch) + 1;
current_reward = initial_reward / 2 ^ (current_epoch);

total_coins = 2 * blocks_per_epoch * (initial_reward - current_reward) +
blocks_in_current_epoch * current_reward;
``````

Note that this can be off by a few satoshis due to a different rounding.

If you work with integers for the reward, the division for current_reward can be replaced with a bitshift. If not, you can change initial_reward to 50 to give result in BTC instead of satoshis.

• Hmmmm - doesn't seem to work. Given that block `147751` is used as the current height (I know we're past that - but work with me here). current_epoch = 147751 \ 210000 = 0 blocks_in_current_epoch = 147752; current_reward = 25 total_coins = 14193800 This is definitely off – Shamoon Jan 20 '14 at 15:37
• @Shamoon: current_reward in this case is 50, not 25. – Meni Rosenfeld Jan 20 '14 at 15:49
• How? if `current_epoch` is 0, then initial_reward / 2^0 would be 50 / 1 = 50 – Shamoon Jan 20 '14 at 15:50
• @Shamoon - Yes. – Meni Rosenfeld Jan 20 '14 at 15:52
• @Shamoon - No. The first block has height 0. So if the current block height (as in: The height of the last block found) is 0, there are 50 BTC. If the height is 38,330, there are 1916550 BTC. If you want current_block_height to represent the number of existing blocks ( = the height of the next block) instead, remove the +1 for blocks_in_current_epoch. – Meni Rosenfeld Jan 20 '14 at 17:03