diff options
Diffstat (limited to 'contrib/linearize/linearize.py')
-rw-r--r-- | contrib/linearize/linearize.py | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/contrib/linearize/linearize.py b/contrib/linearize/linearize.py deleted file mode 100644 index 650f7d3684..0000000000 --- a/contrib/linearize/linearize.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/python -# -# linearize.py: Construct a linear, no-fork, best version of the blockchain. -# -# -# Copyright (c) 2013 The Bitcoin developers -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. -# - -import json -import struct -import re -import base64 -import httplib -import sys - -ERR_SLEEP = 15 -MAX_NONCE = 1000000L - -settings = {} - -class BitcoinRPC: - OBJID = 1 - - def __init__(self, host, port, username, password): - authpair = "%s:%s" % (username, password) - self.authhdr = "Basic %s" % (base64.b64encode(authpair)) - self.conn = httplib.HTTPConnection(host, port, False, 30) - def rpc(self, method, params=None): - self.OBJID += 1 - obj = { 'version' : '1.1', - 'method' : method, - 'id' : self.OBJID } - if params is None: - obj['params'] = [] - else: - obj['params'] = params - self.conn.request('POST', '/', json.dumps(obj), - { 'Authorization' : self.authhdr, - 'Content-type' : 'application/json' }) - - resp = self.conn.getresponse() - if resp is None: - print "JSON-RPC: no response" - return None - - body = resp.read() - resp_obj = json.loads(body) - if resp_obj is None: - print "JSON-RPC: cannot JSON-decode body" - return None - if 'error' in resp_obj and resp_obj['error'] != None: - return resp_obj['error'] - if 'result' not in resp_obj: - print "JSON-RPC: no result in object" - return None - - return resp_obj['result'] - def getblock(self, hash, verbose=True): - return self.rpc('getblock', [hash, verbose]) - def getblockhash(self, index): - return self.rpc('getblockhash', [index]) - -def getblock(rpc, settings, n): - hash = rpc.getblockhash(n) - hexdata = rpc.getblock(hash, False) - data = hexdata.decode('hex') - - return data - -def get_blocks(settings): - rpc = BitcoinRPC(settings['host'], settings['port'], - settings['rpcuser'], settings['rpcpassword']) - - outf = open(settings['output'], 'ab') - - for height in xrange(settings['min_height'], settings['max_height']+1): - data = getblock(rpc, settings, height) - - outhdr = settings['netmagic'] - outhdr += struct.pack("<i", len(data)) - - outf.write(outhdr) - outf.write(data) - - if (height % 1000) == 0: - sys.stdout.write("Wrote block " + str(height) + "\n") - -if __name__ == '__main__': - if len(sys.argv) != 2: - print "Usage: linearize.py CONFIG-FILE" - sys.exit(1) - - f = open(sys.argv[1]) - for line in f: - # skip comment lines - m = re.search('^\s*#', line) - if m: - continue - - # parse key=value lines - m = re.search('^(\w+)\s*=\s*(\S.*)$', line) - if m is None: - continue - settings[m.group(1)] = m.group(2) - f.close() - - if 'netmagic' not in settings: - settings['netmagic'] = 'f9beb4d9' - if 'output' not in settings: - settings['output'] = 'bootstrap.dat' - if 'host' not in settings: - settings['host'] = '127.0.0.1' - if 'port' not in settings: - settings['port'] = 8332 - if 'min_height' not in settings: - settings['min_height'] = 0 - if 'max_height' not in settings: - settings['max_height'] = 279000 - if 'rpcuser' not in settings or 'rpcpassword' not in settings: - print "Missing username and/or password in cfg file" - sys.exit(1) - - settings['netmagic'] = settings['netmagic'].decode('hex') - settings['port'] = int(settings['port']) - settings['min_height'] = int(settings['min_height']) - settings['max_height'] = int(settings['max_height']) - - get_blocks(settings) - - |