121 lines
3.7 KiB
Python
121 lines
3.7 KiB
Python
|
import pytest
|
||
|
import time
|
||
|
import uuid
|
||
|
from conftest import user_1, user_2, option
|
||
|
from test_cases import SignalTestCase
|
||
|
|
||
|
|
||
|
@pytest.mark.rpc
|
||
|
@pytest.mark.transaction
|
||
|
@pytest.mark.wallet
|
||
|
class TestTransactionFromRoute(SignalTestCase):
|
||
|
|
||
|
await_signals = [
|
||
|
"wallet.suggested.routes",
|
||
|
"wallet.router.sign-transactions",
|
||
|
"wallet.router.sending-transactions-started",
|
||
|
"wallet.transaction.status-changed",
|
||
|
"wallet.router.transactions-sent"
|
||
|
]
|
||
|
|
||
|
def test_tx_from_route(self):
|
||
|
|
||
|
_uuid = str(uuid.uuid4())
|
||
|
amount_in = "0xde0b6b3a7640000"
|
||
|
|
||
|
method = "wallet_getSuggestedRoutesAsync"
|
||
|
params = [
|
||
|
{
|
||
|
"uuid": _uuid,
|
||
|
"sendType": 0,
|
||
|
"addrFrom": user_1.address,
|
||
|
"addrTo": user_2.address,
|
||
|
"amountIn": amount_in,
|
||
|
"amountOut": "0x0",
|
||
|
"tokenID": "ETH",
|
||
|
"tokenIDIsOwnerToken": False,
|
||
|
"toTokenID": "",
|
||
|
"disabledFromChainIDs": [10, 42161],
|
||
|
"disabledToChainIDs": [10, 42161],
|
||
|
"gasFeeMode": 1,
|
||
|
"fromLockedAmount": {}
|
||
|
}
|
||
|
]
|
||
|
response = self.rpc_request(method, params)
|
||
|
self.verify_is_valid_json_rpc_response(response)
|
||
|
|
||
|
routes = self.wait_for_signal("wallet.suggested.routes")
|
||
|
assert routes['event']['Uuid'] == _uuid
|
||
|
|
||
|
method = "wallet_buildTransactionsFromRoute"
|
||
|
params = [
|
||
|
{
|
||
|
"uuid": _uuid,
|
||
|
"slippagePercentage": 0
|
||
|
}
|
||
|
]
|
||
|
response = self.rpc_request(method, params)
|
||
|
self.verify_is_valid_json_rpc_response(response)
|
||
|
|
||
|
self.wait_for_signal("wallet.router.sign-transactions")
|
||
|
|
||
|
assert self.received_signals[
|
||
|
'wallet.router.sign-transactions']['event']['signingDetails']['signOnKeycard'] == False
|
||
|
transaction_hashes = self.received_signals[
|
||
|
'wallet.router.sign-transactions']['event']['signingDetails']['hashes']
|
||
|
|
||
|
assert transaction_hashes, "Transaction hashes are empty!"
|
||
|
|
||
|
tx_signatures = {}
|
||
|
|
||
|
for hash in transaction_hashes:
|
||
|
|
||
|
method = "wallet_signMessage"
|
||
|
params = [
|
||
|
hash,
|
||
|
user_1.address,
|
||
|
option.password
|
||
|
]
|
||
|
|
||
|
response = self.rpc_request(method, params)
|
||
|
self.verify_is_valid_json_rpc_response(response)
|
||
|
|
||
|
if response.json()["result"].startswith("0x"):
|
||
|
tx_signature = response.json()["result"][2:]
|
||
|
|
||
|
signature = {
|
||
|
"r": tx_signature[:64],
|
||
|
"s": tx_signature[64:128],
|
||
|
"v": tx_signature[128:]
|
||
|
}
|
||
|
|
||
|
tx_signatures[hash] = signature
|
||
|
|
||
|
method = "wallet_sendRouterTransactionsWithSignatures"
|
||
|
params = [
|
||
|
{
|
||
|
"uuid": _uuid,
|
||
|
"Signatures": tx_signatures
|
||
|
}
|
||
|
]
|
||
|
response = self.rpc_request(method, params)
|
||
|
self.verify_is_valid_json_rpc_response(response)
|
||
|
|
||
|
tx_status = self.wait_for_signal("wallet.transaction.status-changed")
|
||
|
|
||
|
|
||
|
assert tx_status["event"]["chainId"] == 31337
|
||
|
assert tx_status["event"]["status"] == "Success"
|
||
|
tx_hash = tx_status["event"]["hash"]
|
||
|
|
||
|
method = "eth_getTransactionByHash"
|
||
|
params = [tx_hash]
|
||
|
|
||
|
response = self.rpc_request(method, params, url=option.anvil_url)
|
||
|
self.verify_is_valid_json_rpc_response(response)
|
||
|
tx_details = response.json()["result"]
|
||
|
|
||
|
assert tx_details["value"] == amount_in
|
||
|
assert tx_details["to"] == user_2.address
|
||
|
assert tx_details["from"] == user_1.address
|