Ratio of PoW blocks versus PoS blocks


I wonder why the ratio between number of proof-of-work blocks and proof-of-stake blocks is variable in PPC.

The PPC paper does not say much about it. I see in the source code that the PoW difficulty is pushed up when the combined block spacing of PoW and PoS is less than 10 minutes, and difficulty is pushed down whenever PoW+PoS spacing is more than 10 minutes or PoW spacing is more than 120 minutes. As a result, PoW difficulty depends not just on PoW hashrate but also on perturbations in PoS block spacing.

It seems to me that this free floating PoW/PoS ratio makes it very difficult for PoW miners to predict how much PPC they will get for their investment. Even when PoW hash rate is steady or steadily rising, the PoW difficulty will still bounce up and down. Indeed, looking at PoW difficulty vs hash rate over the past months shows an almost negative correlation. (This post may seem to be more about PoW than PoS, but I think it is very much related.)

Can someone explain the function of variable PoW spacing?
Was this done deliberately and what goal does it accomplish?


I am not completely sure, so if anyone else knows better, correct me if I’m wrong, but:

I believe it has been set up so that the inflation caused from PoW gets halved every 4 years (no matter what).
So basically if no new miners come to mine, the amount of new coins generated from PoW will still go down, over the years. This forces PoS to eventually become the main source of inflation. And transaction fees will mitigate this because they are destroyed (causing deflation). So over time, the currency should get increasingly deflationary.

“Technically” PPCoin has no limit to the amount of coins that can be issued. Many people are quick to judge and they assume PPCoin is going to be predominantly inflationary compared to Bitcoin, but they haven’t looked deep at it. When you look deep at it, and how it works, I personally believe it is very unlikely that we will ever see in the near future even a couple hundred million coins. I doubt the 2 billion PPCcoin cap will ever be reached…and if it does it would many hundreds of years from now (like ~300+ years). So, realistically, within the next 50 years, we can expect to see no more than about a total of 100 million PPCoins ever produced via the PoW process. It is like bitcoin in that over time the amount of coins you will get from mining will just gets so small, it will hardly add anything to the money supply. So basically, we are looking at a cap due to Moore’s law of what I’d say is no more than about 100,000,000 total PPC coins to ever be produced via PoW, (and probably even a lot less). The inflation from PoS is a mute point because it is the “users” who receive the new coins from that anyway. It’s decentralized inflation, which is something that has been impossible to do, (until now)… so it is really not a bad thing, and it is really so small anyway at ~1%, and besides, the transaction fees will offset a lot of that anyway. I doubt there will be “billions of coins” in circulation until many many hundreds of years, if ever.

Get as many coins as you can now, and save them… it will pay off later :slight_smile: :slight_smile: :slight_smile:


Thanks for your reply. I like PPC a lot, but its details are not yet as clearly documented as bitcoin. I hope we can get some people together in this forum to build a more complete description of PoW/PoS minting.

I don’t think that’s right. The block reward for bitcoin is halved every 4 years. For PPC, the block reward depends on the difficulty, which depends on the hashrate.
I agree with you that PoW will become less and less important, but the rate at which it will happen is not so predetermined.

Still, the variable interval between PoW blocks seems a funny thing to me. A new PoS block is created on average every 10 minutes, but the average spacing between PoW blocks drifts up and down between 10 and 120 minutes, apparently without any purpose.

Do you mean there is a hard limit of 2 billion PPcoins that can exist? I had never heard about that. Can you explain where it comes from?


From the PPCoin Wikipedia: https://en.wikipedia.org/wiki/PPCoin:
Edit: Inflation is “Limited release (Geometric series, rate halves every 4 years)

It’s not a hard limit… but it is still controlled by the system… you can’t just decide to increase the amount of coins overnight, the market will still have to build its way there if it is ever going to reach it.
Although PPCoin technically has a cap of 2 billion coins, it is only for consistency checking, and the cap is unlikely to be reached for the foreseeable future. If the cap were to be reached, it could easily be raised, hence for all practical purposes PPCoin can be considered to have inflation of 1% per year, with a limitless money supply.

From the FAQ: http://www.ppcointalk.org/index.php?topic=8.0
Q: Is there a cap on total money supply like Bitcoin’s 21 million?

