def test_transfer(): """Test transfer of wealth.""" ethereum_api = EthereumApi(**ETHEREUM_TESTNET_CONFIG) ec1 = EthereumCrypto(private_key_path=ETHEREUM_PRIVATE_KEY_PATH) ec2 = EthereumCrypto() amount = 40000 fee = 30000 tx_nonce = ethereum_api.generate_tx_nonce(ec2.address, ec1.address) tx_digest = ethereum_api.transfer(ec1, ec2.address, amount, fee, tx_nonce, chain_id=3) assert tx_digest is not None, "Failed to submit transfer!" not_settled = True elapsed_time = 0 while not_settled and elapsed_time < 180: elapsed_time += 2 time.sleep(2) is_settled = ethereum_api.is_transaction_settled(tx_digest) not_settled = not is_settled assert is_settled, "Failed to complete tx!" is_valid = ethereum_api.is_transaction_valid(tx_digest, ec2.address, ec1.address, tx_nonce, amount) assert is_valid, "Failed to settle tx correctly!"
def test_construct_sign_and_submit_transfer_transaction(): """Test the construction, signing and submitting of a transfer transaction.""" account = EthereumCrypto(private_key_path=ETHEREUM_PRIVATE_KEY_PATH) ec2 = EthereumCrypto() ethereum_api = EthereumApi(**ETHEREUM_TESTNET_CONFIG) amount = 40000 tx_nonce = ethereum_api.generate_tx_nonce(ec2.address, account.address) transfer_transaction = ethereum_api.get_transfer_transaction( sender_address=account.address, destination_address=ec2.address, amount=amount, tx_fee=30000, tx_nonce=tx_nonce, chain_id=3, ) assert (isinstance(transfer_transaction, dict) and len(transfer_transaction) == 7), "Incorrect transfer_transaction constructed." signed_transaction = account.sign_transaction(transfer_transaction) assert (isinstance(signed_transaction, eth_account.datastructures.AttributeDict) and len(signed_transaction) == 5), "Incorrect signed_transaction constructed." transaction_digest = ethereum_api.send_signed_transaction( signed_transaction) assert transaction_digest is not None, "Failed to submit transfer transaction!" not_settled = True elapsed_time = 0 while not_settled and elapsed_time < 20: elapsed_time += 1 time.sleep(2) transaction_receipt = ethereum_api.get_transaction_receipt( transaction_digest) if transaction_receipt is None: continue is_settled = ethereum_api.is_transaction_settled(transaction_receipt) not_settled = not is_settled assert transaction_receipt is not None, "Failed to retrieve transaction receipt." assert is_settled, "Failed to verify tx!" tx = ethereum_api.get_transaction(transaction_digest) is_valid = ethereum_api.is_transaction_valid(tx, ec2.address, account.address, tx_nonce, amount) assert is_valid, "Failed to settle tx correctly!" assert tx != transaction_receipt, "Should not be same!"