WIP remove db session from filters
This commit is contained in:
parent
cdb26b558f
commit
38d5ca3826
|
@ -0,0 +1 @@
|
||||||
|
include *requirements.txt
|
|
@ -1,10 +1,12 @@
|
||||||
# external imports
|
# external imports
|
||||||
from chainlib.eth.constant import ZERO_ADDRESS
|
from chainlib.eth.constant import ZERO_ADDRESS
|
||||||
|
from chainsyncer.filter import SyncFilter as BaseSyncFilter
|
||||||
|
|
||||||
|
|
||||||
class SyncFilter:
|
class SyncFilter(BaseSyncFilter):
|
||||||
|
|
||||||
def __init__(self, chain_spec, registry, queue, caller_address=ZERO_ADDRESS):
|
def __init__(self, chain_spec, registry, queue, caller_address=ZERO_ADDRESS):
|
||||||
|
super(SyncFilter, self).__init__()
|
||||||
self.exec_count = 0
|
self.exec_count = 0
|
||||||
self.match_count = 0
|
self.match_count = 0
|
||||||
self.queue = queue
|
self.queue = queue
|
||||||
|
@ -13,7 +15,7 @@ class SyncFilter:
|
||||||
self.caller_address = caller_address
|
self.caller_address = caller_address
|
||||||
|
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session):
|
def filter(self, conn, block, tx):
|
||||||
self.exec_count += 1
|
self.exec_count += 1
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -80,8 +80,8 @@ class CallbackFilter(SyncFilter):
|
||||||
return (transfer_type, transfer_data)
|
return (transfer_type, transfer_data)
|
||||||
|
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session=None):
|
def filter(self, conn, block, tx):
|
||||||
super(CallbackFilter, self).filter(conn, block, tx, db_session)
|
super(CallbackFilter, self).filter(conn, block, tx)
|
||||||
transfer_data = None
|
transfer_data = None
|
||||||
transfer_type = None
|
transfer_type = None
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -8,14 +8,15 @@ from hexathon import (
|
||||||
)
|
)
|
||||||
from chainlib.eth.tx import unpack
|
from chainlib.eth.tx import unpack
|
||||||
from chainqueue.db.enum import StatusBits
|
from chainqueue.db.enum import StatusBits
|
||||||
from chainqueue.db.models.tx import TxCache
|
#from chainqueue.db.models.tx import TxCache
|
||||||
from chainqueue.db.models.otx import Otx
|
#from chainqueue.db.models.otx import Otx
|
||||||
from chainlib.eth.address import to_checksum_address
|
from chainlib.eth.address import to_checksum_address
|
||||||
|
#from cic_eth.db.models.base import SessionBase
|
||||||
# local imports
|
from cic_eth.queue.query import get_account_tx_local
|
||||||
from cic_eth.db.models.base import SessionBase
|
|
||||||
from cic_eth.eth.gas import create_check_gas_task
|
from cic_eth.eth.gas import create_check_gas_task
|
||||||
from cic_eth.queue.query import get_paused_tx
|
from cic_eth.queue.query import get_paused_tx
|
||||||
|
|
||||||
|
# local imports
|
||||||
from cic_eth.encode import tx_normalize
|
from cic_eth.encode import tx_normalize
|
||||||
from .base import SyncFilter
|
from .base import SyncFilter
|
||||||
|
|
||||||
|
@ -24,30 +25,24 @@ logg = logging.getLogger()
|
||||||
|
|
||||||
class GasFilter(SyncFilter):
|
class GasFilter(SyncFilter):
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session):
|
def filter(self, conn, block, tx):
|
||||||
super(GasFilter, self).filter(conn, block, tx, db_session)
|
super(GasFilter, self).filter(conn, block, tx)
|
||||||
if tx.value > 0 or len(tx.payload) == 0:
|
if tx.value > 0 or len(tx.payload) == 0:
|
||||||
tx_hash_hex = add_0x(tx.hash)
|
tx_hash_hex = add_0x(tx.hash)
|
||||||
|
|
||||||
sender_target = tx_normalize.wallet_address(tx.inputs[0])
|
sender_target = tx_normalize.wallet_address(tx.inputs[0])
|
||||||
session = SessionBase.bind_session(db_session)
|
txc = get_account_tx_local(self.chain_spec, sender_target, as_recipient=False)
|
||||||
q = session.query(TxCache.recipient)
|
|
||||||
q = q.filter(TxCache.sender==sender_target)
|
|
||||||
r = q.all()
|
|
||||||
|
|
||||||
logline = None
|
logline = None
|
||||||
if len(r) == 0:
|
if len(txc) == 0:
|
||||||
logline = 'unsolicited gas refill tx {}; cannot find {} among senders'.format(tx_hash_hex, tx.outputs[0])
|
logline = 'unsolicited gas refill tx {}; cannot find {} among senders'.format(tx_hash_hex, sender_target)
|
||||||
logline = self.to_logline(block, tx, logline)
|
logline = self.to_logline(block, tx, logline)
|
||||||
logg.info(logline)
|
logg.info(logline)
|
||||||
SessionBase.release_session(session)
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
self.register_match()
|
self.register_match()
|
||||||
|
|
||||||
txs = get_paused_tx(self.chain_spec, status=StatusBits.GAS_ISSUES, sender=sender_target, session=session, decoder=unpack)
|
txs = get_paused_tx(self.chain_spec, status=StatusBits.GAS_ISSUES, sender=sender_target, decoder=unpack)
|
||||||
|
|
||||||
SessionBase.release_session(session)
|
|
||||||
|
|
||||||
t = None
|
t = None
|
||||||
address = to_checksum_address(sender_target)
|
address = to_checksum_address(sender_target)
|
||||||
|
|
|
@ -3,7 +3,7 @@ from .base import SyncFilter
|
||||||
|
|
||||||
class LogFilter(SyncFilter):
|
class LogFilter(SyncFilter):
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session=None):
|
def filter(self, conn, block, tx):
|
||||||
logg.debug('block {} tx {}'.format(block, tx))
|
logg.debug('block {} tx {}'.format(block, tx))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ class RegistrationFilter(SyncFilter):
|
||||||
self.contract_address = registry.by_name('AccountRegistry', sender_address=caller_address)
|
self.contract_address = registry.by_name('AccountRegistry', sender_address=caller_address)
|
||||||
|
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session=None):
|
def filter(self, conn, block, tx):
|
||||||
super(RegistrationFilter, self).filter(conn, block, tx, db_session)
|
super(RegistrationFilter, self).filter(conn, block, tx)
|
||||||
if self.contract_address != tx.inputs[0]:
|
if self.contract_address != tx.inputs[0]:
|
||||||
logg.debug('not an account registry tx; {} != {}'.format(self.contract_address, tx.inputs[0]))
|
logg.debug('not an account registry tx; {} != {}'.format(self.contract_address, tx.inputs[0]))
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -23,8 +23,8 @@ class StragglerFilter(SyncFilter):
|
||||||
|
|
||||||
gas_balance_threshold = 0
|
gas_balance_threshold = 0
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session=None):
|
def filter(self, conn, block, tx):
|
||||||
txc = get_tx_cache(self.chain_spec, tx.hash, session=db_session)
|
txc = get_tx_cache(self.chain_spec, tx.hash)
|
||||||
if txc['status_code'] & StatusBits.GAS_ISSUES > 0:
|
if txc['status_code'] & StatusBits.GAS_ISSUES > 0:
|
||||||
o = balance(tx.outputs[0])
|
o = balance(tx.outputs[0])
|
||||||
r = conn.do(o)
|
r = conn.do(o)
|
||||||
|
|
|
@ -24,8 +24,8 @@ logg = logging.getLogger(__name__)
|
||||||
|
|
||||||
class TokenFilter(SyncFilter):
|
class TokenFilter(SyncFilter):
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session=None):
|
def filter(self, conn, block, tx):
|
||||||
super(TokenFilter, self).filter(conn, block, tx, db_session)
|
super(TokenFilter, self).filter(conn, block, tx)
|
||||||
if not tx.payload:
|
if not tx.payload:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,8 @@ class TransferAuthFilter(SyncFilter):
|
||||||
self.transfer_request_contract = registry.by_name('TransferAuthorization', sender_address=call_address)
|
self.transfer_request_contract = registry.by_name('TransferAuthorization', sender_address=call_address)
|
||||||
|
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session): #rcpt, chain_str, session=None):
|
def filter(self, conn, block, tx):
|
||||||
|
super(TransferAuthFilter, self).filter(conn, block, tx)
|
||||||
|
|
||||||
if tx.payload == None:
|
if tx.payload == None:
|
||||||
logg.debug('no payload')
|
logg.debug('no payload')
|
||||||
|
|
|
@ -18,8 +18,8 @@ logg = logging.getLogger(__name__)
|
||||||
|
|
||||||
class TxFilter(SyncFilter):
|
class TxFilter(SyncFilter):
|
||||||
|
|
||||||
def filter(self, conn, block, tx, db_session=None):
|
def filter(self, conn, block, tx):
|
||||||
super(TxFilter, self).filter(conn, block, tx, db_session=db_session)
|
super(TxFilter, self).filter(conn, block)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
get_tx_local(self.chain_spec, tx.hash)
|
get_tx_local(self.chain_spec, tx.hash)
|
||||||
|
|
|
@ -40,7 +40,7 @@ def test_filter_bogus(
|
||||||
for fltr in fltrs:
|
for fltr in fltrs:
|
||||||
r = None
|
r = None
|
||||||
try:
|
try:
|
||||||
r = fltr.filter(eth_rpc, bogus_tx_block[0], bogus_tx_block[1], db_session=init_database)
|
r = fltr.filter(eth_rpc, bogus_tx_block[0], bogus_tx_block[1])
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
assert not r
|
assert not r
|
||||||
|
|
|
@ -106,7 +106,7 @@ def test_filter_gas(
|
||||||
for v in r:
|
for v in r:
|
||||||
logg.info('have row {}'.format(v))
|
logg.info('have row {}'.format(v))
|
||||||
|
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
|
|
||||||
t.get_leaf()
|
t.get_leaf()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
|
|
@ -80,7 +80,7 @@ def test_register_filter(
|
||||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||||
queue = None
|
queue = None
|
||||||
fltr = RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
fltr = RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
assert t != None
|
assert t != None
|
||||||
t.get_leaf()
|
t.get_leaf()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
@ -139,5 +139,5 @@ def test_register_filter_nomatch(
|
||||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||||
queue = None
|
queue = None
|
||||||
fltr = RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
fltr = RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
assert t == None
|
assert t == None
|
||||||
|
|
|
@ -96,7 +96,7 @@ def test_straggler_tx(
|
||||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
tx = Tx(tx_src, block=block)
|
tx = Tx(tx_src, block=block)
|
||||||
t = fltr.filter(None, block, tx, db_session=init_database)
|
t = fltr.filter(None, block, tx)
|
||||||
logg.debug('foo')
|
logg.debug('foo')
|
||||||
tx_hash_hex_successor = t.get_leaf()
|
tx_hash_hex_successor = t.get_leaf()
|
||||||
logg.debug('bar')
|
logg.debug('bar')
|
||||||
|
@ -163,7 +163,7 @@ def test_waitforgas_tx(
|
||||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
tx = Tx(tx_src, block=block)
|
tx = Tx(tx_src, block=block)
|
||||||
|
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
t.get_leaf()
|
t.get_leaf()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ def test_waitforgas_tx(
|
||||||
assert r['status'] == 1
|
assert r['status'] == 1
|
||||||
|
|
||||||
|
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
t.get_leaf()
|
t.get_leaf()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ def test_waitforgas_tx(
|
||||||
|
|
||||||
init_database.commit()
|
init_database.commit()
|
||||||
|
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
t.get_leaf()
|
t.get_leaf()
|
||||||
|
|
||||||
otx = get_tx_local(default_chain_spec, tx.hash, session=init_database)
|
otx = get_tx_local(default_chain_spec, tx.hash, session=init_database)
|
||||||
|
|
|
@ -73,7 +73,7 @@ def test_filter_gas(
|
||||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
tx = Tx(tx_src, block=block)
|
tx = Tx(tx_src, block=block)
|
||||||
tx.apply_receipt(rcpt)
|
tx.apply_receipt(rcpt)
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
assert t.get() == None
|
assert t.get() == None
|
||||||
|
|
||||||
nonce_oracle = RPCNonceOracle(contract_roles['CONTRACT_DEPLOYER'], eth_rpc)
|
nonce_oracle = RPCNonceOracle(contract_roles['CONTRACT_DEPLOYER'], eth_rpc)
|
||||||
|
@ -84,7 +84,7 @@ def test_filter_gas(
|
||||||
r = eth_rpc.do(o)
|
r = eth_rpc.do(o)
|
||||||
assert r['status'] == 1
|
assert r['status'] == 1
|
||||||
|
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
r = t.get_leaf()
|
r = t.get_leaf()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
|
||||||
|
@ -127,4 +127,4 @@ def test_filter_unknown_contract_error(
|
||||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
tx = Tx(tx_src)
|
tx = Tx(tx_src)
|
||||||
t = fltr.filter(eth_rpc, None, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, None, tx)
|
||||||
|
|
|
@ -62,7 +62,7 @@ def test_filter_transferauth(
|
||||||
tx = Tx(tx_src, block=block)
|
tx = Tx(tx_src, block=block)
|
||||||
|
|
||||||
fltr = TransferAuthFilter(cic_registry, default_chain_spec, eth_rpc, call_address=contract_roles['CONTRACT_DEPLOYER'])
|
fltr = TransferAuthFilter(cic_registry, default_chain_spec, eth_rpc, call_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
|
|
||||||
t.get_leaf()
|
t.get_leaf()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
|
|
@ -97,7 +97,7 @@ def test_filter_tx(
|
||||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
tx = Tx(tx_src, block=block)
|
tx = Tx(tx_src, block=block)
|
||||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
t = fltr.filter(eth_rpc, block, tx)
|
||||||
|
|
||||||
t.get()
|
t.get()
|
||||||
assert t.successful()
|
assert t.successful()
|
||||||
|
|
Loading…
Reference in New Issue