"[i]There is no hard cap other than a 2 billion coin max put into the code for now. But that should not be interpreted as an approachable cap, as it might never get anywhere close to that. It should not be considered a hard cap either as it may get lifted but that’s likely not needed in a very very long time. Due to the nature of the mint rate design it’s not possible to predict a final limit as it depends heavily on market participation, as well as the influences between proof-of-stake minting and fee destruction (there may not even be a mathematical limit if minting continues to outpace fee destruction). What we do know is that the proof-of-work minting would slow down exponentially according to Moore’s Law (we are aware that Moore’s Law eventually would stop to apply), and proof-of-stake minting introduces at most 1% annual inflation. So generally speaking it is still a very low future-inflation design comparable to Bitcoin.

In 0.2 release a ‘moneysupply’ stat is included in the getinfo output so everyone can see how many coins are in the market.[/i]"

From the white paper: http://www.ppcoin.org/static/ppcoin-paper.pdf
Even though Bitcoin has relatively strong protection over the history Nakamoto still introduced checkpoints in 2010 as a mechanism to solidify the block chain history, preventing any possible changes to the part of block chain earlier than the checkpoint.

I am not completely sure, so correct me if I’m wrong, but if you read this part closely…
We modified the proof-of-work mint rate to be not determined by block height (time) but instead determined by difficulty. When mining difficulty goes up, proof-of-work mint rate is lowered. A relatively smooth curve is chosen as opposed to Bitcoin’s step functions, to avoid artificially shocking the market. More specifically, a continuous curve is chosen such that each 16x raise of mining difficulty halves the block mint amount.

I believe you have to distinguish that the mint “rate” is separate from the mint “amount”. So it is talking about the frequency (rate) of minting being controlled by the difficulty, and also talking about the number of coins (amount) that is minted on each frequency.

Does that make any sense?


I’m pretty sure this is inaccurate. I looked at the source code as well as some comments in other parts of the forum, and reward really is a function of difficulty, not a function of time.

[quote=“coolbeans94”]From the FAQ: http://www.ppcointalk.org/index.php?topic=8.0
A: "[i]There is no hard cap other than a 2 billion coin max put into the code for now.[/quote]

Thanks, that is very helpful. I did not know about it. I will also check out the moneysupply statistic.

It would make sense, but it is not true. The block reward (or amount) depends on difficulty (number of coins = 10000 / difficulty[sup]1/4[/sup]). The PoW block spacing (frequency) bounces around between 10 minutes and 120 minutes depending on the recent block spacing of PoW and PoS combined. The question is, why?


Hmm, then I’m not sure. Do you think transaction volume may be influencing it (like if there were no transactions on the network for an hour or 2)? Maybe ask Sunny King. Please let me know when you find out the answer. :slight_smile:


Any answer to this yet?



Upon closer look at GetNextTargetRequired() in https://github.com/Peershares/Peershares/blob/master/src/main.cpp#L904
, it can be said that:

  • POS target would always be STAKE_TARGET_SPACING = 600 seconds
    if the actual spacing were twice the target, the pos diff gets multiplied by 1.001982160555 and delta% blockspace
    [ P=1.001982160555; newDiff=oldDiff * P * (% spacing difference measured wrt desired spacing) ]
  • POW: the target is 600 seconds * the number of POS blocks that happened since last PoW block, capped at 7200 seconds = 2 hours
    • when there are 10 or more POS blocks the pow target is capped at 7200 seconds

    • when there are no pos blocks in between the pow target is set at 1200 seconds (=20 minutes)

      0 pos blocks in between: pow target = 20 min [ P = 1.003960396 ]  Widen the target so it could fit 1 POS block
      1 pos blocks in between: pow target = 30 min [ P = 1.005934718 ]  Widen the target so it could fit 2 POS blocks
      2 pos blocks in between: pow target = 40 min [ P = 1.007905138 ]  Widen the target so it could fit 3 POS blocks
      3 pos blocks in between: pow target = 50 min  [ P = 1.009871668 ] Widen the target so it could fit 4 POS blocks
      4 pos blocks in between: pow target = 60 min  [ P = 1.01183432  ]  Widen the target so it could fit 5 POS blocks
      5 pos blocks in between: pow target = 70 min  [ P = 1.013793103 ] Widen the target so it could fit 6 POS blocks
      6 pos blocks in between: pow target = 80 min  [ P = 1.015748031 ]  Widen the target so it could fit 7 POS blocks
      7 pos blocks in between: pow target = 90 min  [ P = 1.017699115 ]  Widen the target so it could fit 8 POS blocks
      8 pos blocks in between: pow target = 100 min  [ P = 1.019646365  ]	 Widen the target so it could fit 9 POS blocks	
      9 pos blocks in between: pow target = 110 min  [ P = 1.021589794  ]  Widen the target so it could fit 10 POS blocks

      10+ pos blocks in between: pow target = 120 min [ P = 1.023529412 ] Widen the target so it could fit 11 POS blocks

