Only fetch metadata for each wallet address once
This commit is contained in:
@@ -55,6 +55,8 @@ def extra_args():
|
||||
def apply_args(config, args):
|
||||
if config.get('META_LOOKUP_METHOD'):
|
||||
raise NotImplementedError('Sorry, currently only "phone" lookup method is implemented')
|
||||
if config.true('_FORCE_ALL'):
|
||||
config.add(True, '_FORCE', exists_ok=True)
|
||||
|
||||
|
||||
def validate(config, args):
|
||||
@@ -122,19 +124,36 @@ Tags: {}""".format(
|
||||
if ctrl.get('_RAW_TX'):
|
||||
raw_rpc = ctrl.rpc
|
||||
|
||||
tx_store = FileTxStore(store_path, rpc=raw_rpc, notifier=ctrl)
|
||||
tx_lines = []
|
||||
seen_tokens = {}
|
||||
|
||||
tx_threads = []
|
||||
|
||||
token_resolver_queue = Queue()
|
||||
token_result_queue = Queue()
|
||||
tx_queue = Queue()
|
||||
|
||||
token_resolver_worker = TokenResolverWorker(user_address, ctrl, token_store, token_resolver_queue, token_result_queue)
|
||||
token_resolver_worker.start()
|
||||
|
||||
wallets = []
|
||||
for tx in txs['data']:
|
||||
token_resolver_queue.put_nowait(tx['source_token'])
|
||||
token_resolver_queue.put_nowait(tx['destination_token'])
|
||||
if tx['sender'] not in wallets:
|
||||
logg.info('adding wallet {} to metadata lookup'.format(tx['sender']))
|
||||
wallets.append(tx['sender'])
|
||||
if tx['recipient'] not in wallets:
|
||||
wallets.append(tx['recipient'])
|
||||
logg.info('registered wallet {} for metadata lookup'.format(tx['recipient']))
|
||||
|
||||
wallet_threads = []
|
||||
for a in wallets:
|
||||
thread_wallet = MetadataResolverWorker(a, ctrl, user_address_store)
|
||||
thread_wallet.start()
|
||||
wallet_threads.append(thread_wallet)
|
||||
|
||||
ctrl.notify('wait for metadata resolvers to finish work')
|
||||
for t in wallet_threads:
|
||||
t.join()
|
||||
|
||||
tx_store = FileTxStore(store_path, rpc=raw_rpc, notifier=ctrl)
|
||||
tx_threads = []
|
||||
tx_queue = Queue()
|
||||
|
||||
tx_n = 0
|
||||
for tx_src in txs['data']:
|
||||
tx_hash = strip_0x(tx_src['tx_hash'])
|
||||
@@ -182,6 +201,24 @@ Tags: {}""".format(
|
||||
ctrl.write(tx_buf[k])
|
||||
|
||||
|
||||
class MetadataResolverWorker(threading.Thread):
|
||||
|
||||
def __init__(self, wallet_address, ctrl, user_address_store):
|
||||
self.user_address_store = user_address_store
|
||||
self.wallet_address = wallet_address
|
||||
#tx.resolve(self.token_store, self.user_address_store, show_decimals=self.show_decimals, update=self.update)
|
||||
self.ctrl = ctrl
|
||||
super(MetadataResolverWorker, self).__init__()
|
||||
|
||||
|
||||
def run(self):
|
||||
self.ctrl.notify('resolve metadata for {}'.format(self.wallet_address))
|
||||
try:
|
||||
self.user_address_store.by_address(self.wallet_address)
|
||||
except MetadataNotFoundError:
|
||||
logg.info('failed metadata lookup for {}'.format(self.wallet_address))
|
||||
|
||||
|
||||
class TxResolverWorker(threading.Thread):
|
||||
def __init__(self, tx_hash, tx_src, ctrl, tx_store, token_store, user_address_store, token_queue, tx_queue, show_decimals=True, update=None):
|
||||
self.tx_hash = tx_hash
|
||||
@@ -200,13 +237,11 @@ class TxResolverWorker(threading.Thread):
|
||||
def run(self):
|
||||
self.ctrl.notify('resolve details for tx {}'.format(self.tx_hash))
|
||||
tx = ResolvedTokenTx.from_dict(self.tx_src)
|
||||
tx.resolve(self.token_store, self.user_address_store, show_decimals=self.show_decimals, update=self.update)
|
||||
self.token_queue.put_nowait(tx.source_token)
|
||||
self.token_queue.put_nowait(tx.destination_token)
|
||||
try:
|
||||
self.tx_store.put(self.tx_hash, str(self.tx_src), overwrite=self.ctrl.get('_FORCE_ALL'))
|
||||
except FileExistsError:
|
||||
logg.debug('skip put of already existing tx entry {}'.format(self.tx_hash))
|
||||
tx.resolve(self.token_store, self.user_address_store, show_decimals=self.show_decimals, update=self.update, lookup=False)
|
||||
#tx.resolve_tokens(self.token_store, self.user_address_store, show_decimals=self.show_decimals, update=self.update)
|
||||
#self.token_queue.put_nowait(tx.source_token)
|
||||
#self.token_queue.put_nowait(tx.destination_token)
|
||||
self.tx_store.put(self.tx_hash, str(self.tx_src), overwrite=self.ctrl.get('_FORCE_ALL'))
|
||||
self.tx_queue.put(tx)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user