1

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?

2

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.

6
  • 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
  • 1
    @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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.