PS. I predict that people will complain that the areas under the graphs for the current scheme and the new scheme do not look equal.
The areas will be equal on a graph with a linear scale.
Does your algorithm easily handle increases in precision like the current system does?
It is quite specifically tuned for 64-bit integer arithmetic to reach 21M. Nothing of course prevents one from introducing a new algorithm at the time a precision increase is introduced as well, along the lines of "if (blocknum < 3000000) { ...; ret *= 100000000; } else { ... }". The construction of the algorithm can be more or less automated once the function to match is known.
I don't like that the end state would be changed. People signed up for particular rules. The end total BTC is very similar, but 132 years -> 93 years is significant.
Good point. I've tried finding a different function that mimicks the end behaviour better, but it's quite hard, and probably not worth it anyway.
The concern over the transition is that there will be a sudden fall in network security as miners drop out, which would shake confidence in the system. But I'm not sure a slow steady decline can ever be achieved. The 50->25 transition is going to feel a bit like a bubble bursting, and that's OK. There will be sudden drops in hash power due to exchange rate bubbles over time even if the general trend is positive. So we'll have to handle wild fluctuations in difficulty anyway as BTC/USD moves in response to external events.
You're probably right. I wanted to show that it is quite possible to implement a nice exponential decrease, and somehow show my regret it wasn't in the original system.
While I too don't like the sudden halving of the reward it is a pretty nice and simple algorithm. What is especially nice about it is that the reward from the coinbase (generated coins) never really reaches 0, so miners will not have to rely completely on fees.
Given the limited divisibility of bitcoin, this is not entirely true. In the current scheme, the reward becomes 0 after block 6929999. In my proposed scheme, it becomes 0 after block 4899870.
"The perfect is the enemy of the good".
Indeed, but sometimes it's hard to see in advance whether it's good enough or not.