Hey Edgar,

I've looked at all these algorithms in a fair amount of details now and they're 
all fairly similar. The main difference between Digishield and Dark Gravity 
Wave is that the latter uses the latest difficulty instead of an average in the 
former. And Bitcoin's standard difficulty algorithm is very problematic if you 
have large variations in hash power, which we're bound to have at least in the 
beginning.

Overall, I'm not a huge proponent of "more is better". It's too easy to forget 
that what's sacrificed on the other side of the balance is simplicity. And 
blockchain implementations are complex systems that can use every bit of 
simplicity that can be found.

- Igno

-------- Original Message --------
Subject: Re: [ignopeverell/grin] Difficulty adjustment algoritm (#62)
Local Time: June 19, 2017 12:29 PM
UTC Time: June 19, 2017 7:29 PM
From: notificati...@github.com
To: ignopeverell/grin <g...@noreply.github.com>
Ignotus Peverell <igno.pever...@protonmail.com>, Mention 
<ment...@noreply.github.com>

Hi Igno et al.,

How bad of an idea is it to utilize several difficulty adjustment algorithms? 
This gives us a chance to utilize the outputs of each to come to more complete 
agreement on increase/decrease in difficulty?

Adjustment Algorithms (A, B, C, D) modified to take in n (number of last blocks 
to evaluate) as aparameter:
A = Dark Gravity Wave
B = Bitcoin's Standard Difficulty Algorithm
C = Digishield/Dogeshield
D = Our own Difficulty Adjustment Algorithm

Every 23 Blocks Calculate Difficulty:

-
Produce a difficulty Increase/Decrease taking into account last 23 Blocks
- e = (A(23) + B(23) + C(23) + D(23))/4

-
Produce a difficulty Increase/Decrease taking into account last 230 Blocks
- f = (A(230) + B(230) + C(230) + D(230))/4

-
Produce a difficulty Increase/Decrease taking into account last 2300 Blocks
- g = (A(2300) + B(2300) + C(2300) + D(2300))/4

-
Produce a difficulty Increase/Decrease taking into account last 23000 Blocks
- h = (A(23000) + B(23000) + C(23000) + D(23000))/4

- i = (e+f+g+h)/4
- i > 33% Down i = 33% adjustment Downward
- i > 16% Up i = 16.6% adjustment Upward

My thinking is if we can produce several difficulty increase/decrease averages 
over several different block ranges with multiple algorithms. It would allow us 
to pick a better value for difficulty increase/decrease. In the above scenario 
we produce difficulty adjustments using ~ 4 different timescales, at each 
timescale we then calculate an average increase/decrease using 4 different 
algorithms and return it for later processing. After each of the timescales is 
calculated and averaged, we can take the averages derived from looking at 
ranges: 23, 230, 2300, and 23000 then use these averages to calculate a better 
difficulty change i, if i is a decrease greater than 33%, i = 33% decrease, if 
i is an increase greater than 16% i = 16% Increase

The main downside I see, other than this being more code to maintain is that 
the difficulty readjustment calculation would be magnitudes slower when 
compared to just having one Difficulty adjustment algorithm produce a 
difficulty over only a single range.

Cheers,
Edgar

—
You are receiving this because you were mentioned.
Reply to this email directly, [view it on 
GitHub](https://github.com/ignopeverell/grin/issues/62#issuecomment-309544551), 
or [mute the 
thread](https://github.com/notifications/unsubscribe-auth/AV3YyUTpYy3G7oHJv9kbMA0YIdEzkq_Lks5sFswWgaJpZM4N7vVX).
-- 
Mailing list: https://launchpad.net/~mimblewimble
Post to     : mimblewimble@lists.launchpad.net
Unsubscribe : https://launchpad.net/~mimblewimble
More help   : https://help.launchpad.net/ListHelp

Reply via email to