cic-eth: Integrate transaction list queries
This commit is contained in:
40
apps/cic-eth/cic_eth/queue/time.py
Normal file
40
apps/cic-eth/cic_eth/queue/time.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# standard imports
|
||||
import logging
|
||||
|
||||
# third-party imports
|
||||
import web3
|
||||
import celery
|
||||
from cic_registry.chain import ChainSpec
|
||||
|
||||
# local imports
|
||||
from cic_eth.eth.rpc import RpcClient
|
||||
from cic_eth.db.models.otx import Otx
|
||||
from cic_eth.error import NotLocalTxError
|
||||
|
||||
celery_app = celery.current_app
|
||||
|
||||
logg = logging.getLogger()
|
||||
|
||||
|
||||
# TODO: This method does not belong in the _queue_ module, it operates across queue and network
|
||||
@celery_app.task()
|
||||
def tx_times(tx_hash, chain_str):
|
||||
chain_spec = ChainSpec.from_chain_str(chain_str)
|
||||
c = RpcClient(chain_spec)
|
||||
time_pair = {
|
||||
'network': None,
|
||||
'queue': None,
|
||||
}
|
||||
try:
|
||||
rcpt = c.w3.eth.getTransactionReceipt(tx_hash)
|
||||
block = c.w3.eth.getBlock(rcpt['blockHash'])
|
||||
logg.debug('rcpt {}'.format(block))
|
||||
time_pair['network'] = block['timestamp']
|
||||
except web3.exceptions.TransactionNotFound:
|
||||
pass
|
||||
|
||||
otx = Otx.load(tx_hash)
|
||||
if otx != None:
|
||||
time_pair['queue'] = int(otx['date_created'].timestamp())
|
||||
|
||||
return time_pair
|
||||
@@ -386,6 +386,8 @@ def get_tx_cache(tx_hash):
|
||||
'status_code': otx.status,
|
||||
'source_token': txc.source_token_address,
|
||||
'destination_token': txc.destination_token_address,
|
||||
'block_number': txc.block_number,
|
||||
'tx_index': txc.tx_index,
|
||||
'sender': txc.sender,
|
||||
'recipient': txc.recipient,
|
||||
'from_value': int(txc.from_value),
|
||||
@@ -661,6 +663,7 @@ def get_account_tx(address, as_sender=True, as_recipient=True, counterpart=None)
|
||||
"""
|
||||
if not as_sender and not as_recipient:
|
||||
raise ValueError('at least one of as_sender and as_recipient must be True')
|
||||
|
||||
txs = {}
|
||||
|
||||
session = SessionBase.create_session()
|
||||
@@ -676,6 +679,9 @@ def get_account_tx(address, as_sender=True, as_recipient=True, counterpart=None)
|
||||
|
||||
results = q.all()
|
||||
for r in results:
|
||||
if txs.get(r.tx_hash) != None:
|
||||
logg.debug('tx {} already recorded'.format(r.tx_hash))
|
||||
continue
|
||||
txs[r.tx_hash] = r.signed_tx
|
||||
session.close()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user