diff options
author | Doug <joroark@vt.edu> | 2016-12-20 19:25:24 -0800 |
---|---|---|
committer | Douglas Roark <doug@bloq.com> | 2017-01-05 00:46:29 -0800 |
commit | d5aa19813c32eff02d4b65ac9a4131f3eed04825 (patch) | |
tree | a7c97ce84513d941ab73733cb3b3afd3a9da1bb0 /contrib/linearize/linearize-hashes.py | |
parent | 7dac1e5e9e887f5f6ff146e812a05bd3bf281eae (diff) |
Allow linearization scripts to support hash byte reversal
Currently, the linearization scripts require input hashes to be in one endian form. Add support for byte reversal.
Diffstat (limited to 'contrib/linearize/linearize-hashes.py')
-rwxr-xr-x | contrib/linearize/linearize-hashes.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/contrib/linearize/linearize-hashes.py b/contrib/linearize/linearize-hashes.py index ba8d6f8a04..9efdf13255 100755 --- a/contrib/linearize/linearize-hashes.py +++ b/contrib/linearize/linearize-hashes.py @@ -17,6 +17,12 @@ import sys settings = {} +##### Switch endian-ness ##### +def hex_switchEndian(s): + """ Switches the endianness of a hex string (in pairs of hex chars) """ + pairList = [s[i]+s[i+1] for i in range(0,len(s),2)] + return ''.join(pairList[::-1]) + class BitcoinRPC: def __init__(self, host, port, username, password): authpair = "%s:%s" % (username, password) @@ -70,6 +76,8 @@ def get_block_hashes(settings, max_blocks_per_call=10000): print('JSON-RPC: error at height', height+x, ': ', resp_obj['error'], file=sys.stderr) exit(1) assert(resp_obj['id'] == x) # assume replies are in-sequence + if settings['rev_hash_bytes'] == 'true': + resp_obj['result'] = hex_switchEndian(resp_obj['result']) print(resp_obj['result']) height += num_blocks @@ -101,6 +109,8 @@ if __name__ == '__main__': settings['min_height'] = 0 if 'max_height' not in settings: settings['max_height'] = 313000 + if 'rev_hash_bytes' not in settings: + settings['rev_hash_bytes'] = 'false' if 'rpcuser' not in settings or 'rpcpassword' not in settings: print("Missing username and/or password in cfg file", file=stderr) sys.exit(1) @@ -109,5 +119,7 @@ if __name__ == '__main__': settings['min_height'] = int(settings['min_height']) settings['max_height'] = int(settings['max_height']) - get_block_hashes(settings) + # Force hash byte format setting to be lowercase to make comparisons easier. + settings['rev_hash_bytes'] = settings['rev_hash_bytes'].lower() + get_block_hashes(settings) |