1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-05-23 17:28:46 +00:00

fix(legacy): use GWei when ETH amount is between 1e6 and 1e12

This commit is contained in:
Roman Zeyde 2025-04-21 14:07:56 +03:00 committed by Ioan Bizău
parent 38f51f40b2
commit 0729da9ccf
3 changed files with 36 additions and 19 deletions

View File

@ -0,0 +1 @@
Use `GWei` when formatting large ETH amounts.

View File

@ -316,17 +316,26 @@ static void send_signature(void) {
*/
static void ethereumFormatAmount(const bignum256 *amnt,
const EthereumTokenInfo *token, char *buf,
int buflen) {
int buflen, bool use_gwei) {
bignum256 bn1e9 = {0};
bn_read_uint32(1000000000, &bn1e9);
bignum256 bn1e3 = {0};
bn_read_uint32(1000, &bn1e3);
char suffix[50] = {' ', 0};
int decimals = 18;
if (token) {
strlcpy(suffix + 1, token->symbol, sizeof(suffix) - 1);
decimals = token->decimals;
} else if (bn_is_less(amnt, &bn1e9)) {
strlcpy(suffix + 1, "Wei", sizeof(suffix) - 1);
decimals = 0;
if (use_gwei && !bn_is_less(amnt, &bn1e3)) {
strlcpy(suffix + 1, "Gwei", sizeof(suffix) - 1);
decimals = 9;
} else {
strlcpy(suffix + 1, "Wei", sizeof(suffix) - 1);
decimals = 0;
}
} else {
strlcpy(suffix + 1, chain_suffix, sizeof(suffix) - 1);
}
@ -351,10 +360,12 @@ static void layoutEthereumConfirmTx(const uint8_t *to, uint32_t to_len,
if (bn_is_zero(&val)) {
strcpy(amount, _("message"));
} else {
ethereumFormatAmount(&val, NULL, amount, sizeof(amount));
ethereumFormatAmount(&val, NULL, amount, sizeof(amount),
/*use_gwei=*/false);
}
} else {
ethereumFormatAmount(&val, token, amount, sizeof(amount));
ethereumFormatAmount(&val, token, amount, sizeof(amount),
/*use_gwei=*/false);
}
char _to1[] = "to ____________";
@ -434,14 +445,16 @@ static void layoutEthereumFee(const uint8_t *value, uint32_t value_len,
parse_bignum256(gas_limit, gas_limit_len, &gas);
bn_multiply(&val, &gas, &secp256k1.prime);
ethereumFormatAmount(&gas, NULL, gas_value, sizeof(gas_value));
ethereumFormatAmount(&gas, NULL, gas_value, sizeof(gas_value),
/*use_gwei=*/true);
parse_bignum256(value, value_len, &val);
if (bn_is_zero(&val)) {
strcpy(tx_value, is_token ? _("token") : _("message"));
} else {
ethereumFormatAmount(&val, NULL, tx_value, sizeof(tx_value));
ethereumFormatAmount(&val, NULL, tx_value, sizeof(tx_value),
/*use_gwei=*/false);
}
layoutDialogSwipe(&bmp_icon_question, _("Cancel"), _("Confirm"), NULL,
@ -466,7 +479,8 @@ static void layoutEthereumFeeEIP1559(const char *description,
bn_multiply(&multiplier_val, &amount_val, &secp256k1.prime);
}
ethereumFormatAmount(&amount_val, NULL, amount_str, sizeof(amount_str));
ethereumFormatAmount(&amount_val, NULL, amount_str, sizeof(amount_str),
/*use_gwei=*/true);
layoutDialogSwipeWrapping(&bmp_icon_question, _("Cancel"), _("Confirm"),
_("Confirm fee"), description, amount_str);
@ -647,7 +661,8 @@ static bool layoutEthereumConfirmStakingTx(const struct signing_params *params,
return false;
}
parse_bignum256(params->value_bytes, params->value_size, &value);
ethereumFormatAmount(&value, NULL, value_str, sizeof(value_str));
ethereumFormatAmount(&value, NULL, value_str, sizeof(value_str),
/*use_gwei=*/false);
_line1 = _("Stake");
_line2 = value_str;
_line3 = _("on Everstake?");
@ -665,7 +680,8 @@ static bool layoutEthereumConfirmStakingTx(const struct signing_params *params,
return false;
}
bn_read_be(args_bytes, &value);
ethereumFormatAmount(&value, NULL, value_str, sizeof(value_str));
ethereumFormatAmount(&value, NULL, value_str, sizeof(value_str),
/*use_gwei=*/false);
_line1 = _("Unstake");
_line2 = value_str;
_line3 = _("from Everstake?");

View File

@ -460,7 +460,7 @@
"T1B1_en_ethereum-test_sign_verify_message.py::test_verify[parameters6-result6]": "0f79aea15b09e207f7e2bb226421549a0446a4722dde3000c31c3c66ec2059d1",
"T1B1_en_ethereum-test_sign_verify_message.py::test_verify[parameters7-result7]": "22daa96dbdd3aeeec11f1134baa29c0ccecbadf032a47aaa355f30c994897907",
"T1B1_en_ethereum-test_sign_verify_message.py::test_verify_invalid": "cdec0f79f2abbd90f4346494037f7bb4dd4dccc7c6739b497873d0c5603f2a26",
"T1B1_en_ethereum-test_signtx.py::test_data_streaming": "058a66e82bb733d5c5c687b5537887022acfd7401bb0b5aa4a12f6f35b209239",
"T1B1_en_ethereum-test_signtx.py::test_data_streaming": "a032d9c42732e48799ad9d5bf6c779ef7fef6c5e39d485be346d12b37309c739",
"T1B1_en_ethereum-test_signtx.py::test_sanity_checks": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_ethereum-test_signtx.py::test_sanity_checks_eip1559": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-Auxilium]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
@ -473,14 +473,14 @@
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-Unknown_chain_id_eth_path]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-Unknown_chain_id_testnet_path]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-data_1]": "8b432aba21bc4344814cceaf693e114b9d3e3d6ceb83c3a6af7c3ed0f9b37449",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-data_2_bigdata]": "445286b7501ca67dd16dafd7ea09c57cc4a37a642ae50f0c812d74353c37c017",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-data_2_bigdata]": "76231787087e489d5670a9d833c1004276c1d897470cb062adf364bac9ff11a3",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-erc20_token]": "d797c970429f1e974a69b9f5bd814a4f13f15b1b5d6ab1c117e65b919a434cf9",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-max_chain_id]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-max_chain_plus_one]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-max_uint64]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-newcontract]": "a7efa7f690d1448dc48f642f69688e8b266417901cc014e5930c94c9087b3e08",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-newcontract]": "bd4ec07cc7dc6b727fa4c9931624171207052130b84ca20e3311601dece8e3b1",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-nodata_1]": "6bd90f2c98122de19159e60fd4dcf9f4b16a600407ac84ea1e447d561ea9decb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-nodata_2_bigvalue]": "538f7be885ce6ea3a6dc842ef10797fa45184d7737f6f179c42d36fe92fadd45",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-nodata_2_bigvalue]": "643e6276f884ceb354126dc99f4a6a44fb14432cefad8f64b3d0f846d4111f69",
"T1B1_en_ethereum-test_signtx.py::test_signtx[False-wanchain]": "37aa64fbab44b89757833df6ee78e302c97fe24c4cb74175f1843f635cb2dbec",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-Auxilium]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-ETC]": "05b7842c03625104ae3459a55097bc96e878eca465bf69ea2691407868e5dd4b",
@ -492,25 +492,25 @@
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-Unknown_chain_id_eth_path]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-Unknown_chain_id_testnet_path]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-data_1]": "8b432aba21bc4344814cceaf693e114b9d3e3d6ceb83c3a6af7c3ed0f9b37449",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-data_2_bigdata]": "445286b7501ca67dd16dafd7ea09c57cc4a37a642ae50f0c812d74353c37c017",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-data_2_bigdata]": "76231787087e489d5670a9d833c1004276c1d897470cb062adf364bac9ff11a3",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-erc20_token]": "d797c970429f1e974a69b9f5bd814a4f13f15b1b5d6ab1c117e65b919a434cf9",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-max_chain_id]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-max_chain_plus_one]": "4552f9a68c62613e1ef7df68c1f47f7d4888c4505f0586012b71c07acba1fbcb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-max_uint64]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-newcontract]": "a7efa7f690d1448dc48f642f69688e8b266417901cc014e5930c94c9087b3e08",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-newcontract]": "bd4ec07cc7dc6b727fa4c9931624171207052130b84ca20e3311601dece8e3b1",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-nodata_1]": "6bd90f2c98122de19159e60fd4dcf9f4b16a600407ac84ea1e447d561ea9decb",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-nodata_2_bigvalue]": "538f7be885ce6ea3a6dc842ef10797fa45184d7737f6f179c42d36fe92fadd45",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-nodata_2_bigvalue]": "643e6276f884ceb354126dc99f4a6a44fb14432cefad8f64b3d0f846d4111f69",
"T1B1_en_ethereum-test_signtx.py::test_signtx[True-wanchain]": "37aa64fbab44b89757833df6ee78e302c97fe24c4cb74175f1843f635cb2dbec",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-Ledger Live legacy path]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-data_1]": "171ffadf61a2520274bedf6a8543127f23a8948c2689e034f996e170289b1822",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-data_2_bigdata]": "28d2a0d397b4e9865ca8286cc1a3669c3a7d34bb31b430662354bf3ec69d1cc5",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-data_2_bigdata]": "b42d6d2b7c135ed0a266308a6084d2643b17979970603d4cb1fd5889427c38a7",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-erc20]": "4b97bba97b14f40c36a793e8a842d5c6fd13c4465b4d3b47b96bab943eb649f3",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-large_chainid]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-long_fees]": "cdeaa7c3e562acc91e061b867ab8d3b2fe9902375505d9d75e9a221e17aa40e8",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-nodata]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-Ledger Live legacy path]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-data_1]": "171ffadf61a2520274bedf6a8543127f23a8948c2689e034f996e170289b1822",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-data_2_bigdata]": "28d2a0d397b4e9865ca8286cc1a3669c3a7d34bb31b430662354bf3ec69d1cc5",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-data_2_bigdata]": "b42d6d2b7c135ed0a266308a6084d2643b17979970603d4cb1fd5889427c38a7",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-erc20]": "4b97bba97b14f40c36a793e8a842d5c6fd13c4465b4d3b47b96bab943eb649f3",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-large_chainid]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515",
"T1B1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-long_fees]": "cdeaa7c3e562acc91e061b867ab8d3b2fe9902375505d9d75e9a221e17aa40e8",