56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
import json
|
|
import pytest
|
|
from web3 import Web3
|
|
|
|
from ledger_app_clients.ethereum.client import EthAppClient, StatusWord
|
|
from ragger.backend import BackendInterface
|
|
from ragger.firmware import Firmware
|
|
from ragger.navigator import Navigator, NavInsID
|
|
from ragger.error import ExceptionRAPDU
|
|
|
|
from constants import ROOT_SNAPSHOT_PATH, ABIS_FOLDER
|
|
|
|
|
|
# Token approval, would require loading the "internal plugin" &
|
|
# providing the token metadata from the CAL
|
|
def test_blind_sign(firmware: Firmware,
|
|
backend: BackendInterface,
|
|
navigator: Navigator):
|
|
app_client = EthAppClient(backend)
|
|
|
|
with open(f"{ABIS_FOLDER}/erc20.json", encoding="utf-8") as file:
|
|
contract = Web3().eth.contract(
|
|
abi=json.load(file),
|
|
address=None
|
|
)
|
|
data = contract.encodeABI("approve", [
|
|
# Uniswap Protocol: Permit2
|
|
bytes.fromhex("000000000022d473030f116ddee9f6b43ac78ba3"),
|
|
Web3.to_wei("2", "ether")
|
|
])
|
|
tx_params = {
|
|
"nonce": 235,
|
|
"maxFeePerGas": Web3.to_wei(100, "gwei"),
|
|
"maxPriorityFeePerGas": Web3.to_wei(10, "gwei"),
|
|
"gas": 44001,
|
|
# Maker: Dai Stablecoin
|
|
"to": bytes.fromhex("6b175474e89094c44da98b954eedeac495271d0f"),
|
|
"data": data,
|
|
"chainId": 1
|
|
}
|
|
with pytest.raises(ExceptionRAPDU) as e:
|
|
with app_client.sign("m/44'/60'/0'/0/0", tx_params):
|
|
pass
|
|
assert e.value.status == StatusWord.INVALID_DATA
|
|
|
|
moves = []
|
|
if firmware.device.startswith("nano"):
|
|
if firmware.device == "nanos":
|
|
moves += [NavInsID.RIGHT_CLICK]
|
|
moves += [NavInsID.BOTH_CLICK]
|
|
else:
|
|
moves += [NavInsID.USE_CASE_CHOICE_CONFIRM]
|
|
navigator.navigate_and_compare(ROOT_SNAPSHOT_PATH,
|
|
"blind-signed_approval",
|
|
moves)
|