I remain confused that alt coins are not having a huge problem with >50% miners constantly forward-stamping the timestamps, causing difficulty to drop to zero. I have the following equations to describe the problems:

Let X = % hashrate a big miner has.

The unavoidable unfixable problem I see is that the difficulty will drop each block for any X > 1:

next D = previous avg D x [1/(1+M/N)]^(2X-1)

M=the "M x TargetInterval" limit on the allowable timestamp, after the previous timestamp.

N=the averaging or median window.

For X=50% note that next D=previous D. See next equation for X<=50%.

For any X>50%, the difficulty will slowly decrease. Small M and large N help, but are not a fix. For example, M=3 and N=100 (the most protective numbers I can imagine), and X=66%, the difficulty will drop 1% per block for as long as the miner is present with 66%. In 450 blocks new D = 1/100th of old D instead of 3xD.

Median makes it more complicated, but I think it is almost exactly the same, at best (if the correct median is used which is 0.75 of the average).

The unavoidable unfixable problem I see is that the difficulty will drop each block for any X > 1:

next D = previous avg D x [1/(1+M/N)]^(2X-1)

M=the "M x TargetInterval" limit on the allowable timestamp, after the previous timestamp.

N=the averaging or median window.

For X=50% note that next D=previous D. See next equation for X<=50%.

For any X>50%, the difficulty will slowly decrease. Small M and large N help, but are not a fix. For example, M=3 and N=100 (the most protective numbers I can imagine), and X=66%, the difficulty will drop 1% per block for as long as the miner is present with 66%. In 450 blocks new D = 1/100th of old D instead of 3xD.

Median makes it more complicated, but I think it is almost exactly the same, at best (if the correct median is used which is 0.75 of the average).

For X<=50%, the difficulty does not drop forever, but has a steady state value that is tolerable:

steady state D = correct D x [1 -(1 - 1/(1+M/N) ) * X]

for example, M=6x, N=30, and X=50% gives 92% of the correct D.

another example: M=6x, N=15, and X=0.5 (33% of hashrate) gives 91%.

I needed this because I want to go to N=8 in the dynamic averaging window:

M=8x and N=8, X=50% gives 75% which is tolerable. This is a basis for TSL setting in Zawy v2 algorithm

steady state D = correct D x [1 -(1 - 1/(1+M/N) ) * X]

for example, M=6x, N=30, and X=50% gives 92% of the correct D.

another example: M=6x, N=15, and X=0.5 (33% of hashrate) gives 91%.

I needed this because I want to go to N=8 in the dynamic averaging window:

M=8x and N=8, X=50% gives 75% which is tolerable. This is a basis for TSL setting in Zawy v2 algorithm

For high on-off hash attacks where the off time >= N and P=on time <=N, I have

blocks stolen at low D = P x [1 -(1-X)/2 - P/2N ]

There is no solution except to make N small.The std dev of solvetimes starts getting noticeable as a drawback if N goes below 12.

blocks stolen at low D = P x [1 -(1-X)/2 - P/2N ]

There is no solution except to make N small.The std dev of solvetimes starts getting noticeable as a drawback if N goes below 12.

This is why I'm working on a variable averaging window difficulty algorithm. N must be as small as possible when there is an attack, but larger at other times because small N causes a lot of accidental variation.

## No comments:

## Post a Comment