Ok, I need to do some clarifying here. We are going to break down a few lines from this function so I can explain it as clearly as possible
int64 GetProofOfStakeReward(int64 nCoinAge, int nHeight)
{
static int64 nRewardCoinYear = 2000 * CENT;
int64 nVariableStakeRate = ((nCoinAge % 500) + 1) * CENT;
int64 nSubsidy = nRewardCoinYear * nCoinAge * 33 / (365 * 33 + 8);
int64 nMinReward = nHeight * .0011;
int64 nMaxReward = nHeight * .01;
int64 nSquish = nSubsidy / 1000000;
if (nHeight > 500000) {
nSubsidy = nRewardCoinYear * nCoinAge * 33 / (365 * 33 + 8);
if (nSquish > nMaxReward) {
nSubsidy = nMaxReward * COIN;
}
if (nSquish < nMinReward) {
nSubsidy = 1 * COIN;
}
}
if (nHeight > 620000) {
nSubsidy = nRewardCoinYear * nCoinAge * 33 / (365 * 33 + 8);
nSquish = nSubsidy / 1000000;
nMinReward = nMinReward * 10;
nMaxReward = nMaxReward * 10;
if (nSquish > nMaxReward) {
nSubsidy = nMaxReward * COIN;
}
if (nSquish < nMinReward) {
nSubsidy = 1 * COIN;
}
}
if (nHeight > 1000000) {
nSubsidy = nVariableStakeRate * nCoinAge * 33 / (365 * 33 + 8);
nSquish = nSubsidy / 1000000;
nMinReward = nMinReward * 10;
if (nSquish > nMaxReward) {
nSubsidy = nMaxReward * COIN;
}
if (nSquish < nMinReward) {
nSubsidy = (nCoinAge - (nCoinAge * 1.1)) * COIN;
}
}
return nSubsidy;
}
The part that matters is this:
if (nSquish < nMinReward) {
nSubsidy = (nCoinAge - (nCoinAge * 1.1)) * COIN;
}
Follow nMinReward back, so we know the value needed to not hit this section:
Original:
int64 nMinReward = nHeight * .0011;
Last fork:
nMinReward = nMinReward * 10;
This fork:
nMinReward = nMinReward * 10;
So now, nMinReward is (nHeight * .11), meaning that in order to stake for a positive amount, the actual stake reward must be higher than 11% of the block number in order to receive a positive stake. The number needed to maintain this amount will be different, based on that input's stake rate. This means that stakes will be hitting the maximum reward
If this system proves to not be as easy to use as intended, we can fork to make it a bit easier later and use a straight coinage-dependent formula. The way this is now designed is made to burn coins as much as possible (at least for a little while so supply gets to a more manageable amount), while still providing incentive (or a chance for incentive). If there is a large percentage of people that prefer a straight coinage-style formula, we can update to that if we have to. However, changing now means inflation will continue, although not as extreme as before
Sorry for the confusion, I could have explained this a little better earlier. It may have been an oversight on my part not to switch formulas right away and keep the new formula based on the old stake rate, but it is what it is. We have a lot of wallets and nodes that need updating if we decide to switch, so please do not take this decision opportunity lightly because it is a lot of work getting everyone everywhere to update