diff --git a/apps/cic-eth/cic_eth/runnable/daemons/filters/callback.py b/apps/cic-eth/cic_eth/runnable/daemons/filters/callback.py index 39c8c02e..c0de8f43 100644 --- a/apps/cic-eth/cic_eth/runnable/daemons/filters/callback.py +++ b/apps/cic-eth/cic_eth/runnable/daemons/filters/callback.py @@ -49,9 +49,9 @@ def parse_giftto(tx): r = Faucet.parse_give_to_request(tx.payload) transfer_data = {} transfer_data['to'] = r[0] - transfer_data['value'] = tx['value'] - transfer_data['from'] = tx['from'] - transfer_data['token_address'] = tx['to'] + transfer_data['value'] = tx.value + transfer_data['from'] = tx.outputs[0] + transfer_data['token_address'] = tx.inputs[0] return ('tokengift', transfer_data) diff --git a/apps/cic-eth/tests/filters/test_callback_filter.py b/apps/cic-eth/tests/filters/test_callback_filter.py index 46450f46..e20faba6 100644 --- a/apps/cic-eth/tests/filters/test_callback_filter.py +++ b/apps/cic-eth/tests/filters/test_callback_filter.py @@ -2,6 +2,7 @@ import logging # external imports +import pytest from chainlib.connection import RPCConnection from chainlib.eth.nonce import RPCNonceOracle from chainlib.eth.gas import OverrideGasOracle @@ -12,16 +13,20 @@ from chainlib.eth.tx import ( snake_and_camel, ) from chainlib.eth.erc20 import ERC20 +from sarafu_faucet import MinterFaucet +from eth_accounts_index import AccountRegistry # local imports from cic_eth.runnable.daemons.filters.callback import ( parse_transfer, parse_transferfrom, + parse_giftto, ) logg = logging.getLogger() +@pytest.mark.skip() def test_transfer_tx( default_chain_spec, init_database, @@ -59,7 +64,7 @@ def test_transfer_tx( assert transfer_type == 'transfer' - +@pytest.mark.skip() def test_transfer_from_tx( default_chain_spec, init_database, @@ -90,7 +95,6 @@ def test_transfer_from_tx( o = transaction(tx_hash_hex) r = rpc.do(o) - logg.debug(r) tx_src = snake_and_camel(r) tx = Tx(tx_src) @@ -104,3 +108,49 @@ def test_transfer_from_tx( (transfer_type, transfer_data) = parse_transferfrom(tx) assert transfer_type == 'transferfrom' + + +def test_faucet_gift_to_tx( + default_chain_spec, + init_database, + eth_rpc, + eth_signer, + foo_token, + agent_roles, + contract_roles, + faucet, + account_registry, + celery_session_worker, + ): + + rpc = RPCConnection.connect(default_chain_spec, 'default') + gas_oracle = OverrideGasOracle(conn=rpc, limit=800000) + + nonce_oracle = RPCNonceOracle(contract_roles['ACCOUNT_REGISTRY_WRITER'], rpc) + txf = AccountRegistry(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle) + (tx_hash_hex, o) = txf.add(account_registry, contract_roles['ACCOUNT_REGISTRY_WRITER'], agent_roles['ALICE']) + r = rpc.do(o) + o = receipt(tx_hash_hex) + r = rpc.do(o) + assert r['status'] == 1 + + nonce_oracle = RPCNonceOracle(agent_roles['ALICE'], rpc) + txf = MinterFaucet(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle) + (tx_hash_hex, o) = txf.give_to(faucet, agent_roles['ALICE'], agent_roles['ALICE']) + r = rpc.do(o) + + o = transaction(tx_hash_hex) + r = rpc.do(o) + tx_src = snake_and_camel(r) + tx = Tx(tx_src) + + o = receipt(tx_hash_hex) + r = rpc.do(o) + assert r['status'] == 1 + + rcpt = snake_and_camel(r) + tx.apply_receipt(rcpt) + + (transfer_type, transfer_data) = parse_giftto(tx) + + assert transfer_type == 'tokengift'