Skip to content

Commit bdcff0a

Browse files
committed
Update target spacing and difficulty adjustment for buttercup update
1 parent 932bb07 commit bdcff0a

File tree

4 files changed

+30
-27
lines changed

4 files changed

+30
-27
lines changed

lib/blockchain.py

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,32 @@
3434
CHUNK_LEN = 100
3535
BUBBLES_ACTIVATION_HEIGHT = 585318
3636
DIFFADJ_ACTIVATION_HEIGHT = 585322
37+
BUTTERCUP_ACTIVATION_HEIGHT = 707000
3738

3839
MAX_TARGET = 0x0007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3940
POW_AVERAGING_WINDOW = 17
4041
POW_MEDIAN_BLOCK_SPAN = 11
4142
POW_MAX_ADJUST_DOWN = 32
4243
POW_MAX_ADJUST_UP = 16
4344
POW_DAMPING_FACTOR = 4
44-
POW_TARGET_SPACING = 150
45+
PRE_BUTTERCUP_POW_TARGET_SPACING = 150
46+
POST_BUTTERCUP_POW_TARGET_SPACING = 75
4547

4648
TARGET_CALC_BLOCKS = POW_AVERAGING_WINDOW + POW_MEDIAN_BLOCK_SPAN
4749

48-
AVERAGING_WINDOW_TIMESPAN = POW_AVERAGING_WINDOW * POW_TARGET_SPACING
50+
def get_pow_target_spacing(height):
51+
if height >= BUTTERCUP_ACTIVATION_HEIGHT:
52+
return POST_BUTTERCUP_POW_TARGET_SPACING
53+
return PRE_BUTTERCUP_POW_TARGET_SPACING
4954

50-
MIN_ACTUAL_TIMESPAN = AVERAGING_WINDOW_TIMESPAN * \
51-
(100 - POW_MAX_ADJUST_UP) // 100
55+
def get_averaging_window_timespan(height):
56+
return POW_AVERAGING_WINDOW * get_pow_target_spacing(height)
5257

53-
MAX_ACTUAL_TIMESPAN = AVERAGING_WINDOW_TIMESPAN * \
54-
(100 + POW_MAX_ADJUST_DOWN) // 100
58+
def get_min_actual_timespan(height):
59+
return get_averaging_window_timespan(height) * (100 - POW_MAX_ADJUST_UP) // 100
5560

61+
def get_max_actual_timespan(height):
62+
return get_averaging_window_timespan(height) * (100 + POW_MAX_ADJUST_DOWN) // 100
5663

5764
def is_post_equihash_fork(height):
5865
return height >= BUBBLES_ACTIVATION_HEIGHT
@@ -231,6 +238,14 @@ def verify_header(self, header, prev_hash, target):
231238
]
232239
bits = valid_bits[height%DIFFADJ_ACTIVATION_HEIGHT]
233240
target = self.bits_to_target(bits)
241+
elif height >= BUTTERCUP_ACTIVATION_HEIGHT and height < BUTTERCUP_ACTIVATION_HEIGHT + POW_AVERAGING_WINDOW:
242+
valid_bits = [
243+
0x1f07ffff, 0x1f00a083, 0x1f00ace2, 0x1f00ba38, 0x1f07ffff, 0x1f016783,
244+
0x1f018356, 0x1f01a152, 0x1f01c1a2, 0x1f01e474, 0x1f0209fc, 0x1f02326c,
245+
0x1f025e01, 0x1f028cf8, 0x1f02bf93, 0x1f02f61c, 0x1f0330df,
246+
]
247+
bits = valid_bits[height%BUTTERCUP_ACTIVATION_HEIGHT]
248+
target = self.bits_to_target(bits)
234249
if bits != header.get('bits'):
235250
raise Exception("bits mismatch: %s vs %s" % (bits, header.get('bits')))
236251
if int('0x' + _hash, 16) > target:
@@ -426,15 +441,15 @@ def get_target(self, height, chunk_headers=None):
426441

427442
actual_timespan = self.get_median_time(height, chunk_headers) - \
428443
self.get_median_time(height - POW_AVERAGING_WINDOW, chunk_headers)
429-
actual_timespan = AVERAGING_WINDOW_TIMESPAN + \
430-
int((actual_timespan - AVERAGING_WINDOW_TIMESPAN) / \
444+
actual_timespan = get_averaging_window_timespan(height) + \
445+
int((actual_timespan - get_averaging_window_timespan(height)) / \
431446
POW_DAMPING_FACTOR)
432-
if actual_timespan < MIN_ACTUAL_TIMESPAN:
433-
actual_timespan = MIN_ACTUAL_TIMESPAN
434-
elif actual_timespan > MAX_ACTUAL_TIMESPAN:
435-
actual_timespan = MAX_ACTUAL_TIMESPAN
447+
if actual_timespan < get_min_actual_timespan(height):
448+
actual_timespan = get_min_actual_timespan(height)
449+
elif actual_timespan > get_max_actual_timespan(height):
450+
actual_timespan = get_max_actual_timespan(height)
436451

437-
next_target = mean_target // AVERAGING_WINDOW_TIMESPAN * actual_timespan
452+
next_target = mean_target // get_averaging_window_timespan(height) * actual_timespan
438453

439454
if next_target > MAX_TARGET:
440455
next_target = MAX_TARGET

lib/servers.json

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,5 @@
44
"s": "50002",
55
"t": "50001",
66
"version": "1.2"
7-
},
8-
"electrum.zclassic.ch": {
9-
"pruning": "-",
10-
"s": "50002",
11-
"t": "50001",
12-
"version": "1.2"
13-
},
14-
"electrum.zcl.community": {
15-
"pruning": "-",
16-
"s": "50002",
17-
"t": "50001",
18-
"version": "1.2"
197
}
208
}

lib/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def time_difference(distance_in_time, include_seconds):
506506
return "over %d years" % (round(distance_in_minutes / 525600))
507507

508508
mainnet_block_explorers = {
509-
'zeltrez.io': ('https://explorer.zcl.zeltrez.io/',
509+
'zeltrez.io': ('https://explorer.zcl.zelcore.io/',
510510
{'tx': 'tx/', 'addr': 'address/'})
511511
}
512512

lib/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ELECTRUM_VERSION = 'v3.2.5' # version of the client package
1+
ELECTRUM_VERSION = 'v3.2.6' # version of the client package
22
PROTOCOL_VERSION = '1.2' # protocol version requested
33

44
# The hash of the mnemonic seed must begin with this

0 commit comments

Comments
 (0)