implement scripthash logic
This commit is contained in:
parent
8c5b6bdaf3
commit
68873d92f9
|
@ -208,6 +208,7 @@ class Network(util.DaemonThread):
|
|||
|
||||
# subscriptions and requests
|
||||
self.subscribed_addresses = set()
|
||||
self.h2addr = {}
|
||||
# Requests from client we've not seen a response to
|
||||
self.unanswered_requests = {}
|
||||
# retry times
|
||||
|
@ -316,8 +317,8 @@ class Network(util.DaemonThread):
|
|||
for i in bitcoin.FEE_TARGETS:
|
||||
self.queue_request('blockchain.estimatefee', [i])
|
||||
self.queue_request('blockchain.relayfee', [])
|
||||
for addr in self.subscribed_addresses:
|
||||
self.queue_request('blockchain.address.subscribe', [addr])
|
||||
for h in self.subscribed_addresses:
|
||||
self.queue_request('blockchain.scripthash.subscribe', [h])
|
||||
|
||||
def get_status_value(self, key):
|
||||
if key == 'status':
|
||||
|
@ -584,7 +585,7 @@ class Network(util.DaemonThread):
|
|||
response['params'] = params
|
||||
# Only once we've received a response to an addr subscription
|
||||
# add it to the list; avoids double-sends on reconnection
|
||||
if method == 'blockchain.address.subscribe':
|
||||
if method == 'blockchain.scripthash.subscribe':
|
||||
self.subscribed_addresses.add(params[0])
|
||||
else:
|
||||
if not response: # Closed remotely / misbehaving
|
||||
|
@ -597,7 +598,7 @@ class Network(util.DaemonThread):
|
|||
if method == 'blockchain.headers.subscribe':
|
||||
response['result'] = params[0]
|
||||
response['params'] = []
|
||||
elif method == 'blockchain.address.subscribe':
|
||||
elif method == 'blockchain.scripthash.subscribe':
|
||||
response['params'] = [params[0]] # addr
|
||||
response['result'] = params[1]
|
||||
callbacks = self.subscriptions.get(k, [])
|
||||
|
@ -608,12 +609,28 @@ class Network(util.DaemonThread):
|
|||
# Response is now in canonical form
|
||||
self.process_response(interface, response, callbacks)
|
||||
|
||||
def addr_to_scripthash(self, addr):
|
||||
h = bitcoin.address_to_scripthash(addr)
|
||||
if h not in self.h2addr:
|
||||
self.h2addr[h] = addr
|
||||
return h
|
||||
|
||||
def overload_cb(self, callback):
|
||||
def cb2(x):
|
||||
p = x.pop('params')
|
||||
addr = self.h2addr[p[0]]
|
||||
x['params'] = [addr]
|
||||
callback(x)
|
||||
return cb2
|
||||
|
||||
def subscribe_to_addresses(self, addresses, callback):
|
||||
msgs = [('blockchain.address.subscribe', [x]) for x in addresses]
|
||||
self.send(msgs, callback)
|
||||
hashes = [self.addr_to_scripthash(addr) for addr in addresses]
|
||||
msgs = [('blockchain.scripthash.subscribe', [x]) for x in hashes]
|
||||
self.send(msgs, self.overload_cb(callback))
|
||||
|
||||
def request_address_history(self, address, callback):
|
||||
self.send([('blockchain.address.get_history', [address])], callback)
|
||||
h = self.addr_to_scripthash(address)
|
||||
self.send([('blockchain.scripthash.get_history', [h])], self.overload_cb(callback))
|
||||
|
||||
def send(self, messages, callback):
|
||||
'''Messages is a list of (method, params) tuples'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
ELECTRUM_VERSION = '2.10.0' # version of the client package
|
||||
PROTOCOL_VERSION = '0.10' # protocol version requested
|
||||
PROTOCOL_VERSION = '0.11' # protocol version requested
|
||||
|
||||
# The hash of the mnemonic seed must begin with this
|
||||
SEED_PREFIX = '01' # Standard wallet
|
||||
|
|
Loading…
Reference in New Issue