Added diff adjustment tests

This commit is contained in:
Vitalik Buterin 2014-12-04 12:09:55 -05:00
parent 807533b8d1
commit e25467da56
2 changed files with 2203 additions and 0 deletions

47
diffadjust/blkdiff.py Normal file
View File

@ -0,0 +1,47 @@
import math
import random
hashpower = [float(x) for x in open('hashpower.csv').readlines()]
target = 12
seconds_in_day = 8640
ema_factor = 0.005
f = 30
threshold = 1.5
maxadjust = 0.1
def expdiff(t):
return -math.log(random.random()) * t
def adjust(timestamps, diffs):
if len(timestamps) < 7:
return diffs[-1]
blks_back = 5
delta = timestamps[-2] - timestamps[-2-blks_back]
expected = target * 0.693 * blks_back
if delta < expected / threshold:
fac = max(1 + 1. * delta / expected / f, 1 + maxadjust) ** 2
elif delta > expected * threshold:
fac = max(1 - 1. * delta / expected / f, 1 - maxadjust) ** 2
else:
fac = 1
return diffs[-1] * fac
def test(source, adjust):
ema = target
chain = [0]
d = [source[0]]
emachain = [target]
sourcechain = [0]
while chain[-1] < len(source) * seconds_in_day:
hashpower = source[int(chain[-1] // seconds_in_day)]
d.append(adjust(chain, d))
chain.append(chain[-1] + expdiff(d[-1] / hashpower))
ema = ema * (1 - ema_factor) + (chain[-1] - chain[-2]) * ema_factor
emachain.append(ema)
sourcechain.append(hashpower)
print 'min', min(emachain[500:]), 'max', max(emachain[500:]), 'avg', sum(emachain) / len(emachain)
return zip(emachain[500:], sourcechain[500:], chain[500:])

2156
diffadjust/hashpower.csv Normal file

File diff suppressed because it is too large Load Diff