Skip to content

Instantly share code, notes, and snippets.

# lrettig/iceage.py Created Jan 18, 2019

Simulation script for ice age block times
 # 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 =  #diffs = [3_033_556_249_786_083] diffs = [2_580_831_000_000_000] hashpower = diffs / 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')
to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.