print_log('initializing database')
self.height = 0
self.last_hash = '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f'
+ db_version = self.db_version
# check version
if self.db_version != db_version:
# sort history, because redeeming transactions are next to the corresponding txout
hist.sort(key=lambda tup: tup[2])
- # uniqueness
- hist = set(map(lambda x: (x[0], x[2]), hist))
-
# add memory pool
with self.mempool_lock:
for txid in self.mempool_hist.get(addr, []):
hist.append((txid, 0, 0))
+ # uniqueness
+ hist = set(map(lambda x: (x[0], x[2]), hist))
+
# convert to dict
hist = map(lambda x: {'tx_hash': x[0], 'height': x[1]}, hist)
serialized_hist = serialized_hist[0:80*i] + new_item + serialized_hist[80*(i+1):]
break
else:
+ self.shared.stop()
hist = self.deserialize(serialized_hist)
raise BaseException("prevout not found", addr, hist, txi.encode('hex'))
for txi in block_inputs:
try:
addr = self.db.Get(txi)
- except:
- # print "addr not in db", txi.encode('hex')
+ except KeyError:
# the input could come from the same block
continue
+ except:
+ traceback.print_exc(file=sys.stdout)
+ self.shared.stop()
+ raise
+
self.batch_txio[txi] = addr
addr_to_read.append(addr)
for addr in addr_to_read:
try:
self.batch_list[addr] = self.db.Get(addr)
- except:
+ except KeyError:
self.batch_list[addr] = ''
+ except:
+ traceback.print_exc(file=sys.stdout)
+ self.shared.stop()
+ raise
# process
new_mempool_hist[addr] = h
# invalidate cache for mempool addresses whose mempool history has changed
- for addr in new_mempool_hist.keys():
- if addr in self.mempool_hist.keys():
+ new_mempool_hist_keys = new_mempool_hist.keys()
+ self_mempool_hist_keys = self.mempool_hist.keys()
+
+ for addr in new_mempool_hist_keys:
+ if addr in self_mempool_hist_keys:
if self.mempool_hist[addr] != new_mempool_hist[addr]:
self.invalidate_cache(addr)
else:
# invalidate cache for addresses that are removed from mempool ?
# this should not be necessary if they go into a block, but they might not
- for addr in self.mempool_hist.keys():
- if addr not in new_mempool_hist.keys():
+ for addr in self_mempool_hist_keys:
+ if addr not in new_mempool_hist_keys:
self.invalidate_cache(addr)