Note that there is a max % change controlled by bnProofOfWorkLimit

  • when the pow target is at 20 minutes, it means that there are relatively more pow blocks than pos blocks (within X measure points). Yet it tries to keep it that way by keeping the target low. The result is an AVG blocktime of 10 min.

  • when the pow target is at 120 minutes, it means that there are relatively more pos blocks than pow blocks (within X measure points). Yet it tries to keep it that way by keeping the target high. The result is an AVG blocktime of 10 min

  • it looks like the system tries to squeeze one more Pos block than the actually measured, favoring pos blocks over pow blocks.

  • The notion that the system will find a certain ratio between Pos and Pow blocks is hard to make, but maybe actual imperitive data could give some more insight in this matter


[quote=“thehuntergames, post:8, topic:361”]Bump.

  • The notion that the system will find a certain ratio between Pos and Pow blocks is hard to make, but maybe actual imperitive data could give some more insight in this matter[/quote]

Great stuff thehuntergames. The last time I looked, the ratio between POS and POW blocks in the same period was ~5 . There is a chart for it http://cryptometer.org/ppcoin_104_week_charts.html


If I were a betting man, I would say that since the system is always pushing for 1 more Pos block than last measured, ultimately the pow space target would stay at 120min having room for 11 Pos blocks.

So that ratio would ultimately be 1:11

I pulled some data from peerchain.co/charts for 2014:
% pos blocks tot pos blocks tot pow blocks
07/01/2014 70.39% 63349 26652
05/02/2014 71.18% 67620 27381
07/03/2014 71.55% 70803 28156
04/04/2014 72.47% 76099 28902
04/05/2014 72.97% 80272 29729
02/06/2014 73.48% 84501 30500
01/07/2014 74.00% 88798 31203
31/07/2014 74.46% 93079 31925
29/08/2014 74.83% 97285 32716

The pow/pos is slowly but noticeably declining, if a 1:11 ratio is the goal the pos% would in theory end at 1/(1+11) ==> 91% Pos blocks. Don’t think it gets there but w’ll see



No. Proof -of- Stake Blocks 127 (90.7%) No. Proof -of- Work Blocks 13 (9.3%)
Nice calcs!


Did we see an increase in the ratio, leading to more POW vs POS, when the mining hash rate doubled starting on 15 Sept 2014?


The hashrate is the deciding factor, if it is increasing gradually the control loop can keep up just fine without any overshoots (effecting the ratio). Remember the difficulty only adjust upwards at a max of bnProofOfWorkLimit each time. Downwards adjustments are not capped. See also https://en.wikipedia.org/wiki/Overshoot_(signal)

If the hash rate jumps as if all bitcoin miners switch over at the same time, like you see in a typical step response,
overshoots may or may not happen depending of the system itself.

As the system is non-linear of nature, empirical data may give such insight. http://bitinfocharts.com/comparison/hashrate-ppc.html show there is a jump from 9-15 to 9-19 and then a jump down again in 4 days.

I dont know yet as I haven’t got the data (yet), how the ratio was on those days, but if it were oscillating a lot it would tell us more how the system self regulates on changes in hashrate, assuming that there are still enough minters out here proving steady pos blockx


For the data lovers: I pulled some data of the last few days with much thx to peerchain.co’s API:


Upwards when hash rate is increasing, the diff is adjusting very smoothly. However from its peak at block 134578 at 481948888.8 difficulty it gets very choppy. (This might be the point where the hash rate is dropping) Downwards adjustments are bouncing up and down as the graph shows, likely explained by the notion that controller seems to favor a just little wider blockspace as I described earlier …

At this point the delta of actual and target pow blockspace is nearing 0, meaning the actual blockspace has managed to reach its target. This is where any some oscillation/overshoots may occur until it finds a balance again.
I’ll make another graph in a couple days when i think the difficulty has calmed down a bit…


Why not use put the data in code pairs (click the # sign above input box) to save some space.

ps. you could edit post such as the one above


To answer the question what happened with the ratio, I made another chart:



Here it is clearly noticeable that the pos% dropped rappidly at 9-15 and at 9-20-2014 where the hash rate peaked, the pos % started to increase again.

PS the calc of ratio started at block #130003 where the value =0% is a moving average of last 250 blocks

PPS: funny to see the PoS ratio is currently at 90% levels which I expected to be ultimately.



3 votes and 6 comments so far on Reddit

We currently have on average 15.29% PoW blocks of ALL blocks (PoS+PoW). 1 PoW block every 5.54 PoS blocks.