Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Date, blocknum, difficulty as of 2019-01-18
- # Script by vbuterin, slightly modified by lrettig
- import random
- import datetime
- import sys
- def calc_bomb(i):
- period = i // 100000
- if (period > 0):
- # Subtract 2, this is the original formula
- # Subtract another 30, this is the Byzantium delay
- return 2**(period - 32)
- return 0
- def calc_difficulty_byzantium(i, cur_time, prev_diff, prev_time):
- new_diff = prev_diff + prev_diff // 2048 * max(1 - (cur_time - prev_time) // 9, -99)
- new_diff += calc_bomb(i)
- return new_diff
- first_block = 7_087_671
- times = [1547823394]
- #diffs = [3_033_556_249_786_083]
- diffs = [2_580_831_000_000_000]
- hashpower = diffs[0] / 14
- for i in range(first_block, 10_000_000):
- blocktime = random.expovariate(hashpower / diffs[-1])
- new_time = times[-1] + blocktime
- new_diff = calc_difficulty_byzantium(i, new_time, diffs[-1], times[-1])
- times.append(new_time)
- diffs.append(new_diff)
- predicted_avg_blocktime = diffs[-1] / hashpower
- if i % 10000 == 0:
- print('Block %d, time %r blocktime %.2f diffratio %.4f' % (
- i,
- datetime.datetime.utcfromtimestamp(times[-1]).isoformat().replace('T',' '),
- predicted_avg_blocktime,
- calc_bomb(i) / diffs[-1],
- ))
- if predicted_avg_blocktime > 60:
- sys.exit('Predicted block time exceeded 60s')
Add Comment
Please, Sign In to add comment