mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
476eb7eb53
Break into two steps: * Generate hash list * Build data file(s) from local bitcoind blocks/ directory. This supports building one large bootstrap.dat, or multiple smaller blocks/blkNNNNN.dat files.
107 lines
2.7 KiB
Python
Executable File
107 lines
2.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# linearize-hashes.py: List blocks in a linear, no-fork version of the chain.
|
|
#
|
|
# 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
|
|
|
|
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 get_block_hashes(settings):
|
|
rpc = BitcoinRPC(settings['host'], settings['port'],
|
|
settings['rpcuser'], settings['rpcpassword'])
|
|
|
|
for height in xrange(settings['min_height'], settings['max_height']+1):
|
|
hash = rpc.getblockhash(height)
|
|
|
|
print(hash)
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) != 2:
|
|
print "Usage: linearize-hashes.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 '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'] = 313000
|
|
if 'rpcuser' not in settings or 'rpcpassword' not in settings:
|
|
print "Missing username and/or password in cfg file"
|
|
sys.exit(1)
|
|
|
|
settings['port'] = int(settings['port'])
|
|
settings['min_height'] = int(settings['min_height'])
|
|
settings['max_height'] = int(settings['max_height'])
|
|
|
|
get_block_hashes(settings)
|
|
|