aboutsummaryrefslogtreecommitdiff
path: root/tests/difficulty/generate-data
diff options
context:
space:
mode:
authorAntonio Juarez <antonio.maria.juarez@live.com>2014-03-03 22:07:58 +0000
committerAntonio Juarez <antonio.maria.juarez@live.com>2014-03-03 22:07:58 +0000
commit296ae46ed8f8f6e5f986f978febad302e3df231a (patch)
tree1629164454a239308f33c9e12afb22e7f3cd8eeb /tests/difficulty/generate-data
parentchanged name (diff)
downloadmonero-296ae46ed8f8f6e5f986f978febad302e3df231a.tar.xz
moved all stuff to github
Diffstat (limited to 'tests/difficulty/generate-data')
-rwxr-xr-xtests/difficulty/generate-data52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/difficulty/generate-data b/tests/difficulty/generate-data
new file mode 100755
index 000000000..77d384bbc
--- /dev/null
+++ b/tests/difficulty/generate-data
@@ -0,0 +1,52 @@
+#!/usr/bin/python3
+
+from random import randint
+
+DIFFICULTY_TARGET = 120
+DIFFICULTY_WINDOW = 720
+DIFFICULTY_LAG = 15
+DIFFICULTY_CUT = 60
+
+UINT_MAX = (1 << 64) - 1
+
+def difficulty():
+ times = []
+ diffs = []
+ while True:
+ if len(times) <= 1:
+ diff = 1
+ else:
+ begin = max(len(times) - DIFFICULTY_WINDOW - DIFFICULTY_LAG, 0)
+ end = min(begin + DIFFICULTY_WINDOW, len(times))
+ length = end - begin
+ assert length >= 2
+ if length <= DIFFICULTY_WINDOW - 2 * DIFFICULTY_CUT:
+ cut_begin = 0
+ cut_end = length
+ else:
+ excess = length - (DIFFICULTY_WINDOW - 2 * DIFFICULTY_CUT)
+ cut_begin = (excess + 1) // 2
+ cut_end = length - excess // 2
+ assert cut_begin + 2 <= cut_end
+ wnd = times[begin:end]
+ wnd.sort()
+ dtime = wnd[cut_end - 1] - wnd[cut_begin]
+ assert 0 <= dtime <= UINT_MAX
+ dtime = max(dtime, 1)
+ ddiff = sum(diffs[begin + cut_begin + 1:begin + cut_end])
+ assert 0 < ddiff <= UINT_MAX
+ assert dtime <= ddiff * DIFFICULTY_TARGET + dtime - 1 <= UINT_MAX
+ diff = (ddiff * DIFFICULTY_TARGET + dtime - 1) // dtime
+ assert 0 < diff <= UINT_MAX
+ times.append((yield diff))
+ diffs.append(diff)
+
+time = 1000
+gen = difficulty()
+diff = next(gen)
+for i in range(1000):
+ power = 10 if i < 100 else 10000 if i < 500 else 1000000
+ time += randint(-diff // power - 10, 3 * diff // power + 10)
+ assert 0 <= time <= UINT_MAX
+ print(time, diff)
+ diff = gen.send(time) \ No newline at end of file