cic-internal-integration/apps/cic-eth/cic_eth/runnable/daemons/filters/token.py

44 lines
1.0 KiB
Python
Raw Normal View History

2021-10-28 21:45:47 +02:00
# external imports
from eth_erc20 import ERC20
from chainlib.eth.contract import (
ABIContractEncoder,
ABIContractType,
)
import celery
# local imports
from .base import SyncFilter
class TokenFilter(SyncFilter):
def __init__(self, chain_spec, queue):
self.queue = queue
self.chain_spec = chain_spec
def filter(self, conn, block, tx, db_session=None):
if not tx.payload:
return (None, None)
try:
r = ERC20.parse_transfer_request(tx.payload)
except RequestMismatchException:
return (None, None)
enc = ABIContractEncoder()
enc.method('transfer')
method = enc.get()
s = celery.signature(
'cic_eth.eth.gas.apply_gas_value_cache',
[
tx.inputs[0],
method,
tx.gas_used,
tx.hash,
],
queue=self.queue,
)
return s.apply_async()