Viz, I'm noticing an issue with block rate / difficulty / supply rate...
I took some measurements earlier today... From block 4904 to 5016 took approx 200 minutes, but only 112 blocks were mined (0.56 blocks/min). This indicates that block rate is well below the 1-minute target and difficulty is too high correct? However difficulty increased from 4.68776710 to 4.71060300, where I would have expected it to decrease.
Furthermore, during this time, 6275 new coins were minted (31.3/min, 56 per block average) which is well above the target of 25 per block/minute.
Between blocks 5016 and 5055 took 85 minutes to produce 39 blocks (0.46 blocks/min), 2585 coins were minted (30.4 /min, 66.28/block), and difficulty rose to 4.76775650
So what's going on? Why is difficulty rising even though blocks are not being mined fast enough, and why are more coins being minted than there should be?
You are forgetting to include the other two decay equations. These total up to around 30.4 /min, the 25 per minute goes to the miners.
The difficulty deflates if the released reward is low to stimulate block production when the chain gets slow as a second measure.
Difficulty increases at a maximum rate of:double nMaxUp = (0.125 / ((nDifficulty - 1) * 50.0)) + 1.0;Block Rate:Block time is set to ~150 seconds to allow room for POS and GPU blocks. This will average the block time to ~50 seconds when all three are activeFrom running my supply utility, I just got this result:Target Supply after 7605 Minutes = 477596.662826
Actual Supply after 7605 Minutes = 238884Supply Percentage: 50.017937% -
Half of the Supply to CPU ChannelHere is the Code to the Decay Equations if you want to Test Yourself:/** These values reflect the Three Decay Equations.
50 * e ^ (-0.0000011 * nMinutes) + 1.0
10 * e ^ (-0.00000055 * nMinutes) + 1.0
1 * e ^ (-0.00000059 * nMinutes) + 0.032 **/double decay[3][3] = { {50.0, -0.0000011, 1.0}, {10.0, -0.00000055, 1.0}, {1.0, -0.00000059, 0.032} };
/** Returns the value of a full minutes reward per channel **/int64 GetSubsidy(int nMinutes, int nType) { return (((decay[nType][0] * exp(decay[nType][1] * nMinutes)) + decay[nType][2]) * (COIN / 2.0)); }
Look in your debug.log and find this output. This will verify further:Reserve 0: 25.383014 CSD | Timespan: 4264 - 4265 Minutes
Reserve 1: 5.488287 CSD | Timespan: 4264 - 4265 Minutes
Reserve 2: 0.514743 CSD | Timespan: 4264 - 4265 MinutesViz.