def get_receipt(self, tx_hash: EVMTxHash) -> Optional[EthereumTxReceipt]: cursor = self.db.conn.cursor() results = cursor.execute('SELECT * from ethtx_receipts WHERE tx_hash=?', (tx_hash,)) result = results.fetchone() if result is None: return None tx_receipt = EthereumTxReceipt( tx_hash=tx_hash, contract_address=result[1], status=bool(result[2]), # works since value is either 0 or 1 type=result[3], ) results = cursor.execute('SELECT * from ethtx_receipt_logs WHERE tx_hash=?', (tx_hash,)).fetchall() # noqa: E501 # we do a fetchall since in each loop iteration another query of the cursor happens for result in results: log_index = result[1] tx_receipt_log = EthereumTxReceiptLog( log_index=log_index, data=result[2], address=result[3], removed=bool(result[4]), # works since value is either 0 or 1 ) topic_results = cursor.execute( 'SELECT topic from ethtx_receipt_log_topics WHERE tx_hash=? AND log_index=? ' 'ORDER BY topic_index ASC', (tx_hash, log_index), ) for topic_result in topic_results: tx_receipt_log.topics.append(topic_result[0]) tx_receipt.logs.append(tx_receipt_log) return tx_receipt
def test_curve_remove_liquidity(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0xd63dccdbebeede3a1f50b97c0a8592255203a0559880b80377daa39f915741b0 This tests uses the link pool to verify that withdrawals are correctly decoded """ msg_aggregator = MessagesAggregator() tx_hex = '0xd63dccdbebeede3a1f50b97c0a8592255203a0559880b80377daa39f915741b0' location_label = '0xDf9f0AE722A3919fE7f9cC8805773ef142007Ca6' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1650276061, block_number=14608535, from_address=location_label, to_address='0xF178C0b5Bb7e7aBF4e12A4838C7b7c5bA2C623c0', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x1a4d01d20000000000000000000000000000000000000000000000a8815561fefbe56aa300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8d15fc942541fea7f'), # noqa: E501 nonce=5, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=506, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000a8815561fefbe56aa3'), # noqa: E501 address=string_to_ethereum_address('0xcee60cFa923170e4f8204AE08B4fA6A3F5656F3a'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000df9f0ae722a3919fe7f9cc8805773ef142007ca6'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=507, data=hexstring_to_bytes('0000000000000000000000000000000000000000000000a93078ae269dbeca10'), # noqa: E501 address=string_to_ethereum_address('0x514910771AF9Ca656af840dff83E8264EcF986CA'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000f178c0b5bb7e7abf4e12a4838c7b7c5ba2c623c0'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000df9f0ae722a3919fe7f9cc8805773ef142007ca6'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=508, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000a8815561fefbe56aa30000000000000000000000000000000000000000000000a93078ae269dbeca100000000000000000000000000000000000000000000092c009040e68c381c519'), # noqa: E501 address=string_to_ethereum_address('0xF178C0b5Bb7e7aBF4e12A4838C7b7c5bA2C623c0'), removed=False, topics=[ hexstring_to_bytes('0x5ad056f2e28a8cec232015406b843668c1e36cda598127ec3b8c59b8c72773a0'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000df9f0ae722a3919fe7f9cc8805773ef142007ca6'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=415, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000002c6526ca273a80000000000000000000000000000000000000000000000000000000016a92ed4ce00000000000000000000000000000000000000000000000000000016a9b386830000000000000000000000000000000000000000000156e4db21d9cf6a6d4f3f000000000000000000000000000000000000000000014a4959a6fb2bf53a7108'), # noqa: E501 address=string_to_ethereum_address('0xDC24316b9AE028F1497c275EB9192a3Ea0f67022'), removed=False, topics=[ hexstring_to_bytes('0x26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a768'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000767b35b9f06f6e28e5ed05ee7c27bdf992eba5d2'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=location_label, notes='Burned 0.00393701451 ETH in gas from 0xDf9f0AE722A3919fE7f9cC8805773ef142007Ca6', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=507, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.RETURN_WRAPPED, asset=EthereumToken('0xcee60cFa923170e4f8204AE08B4fA6A3F5656F3a'), balance=Balance(amount=FVal('3108.372467134893484707'), usd_value=ZERO), location_label=location_label, notes='Return 3108.372467134893484707 linkCRV', counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=508, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.WITHDRAWAL, event_subtype=HistoryEventSubType.REMOVE_ASSET, asset=A_LINK, balance=Balance(amount=FVal('3120.992481448818559504'), usd_value=ZERO), location_label=location_label, notes='Remove 3120.992481448818559504 LINK from the curve pool 0xF178C0b5Bb7e7aBF4e12A4838C7b7c5bA2C623c0', # noqa: E501 counterparty=CPT_CURVE, )] assert expected_events == events
def test_curve_deposit(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0x523b7df8e168315e97a836a3d516d639908814785d7df1ef1745de3e55501982 tests that a deposit for the aave pool in curve works correctly """ msg_aggregator = MessagesAggregator() tx_hex = '0x523b7df8e168315e97a836a3d516d639908814785d7df1ef1745de3e55501982' location_label = '0x57bF3B0f29E37619623994071C9e12091919675c' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1650276061, block_number=14608535, from_address='0x57bF3B0f29E37619623994071C9e12091919675c', to_address='0xDeBF20617708857ebe4F679508E7b7863a8A8EeE', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x2b6e993a000000000000000000000000000000000000000000005512b9a6a672640100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c5f3590000000000000000000000000000000000000000000005255abbd43baa53603f90000000000000000000000000000000000000000000000000000000000000001'), # noqa: E501 nonce=599, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=370, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000005512b9a6a67264010000'), # noqa: E501 address=string_to_ethereum_address('0x6B175474E89094C44Da98b954EedeAC495271d0F'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000057bf3b0f29e37619623994071c9e12091919675c'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000debf20617708857ebe4f679508e7b7863a8a8eee'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=383, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000000000000060c5f3590'), # noqa: E501 address=string_to_ethereum_address('0xdAC17F958D2ee523a2206206994597C13D831ec7'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000057bf3b0f29e37619623994071c9e12091919675c'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000debf20617708857ebe4f679508e7b7863a8a8eee'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=396, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000005328394d50efea7abaf4'), # noqa: E501 address=string_to_ethereum_address('0xFd2a8fA60Abd58Efe3EeE34dd494cD491dC14900'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000057bf3b0f29e37619623994071c9e12091919675c'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=397, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000005512b9a6a672640100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c5f3590000000000000000000000000000000000000000000000002038eb27e79fe96ef0000000000000000000000000000000000000000000000000000000002e973710000000000000000000000000000000000000000000000000000000001832b050000000000000000000000000000000000000000002a38dd00eecdefe02a2fcf00000000000000000000000000000000000000000026c6b056a9a8e3b89d5717'), # noqa: E501 address=string_to_ethereum_address('0xDeBF20617708857ebe4F679508E7b7863a8A8EeE'), removed=False, topics=[ hexstring_to_bytes('0x423f6495a08fc652425cf4ed0d1f9e37e571d9b9529b1c1c23cce780b2e7df0d'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000057bf3b0f29e37619623994071c9e12091919675c'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=location_label, notes='Burned 0.00393701451 ETH in gas from 0x57bF3B0f29E37619623994071C9e12091919675c', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=371, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.DEPOSIT, event_subtype=HistoryEventSubType.DEPOSIT_ASSET, asset=A_DAI, balance=Balance(amount=FVal('401746.57'), usd_value=ZERO), location_label=location_label, notes='Deposit 401746.57 DAI in curve pool 0xDeBF20617708857ebe4F679508E7b7863a8A8EeE', counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=384, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.DEPOSIT, event_subtype=HistoryEventSubType.DEPOSIT_ASSET, asset=A_USDT, balance=Balance(amount=FVal('25977.37'), usd_value=ZERO), location_label=location_label, notes='Deposit 25977.37 USDT in curve pool 0xDeBF20617708857ebe4F679508E7b7863a8A8EeE', counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=397, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.RECEIVE, event_subtype=HistoryEventSubType.RECEIVE_WRAPPED, asset=EthereumToken('0xFd2a8fA60Abd58Efe3EeE34dd494cD491dC14900'), balance=Balance(amount=FVal('392698.416886553664731892'), usd_value=ZERO), location_label=location_label, notes='Receive 392698.416886553664731892 a3CRV after depositing in curve pool 0xDeBF20617708857ebe4F679508E7b7863a8A8EeE', # noqa: E501 counterparty=CPT_CURVE, )] assert len(events) == 4 assert events == expected_events
def test_curve_deposit_eth(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0x51c052c8fb60f092f98ffc3cab6340c7c5348ee3b339582feba1c17cbd97ea56 This tests uses the steth/eth pool to verify that deposits including transfer of ETH work properly """ msg_aggregator = MessagesAggregator() tx_hex = '0x51c052c8fb60f092f98ffc3cab6340c7c5348ee3b339582feba1c17cbd97ea56' location_label = '0x767B35b9F06F6e28e5ed05eE7C27bDf992eba5d2' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1650276061, block_number=14608535, from_address=location_label, to_address='0xDC24316b9AE028F1497c275EB9192a3Ea0f67022', value=FVal(0.2) * EXP18, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x0b4c7e4d00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000002c6526ca273a800000000000000000000000000000000000000000000000000054aaa619fda0c01'), # noqa: E501 nonce=5, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=412, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000000002c6526ca273a800'), # noqa: E501 address=string_to_ethereum_address('0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000767b35b9f06f6e28e5ed05ee7c27bdf992eba5d2'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=413, data=hexstring_to_bytes('0xfffffffffffffffffffffffffffffffffffffffffffffffffd39ad935d8c57ff'), # noqa: E501 address=string_to_ethereum_address('0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'), removed=False, topics=[ hexstring_to_bytes('0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000767b35b9f06f6e28e5ed05ee7c27bdf992eba5d2'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=414, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000000005589f42020a37df'), # noqa: E501 address=string_to_ethereum_address('0x06325440D014e39736583c165C2963BA99fAf14E'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000767b35b9f06f6e28e5ed05ee7c27bdf992eba5d2'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=415, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000002c6526ca273a80000000000000000000000000000000000000000000000000000000016a92ed4ce00000000000000000000000000000000000000000000000000000016a9b386830000000000000000000000000000000000000000000156e4db21d9cf6a6d4f3f000000000000000000000000000000000000000000014a4959a6fb2bf53a7108'), # noqa: E501 address=string_to_ethereum_address('0xDC24316b9AE028F1497c275EB9192a3Ea0f67022'), removed=False, topics=[ hexstring_to_bytes('0x26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a768'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000767b35b9f06f6e28e5ed05ee7c27bdf992eba5d2'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=location_label, notes='Burned 0.00393701451 ETH in gas from 0x767B35b9F06F6e28e5ed05eE7C27bDf992eba5d2', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=1, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.DEPOSIT, event_subtype=HistoryEventSubType.DEPOSIT_ASSET, asset=A_ETH, balance=Balance(amount=FVal('0.2'), usd_value=ZERO), location_label=location_label, notes='Deposit 0.2 ETH in curve pool', counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=414, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.DEPOSIT, event_subtype=HistoryEventSubType.DEPOSIT_ASSET, asset=EthereumToken('0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'), balance=Balance(amount=FVal('0.19993786'), usd_value=ZERO), location_label=location_label, notes='Deposit 0.19993786 stETH in curve pool 0xDC24316b9AE028F1497c275EB9192a3Ea0f67022', # noqa: E501 counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=415, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.INFORMATIONAL, event_subtype=HistoryEventSubType.APPROVE, asset=EthereumToken('0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'), balance=Balance(amount=FVal('1.157920892373161954235709850E+59'), usd_value=ZERO), location_label=location_label, notes='Approve 1.157920892373161954235709850E+59 stETH of 0x767B35b9F06F6e28e5ed05eE7C27bDf992eba5d2 for spending by 0xDC24316b9AE028F1497c275EB9192a3Ea0f67022', # noqa: E501 counterparty='0xDC24316b9AE028F1497c275EB9192a3Ea0f67022', ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=416, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.RECEIVE, event_subtype=HistoryEventSubType.RECEIVE_WRAPPED, asset=EthereumToken('0x06325440D014e39736583c165C2963BA99fAf14E'), balance=Balance(amount=FVal('0.385232873991059423'), usd_value=ZERO), location_label=location_label, notes='Receive 0.385232873991059423 steCRV after depositing in curve pool 0xDC24316b9AE028F1497c275EB9192a3Ea0f67022', # noqa: E501 counterparty=CPT_CURVE, )] assert len(events) == 5 assert events == expected_events
def test_get_transaction_receipt( ethereum_manager, call_order, ethereum_manager_connect_at_start, database, ): wait_until_all_nodes_connected( ethereum_manager_connect_at_start=ethereum_manager_connect_at_start, ethereum=ethereum_manager, ) tx_hash = deserialize_evm_tx_hash( '0x12d474b6cbba04fd1a14e55ef45b1eb175985612244631b4b70450c888962a89' ) # noqa: E501 result = ethereum_manager.get_transaction_receipt(tx_hash, call_order=call_order) block_hash = '0x6f3a7838a8788c3371b88df170c3643d19bad896c915a7368681292882b6ad61' assert result['blockHash'] == block_hash assert len(result['logs']) == 2 assert result['gasUsed'] == 144046 assert result['blockNumber'] == 10840714 assert result['logs'][0]['blockNumber'] == 10840714 assert result['logs'][1]['blockNumber'] == 10840714 assert result['status'] == 1 assert result['transactionIndex'] == 110 assert result['logs'][0]['transactionIndex'] == 110 assert result['logs'][1]['transactionIndex'] == 110 assert result['logs'][0]['logIndex'] == 235 assert result['logs'][1]['logIndex'] == 236 from_addy = make_ethereum_address() to_addy = make_ethereum_address() database.add_blockchain_accounts( blockchain=SupportedBlockchain.ETHEREUM, account_data=[ BlockchainAccountData(address=from_addy), BlockchainAccountData(address=to_addy), ], ) db = DBEthTx(database) db.add_ethereum_transactions( [ EthereumTransaction( # need to add the tx first tx_hash=tx_hash, timestamp=1, # all other fields don't matter for this test block_number=1, from_address=from_addy, to_address=to_addy, value=1, gas=1, gas_price=1, gas_used=1, input_data=b'', nonce=1, ) ], relevant_address=from_addy, ) # also test receipt can be stored and retrieved from the DB. # This tests that all node types (say openethereum) are processed properly db.add_receipt_data(result) receipt = db.get_receipt(tx_hash) assert receipt == EthereumTxReceipt( tx_hash=tx_hash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=235, data= b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02T\x0b\xe4\x00', # noqa: E501 address='0x5bEaBAEBB3146685Dd74176f68a0721F91297D37', removed=False, topics=[ b'\xdd\xf2R\xad\x1b\xe2\xc8\x9bi\xc2\xb0h\xfc7\x8d\xaa\x95+\xa7\xf1c\xc4\xa1\x16(\xf5ZM\xf5#\xb3\xef', # noqa: E501 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s(*c\xf0\xe3\xd7\xe9`EuB\x0fwsa\xec\xa3\xc8j', # noqa: E501 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6 \xf1\x93ME\x84\xdd\xa6\x99\x9e\xdc\xad\xd3)\x81)dj\xa5', # noqa: E501 ]), EthereumTxReceiptLog( log_index=236, data= b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6 \xf1\x93ME\x84\xdd\xa6\x99\x9e\xdc\xad\xd3)\x81)dj\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6 \xf1\x93ME\x84\xdd\xa6\x99\x9e\xdc\xad\xd3)\x81)dj\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[\xea\xba\xeb\xb3\x14f\x85\xddt\x17oh\xa0r\x1f\x91)}7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02T\x0b\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\xe0\xb6\xb3\xa7d\x00\x00', # noqa: E501 address='0x73282A63F0e3D7e9604575420F777361ecA3C86A', removed=False, topics=[ b'\xd6\xd4\xf5h\x1c$l\x9fB\xc2\x03\xe2\x87\x97Z\xf1`\x1f\x8d\xf8\x03Z\x92Q\xf7\x9a\xab\\\x8f\t\xe2\xf8' ], # noqa: E501 ), ])
def test_pickle_deposit(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0xba9a52a144d4e79580a557160e9f8269d3e5373ce44bce00ebd609754034b7bd """ msg_aggregator = MessagesAggregator() tx_hex = '0xba9a52a144d4e79580a557160e9f8269d3e5373ce44bce00ebd609754034b7bd' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14318825, from_address='0x0f1a748cDF53Bbad378CE2C4429463d01CcE0C3f', to_address='0xb4EBc2C371182DeEa04B2264B9ff5AC4F0159C69', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0xb6b55f250000000000000000000000000000000000000000000000312ebe013bcd5d6fed'), # noqa: E501 nonce=507, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=259, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000312ebe013bcd5d6fed'), # noqa: E501 address=string_to_ethereum_address('0xf4d2888d29D722226FafA5d9B24F9164c092421E'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000f1a748cdf53bbad378ce2c4429463d01cce0c3f'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000b4ebc2c371182deea04b2264b9ff5ac4f0159c69'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=261, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000001e67da0f130b2d9371'), # noqa: E501 address=string_to_ethereum_address('0xb4EBc2C371182DeEa04B2264B9ff5AC4F0159C69'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000f1a748cdf53bbad378ce2c4429463d01cce0c3f'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 3 expected_events = [ HistoryBaseEntry( event_identifier='0xba9a52a144d4e79580a557160e9f8269d3e5373ce44bce00ebd609754034b7bd', sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label='0x0f1a748cDF53Bbad378CE2C4429463d01CcE0C3f', notes='Burned 0.00393701451 ETH in gas from 0x0f1a748cDF53Bbad378CE2C4429463d01CcE0C3f', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier='0xba9a52a144d4e79580a557160e9f8269d3e5373ce44bce00ebd609754034b7bd', sequence_index=260, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.DEPOSIT, event_subtype=HistoryEventSubType.DEPOSIT_ASSET, asset=EthereumToken('0xf4d2888d29D722226FafA5d9B24F9164c092421E'), balance=Balance(amount=FVal('907.258590539447889901'), usd_value=ZERO), location_label='0x0f1a748cDF53Bbad378CE2C4429463d01CcE0C3f', notes='Deposit 907.258590539447889901 LOOKS in pickle contract', counterparty='pickle finance', ), HistoryBaseEntry( event_identifier='0xba9a52a144d4e79580a557160e9f8269d3e5373ce44bce00ebd609754034b7bd', sequence_index=262, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.RECEIVE, event_subtype=HistoryEventSubType.RECEIVE_WRAPPED, asset=EthereumToken('0xb4EBc2C371182DeEa04B2264B9ff5AC4F0159C69'), balance=Balance(amount=FVal('560.885632516582380401'), usd_value=ZERO), location_label='0x0f1a748cDF53Bbad378CE2C4429463d01CcE0C3f', notes='Receive 560.885632516582380401 pLOOKS after depositing in pickle contract', counterparty='pickle finance', )] assert events == expected_events
def test_liquity_trove_deposit_lusd(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0x40bb08427a3b99fb9896cf14858d82d361a6e7a8fb7dd6d2000511ac3dca5707 Deposit 2.1 ether and borrow 4752 LUSD """ msg_aggregator = MessagesAggregator() tx_hex = '0x40bb08427a3b99fb9896cf14858d82d361a6e7a8fb7dd6d2000511ac3dca5707' user_address = '0x648E180e246741363639B1496762763dd25649db' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14318825, from_address=user_address, to_address='0x24179cd81c9e782a4096035f7ec97fb8b783e007', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0xc6a6cf200000000000000000000000000000000000000000000000000023c5d78add1ce10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001906c5721af5fbe700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de9ac8262766e73a1d5f75cc3c37ae495e88d225000000000000000000000000cb926f497763ea5cf993912a442431e6a91d5a64'), # noqa: E501 nonce=507, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=204, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000038f9ba4f4e8bb875c546b0000000000000000000000000000000000000000000000aed129e69968ff40000000000000000000000000000000000000000000000000aed129e69968ff40000000000000000000000000000000000000000000000000000000000000000002'), # noqa: E501 address=string_to_ethereum_address('0x24179CD81c9e782A4096035f7eC97fB8B783e007'), removed=False, topics=[ hexstring_to_bytes('0xc3770d654ed33aeea6bf11ac8ef05d02a6a04ed4686dd2f624d853bbec43cc8b'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000648e180e246741363639b1496762763dd25649db'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=207, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000001906c5721af5fbe70000'), # noqa: E501 address=string_to_ethereum_address('0x5f98805A4E8be255a32880FDeC7F6728C6568bA0'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000648e180e246741363639b1496762763dd25649db'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=208, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000004e900a6a97e3873abb07'), # noqa: E501 address=string_to_ethereum_address('0xDf9Eb223bAFBE5c5271415C75aeCD68C21fE3D7F'), removed=False, topics=[ hexstring_to_bytes('0xca232b5abb988c540b959ff6c3bfae3e97fff964fd098c508f9613c0a6bf1a80'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 2 expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=user_address, notes=f'Burned 0.00393701451 ETH in gas from {user_address}', counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=208, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.PAYBACK_DEBT, asset=A_LUSD, balance=Balance(amount=FVal('118184.07'), usd_value=ZERO), location_label=user_address, notes='Return 118184.07 LUSD to liquity', counterparty='liquity', )] assert events == expected_events
def test_kyber_legacy_new_contract(database, ethereum_manager, eth_transactions): """Data for trade taken from https://etherscan.io/tx/0xe80928d5e21f9628c047af1f8b191cbffbb6b8b9945adb502cfb3af152552f22 """ msg_aggregator = MessagesAggregator() tx_hex = '0xe80928d5e21f9628c047af1f8b191cbffbb6b8b9945adb502cfb3af152552f22' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1644182638, block_number=14154915, from_address='0x5340F6faff9BF55F66C16Db6Bf9E020d987F87D0', to_address='0x9AAb3f75489902f3a48495025729a0AF77d4b11e', value=0, gas=2784000, gas_price=71000000000, gas_used=938231, input_data=hexstring_to_bytes( '0xae591d54000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000001e52b2aa0000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd520000000000000000000000005340f6faff9bf55f66c16db6bf9e020d987f87d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000003ef569a751d10e0000000000000000000000000de63aef60307655405835da74ba02ce4db1a42fb000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000' ), # noqa: E501 nonce=41, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=349, data=hexstring_to_bytes( '0x00000000000000000000000000000000000000000000000000000001e52b2aa0' ), # noqa: E501 address=string_to_ethereum_address( '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), removed=False, topics=[ hexstring_to_bytes( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000005340f6faff9bf55f66c16db6bf9e020d987f87d0' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000007c66550c9c730b6fdd4c03bc2e73c5462c5f7acc' ), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=369, data=hexstring_to_bytes( '0x000000000000000000000000000000000000000000000083a3ee0140f345d2d8' ), # noqa: E501 address=string_to_ethereum_address( '0xD533a949740bb3306d119CC777fa900bA034cd52'), removed=False, topics=[ hexstring_to_bytes( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000007c66550c9c730b6fdd4c03bc2e73c5462c5f7acc' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000005340f6faff9bf55f66c16db6bf9e020d987f87d0' ), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=372, data=hexstring_to_bytes( '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd520000000000000000000000005340f6faff9bf55f66c16db6bf9e020d987f87d000000000000000000000000000000000000000000000000000000001e52b2aa0000000000000000000000000000000000000000000000083a3ee0140f345d2d8000000000000000000000000de63aef60307655405835da74ba02ce4db1a42fb0000000000000000000000000000000000000000000000000000000000000012' ), # noqa: E501 address=string_to_ethereum_address( '0x9AAb3f75489902f3a48495025729a0AF77d4b11e'), removed=False, topics=[ hexstring_to_bytes( '0xf724b4df6617473612b53d7f88ecc6ea983074b30960a049fcd0657ffe808083' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000005340f6faff9bf55f66c16db6bf9e020d987f87d0' ), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 3 expected_events = [ HistoryBaseEntry( event_identifier= '0xe80928d5e21f9628c047af1f8b191cbffbb6b8b9945adb502cfb3af152552f22', sequence_index=0, timestamp=1644182638000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.066614401), usd_value=FVal(0), ), location_label='0x5340F6faff9BF55F66C16Db6Bf9E020d987F87D0', notes= 'Burned 0.066614401 ETH in gas from 0x5340F6faff9BF55F66C16Db6Bf9E020d987F87D0', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier= '0xe80928d5e21f9628c047af1f8b191cbffbb6b8b9945adb502cfb3af152552f22', sequence_index=350, timestamp=1644182638000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.TRADE, event_subtype=HistoryEventSubType.SPEND, asset=A_USDC, balance=Balance(amount=FVal(8139.77872), usd_value=FVal(0)), location_label='0x5340F6faff9BF55F66C16Db6Bf9E020d987F87D0', notes='Swap 8139.77872 USDC in kyber', counterparty='kyber legacy', ), HistoryBaseEntry( event_identifier= '0xe80928d5e21f9628c047af1f8b191cbffbb6b8b9945adb502cfb3af152552f22', sequence_index=370, timestamp=1644182638000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.TRADE, event_subtype=HistoryEventSubType.RECEIVE, asset=A_CRV, balance=Balance(amount=FVal('2428.33585390706162556'), usd_value=FVal(0)), location_label='0x5340F6faff9BF55F66C16Db6Bf9E020d987F87D0', notes='Receive 2428.33585390706162556 CRV from kyber swap', counterparty='kyber legacy', ), ] assert events == expected_events
def test_gitcoin_claim(database, ethereum_manager, eth_transactions): """Data for claim taken from https://etherscan.io/tx/0x0e22cbdbac56c785f186bec44d715ab0834ceeadd96573c030f2fae1550b64fa """ msg_aggregator = MessagesAggregator() tx_hex = '0x0e22cbdbac56c785f186bec44d715ab0834ceeadd96573c030f2fae1550b64fa' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14351442, from_address='0xdF5CEF8Dc0CEA8DC200F09280915d1CD7a016BDe', to_address='0xDE3e5a990bCE7fC60a6f017e7c4a95fc4939299E', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x09c5eabe000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e43f7658fd000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000013500050000a7823d6f1e31569f51861e345b30c6bebf70ebe70000000000009cf6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101006401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000003f615ba21bc6cc5d4a6d798c5950cc5c42937fbd00000000000000000000000000000000000000000000000007392088b40d14000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000006c187e1b71ffbee4429003bb846c1b3eb1610000000000000000000000000000000000000000000000000000048c52ee05b140000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041b1c1c1c73a08c7605fa9c69f068338cb7cd1c8dd21189cbe56f4cc66cff8dc7f0b0c8cc8c64433ea24643b893c9062beae6a05656b1df5643a242533d63925144c3e5c7dfd0509fb3c4232cfdb4c500e942a95b23439b3e18bab4a40057e1bdfae2d9967025b3f8fdca13354b25250c0d7fa9e4b472dc97df1f0cd0f595dc266d09e711628b3a63c1a6e4c83a11d3655891e31901eacf73b927e10bfbe6b0d5ed808cc228d606779a19a7dfb7393956b4fada14eaef8f6de6ee3824e67d6df18cc2d55f00cf869cc920135a94fb4abc213dc43e97812879d9efab046e4fffb931dcb55e5aa2b86f6a848408fea42cd221df99f1720b2ce22830498d78d04e1d083ba12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 nonce=12, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=473, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000000eb9078f7826f80000'), # noqa: E501 address=string_to_ethereum_address('0xDe30da39c46104798bB5aA3fe8B9e0e1F348163F'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000de3e5a990bce7fc60a6f017e7c4a95fc4939299e'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000df5cef8dc0cea8dc200f09280915d1cd7a016bde'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=6, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000018580000000000000000000000000df5cef8dc0cea8dc200f09280915d1cd7a016bde00000000000000000000000000000000000000000000000eb9078f7826f80000bcfadbb867130fed43327b6c801903ab2afb5134ba5f3d47d2647ab858d5e49e'), # noqa: E501 address=string_to_ethereum_address('0xDE3e5a990bCE7fC60a6f017e7c4a95fc4939299E'), removed=False, topics=[ hexstring_to_bytes('0x04672052dcb6b5b19a9cc2ec1b8f447f1f5e47b5e24cfa5e4ffb640d63ca2be7'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 2 expected_events = [ HistoryBaseEntry( event_identifier='0x0e22cbdbac56c785f186bec44d715ab0834ceeadd96573c030f2fae1550b64fa', sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label='0xdF5CEF8Dc0CEA8DC200F09280915d1CD7a016BDe', notes='Burned 0.00393701451 ETH in gas from 0xdF5CEF8Dc0CEA8DC200F09280915d1CD7a016BDe', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier='0x0e22cbdbac56c785f186bec44d715ab0834ceeadd96573c030f2fae1550b64fa', sequence_index=474, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.RECEIVE, event_subtype=HistoryEventSubType.AIRDROP, asset=EthereumToken('0xDe30da39c46104798bB5aA3fe8B9e0e1F348163F'), balance=Balance(amount=FVal('271.5872'), usd_value=ZERO), location_label='0xdF5CEF8Dc0CEA8DC200F09280915d1CD7a016BDe', notes='Claim 271.5872 GTC from the GTC airdrop', counterparty='0xDE3e5a990bCE7fC60a6f017e7c4a95fc4939299E', ), ] assert events == expected_events
def test_gnosis_chain_bridge(database, ethereum_manager, eth_transactions): """Data for bridge taken from https://etherscan.io/tx/0x52f853d559d83b5303faf044e00e9109bd5c6a05b6633f9df34939f8e7c6de02 """ msg_aggregator = MessagesAggregator() tx_hex = '0x52f853d559d83b5303faf044e00e9109bd5c6a05b6633f9df34939f8e7c6de02' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14351442, from_address='0x5EDCf547eCE0EA1765D6C02e9E5bae53b52E09D4', to_address='0x88ad09518695c6c3712AC10a214bE5109a655671', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x09c5eabe000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e43f7658fd000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000013500050000a7823d6f1e31569f51861e345b30c6bebf70ebe70000000000009cf6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101006401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000003f615ba21bc6cc5d4a6d798c5950cc5c42937fbd00000000000000000000000000000000000000000000000007392088b40d14000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000006c187e1b71ffbee4429003bb846c1b3eb1610000000000000000000000000000000000000000000000000000048c52ee05b140000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041b1c1c1c73a08c7605fa9c69f068338cb7cd1c8dd21189cbe56f4cc66cff8dc7f0b0c8cc8c64433ea24643b893c9062beae6a05656b1df5643a242533d63925144c3e5c7dfd0509fb3c4232cfdb4c500e942a95b23439b3e18bab4a40057e1bdfae2d9967025b3f8fdca13354b25250c0d7fa9e4b472dc97df1f0cd0f595dc266d09e711628b3a63c1a6e4c83a11d3655891e31901eacf73b927e10bfbe6b0d5ed808cc228d606779a19a7dfb7393956b4fada14eaef8f6de6ee3824e67d6df18cc2d55f00cf869cc920135a94fb4abc213dc43e97812879d9efab046e4fffb931dcb55e5aa2b86f6a848408fea42cd221df99f1720b2ce22830498d78d04e1d083ba12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 nonce=12, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=473, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000000000000250d51ce33'), # noqa: E501 address=string_to_ethereum_address('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000088ad09518695c6c3712ac10a214be5109a655671'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000005edcf547ece0ea1765d6c02e9e5bae53b52e09d4'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=474, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000000000000250d51ce33'), # noqa: E501 address=string_to_ethereum_address('0x88ad09518695c6c3712AC10a214bE5109a655671'), removed=False, topics=[ hexstring_to_bytes('0x9afd47907e25028cdaca89d193518c302bbb128617d5a992c5abd45815526593'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000005edcf547ece0ea1765d6c02e9e5bae53b52e09d4'), # noqa: E501 hexstring_to_bytes('0x00050000a7823d6f1e31569f51861e345b30c6bebf70ebe70000000000009cf9'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=6, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000001'), # noqa: E501 address=string_to_ethereum_address('0x4c36d2919e407f0cc2ee3c993ccf8ac26d9ce64e'), removed=False, topics=[ hexstring_to_bytes('0x27333edb8bdcd40a0ae944fb121b5e2d62ea782683946654a0f5e607a908d578'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000f6a78083ca3e2a662d6dd1703c939c8ace2e268d'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000088ad09518695c6c3712ac10a214be5109a655671'), # noqa: E501 hexstring_to_bytes('0x00050000a7823d6f1e31569f51861e345b30c6bebf70ebe70000000000009cf9'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 2 expected_events = [ HistoryBaseEntry( event_identifier='0x52f853d559d83b5303faf044e00e9109bd5c6a05b6633f9df34939f8e7c6de02', sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label='0x5EDCf547eCE0EA1765D6C02e9E5bae53b52E09D4', notes='Burned 0.00393701451 ETH in gas from 0x5EDCf547eCE0EA1765D6C02e9E5bae53b52E09D4', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier='0x52f853d559d83b5303faf044e00e9109bd5c6a05b6633f9df34939f8e7c6de02', sequence_index=474, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.TRANSFER, event_subtype=HistoryEventSubType.BRIDGE, asset=EthereumToken('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), balance=Balance(amount=FVal('159137.254963'), usd_value=ZERO), location_label='0x5EDCf547eCE0EA1765D6C02e9E5bae53b52E09D4', notes='Bridge 159137.254963 USDC from gnosis chain', counterparty=CPT_GNOSIS_CHAIN, ), ] assert events == expected_events
def setup_ethereum_transactions_test( database: DBHandler, transaction_already_queried: bool, one_receipt_in_db: bool = False, ) -> Tuple[List[EthereumTransaction], List[EthereumTxReceipt]]: dbethtx = DBEthTx(database) tx_hash1 = '0x692f9a6083e905bdeca4f0293f3473d7a287260547f8cbccc38c5cb01591fcda' tx_hash1_b = hexstring_to_bytes(tx_hash1) transaction1 = EthereumTransaction( tx_hash=tx_hash1_b, timestamp=Timestamp(1630532276), block_number=13142218, from_address=string_to_ethereum_address( '0x443E1f9b1c866E54e914822B7d3d7165EdB6e9Ea'), to_address=string_to_ethereum_address( '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'), value=int(10 * 10**18), gas=194928, gas_price=int(0.000000204 * 10**18), gas_used=136675, input_data=hexstring_to_bytes( '0x7ff36ab5000000000000000000000000000000000000000000000367469995d0723279510000000000000000000000000000000000000000000000000000000000000080000000000000000000000000443e1f9b1c866e54e914822b7d3d7165edb6e9ea00000000000000000000000000000000000000000000000000000000612ff9b50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000002a3bff78b79a009976eea096a51a948a3dc00e34' ), # noqa: E501 nonce=13, ) tx_hash2 = '0x6beab9409a8f3bd11f82081e99e856466a7daf5f04cca173192f79e78ed53a77' tx_hash2_b = hexstring_to_bytes(tx_hash2) transaction2 = EthereumTransaction( tx_hash=tx_hash2_b, timestamp=Timestamp(1631013757), block_number=13178342, from_address=string_to_ethereum_address( '0x442068F934BE670aDAb81242C87144a851d56d16'), to_address=string_to_ethereum_address( '0xEaDD9B69F96140283F9fF75DA5FD33bcF54E6296'), value=0, gas=77373, gas_price=int(0.000000100314697497 * 10**18), gas_used=46782, input_data=hexstring_to_bytes( '0xa9059cbb00000000000000000000000020c8032d4f7d4a380385f87aeadf05bed84504cb000000000000000000000000000000000000000000000000000000003b9deec6' ), # noqa: E501 nonce=3, ) transactions = [transaction1, transaction2] if transaction_already_queried is True: dbethtx.add_ethereum_transactions(ethereum_transactions=transactions) result, _ = dbethtx.get_ethereum_transactions( ETHTransactionsFilterQuery.make()) assert result == transactions expected_receipt1 = EthereumTxReceipt( tx_hash=tx_hash1_b, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=295, data=hexstring_to_bytes( '0x0000000000000000000000000000000000000000000000008ac7230489e80000' ), # noqa: E501 address=string_to_ethereum_address( '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), removed=False, topics=[ hexstring_to_bytes( '0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d' ), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=296, data=hexstring_to_bytes( '0x0000000000000000000000000000000000000000000000008ac7230489e80000' ), # noqa: E501 address=string_to_ethereum_address( '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), removed=False, topics=[ hexstring_to_bytes( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d' ), # noqa: E501 hexstring_to_bytes( '0x000000000000000000000000caa004418eb42cdf00cb057b7c9e28f0ffd840a5' ), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=297, data=hexstring_to_bytes( '0x00000000000000000000000000000000000000000000036ba1d53baeeda5ed20' ), # noqa: E501 address=string_to_ethereum_address( '0x2a3bFF78B79A009976EeA096a51A948a3dC00e34'), removed=False, topics=[ hexstring_to_bytes( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' ), # noqa: E501 hexstring_to_bytes( '0x000000000000000000000000caa004418eb42cdf00cb057b7c9e28f0ffd840a5' ), # noqa: E501 hexstring_to_bytes( '0x000000000000000000000000443e1f9b1c866e54e914822b7d3d7165edb6e9ea' ), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=298, data=hexstring_to_bytes( '0x000000000000000000000000000000000000000000007b6ea033189ba7d047e30000000000000000000000000000000000000000000000140bc8194dd0f5e4be' ), # noqa: E501 address=string_to_ethereum_address( '0xcaA004418eB42cdf00cB057b7C9E28f0FfD840a5'), removed=False, topics=[ hexstring_to_bytes( '0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1' ) ], # noqa: E501 ), EthereumTxReceiptLog( log_index=299, data=hexstring_to_bytes( '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000036ba1d53baeeda5ed200000000000000000000000000000000000000000000000000000000000000000' ), # noqa: E501 address=string_to_ethereum_address( '0xcaA004418eB42cdf00cB057b7C9E28f0FfD840a5'), removed=False, topics=[ hexstring_to_bytes( '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d' ), # noqa: E501 hexstring_to_bytes( '0x000000000000000000000000443e1f9b1c866e54e914822b7d3d7165edb6e9ea' ), # noqa: E501 ], ), ], ) expected_receipt2 = EthereumTxReceipt( tx_hash=tx_hash2_b, contract_address=None, status=True, type=2, logs=[ EthereumTxReceiptLog( log_index=438, data=hexstring_to_bytes( '0x000000000000000000000000000000000000000000000000000000003b9deec6' ), # noqa: E501 address=string_to_ethereum_address( '0xEaDD9B69F96140283F9fF75DA5FD33bcF54E6296'), removed=False, topics=[ hexstring_to_bytes( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' ), # noqa: E501 hexstring_to_bytes( '0x000000000000000000000000442068f934be670adab81242c87144a851d56d16' ), # noqa: E501 hexstring_to_bytes( '0x00000000000000000000000020c8032d4f7d4a380385f87aeadf05bed84504cb' ), # noqa: E501 ], ), ], ) if one_receipt_in_db: dbethtx.add_receipt_data(txreceipt_to_data(expected_receipt1)) return transactions, [expected_receipt1, expected_receipt2]
def test_liquity_trove_adjust(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0xdb9a541a4af7d5d46d7ea5fe4a2a752dcb731d64d052f86f630e97362063602c Deposit 2.1 ether and borrow 4752 LUSD """ msg_aggregator = MessagesAggregator() tx_hex = '0xdb9a541a4af7d5d46d7ea5fe4a2a752dcb731d64d052f86f630e97362063602c' user_address = '0x9ba961989Dd6609Ed091f512bE947118c40F2291' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14318825, from_address=user_address, to_address='0x24179cd81c9e782a4096035f7ec97fb8b783e007', value=FVal('2.1') * EXP18, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0xc6a6cf2000000000000000000000000000000000000000000000000000238e8a8455758900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001018f9e3f8eea75e0100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e24328e7df3d87c1cbcc9043326f9b20c425a9e6000000000000000000000000de64f98baece7282973ce8d67cd73455d4748673'), # noqa: E501 nonce=507, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=91, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000014a3a4295480654a6'), # noqa: E501 address=string_to_ethereum_address('0x5f98805A4E8be255a32880FDeC7F6728C6568bA0'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000004f9fbb3f1e99b56e0fe2892e623ed36a76fc605d'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=95, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000021e19de846fc75de296000000000000000000000000000000000000000000000000429d069189e00000000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000002'), # noqa: E501 address=string_to_ethereum_address('0x24179CD81c9e782A4096035f7eC97fB8B783e007'), removed=False, topics=[ hexstring_to_bytes('0xc3770d654ed33aeea6bf11ac8ef05d02a6a04ed4686dd2f624d853bbec43cc8b'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000009ba961989dd6609ed091f512be947118c40f2291'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=98, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000001018f9e3f8eea75e010'), # noqa: E501 address=string_to_ethereum_address('0x5f98805A4E8be255a32880FDeC7F6728C6568bA0'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000009ba961989dd6609ed091f512be947118c40f2291'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=99, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000004e97821fe7ced4f8b2fb'), # noqa: E501 address=string_to_ethereum_address('0xDf9Eb223bAFBE5c5271415C75aeCD68C21fE3D7F'), removed=False, topics=[ hexstring_to_bytes('0xca232b5abb988c540b959ff6c3bfae3e97fff964fd098c508f9613c0a6bf1a80'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 3 expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=user_address, notes=f'Burned 0.00393701451 ETH in gas from {user_address}', counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=1, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.DEPOSIT, event_subtype=HistoryEventSubType.DEPOSIT_ASSET, asset=A_ETH, balance=Balance(amount=FVal('2.1'), usd_value=ZERO), location_label=user_address, notes='Deposit 2.1 ETH as collateral for liquity', counterparty='liquity', ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=100, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.WITHDRAWAL, event_subtype=HistoryEventSubType.GENERATE_DEBT, asset=A_LUSD, balance=Balance(amount=FVal('4751.162005820150243344'), usd_value=ZERO), location_label=user_address, notes='Generate 4751.162005820150243344 LUSD from liquity', counterparty='liquity', )] assert events == expected_events
def test_liquity_trove_remove_eth(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0x6be5312c21855c3cc324b5b6ce9f9f65dbd488e270e84ac5e6fb96c74d83fe4e Deposit 2.1 ether and borrow 4752 LUSD """ msg_aggregator = MessagesAggregator() tx_hex = '0x6be5312c21855c3cc324b5b6ce9f9f65dbd488e270e84ac5e6fb96c74d83fe4e' user_address = '0x648E180e246741363639B1496762763dd25649db' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14318825, from_address=user_address, to_address='0x24179cd81c9e782a4096035f7ec97fb8b783e007', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0xc6a6cf2000000000000000000000000000000000000000000000000000238811c2e89e1b000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb926f497763ea5cf993912a442431e6a91d5a64000000000000000000000000c68d61757a9894f34871c0ae733ac034d9abf807'), # noqa: E501 nonce=507, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=204, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000038f9ba4f4e8bb875c546b0000000000000000000000000000000000000000000000aed129e69968ff40000000000000000000000000000000000000000000000000aed129e69968ff40000000000000000000000000000000000000000000000000000000000000000002'), # noqa: E501 address=string_to_ethereum_address('0x24179CD81c9e782A4096035f7eC97fB8B783e007'), removed=False, topics=[ hexstring_to_bytes('0xc3770d654ed33aeea6bf11ac8ef05d02a6a04ed4686dd2f624d853bbec43cc8b'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000648e180e246741363639b1496762763dd25649db'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=293, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 address=string_to_ethereum_address('0x5f98805A4E8be255a32880FDeC7F6728C6568bA0'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000648e180e246741363639b1496762763dd25649db'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=208, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000004e927b246c443a2daac9'), # noqa: E501 address=string_to_ethereum_address('0xDf9Eb223bAFBE5c5271415C75aeCD68C21fE3D7F'), removed=False, topics=[ hexstring_to_bytes('0xca232b5abb988c540b959ff6c3bfae3e97fff964fd098c508f9613c0a6bf1a80'), # noqa: E501 ], ), ], ) internal_tx = EthereumInternalTransaction( parent_tx_hash=evmhash, trace_id=19, timestamp=Timestamp(1646375440), block_number=10182160, from_address='0xDf9Eb223bAFBE5c5271415C75aeCD68C21fE3D7F', to_address=user_address, value=FVal(32) * EXP18, ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) dbethtx.add_ethereum_internal_transactions([internal_tx], relevant_address=user_address) # noqa: E501 decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 3 expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=user_address, notes=f'Burned 0.00393701451 ETH in gas from {user_address}', counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=1, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.WITHDRAWAL, event_subtype=HistoryEventSubType.REMOVE_ASSET, asset=A_ETH, balance=Balance(amount=FVal('32'), usd_value=ZERO), location_label=user_address, notes='Withdraw 32 ETH collateral from liquity', counterparty='liquity', ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=295, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.PAYBACK_DEBT, asset=A_LUSD, balance=Balance(amount=FVal('0'), usd_value=ZERO), location_label=user_address, notes='Return 0 LUSD to liquity', counterparty='liquity', )] assert events == expected_events
def test_curve_remove_liquidity_with_internal(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0x30bb99f3e34fb1fbcf009320af7e290caf18b04b207319e15aa8ffbf645f4ad9 This tests uses the steth pool to verify that withdrawals are correctly decoded when an internal transaction is made for eth transfers """ msg_aggregator = MessagesAggregator() tx_hex = '0x30bb99f3e34fb1fbcf009320af7e290caf18b04b207319e15aa8ffbf645f4ad9' location_label = '0xa8005630caE7b7d2AFADD38FD3B3040d13cbE2BC' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1650276061, block_number=14647221, from_address=location_label, to_address='0xF178C0b5Bb7e7aBF4e12A4838C7b7c5bA2C623c0', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x1a4d01d20000000000000000000000000000000000000000000000a8815561fefbe56aa300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8d15fc942541fea7f'), # noqa: E501 nonce=5, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=191, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000dc335d474901e08'), # noqa: E501 address=string_to_ethereum_address('0x06325440D014e39736583c165C2963BA99fAf14E'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000a8005630cae7b7d2afadd38fd3b3040d13cbe2bc'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=192, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000dc335d474901e080000000000000000000000000000000000000000000000000e48d018621788fa'), # noqa: E501 address=string_to_ethereum_address('0xDC24316b9AE028F1497c275EB9192a3Ea0f67022'), removed=False, topics=[ hexstring_to_bytes('0x9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be310'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000a8005630cae7b7d2afadd38fd3b3040d13cbe2bc'), # noqa: E501 ], ), ], ) internal_tx = EthereumInternalTransaction( parent_tx_hash=evmhash, trace_id=27, timestamp=Timestamp(1591043988), block_number=14647221, from_address='0xDC24316b9AE028F1497c275EB9192a3Ea0f67022', to_address='0xa8005630caE7b7d2AFADD38FD3B3040d13cbE2BC', value=FVal('1.02930131799766041') * EXP18, ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) dbethtx.add_ethereum_internal_transactions([internal_tx], relevant_address=location_label) # noqa: E501 decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=location_label, notes='Burned 0.00393701451 ETH in gas from 0xa8005630caE7b7d2AFADD38FD3B3040d13cbE2BC', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=1, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.WITHDRAWAL, event_subtype=HistoryEventSubType.REMOVE_ASSET, asset=A_ETH, balance=Balance(amount=FVal('1.02930131799766041'), usd_value=ZERO), location_label=location_label, notes='Remove 1.02930131799766041 ETH from the curve pool', counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=193, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.RETURN_WRAPPED, asset=EthereumToken('0x06325440D014e39736583c165C2963BA99fAf14E'), balance=Balance(amount=FVal('0.991695529556581896'), usd_value=ZERO), location_label=location_label, notes='Return 0.991695529556581896 steCRV', counterparty=CPT_CURVE, )] assert expected_events == events
def test_1inch_claim(database, ethereum_manager, eth_transactions): """Data for claim taken from https://etherscan.io/tx/0x0582a0db79de3fa21d3b92a8658e0b1034c51ea54a8e06ea84fbb91d41b8fe17 """ msg_aggregator = MessagesAggregator() tx_hex = '0x0582a0db79de3fa21d3b92a8658e0b1034c51ea54a8e06ea84fbb91d41b8fe17' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14351442, from_address='0xc931De6d845846E332a52D045072E3feF540Bd5d', to_address='0xE295aD71242373C37C5FdA7B57F26f9eA1088AFe', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x2e7ba6ef000000000000000000000000000000000000000000000000000000000000c0e5000000000000000000000000c931de6d845846e332a52d045072e3fef540bd5d00000000000000000000000000000000000000000000002109156970b0a5f32f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010dbe83b35ea054d18e5fdd804d60b6a528f4b66a227079ecb82febf8eb40919495d102f8922e57278b2b6bb3369ae34c37c378dbd4819126c5e5d371ed4777c4580a9985219f50d16cefc798c2aeb6a4d7fa786f4f38ab27b420e6f3f8e25bd0f45709afe1f9fdec3cbea17d1ec63c6f62ce396524b04c9460bb05ef548239ae050b5330a4228c26b8b25ff021c6cc89ed4f0411ecce80256d090d860f9e6ff5e604076af74bd91959259ff59f8d54455a0edcad41ef1fe230504826f025769c250d89c63241d1dfec9dc4dc75f0a0ec47bcc10594ca7db74335507a5f6e4344b52b129d8e0aaeffe22b7595fa9f11c8e2381feafaf25042407913b9ec34cdf879a05d18a68b7a2506a29ba42fb004c7f32390f986f943a2557e304dc777f73869a046dc08506268e16603452a33ea179b4932eeae59338dd3fee75685cc490f1acba6c0ed0c90792bb6f9f696ad1417efe0032bb0e86b6927234ce419628e24c0d577b40b8956166e4d21cba88b58b32dec0a00b2864e8ed4ac5d7be6683f5f297aaf35d6ca208a954554f4ab14a1ca973daf13e7c1dad49db82611f4dadf2a3c32355753f5e11ba88adc0d27f10ad32ad4904bfd782c15693c6795b047124fccd0f927a7dda89206be7ad613644d02a622c3f30f5de40d052b4c3e10ef02a18107e7a23a7abca2aacc0bf854e247569f822013a86927b10f772b7b13fbc8732'), # noqa: E501 nonce=19, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=297, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000002109156970b0a5f32f'), # noqa: E501 address=string_to_ethereum_address('0x111111111117dC0aa78b770fA6A738034120C302'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000e295ad71242373c37c5fda7b57f26f9ea1088afe'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000c931de6d845846e332a52d045072e3fef540bd5d'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=298, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000000000000000000c0e5000000000000000000000000c931de6d845846e332a52d045072e3fef540bd5d00000000000000000000000000000000000000000000002109156970b0a5f32f'), # noqa: E501 address=string_to_ethereum_address('0xE295aD71242373C37C5FdA7B57F26f9eA1088AFe'), removed=False, topics=[ hexstring_to_bytes('0x4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed026'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 2 expected_events = [ HistoryBaseEntry( event_identifier='0x0582a0db79de3fa21d3b92a8658e0b1034c51ea54a8e06ea84fbb91d41b8fe17', sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label='0xc931De6d845846E332a52D045072E3feF540Bd5d', notes='Burned 0.00393701451 ETH in gas from 0xc931De6d845846E332a52D045072E3feF540Bd5d', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier='0x0582a0db79de3fa21d3b92a8658e0b1034c51ea54a8e06ea84fbb91d41b8fe17', sequence_index=298, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.RECEIVE, event_subtype=HistoryEventSubType.AIRDROP, asset=EthereumToken('0x111111111117dC0aa78b770fA6A738034120C302'), balance=Balance(amount=FVal('609.397099685988397871'), usd_value=ZERO), location_label='0xc931De6d845846E332a52D045072E3feF540Bd5d', notes='Claim 609.397099685988397871 1INCH from the 1INCH airdrop', counterparty=CPT_ONEINCH, ), ] assert events == expected_events
def test_curve_remove_imbalanced(database, ethereum_manager, eth_transactions): """Data for deposit taken from https://etherscan.io/tx/0xd8832abcf4773abe24d8cda5581fb53bfb3850c535c1956d1d120a72a4ebcbd8 This tests uses the steth pool to verify that withdrawals are correctly decoded when an internal transaction is made for eth transfers """ msg_aggregator = MessagesAggregator() tx_hex = '0xd8832abcf4773abe24d8cda5581fb53bfb3850c535c1956d1d120a72a4ebcbd8' location_label = '0x2fac74A3a04B031F240923621a578724C40678af' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1650276061, block_number=14647221, from_address=location_label, to_address='0xbBC81d23Ea2c3ec7e56D39296F0cbB648873a5d3', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x517a55a300000000000000000000000000000000000000000000001fa9ee7266a543831f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000003f487c50000000000000000000000000000000000000000000000000000000000000001'), # noqa: E501 nonce=5, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=2183, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000001fa9ee7266a543831f'), # noqa: E501 address=string_to_ethereum_address('0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000002fac74a3a04b031f240923621a578724c40678af'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2184, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 address=string_to_ethereum_address('0x16de59092dAE5CcF4A1E6439D611fd0653f0Bd01'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000045f783cce6b7ff23b2ab2d70e416cdb7d6055f51'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2185, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000000000000001fdb750a'), # noqa: E501 address=string_to_ethereum_address('0xd6aD7a6750A7593E092a9B218d66C0A814a3436e'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000045f783cce6b7ff23b2ab2d70e416cdb7d6055f51'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2186, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 address=string_to_ethereum_address('0x83f798e925BcD4017Eb265844FDDAbb448f1707D'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000045f783cce6b7ff23b2ab2d70e416cdb7d6055f51'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2187, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 address=string_to_ethereum_address('0x73a052500105205d34Daf004eAb301916DA8190f'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x00000000000000000000000045f783cce6b7ff23b2ab2d70e416cdb7d6055f51'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2188, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 address=string_to_ethereum_address('0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2189, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fdb750a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045cf4bec2e53f0000000000000000000000000000000000000000000000000000000000000e07e000000000000000000000000000000000000000000000000000000000000570d0000000000000000000000000000000000000000000000000051077d9dc293100000000000000000000000000000000000000000000c740195f187122987a9ef0000000000000000000000000000000000000000000aeddccb3976328f7d90bd'), # noqa: E501 address=string_to_ethereum_address('0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51'), removed=False, topics=[ hexstring_to_bytes('0xb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=2189, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000027a72df9'), # noqa: E501 address=string_to_ethereum_address('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000002fac74a3a04b031f240923621a578724c40678af'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) expected_events = [ HistoryBaseEntry( event_identifier=tx_hex, sequence_index=0, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label=location_label, notes='Burned 0.00393701451 ETH in gas from 0x2fac74A3a04B031F240923621a578724C40678af', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=2184, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.RETURN_WRAPPED, asset=EthereumToken('0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8'), balance=Balance(amount=FVal('584.093916507047953183'), usd_value=ZERO), location_label=location_label, notes='Return 584.093916507047953183 yDAI+yUSDC+yUSDT+yTUSD', counterparty=CPT_CURVE, ), HistoryBaseEntry( event_identifier=tx_hex, sequence_index=2190, timestamp=1650276061000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.WITHDRAWAL, event_subtype=HistoryEventSubType.REMOVE_ASSET, asset=A_USDC, balance=Balance(amount=FVal('665.267705'), usd_value=ZERO), location_label=location_label, notes='Receive 665.267705 USDC from the curve pool 0xbBC81d23Ea2c3ec7e56D39296F0cbB648873a5d3', # noqa: E501 counterparty=CPT_CURVE, )] assert expected_events == events
def test_pickle_withdraw(database, ethereum_manager, eth_transactions): """Data for withdraw taken from https://etherscan.io/tx/0x91bc102e1cbb0e4542a10a7a13370b5e591d8d284989bdb0ca4ece4e54e61bab """ msg_aggregator = MessagesAggregator() tx_hex = '0x91bc102e1cbb0e4542a10a7a13370b5e591d8d284989bdb0ca4ece4e54e61bab' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14355951, from_address='0xC7Dc4Cd171812a441A30472219d390f4F15f6070', to_address='0xb4EBc2C371182DeEa04B2264B9ff5AC4F0159C69', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x853828b6'), # noqa: E501 nonce=23, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=105, data=hexstring_to_bytes('0x00000000000000000000000000000000000000000000000d4f4e1608c485628b'), # noqa: E501 address=string_to_ethereum_address('0xb4EBc2C371182DeEa04B2264B9ff5AC4F0159C69'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000c7dc4cd171812a441a30472219d390f4f15f6070'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000000'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=106, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000015da18947013228f17'), # noqa: E501 address=string_to_ethereum_address('0xf4d2888d29D722226FafA5d9B24F9164c092421E'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000b4ebc2c371182deea04b2264b9ff5ac4f0159c69'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000c7dc4cd171812a441a30472219d390f4f15f6070'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 3 expected_events = [ HistoryBaseEntry( event_identifier='0x91bc102e1cbb0e4542a10a7a13370b5e591d8d284989bdb0ca4ece4e54e61bab', sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label='0xC7Dc4Cd171812a441A30472219d390f4F15f6070', notes='Burned 0.00393701451 ETH in gas from 0xC7Dc4Cd171812a441A30472219d390f4F15f6070', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier='0x91bc102e1cbb0e4542a10a7a13370b5e591d8d284989bdb0ca4ece4e54e61bab', sequence_index=106, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.RETURN_WRAPPED, asset=EthereumToken('0xb4EBc2C371182DeEa04B2264B9ff5AC4F0159C69'), balance=Balance(amount=FVal('245.522202162316534411'), usd_value=ZERO), location_label='0xC7Dc4Cd171812a441A30472219d390f4F15f6070', notes='Return 245.522202162316534411 pLOOKS to the pickle contract', counterparty='pickle finance', ), HistoryBaseEntry( event_identifier='0x91bc102e1cbb0e4542a10a7a13370b5e591d8d284989bdb0ca4ece4e54e61bab', sequence_index=107, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.WITHDRAWAL, event_subtype=HistoryEventSubType.REMOVE_ASSET, asset=EthereumToken('0xf4d2888d29D722226FafA5d9B24F9164c092421E'), balance=Balance(amount=FVal('403.097099656688209687'), usd_value=ZERO), location_label='0xC7Dc4Cd171812a441A30472219d390f4F15f6070', notes='Unstake 403.097099656688209687 LOOKS from the pickle contract', counterparty='pickle finance', )] assert events == expected_events
def test_kyber_legacy_old_contract(database, ethereum_manager, eth_transactions): """Data for trade taken from https://etherscan.io/tx/0xe9cc9f27ef2a09fe23abc886a0a0f7ae19d9e2eb73663e1e41e07a3e0c011b87 """ msg_aggregator = MessagesAggregator() tx_hex = '0xe9cc9f27ef2a09fe23abc886a0a0f7ae19d9e2eb73663e1e41e07a3e0c011b87' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1591043988, block_number=10182160, from_address='0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b', to_address='0x818E6FECD516Ecc3849DAf6845e3EC868087B755', value=0, gas=600000, gas_price=22990000000, gas_used=527612, input_data=hexstring_to_bytes( '0xcb3c28c7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000002aea540000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000006d379cb5ba04c09293b21bf314e7aba3ffeaaf5b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5f611df3b9ac000000000000000000000000f1aa99c69715f423086008eb9d06dc1e35cc504d' ), # noqa: E501 nonce=1, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=87, data=hexstring_to_bytes( '0x0000000000000000000000000000000000000000000000000000000002aea540' ), # noqa: E501 address=string_to_ethereum_address( '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), removed=False, topics=[ hexstring_to_bytes( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000006d379cb5ba04c09293b21bf314e7aba3ffeaaf5b' ), # noqa: E501 hexstring_to_bytes( '0x00000000000000000000000065bf64ff5f51272f729bdcd7acfb00677ced86cd' ), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=93, data=hexstring_to_bytes( '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000002aea540000000000000000000000000000000000000000000000000029a80338e28df730000000000000000000000006d379cb5ba04c09293b21bf314e7aba3ffeaaf5b000000000000000000000000000000000000000000000000029a80338e28df730000000000000000000000001670dfb52806de7789d5cf7d5c005cf7083f9a5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000' ), # noqa: E501 address=string_to_ethereum_address( '0x65bF64Ff5f51272f729BDcD7AcFB00677ced86Cd'), removed=False, topics=[ hexstring_to_bytes( '0xd30ca399cb43507ecec6a629a35cf45eb98cda550c27696dcb0d8c4a3873ce6c' ), # noqa: E501 hexstring_to_bytes( '0x0000000000000000000000006d379cb5ba04c09293b21bf314e7aba3ffeaaf5b' ), # noqa: E501 ], ), ], ) internal_tx = EthereumInternalTransaction( parent_tx_hash=evmhash, trace_id=27, timestamp=Timestamp(1591043988), block_number=10182160, from_address='0x65bF64Ff5f51272f729BDcD7AcFB00677ced86Cd', to_address='0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b', value=187603293406027635, ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) dbethtx.add_ethereum_internal_transactions( [internal_tx], relevant_address='0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b' ) # noqa: E501 decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 3 expected_events = [ HistoryBaseEntry( event_identifier= '0xe9cc9f27ef2a09fe23abc886a0a0f7ae19d9e2eb73663e1e41e07a3e0c011b87', sequence_index=0, timestamp=1591043988000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.01212979988), usd_value=FVal(0), ), location_label='0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b', notes= 'Burned 0.01212979988 ETH in gas from 0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier= '0xe9cc9f27ef2a09fe23abc886a0a0f7ae19d9e2eb73663e1e41e07a3e0c011b87', sequence_index=1, timestamp=1591043988000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.TRADE, event_subtype=HistoryEventSubType.SPEND, asset=A_USDC, balance=Balance(amount=FVal(45), usd_value=FVal(0)), location_label='0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b', notes='Swap 45 USDC in kyber', counterparty='kyber legacy', ), HistoryBaseEntry( event_identifier= '0xe9cc9f27ef2a09fe23abc886a0a0f7ae19d9e2eb73663e1e41e07a3e0c011b87', sequence_index=89, timestamp=1591043988000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.TRADE, event_subtype=HistoryEventSubType.RECEIVE, asset=A_ETH, balance=Balance( amount=FVal('0.187603293406027635'), usd_value=FVal(0), ), location_label='0x6d379cb5BA04c09293b21Bf314E7aba3FfEAaF5b', notes='Receive 0.187603293406027635 ETH from kyber swap', counterparty='kyber legacy', ) ] assert events == expected_events
def test_votium_claim(database, ethereum_manager, eth_transactions): """Data for claim taken from https://etherscan.io/tx/0x75b81b2edd454a7b564cc55a6b676e2441e155401bde99a38d867028081d2c30 """ msg_aggregator = MessagesAggregator() tx_hex = '0x75b81b2edd454a7b564cc55a6b676e2441e155401bde99a38d867028081d2c30' evmhash = deserialize_evm_tx_hash(tx_hex) transaction = EthereumTransaction( tx_hash=evmhash, timestamp=1646375440, block_number=14318825, from_address='0x362C51b56D3c8f79aecf367ff301d1aFd42EDCEA', to_address='0x378Ba9B73309bE80BF4C2c027aAD799766a7ED5A', value=0, gas=171249, gas_price=22990000000, gas_used=171249, input_data=hexstring_to_bytes('0x12d18ed60000000000000000000000003432b6a60d23ca0dfca7761b7ab56459d9c964d00000000000000000000000000000000000000000000000000000000000000299000000000000000000000000362c51b56d3c8f79aecf367ff301d1afd42edcea000000000000000000000000000000000000000000000000aba7e67d21ab400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c0e18ed60844ddec0806bec1c24f10dbda658b3b75a3acb240c22b16b3ff468ace3436e89dee076858d556836040ac7af381d0a234c88318b1dc9d40e84f18243fadf3873bf723871fd88283fe1e9620aef4a1dfff0726d62bcd948314158d22409bd1a16812ff67f9499edef76951b0e1229d5f44cde7bce8ecbcf7ae3754bdf9e0a81af4a9bfe0e9bd0aa8a7dcc056b7479a753aa00ed08b23592eedd8731ec77f2b3cbb78e410486cabd6ab54f3830aa53ab66b9cf50e8a5eaae4465b51dc1cf9d6435d85ac3f55637eb1645df08065fb45cdf9d4a73489086ff005b515c2f04fc96780a5e63605d76a9bc9b984be1cdfbffb8b65181b5756de1ada5ac4f06e33647161699cb812487337b74b45fa4b2a8445e405896e6e0794aa8d998d7d5f4e795b5091f40b0494afbabf6597b73cd051f7c02b72c61eb72544915643a48ec1c2627e04b9d8e0ff748e3b417e6c0e302c4992f406b35b57253583b2913b61cda2f4b7d93800ab88f2405227c0fc34307aac6b884475a4c79cad7af300539'), # noqa: E501 nonce=635, ) receipt = EthereumTxReceipt( tx_hash=evmhash, contract_address=None, status=True, type=0, logs=[ EthereumTxReceiptLog( log_index=350, data=hexstring_to_bytes('0x000000000000000000000000000000000000000000000000aba7e67d21ab4000'), # noqa: E501 address=string_to_ethereum_address('0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0'), removed=False, topics=[ hexstring_to_bytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000378ba9b73309be80bf4c2c027aad799766a7ed5a'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000362c51b56d3c8f79aecf367ff301d1afd42edcea'), # noqa: E501 ], ), EthereumTxReceiptLog( log_index=351, data=hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000aba7e67d21ab4000'), # noqa: E501 address=string_to_ethereum_address('0x378Ba9B73309bE80BF4C2c027aAD799766a7ED5A'), removed=False, topics=[ hexstring_to_bytes('0x4766921f5c59646d22d7d266a29164c8e9623684d8dfdbd931731dfdca025238'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000003432b6a60d23ca0dfca7761b7ab56459d9c964d0'), # noqa: E501 hexstring_to_bytes('0x000000000000000000000000362c51b56d3c8f79aecf367ff301d1afd42edcea'), # noqa: E501 hexstring_to_bytes('0x0000000000000000000000000000000000000000000000000000000000000017'), # noqa: E501 ], ), ], ) dbethtx = DBEthTx(database) dbethtx.add_ethereum_transactions([transaction], relevant_address=None) decoder = EVMTransactionDecoder( database=database, ethereum_manager=ethereum_manager, eth_transactions=eth_transactions, msg_aggregator=msg_aggregator, ) events = decoder.decode_transaction(transaction=transaction, tx_receipt=receipt) assert len(events) == 2 expected_events = [ HistoryBaseEntry( event_identifier='0x75b81b2edd454a7b564cc55a6b676e2441e155401bde99a38d867028081d2c30', sequence_index=0, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.SPEND, event_subtype=HistoryEventSubType.FEE, asset=A_ETH, balance=Balance( amount=FVal(0.00393701451), usd_value=ZERO, ), location_label='0x362C51b56D3c8f79aecf367ff301d1aFd42EDCEA', notes='Burned 0.00393701451 ETH in gas from 0x362C51b56D3c8f79aecf367ff301d1aFd42EDCEA', # noqa: E501 counterparty=CPT_GAS, ), HistoryBaseEntry( event_identifier='0x75b81b2edd454a7b564cc55a6b676e2441e155401bde99a38d867028081d2c30', sequence_index=351, timestamp=1646375440000, location=Location.BLOCKCHAIN, event_type=HistoryEventType.RECEIVE, event_subtype=HistoryEventSubType.REWARD, asset=EthereumToken('0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0'), balance=Balance(amount=FVal('12.369108326706528256'), usd_value=ZERO), location_label='0x362C51b56D3c8f79aecf367ff301d1aFd42EDCEA', notes='Receive 12.369108326706528256 FXS from votium bribe', counterparty='votium', )] assert events == expected_events