A quick rule of thumb formula for calculating expected time to stake

in #gridcoin6 years ago (edited)

I have been involved in an extensive discussion on the Gridcoin Slack recently involving difficulty, network weight, and stake weight.

I developed a quite accurate rule of thumb formula for estimated time to stake that is easy to remember...

(Expected Time to Stake in days) = (10000/(Stakable Balance in GRC)) * Difficulty

So a balance of 10000 that is available for staking (meets the 16 hour cooldown requirement) at a difficulty of 1.0000 will result in an expected time to stake of approximately 1.0 day.

Let's apply this formula to minimum balance questions that we get all of the time.

Most people want to see a stake every week to feel comfortable everything is going right... solving the rule of thumb and using a difficulty of 1.0...

7 days = (10000/balance)*1.0 means balance = ~1400.

If the difficulty was 2.0, you would need twice that much.

Let's cover the case of low balance holders and the research reward cutoff problem. Research rewards expire at 180 days age. So you must stake within 180 days to avoid losing research rewards. Let's apply the formula to that...

180 = (10000/balance)*1.0 which means balance = ~56. In reality, because staking is random, you should put in a factor of about two to be safe... (Thanks @barton26!) So being below 100 GRC in balance is really risking losing research credit.

A relatively high balance holder of, say 100000 GRC would see this at a difficulty of 1.0...

Expected time to stake = (10000/100000) * 1.0 = 1/10 of a day, or 10 stakes a day. To actually achieve this though would require the wallet to have that balance split among ~10 or more UTXOs, because each UTXO staked is subject to a 16 hour cooldown period.

See @hotbit's excellent article on UTXOs. https://steemit.com/gridcoin/@hotbit/cbr-the-way-to-split-coins-draft. The splitting of balances into multiple UTXO's will be more important when we move to CBR.

For those of you wanting to understand where this formula came from, you can take a look at the small ddiff.cpp program I posted on the Gridcoin Slack which describes the relationship between nBits, Target, Difficulty, and staking probability and/or time to stake.

The actual value of the constant in the formula, instead of 10000, is the following...

(MaxHash/UnitDifficultyTarget) * (16/(80 * 3600 * 24)). The 16 comes from the 16 seconds per stake quantum imposed by the stake time mask. The 80 comes from the conversion of stakable GRC to CoinWeight. CoinWeight = 80 * Stakable GRC for V8 protocol. The 3600 and 24 convert secs to days in the formula.

MaxHash is 256^32-1, and the UnitDifficultyTarget is the target value for nBits of 1d00ffff. This is the same as (256^2-1) * 256^26 where the ^ is exponentiation.

Putting it all together we have

(Expected Time to Stake in days) = (1/Stakeable Balance in GRC) * Difficulty * ((256^32-1)/((256^2-1) * 256^26)) * (16/(80 * 3600 * 24))

So... the 10000 is actually 9942.20563194.

The more precise formula is therefore

(Expected Time to Stake in days) = (9942.20563194 / Stakeable Balance in GRC) * Difficulty

Please see the reddit cross-post for interesting commentary...

Sort:  

This post was upvoted by Steemgridcoin with the aim of promoting discussions surrounding Gridcoin and science.

This service is free. You can learn more on how to help here.

Have a nice day. :)

Thanks for this rule of thumb.

I must say, that for me it does not seem to fit.
My experience from my last several stakes, has been that it takes 2-4 times as much time as this formula says it should.

And that's with diff in general below 1, and with a staking wallet on 24/7.

I know there's a degree of randomness to staking, so I could have been unlucky. I probably was :)

But still its nice to see a simple straight forward formula, and I hope that it proves to be more precise for me in the future :)

Do you have a relatively large or small balance? If you have a large balance you will need to ensure you have it split up among several UTXOs to ensure you don’t get caught by the 16 hour cool down. The whole amount in the UTXO selected must be staked. That UTXO is not available for staking again for 16 hours.

I think in the grand scheme of things my balance should be considered small.

According to your formula i should stake ~ once every 7 days, but my last stake was 16 days ago, and before that 5 weeks went by between stakes.

Its probably just the luck of the draw.

A better explanation of UTXO's would be nice. My balance is split in about 100 small amounts from 1.2 to 60 GRC, adding up to my grand total. Would it be better for me to add them together into a few bigger amounts?

One of the redditors claims he started to stake with his small balance after consolidating the wallet, what you do just by sending whole balance to yourself.

Also, expected time to stake =/= certainty to stake within that time

OK, I think I'll try to consolidate my wallet into larger chunks of e.g. 500 GRC, and see if it makes any difference.

And I completely understand that expected time to stake is not equal to actual time to stake. There is a good deal of randomness to the staking process, nothing is guaranteed.

At difficulty 1 a 500 GRC UTXO has each a chance to stake at least once within 34 days of only ~82%, I would consider bigger UTXOs. 2000 gives you a 82% chance to stake at least once within 8.5 days, while expected time is ~5 days.

There should be very little difference whether you have 4 x 500 or 1 x 2000, (4x500 should allow for slightly more frequent stakes due to 16h cooldown time) but not everything is understood yet. While we have done several calculations, as far as I know nobody tested actual wallet behaviour.

My capacity of making bigger UTXO's is somewhat limited by the amount of GRC that I own :)

The real question is, is it better to have one 600 UTXO or 10 x 60 UTXO's?

I suspect the 1 x 600GRC UTXO will stake more often than the 10 X 60GRC UTXO's, but statistically this shouldn't be true?

I know you end up getting your interest and your DPOR's anyway (as long as you stake at least once every 6 months), but I want to have some degree of regularity to my staking, if at all possible.

To be 100% certain requires an infinite amount of time. The expected value is the mean of a distribution, after all..