X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=backends%2Fbitcoind%2Fblockchain_processor.py;h=174d18611ff564629dc3690e9dbb8a22c4bb8505;hb=565e2858aff58e882c62719fced34a1679161011;hp=756946d6ed6a958e363879f05640519b5ec909e4;hpb=86b0c5b5b0e5a3e072104d3fbde3927bb584f699;p=electrum-server.git diff --git a/backends/bitcoind/blockchain_processor.py b/backends/bitcoind/blockchain_processor.py index 756946d..174d186 100644 --- a/backends/bitcoind/blockchain_processor.py +++ b/backends/bitcoind/blockchain_processor.py @@ -53,6 +53,15 @@ class BlockchainProcessor(Processor): config.get('bitcoind', 'host'), config.get('bitcoind', 'port')) + while True: + try: + self.bitcoind('getinfo') + break + except: + print_log('cannot contact bitcoind...') + time.sleep(5) + continue + self.height = 0 self.is_test = False self.sent_height = 0 @@ -827,33 +836,21 @@ class BlockchainProcessor(Processor): if not tx: continue + mpa = self.mempool_addresses.get(tx_hash, []) for x in tx.get('inputs'): - txi = (x.get('prevout_hash') + int_to_hex(x.get('prevout_n'), 4)).decode('hex') - try: - addr = self.db.Get(txi) - except: - tx_prev = self.get_mempool_transaction(x.get('prevout_hash')) - try: - addr = tx_prev['outputs'][x.get('prevout_n')]['address'] - if not addr: continue - except: - continue - l = self.mempool_addresses.get(tx_hash, []) - if addr not in l: - l.append(addr) - self.mempool_addresses[tx_hash] = l - #if addr not in touched_addresses: + # we assume that the input address can be parsed by deserialize(); this is true for Electrum transactions + addr = x.get('address') + if addr and addr not in mpa: + mpa.append(addr) touched_addresses.append(addr) for x in tx.get('outputs'): addr = x.get('address') - l = self.mempool_addresses.get(tx_hash, []) - if addr not in l: - l.append(addr) - self.mempool_addresses[tx_hash] = l - #if addr not in touched_addresses: + if addr and addr not in mpa: + mpa.append(addr) touched_addresses.append(addr) + self.mempool_addresses[tx_hash] = mpa self.mempool_hashes.append(tx_hash) # remove older entries from mempool_hashes @@ -864,7 +861,6 @@ class BlockchainProcessor(Processor): if tx_hash not in self.mempool_hashes: self.mempool_addresses.pop(tx_hash) for addr in addresses: - #if addr not in touched_addresses: touched_addresses.append(addr) # rebuild mempool histories