Pass tests with new uniform filter constructor signature
This commit is contained in:
parent
a8e822e2c1
commit
cdb26b558f
@ -1 +1 @@
|
||||
from .filter import *
|
||||
from .base import *
|
||||
|
@ -1,8 +1,16 @@
|
||||
# external imports
|
||||
from chainlib.eth.constant import ZERO_ADDRESS
|
||||
|
||||
|
||||
class SyncFilter:
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, chain_spec, registry, queue, caller_address=ZERO_ADDRESS):
|
||||
self.exec_count = 0
|
||||
self.match_count = 0
|
||||
self.queue = queue
|
||||
self.chain_spec = chain_spec
|
||||
self.registry = registry
|
||||
self.caller_address = caller_address
|
||||
|
||||
|
||||
def filter(self, conn, block, tx, db_session):
|
||||
|
@ -25,7 +25,7 @@ from cic_sync_filter.parse import (
|
||||
parse_transferfrom,
|
||||
parse_giftto,
|
||||
)
|
||||
from cic_sync_filter import SyncFilter
|
||||
from .base import SyncFilter
|
||||
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
@ -34,14 +34,6 @@ class CallbackFilter(SyncFilter):
|
||||
|
||||
trusted_addresses = []
|
||||
|
||||
def __init__(self, chain_spec, method, queue, caller_address=ZERO_ADDRESS):
|
||||
super(CallbackFilter, self).__init__()
|
||||
self.queue = queue
|
||||
self.method = method
|
||||
self.chain_spec = chain_spec
|
||||
self.caller_address = caller_address
|
||||
|
||||
|
||||
def call_back(self, transfer_type, result):
|
||||
result['chain_spec'] = result['chain_spec'].asdict()
|
||||
s = celery.signature(
|
||||
@ -88,8 +80,8 @@ class CallbackFilter(SyncFilter):
|
||||
return (transfer_type, transfer_data)
|
||||
|
||||
|
||||
def filter(self, conn, block, tx):
|
||||
super(CallbackFilter, self).filter(conn, block, tx)
|
||||
def filter(self, conn, block, tx, db_session=None):
|
||||
super(CallbackFilter, self).filter(conn, block, tx, db_session)
|
||||
transfer_data = None
|
||||
transfer_type = None
|
||||
try:
|
||||
|
@ -1,21 +0,0 @@
|
||||
# external imports
|
||||
from chainsyncer.filter import SyncFilter as BaseSyncFilter
|
||||
|
||||
|
||||
class SyncFilter(BaseSyncFilter):
|
||||
|
||||
def __init__(self):
|
||||
self.exec_count = 0
|
||||
self.match_count = 0
|
||||
|
||||
|
||||
def filter(self, conn, block, tx):
|
||||
self.exec_count += 1
|
||||
|
||||
|
||||
def register_match(self):
|
||||
self.match_count += 1
|
||||
|
||||
|
||||
def to_logline(self, block, tx, v):
|
||||
return '{} exec {} match {} block {} tx {}: {}'.format(self, self.exec_count, self.match_count, block.number, tx.index, v)
|
@ -24,12 +24,6 @@ logg = logging.getLogger()
|
||||
|
||||
class GasFilter(SyncFilter):
|
||||
|
||||
def __init__(self, chain_spec, queue=None):
|
||||
super(GasFilter, self).__init__()
|
||||
self.queue = queue
|
||||
self.chain_spec = chain_spec
|
||||
|
||||
|
||||
def filter(self, conn, block, tx, db_session):
|
||||
super(GasFilter, self).filter(conn, block, tx, db_session)
|
||||
if tx.value > 0 or len(tx.payload) == 0:
|
||||
|
@ -1,8 +1,9 @@
|
||||
# standard imports
|
||||
import logging
|
||||
|
||||
# third-party imports
|
||||
# external imports
|
||||
import celery
|
||||
from chainlib.eth.constant import ZERO_ADDRESS
|
||||
from chainlib.eth.address import to_checksum_address
|
||||
from hexathon import (
|
||||
add_0x,
|
||||
@ -19,11 +20,9 @@ account_registry_add_log_hash = '0x9cc987676e7d63379f176ea50df0ae8d2d9d1141d1231
|
||||
|
||||
class RegistrationFilter(SyncFilter):
|
||||
|
||||
def __init__(self, chain_spec, contract_address, queue=None):
|
||||
super(RegistrationFilter, self).__init__()
|
||||
self.chain_spec = chain_spec
|
||||
self.queue = queue
|
||||
self.contract_address = contract_address
|
||||
def __init__(self, chain_spec, registry, queue, caller_address=ZERO_ADDRESS):
|
||||
super(RegistrationFilter, self).__init__(chain_spec, registry, queue, caller_address=caller_address)
|
||||
self.contract_address = registry.by_name('AccountRegistry', sender_address=caller_address)
|
||||
|
||||
|
||||
def filter(self, conn, block, tx, db_session=None):
|
||||
|
@ -13,16 +13,15 @@ from chainlib.eth.gas import balance
|
||||
from chainqueue.sql.query import get_tx_cache
|
||||
from chainqueue.enum import StatusBits
|
||||
|
||||
# local imports
|
||||
from .base import SyncFilter
|
||||
|
||||
logg = logging.getLogger()
|
||||
|
||||
|
||||
class StragglerFilter:
|
||||
|
||||
def __init__(self, chain_spec, gas_balance_threshold, queue='cic-eth'):
|
||||
self.chain_spec = chain_spec
|
||||
self.queue = queue
|
||||
self.gas_balance_threshold = gas_balance_threshold
|
||||
class StragglerFilter(SyncFilter):
|
||||
|
||||
gas_balance_threshold = 0
|
||||
|
||||
def filter(self, conn, block, tx, db_session=None):
|
||||
txc = get_tx_cache(self.chain_spec, tx.hash, session=db_session)
|
||||
|
@ -24,13 +24,6 @@ logg = logging.getLogger(__name__)
|
||||
|
||||
class TokenFilter(SyncFilter):
|
||||
|
||||
def __init__(self, chain_spec, queue, call_address=ZERO_ADDRESS):
|
||||
super(TokenFilter, self).__init__()
|
||||
self.queue = queue
|
||||
self.chain_spec = chain_spec
|
||||
self.caller_address = call_address
|
||||
|
||||
|
||||
def filter(self, conn, block, tx, db_session=None):
|
||||
super(TokenFilter, self).filter(conn, block, tx, db_session)
|
||||
if not tx.payload:
|
||||
|
@ -18,14 +18,8 @@ logg = logging.getLogger(__name__)
|
||||
|
||||
class TxFilter(SyncFilter):
|
||||
|
||||
def __init__(self, chain_spec, queue):
|
||||
super(TxFilter, self).__init__()
|
||||
self.queue = queue
|
||||
self.chain_spec = chain_spec
|
||||
|
||||
|
||||
def filter(self, conn, block, tx, db_session=None):
|
||||
super(TxFilter, self).filter(conn, block, tx, db_session)
|
||||
super(TxFilter, self).filter(conn, block, tx, db_session=db_session)
|
||||
|
||||
try:
|
||||
get_tx_local(self.chain_spec, tx.hash)
|
||||
|
1
setup.py
1
setup.py
@ -20,6 +20,7 @@ f.close()
|
||||
|
||||
|
||||
setup(
|
||||
include_package_data=True,
|
||||
install_requires=requirements,
|
||||
tests_require=test_requirements,
|
||||
)
|
||||
|
@ -1,3 +1,6 @@
|
||||
# external imports
|
||||
from cic_eth_registry import CICRegistry
|
||||
|
||||
# local imports
|
||||
from cic_sync_filter.gas import GasFilter
|
||||
from cic_sync_filter.transferauth import TransferAuthFilter
|
||||
@ -21,13 +24,17 @@ def test_filter_bogus(
|
||||
account_registry,
|
||||
):
|
||||
|
||||
queue = None
|
||||
|
||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||
|
||||
fltrs = [
|
||||
TransferAuthFilter(cic_registry, default_chain_spec, eth_rpc, call_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
GasFilter(default_chain_spec, queue=None),
|
||||
TxFilter(default_chain_spec, None),
|
||||
CallbackFilter(default_chain_spec, None, None, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
StragglerFilter(default_chain_spec, None),
|
||||
RegistrationFilter(default_chain_spec, account_registry, queue=None),
|
||||
#TransferAuthFilter(registry, default_chain_spec, eth_rpc, call_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
GasFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
TxFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
CallbackFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
StragglerFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||
]
|
||||
|
||||
for fltr in fltrs:
|
||||
|
@ -229,7 +229,7 @@ def test_callback_filter_filter(
|
||||
mock = CallbackMock()
|
||||
fltr.call_back = mock.call_back
|
||||
|
||||
fltr.filter(eth_rpc, mockblock, tx) #, init_database)
|
||||
fltr.filter(eth_rpc, mockblock, tx)
|
||||
|
||||
assert mock.results.get('transfer') != None
|
||||
assert mock.results['transfer']['destination_token'] == strip_0x(foo_token)
|
||||
|
@ -41,6 +41,7 @@ def test_filter_gas(
|
||||
eth_signer,
|
||||
agent_roles,
|
||||
celery_session_worker,
|
||||
contract_roles,
|
||||
):
|
||||
|
||||
rpc = RPCConnection.connect(default_chain_spec, 'default')
|
||||
@ -87,7 +88,8 @@ def test_filter_gas(
|
||||
)
|
||||
init_database.commit()
|
||||
|
||||
fltr = GasFilter(default_chain_spec, queue=None)
|
||||
queue = None
|
||||
fltr = GasFilter(default_chain_spec, None, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||
|
||||
o = block_latest()
|
||||
r = eth_rpc.do(o)
|
||||
|
@ -6,11 +6,15 @@ import os
|
||||
from eth_accounts_index.registry import AccountRegistry
|
||||
from chainlib.connection import RPCConnection
|
||||
from chainlib.eth.nonce import RPCNonceOracle
|
||||
from chainlib.eth.gas import OverrideGasOracle
|
||||
from chainlib.eth.gas import (
|
||||
OverrideGasOracle,
|
||||
Gas,
|
||||
)
|
||||
from chainlib.eth.tx import(
|
||||
receipt,
|
||||
unpack,
|
||||
Tx,
|
||||
TxFormat,
|
||||
)
|
||||
from chainlib.eth.block import (
|
||||
block_latest,
|
||||
@ -26,6 +30,7 @@ from hexathon import (
|
||||
add_0x,
|
||||
)
|
||||
from cic_eth.queue.query import get_account_tx_local
|
||||
from cic_eth_registry import CICRegistry
|
||||
|
||||
# local imports
|
||||
from cic_sync_filter.register import RegistrationFilter
|
||||
@ -72,14 +77,11 @@ def test_register_filter(
|
||||
tx = Tx(tx_src, block=block, rcpt=rcpt)
|
||||
tx.apply_receipt(rcpt)
|
||||
|
||||
fltr = RegistrationFilter(default_chain_spec, to_checksum_address(os.urandom(20).hex()), queue=None)
|
||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||
queue = None
|
||||
fltr = RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
assert t == None
|
||||
|
||||
fltr = RegistrationFilter(default_chain_spec, to_checksum_address(account_registry), queue=None)
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
logg.debug('t {}'.format(t))
|
||||
|
||||
assert t != None
|
||||
t.get_leaf()
|
||||
assert t.successful()
|
||||
|
||||
@ -93,3 +95,49 @@ def test_register_filter(
|
||||
|
||||
gift = Faucet.parse_give_to_request(gift_tx['data'])
|
||||
assert add_0x(gift[0]) == agent_roles['ALICE']
|
||||
|
||||
|
||||
def test_register_filter_nomatch(
|
||||
default_chain_spec,
|
||||
init_database,
|
||||
eth_rpc,
|
||||
eth_signer,
|
||||
account_registry,
|
||||
faucet,
|
||||
register_lookups,
|
||||
contract_roles,
|
||||
agent_roles,
|
||||
cic_registry,
|
||||
init_celery_tasks,
|
||||
celery_session_worker,
|
||||
caplog,
|
||||
):
|
||||
|
||||
nonce_oracle = RPCNonceOracle(contract_roles['ACCOUNT_REGISTRY_WRITER'], conn=eth_rpc)
|
||||
gas_oracle = OverrideGasOracle(limit=AccountRegistry.gas(), conn=eth_rpc)
|
||||
|
||||
c = Gas(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
||||
(tx_hash_hex, o) = c.create(agent_roles['ALICE'], agent_roles['BOB'], 100 * (10 ** 6))
|
||||
r = eth_rpc.do(o)
|
||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(o['params'][0]))
|
||||
|
||||
o = receipt(tx_hash_hex)
|
||||
rcpt = eth_rpc.do(o)
|
||||
assert rcpt['status'] == 1
|
||||
|
||||
o = block_latest()
|
||||
r = eth_rpc.do(o)
|
||||
o = block_by_number(r, include_tx=False)
|
||||
r = eth_rpc.do(o)
|
||||
block = Block(r)
|
||||
block.txs = [tx_hash_hex]
|
||||
|
||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||
tx = Tx(tx_src, block=block, rcpt=rcpt)
|
||||
tx.apply_receipt(rcpt)
|
||||
|
||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||
queue = None
|
||||
fltr = RegistrationFilter(default_chain_spec, registry, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
assert t == None
|
||||
|
@ -2,6 +2,7 @@
|
||||
import logging
|
||||
|
||||
# external imports
|
||||
import pytest
|
||||
from chainlib.connection import RPCConnection
|
||||
from chainlib.eth.nonce import (
|
||||
OverrideNonceOracle,
|
||||
@ -31,6 +32,7 @@ from chainqueue.sql.state import (
|
||||
set_sent,
|
||||
set_waitforgas,
|
||||
)
|
||||
from cic_eth.error import OutOfGasError
|
||||
|
||||
from hexathon import (
|
||||
strip_0x,
|
||||
@ -55,6 +57,7 @@ def test_straggler_tx(
|
||||
eth_signer,
|
||||
agent_roles,
|
||||
celery_session_worker,
|
||||
contract_roles,
|
||||
):
|
||||
|
||||
rpc = RPCConnection.connect(default_chain_spec, 'default')
|
||||
@ -80,7 +83,8 @@ def test_straggler_tx(
|
||||
set_reserved(default_chain_spec, tx_hash_hex, session=init_database)
|
||||
set_sent(default_chain_spec, tx_hash_hex, session=init_database)
|
||||
|
||||
fltr = StragglerFilter(default_chain_spec, 0, queue=None)
|
||||
queue = None
|
||||
fltr = StragglerFilter(default_chain_spec, None, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||
|
||||
o = block_latest()
|
||||
r = eth_rpc.do(o)
|
||||
@ -117,6 +121,7 @@ def test_waitforgas_tx(
|
||||
agent_roles,
|
||||
celery_session_worker,
|
||||
whoever,
|
||||
contract_roles,
|
||||
):
|
||||
|
||||
safe_gas = 1000000000000000000
|
||||
@ -143,7 +148,9 @@ def test_waitforgas_tx(
|
||||
set_ready(default_chain_spec, tx_hash_hex, session=init_database)
|
||||
set_waitforgas(default_chain_spec, tx_hash_hex, session=init_database)
|
||||
|
||||
fltr = StragglerFilter(default_chain_spec, safe_gas, queue=None)
|
||||
queue = None
|
||||
StragglerFilter.gas_balance_threshold = safe_gas
|
||||
fltr = StragglerFilter(default_chain_spec, None, queue, caller_address=contract_roles['CONTRACT_DEPLOYER'])
|
||||
|
||||
o = block_latest()
|
||||
r = eth_rpc.do(o)
|
||||
|
@ -26,6 +26,7 @@ from eth_token_index import TokenUniqueSymbolIndex
|
||||
from cic_eth_registry.error import UnknownContractError
|
||||
from cic_eth.db.models.gas_cache import GasCache
|
||||
from cic_eth.db.models.base import SessionBase
|
||||
from cic_eth_registry import CICRegistry
|
||||
|
||||
# local imports
|
||||
from cic_sync_filter.token import TokenFilter
|
||||
@ -58,7 +59,8 @@ def test_filter_gas(
|
||||
rcpt = eth_rpc.do(o)
|
||||
assert rcpt['status'] == 1
|
||||
|
||||
fltr = TokenFilter(default_chain_spec, queue=None, call_address=agent_roles['ALICE'])
|
||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||
fltr = TokenFilter(default_chain_spec, registry, queue=None, caller_address=agent_roles['ALICE'])
|
||||
|
||||
o = block_latest()
|
||||
r = eth_rpc.do(o)
|
||||
@ -119,8 +121,9 @@ def test_filter_unknown_contract_error(
|
||||
gas_oracle = OverrideGasOracle(price=1000000000, limit=1000000)
|
||||
c = ERC20(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
||||
(tx_hash_hex, tx_signed_raw_hex) = c.transfer(foo_token, token_roles['FOO_TOKEN_OWNER'], agent_roles['ALICE'], 100, tx_format=TxFormat.RLP_SIGNED)
|
||||
|
||||
fltr = TokenFilter(default_chain_spec, queue=None, call_address=agent_roles['ALICE'])
|
||||
|
||||
registry = CICRegistry(default_chain_spec, eth_rpc)
|
||||
fltr = TokenFilter(default_chain_spec, registry, queue=None, caller_address=agent_roles['ALICE'])
|
||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||
tx = Tx(tx_src)
|
||||
|
@ -84,7 +84,8 @@ def test_filter_tx(
|
||||
set_reserved(default_chain_spec, tx_hash_hex, session=init_database)
|
||||
set_sent(default_chain_spec, tx_hash_hex, session=init_database)
|
||||
|
||||
fltr = TxFilter(default_chain_spec, None)
|
||||
queue = None
|
||||
fltr = TxFilter(default_chain_spec, None, queue)
|
||||
|
||||
o = block_latest()
|
||||
r = eth_rpc.do(o)
|
||||
|
Loading…
Reference in New Issue
Block a user