From bcc4314462e87a30e3e54c35d738aa64f8c9cb60 Mon Sep 17 00:00:00 2001 From: Martin Novak Date: Tue, 11 Oct 2022 13:00:36 +0200 Subject: [PATCH] feat(tests): new tests for Ethereum definitions --- .gitignore | 2 +- .../by_chain_id/1/network.dat | Bin 0 -> 549 bytes ...c17f958d2ee523a2206206994597c13d831ec7.dat | Bin 0 -> 568 bytes .../by_chain_id/8/network.dat | Bin 0 -> 545 bytes ...e3dd746ddf519b23ffbbb6da7a5d33ea6349d6.dat | Bin 0 -> 568 bytes .../tests/fixtures/ethereum/getaddress.json | 30 +- common/tests/fixtures/ethereum/sign_tx.json | 6 +- .../ethereum/sign_tx_definitions.json | 336 ++++++++++++++++++ .../fixtures/ethereum/sign_tx_eip155.json | 15 +- .../fixtures/ethereum/sign_tx_eip1559.json | 6 +- .../ethereum/sign_tx_eip1559_definitions.json | 336 ++++++++++++++++++ .../fixtures/ethereum/sign_typed_data.json | 72 ++++ .../tests/fixtures/ethereum/signmessage.json | 39 ++ .../device_tests/ethereum/test_getaddress.py | 27 +- .../ethereum/test_sign_typed_data.py | 62 +++- .../ethereum/test_sign_verify_message.py | 27 +- tests/device_tests/ethereum/test_signtx.py | 216 +++++++++-- tests/ui_tests/fixtures.json | 36 +- 18 files changed, 1144 insertions(+), 66 deletions(-) create mode 100644 common/tests/fixtures/ethereum/definitions-latest/by_chain_id/1/network.dat create mode 100644 common/tests/fixtures/ethereum/definitions-latest/by_chain_id/1/token_dac17f958d2ee523a2206206994597c13d831ec7.dat create mode 100644 common/tests/fixtures/ethereum/definitions-latest/by_chain_id/8/network.dat create mode 100644 common/tests/fixtures/ethereum/definitions-latest/by_chain_id/8/token_20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6.dat create mode 100644 common/tests/fixtures/ethereum/sign_tx_definitions.json create mode 100644 common/tests/fixtures/ethereum/sign_tx_eip1559_definitions.json diff --git a/.gitignore b/.gitignore index 4a90e0c77a..2f4b55e69f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,5 @@ __pycache__/ proto.gv* .DS_Store crypto/tests/libtrezor-crypto.so.dSYM/ -definitions-latest/ +/definitions-latest definitions-cache.json diff --git a/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/1/network.dat b/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/1/network.dat new file mode 100644 index 0000000000000000000000000000000000000000..9878a65a593e962f1e3f24a0845a975bb5da4702 GIT binary patch literal 549 zcmV+=0^0p_a(ZMj00000V?`0-02K%U5IhBL?K;(Eh_ zbCRSOkoCO<3i#az%Vd8B{NP%2_-_(WNlvrl{7t#690(PyAta|uv0|SM#jE23kI|E@1yx>rJ`)PwDKglrwn|V)@cwa;}S=55W^ILax9^xzP zg7ilxCHZYKX=qN36@Q|gL|AyfwEX%C5dtOjz9AqU4~j%?qSWN!$AXS?Fl*ts@e>ao4)e>83)J}5xlQQeHr z2>@dqD5vf23e#mm0`$ZT_a^a9mvH3{rEaq9gFFuO%Jiy?ORcmfiTtMTkh5#p)=Xqg z2A9iv=aW^&Rl-hoK6V3T^Hhq!FTk>f<|nbKHEA;DFO5o{Tp73p>Xy%0Q^!ilQHr(W&HLs@qY>%0f_ literal 0 HcmV?d00001 diff --git a/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/1/token_dac17f958d2ee523a2206206994597c13d831ec7.dat b/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/1/token_dac17f958d2ee523a2206206994597c13d831ec7.dat new file mode 100644 index 0000000000000000000000000000000000000000..05d2309acd4fbf9e45dc887e2809b3f1465be16f GIT binary patch literal 568 zcmV-80>}Mya(ZMj00001V?`0-04NFsRZ~P%5C$3)+QEO7jV|RQq99@hnMIeuJ%b*{ zAOR`{RAqE%WpWOC@^7V`c!9YopsMC}D{dY+FS3e%z1!4mD#_HQt8Z3lHoW}L@OENC z!{k96+sJ?z&-_u&WTPni>s$FLjf})f_%=Klo!8yxtuxgDMQ2pM)SY$qqbHmCiulR$ z0oyzuu?}8#(pM-^7U$`>4{_TaW1cWeVjS;$E5*EI2`PhI!!hAqg>Vq+s_Z8V$iTD& zV~|w3{t=L4P-l?`4D)}L?|m{>93tld>)88@BH#15yd1@5iz|A!z8L;l{ClOWk?|?P zD3-N+ZPC{?W%G6n{V+{H*YI42x}PR(ifzfF<~|w`ug=~kH`8c{3DgSj`Hxnzq|*y$ zp8bdAL2mF&Q>C^D1B`{y_Ohi3+1v}_?TY8xpuJ?%g&{)vuoJaOk_<4m&Y(is+iYX;AFz&KR<{HL6atl@);2{AAs!BvV8Y#E#t>2?9V5ImW}iK@h>UhT(2 GS$7U$_#R#W literal 0 HcmV?d00001 diff --git a/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/8/network.dat b/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/8/network.dat new file mode 100644 index 0000000000000000000000000000000000000000..191802e5782dd53e16f45f096e4df3d6c652a37f GIT binary patch literal 545 zcmV++0^a>}a(ZMj00000V?`0-01*fX5NsL)RYFlB1XW^baVP)|M7UMX+o$j(|C+cwmbD6l0C_-#aWkb8KGC@8do$;kAo#x zQ5qG?*|;ukbF9E%`;ECcps*06p&Fy!)%?#t_bq(|J<;`kP!SypHeQ&U5MX9NJ`hL2 zAdFQtXn(*Xi)&V$=V=?FP2odzF-rz|#wB%-r)8oOcupZh#dn{LN!;di@3zvV)ly>A zta|uv0|SM#jE23kI|E@1yx>rJ`)PwDKglrwn|V)@cwa;}S=55W^ILax9^xzPg7ilx zCHZYKX=qN36@Q|gL|AyfwEX%C5dtOjz9AqU4~j%?qSWN!$AXS?Fl*ts@e>ao4)e>83)J}5xlQQeHr2>@dq zD5vf23e#mm0`$ZT_a^a9mvH3{rEaq9gFFuO%Jiy?ORcmfiTtMTkh5#p)=Xqg2A9iv z=aW^&Rl-hoK6V3T^Hhq!FTk>f<|nbKHEA;DFO5o{Tp73p>Xy%0Q^!ilQHr(W&HLs@qY0I&lE literal 0 HcmV?d00001 diff --git a/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/8/token_20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6.dat b/common/tests/fixtures/ethereum/definitions-latest/by_chain_id/8/token_20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6.dat new file mode 100644 index 0000000000000000000000000000000000000000..84032229aca94c84a30b55d106125d8791d16847 GIT binary patch literal 568 zcmV-80>}Mya(ZMj00001V?`0-04NFsQ&31!5C|F+AmiP1ZQoIwBmcX$+In3x>SIaP zAP6c3Q*dZya%B#^<|DY~SU+gm1iV;C-CGcVbyQOuTBnZT9?u8`T{@bv|KC4WwM-Xs zkmVXAsVx58l2VIx)hBMdtvjJ?xP_*3%&QNtUomR^-_mWm?I0t0kK@_a2s{zxEX3h+ zFGFKRBL$%}jwuj}0lm8s4lV<*zQ~X^zKZkxjOd#h56Al%?X*bm^~+mnUx@$<{IrH@jOXtkplH7Lb~E*ql0oQxdL1NgByWunV<{Gy-{8oOu=S|8_4qk ziEJrn8(U!V`~R5S`ga|>i6N)hY7i=bS(g}^cECgq){jYwm{^P~1GWp};i6{@O&US< z4&p2VdSdx|HW=N#exkaUku;`rTtA=ht!hIwh%L(7!n2^!TaI?bQ+W4^dgPCx+CnGlCqxE zv84-l`o~;_c>&{)vuoJaOk_<4m&Y(is+iYX;AFz&KR<{HL6atl@);2{AAs!BvV8Y#E#t>2?9V5ImW}iK@h>UhT(2 GS$7UJOAe|4 literal 0 HcmV?d00001 diff --git a/common/tests/fixtures/ethereum/getaddress.json b/common/tests/fixtures/ethereum/getaddress.json index 8e76ef8c3a..74986b1cc1 100644 --- a/common/tests/fixtures/ethereum/getaddress.json +++ b/common/tests/fixtures/ethereum/getaddress.json @@ -36,11 +36,33 @@ "address": "0x1e6E3708a059aEa1241a81c7aAe84b6CDbC54d59" } }, + { + "name": "builtin_Ethereum_do_not_send_network", + "parameters": { + "path": "m/44'/60'/0'/0/0", + "definitions": { + "slip44": -1 + } + }, + "result": { + "address": "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8" + } + }, + { + "name": "builtin_Ethereum_send_wrong_network", + "parameters": { + "path": "m/44'/60'/0'/0/0", + "definitions": { + "slip44": 6060 + } + }, + "result": { + "address": "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8" + } + }, { "name": "ETC", "parameters": { - "builtin_network": false, - "slip44": 61, "path": "m/44'/61'/0'/0/0" }, "result": { @@ -50,8 +72,6 @@ { "name": "GoChain", "parameters": { - "builtin_network": false, - "slip44": 6060, "path": "m/44'/6060'/0'/0/0" }, "result": { @@ -61,8 +81,6 @@ { "name": "Wanchain", "parameters": { - "builtin_network": false, - "slip44": 5718350, "path": "m/44'/5718350'/0'/0/0" }, "result": { diff --git a/common/tests/fixtures/ethereum/sign_tx.json b/common/tests/fixtures/ethereum/sign_tx.json index fc6334c2b3..1d3358a029 100644 --- a/common/tests/fixtures/ethereum/sign_tx.json +++ b/common/tests/fixtures/ethereum/sign_tx.json @@ -16,8 +16,7 @@ "gas_price": "0x14", "gas_limit": "0x14", "tx_type": null, - "value": "0x0", - "builtin_token": false + "value": "0x0" }, "result": { "sig_v": 37, @@ -56,8 +55,7 @@ "gas_price": "0x14", "gas_limit": "0x14", "tx_type": 1, - "value": "0x64", - "builtin_network": false + "value": "0x64" }, "result": { "sig_v": 1811, diff --git a/common/tests/fixtures/ethereum/sign_tx_definitions.json b/common/tests/fixtures/ethereum/sign_tx_definitions.json new file mode 100644 index 0000000000..7cc9705f61 --- /dev/null +++ b/common/tests/fixtures/ethereum/sign_tx_definitions.json @@ -0,0 +1,336 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "name": "builtin_Ethereum_builtin_Tether_send_network_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_send_network", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "to_address": "" + } + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_send_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "chain_id": -1 + } + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_send_nothing", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "chain_id": -1, + "to_address": "" + } + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_wrong_network_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "chain_id": 8, + "token_chain_id": 8, + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" + } + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_wrong_network", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "chain_id": 8 + } + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_wrong_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "token_chain_id": 8, + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" + } + }, + "result": { + "sig_v": 38, + "sig_r": "a82c902c3c4d82e9a3d3894bf1298b14217c0d6149faaff26e254b7753063158", + "sig_s": "2200f34790df5a71f7349eb941f11c294e480dadcf15e323851ae43845ee9a80" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_network_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "result": { + "sig_v": 38, + "sig_r": "78e9bab4abda13d3cdc2e6dee69e96a7215ff4254b2b9a2321f970941925250c", + "sig_s": "2c08ebde47552e7d407767710c4fd48d8c66e71f28004d87170a430ecf7d56a6" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_network", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "to_address": "" + } + }, + "result": { + "sig_v": 38, + "sig_r": "78e9bab4abda13d3cdc2e6dee69e96a7215ff4254b2b9a2321f970941925250c", + "sig_s": "2c08ebde47552e7d407767710c4fd48d8c66e71f28004d87170a430ecf7d56a6" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "chain_id": -1 + } + }, + "result": { + "sig_v": 38, + "sig_r": "78e9bab4abda13d3cdc2e6dee69e96a7215ff4254b2b9a2321f970941925250c", + "sig_s": "2c08ebde47552e7d407767710c4fd48d8c66e71f28004d87170a430ecf7d56a6" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_nothing", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "chain_id": -1, + "to_address": "" + } + }, + "result": { + "sig_v": 38, + "sig_r": "78e9bab4abda13d3cdc2e6dee69e96a7215ff4254b2b9a2321f970941925250c", + "sig_s": "2c08ebde47552e7d407767710c4fd48d8c66e71f28004d87170a430ecf7d56a6" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_wrong_token", + "parameters": { + "chain_id": 1, + "path": "m/44'/60'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "token_chain_id": 8, + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" + } + }, + "result": { + "sig_v": 38, + "sig_r": "78e9bab4abda13d3cdc2e6dee69e96a7215ff4254b2b9a2321f970941925250c", + "sig_s": "2c08ebde47552e7d407767710c4fd48d8c66e71f28004d87170a430ecf7d56a6" + } + }, + { + "name": "extern_Ubiq_extern_Sphere_send_network_token", + "parameters": { + "chain_id": 8, + "path": "m/44'/108'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "result": { + "sig_v": 52, + "sig_r": "1db04aa641665618467a2e40f840da081601c266050f951c8bb8688efd43a7d9", + "sig_s": "5f4bb9b86814cb8647b7aad6e23c73ffbfb284109068d5d1061583bff252ec82" + } + }, + { + "name": "extern_Ubiq_extern_Sphere_send_network", + "parameters": { + "chain_id": 8, + "path": "m/44'/108'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "to_address": "" + } + }, + "result": { + "sig_v": 52, + "sig_r": "1db04aa641665618467a2e40f840da081601c266050f951c8bb8688efd43a7d9", + "sig_s": "5f4bb9b86814cb8647b7aad6e23c73ffbfb284109068d5d1061583bff252ec82" + } + }, + { + "name": "extern_Ubiq_extern_Sphere_wrong_token", + "parameters": { + "chain_id": 8, + "path": "m/44'/108'/0'/0/0", + "nonce": "0x0", + "gas_price": "0x14", + "gas_limit": "0x14", + "value": "0x0", + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6", + "tx_type": null, + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "definitions": { + "token_chain_id": 1, + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd" + } + }, + "result": { + "sig_v": 52, + "sig_r": "1db04aa641665618467a2e40f840da081601c266050f951c8bb8688efd43a7d9", + "sig_s": "5f4bb9b86814cb8647b7aad6e23c73ffbfb284109068d5d1061583bff252ec82" + } + } + ] +} diff --git a/common/tests/fixtures/ethereum/sign_tx_eip155.json b/common/tests/fixtures/ethereum/sign_tx_eip155.json index 747803f84e..b31965bae1 100644 --- a/common/tests/fixtures/ethereum/sign_tx_eip155.json +++ b/common/tests/fixtures/ethereum/sign_tx_eip155.json @@ -53,8 +53,7 @@ "value": "0x2540be400", "to_address": "0x8eA7a3fccC211ED48b763b4164884DDbcF3b0A98", "tx_type": null, - "data": "", - "builtin_network": false + "data": "" }, "result": { "sig_v": 43, @@ -73,8 +72,7 @@ "value": "0x2540be400", "to_address": "0x8eA7a3fccC211ED48b763b4164884DDbcF3b0A98", "tx_type": null, - "data": "", - "builtin_network": false + "data": "" }, "result": { "sig_v": 158, @@ -93,8 +91,7 @@ "value": "0x2540be400", "to_address": "0x8eA7a3fccC211ED48b763b4164884DDbcF3b0A98", "tx_type": null, - "data": "", - "builtin_network": false + "data": "" }, "result": { "sig_v": 57891008, @@ -113,8 +110,7 @@ "value": "0x2540be400", "to_address": "0x8eA7a3fccC211ED48b763b4164884DDbcF3b0A98", "tx_type": null, - "data": "", - "builtin_network": false + "data": "" }, "result": { "sig_v": 6251318340, @@ -171,8 +167,7 @@ "value": "0x2540be400", "to_address": "0x8eA7a3fccC211ED48b763b4164884DDbcF3b0A98", "tx_type": null, - "data": "", - "builtin_network": false + "data": "" }, "result": { "sig_v": 22594216254, diff --git a/common/tests/fixtures/ethereum/sign_tx_eip1559.json b/common/tests/fixtures/ethereum/sign_tx_eip1559.json index 6cf4188dbe..239c6b07cd 100644 --- a/common/tests/fixtures/ethereum/sign_tx_eip1559.json +++ b/common/tests/fixtures/ethereum/sign_tx_eip1559.json @@ -73,8 +73,7 @@ "gas_limit": "0x14", "max_gas_fee": "0x14", "max_priority_fee": "0x1", - "value": "0x0", - "builtin_token": false + "value": "0x0" }, "result": { "sig_v": 1, @@ -114,8 +113,7 @@ "gas_limit": "0x14", "max_gas_fee": "0x14", "max_priority_fee": "0x1", - "value": "0xa", - "builtin_network": false + "value": "0xa" }, "result": { "sig_v": 0, diff --git a/common/tests/fixtures/ethereum/sign_tx_eip1559_definitions.json b/common/tests/fixtures/ethereum/sign_tx_eip1559_definitions.json new file mode 100644 index 0000000000..4f124a714c --- /dev/null +++ b/common/tests/fixtures/ethereum/sign_tx_eip1559_definitions.json @@ -0,0 +1,336 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "name": "builtin_Ethereum_builtin_Tether_send_network_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0" + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_send_network", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "to_address": "" + } + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_send_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "chain_id": -1 + } + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_send_nothing", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "chain_id": -1, + "to_address": "" + } + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_wrong_network_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "chain_id": 8, + "token_chain_id": 8, + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" + } + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_wrong_network", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "chain_id": 8 + } + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_builtin_Tether_wrong_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "token_chain_id": 8, + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" + } + }, + "result": { + "sig_v": 1, + "sig_r": "8b5002dc26252120e89c5194a72fb96663930c3bb709487bec72132a0c32033f", + "sig_s": "47f36b4c02bad110bf7eb4fd71d6cd12bca7443bad3f31700a404302dbbb6e1c" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_network_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0" + }, + "result": { + "sig_v": 0, + "sig_r": "a29ac8d36f0b49b12fcde74878593a75b4990062e8c722da602d4a48733382a2", + "sig_s": "60758c000ee9d276972191c200ef92d395cecf0a9586d65449c73057ae561883" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_network", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "to_address": "" + } + }, + "result": { + "sig_v": 0, + "sig_r": "a29ac8d36f0b49b12fcde74878593a75b4990062e8c722da602d4a48733382a2", + "sig_s": "60758c000ee9d276972191c200ef92d395cecf0a9586d65449c73057ae561883" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "chain_id": -1 + } + }, + "result": { + "sig_v": 0, + "sig_r": "a29ac8d36f0b49b12fcde74878593a75b4990062e8c722da602d4a48733382a2", + "sig_s": "60758c000ee9d276972191c200ef92d395cecf0a9586d65449c73057ae561883" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_send_nothing", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "chain_id": -1, + "to_address": "" + } + }, + "result": { + "sig_v": 0, + "sig_r": "a29ac8d36f0b49b12fcde74878593a75b4990062e8c722da602d4a48733382a2", + "sig_s": "60758c000ee9d276972191c200ef92d395cecf0a9586d65449c73057ae561883" + } + }, + { + "name": "builtin_Ethereum_extern_adChain_wrong_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/60'/0'/0/0", + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + "chain_id": 1, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "token_chain_id": 8, + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" + } + }, + "result": { + "sig_v": 0, + "sig_r": "a29ac8d36f0b49b12fcde74878593a75b4990062e8c722da602d4a48733382a2", + "sig_s": "60758c000ee9d276972191c200ef92d395cecf0a9586d65449c73057ae561883" + } + }, + { + "name": "extern_Ubiq_extern_Sphere_send_network_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/108'/0'/0/0", + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6", + "chain_id": 8, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0" + }, + "result": { + "sig_v": 1, + "sig_r": "1607bb4422b8cd139228f0d4f48521f6b249f2daeb7a254f9e9e998fd8dd6b68", + "sig_s": "4a17515b78d7d70fc8df8b17f602f0cd57a0afe2417cc893cd3cda706ab018fa" + } + }, + { + "name": "extern_Ubiq_extern_Sphere_send_network", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/108'/0'/0/0", + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6", + "chain_id": 8, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "to_address": "" + } + }, + "result": { + "sig_v": 1, + "sig_r": "1607bb4422b8cd139228f0d4f48521f6b249f2daeb7a254f9e9e998fd8dd6b68", + "sig_s": "4a17515b78d7d70fc8df8b17f602f0cd57a0afe2417cc893cd3cda706ab018fa" + } + }, + { + "name": "extern_Ubiq_extern_Sphere_wrong_token", + "parameters": { + "data": "a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "path": "m/44'/108'/0'/0/0", + "to_address": "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6", + "chain_id": 8, + "nonce": "0x0", + "gas_limit": "0x14", + "max_gas_fee": "0x14", + "max_priority_fee": "0x1", + "value": "0x0", + "definitions": { + "token_chain_id": 1, + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd" + } + }, + "result": { + "sig_v": 1, + "sig_r": "1607bb4422b8cd139228f0d4f48521f6b249f2daeb7a254f9e9e998fd8dd6b68", + "sig_s": "4a17515b78d7d70fc8df8b17f602f0cd57a0afe2417cc893cd3cda706ab018fa" + } + } + ] +} diff --git a/common/tests/fixtures/ethereum/sign_typed_data.json b/common/tests/fixtures/ethereum/sign_typed_data.json index 35b484a160..f9919abd5a 100644 --- a/common/tests/fixtures/ethereum/sign_typed_data.json +++ b/common/tests/fixtures/ethereum/sign_typed_data.json @@ -26,6 +26,78 @@ "sig": "0x18aaea9abed7cd88d3763a9a420e2e7b71a9f991685fbc62d74da86326cffa680644862d459d1973e422777a3933bc74190b1cae9a5418ddaea645a7d7630dd91c" } }, + { + "name": "builtin_Ethereum_do_not_send_network", + "comment": "Bare minimum EIP-712 message (domain only)", + "parameters": { + "path": "m/44'/60'/0'/0/0", + "metamask_v4_compat": true, + "data": { + "types": { + "EIP712Domain": [] + }, + "primaryType": "EIP712Domain", + "message": {}, + "domain": {} + }, + "message_hash": null, + "domain_separator_hash": "0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1", + "definitions": { + "slip44": -1 + } + }, + "result": { + "address": "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8", + "sig": "0x18aaea9abed7cd88d3763a9a420e2e7b71a9f991685fbc62d74da86326cffa680644862d459d1973e422777a3933bc74190b1cae9a5418ddaea645a7d7630dd91c" + } + }, + { + "name": "builtin_Ethereum_send_wrong_network", + "comment": "Bare minimum EIP-712 message (domain only)", + "parameters": { + "path": "m/44'/60'/0'/0/0", + "metamask_v4_compat": true, + "data": { + "types": { + "EIP712Domain": [] + }, + "primaryType": "EIP712Domain", + "message": {}, + "domain": {} + }, + "message_hash": null, + "domain_separator_hash": "0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1", + "definitions": { + "slip44": 6060 + } + }, + "result": { + "address": "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8", + "sig": "0x18aaea9abed7cd88d3763a9a420e2e7b71a9f991685fbc62d74da86326cffa680644862d459d1973e422777a3933bc74190b1cae9a5418ddaea645a7d7630dd91c" + } + }, + { + "name": "extern_GoChain_send_network", + "comment": "Bare minimum EIP-712 message (domain only)", + "parameters": { + "path": "m/44'/6060'/0'/0/0", + "metamask_v4_compat": true, + "data": { + "types": { + "EIP712Domain": [] + }, + "primaryType": "EIP712Domain", + "message": {}, + "domain": {} + }, + "message_hash": null, + "domain_separator_hash": "0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1" + }, + "result": { + "address": "0xA26a450ef46a5f11a510eBA2119A3236fa0Aca92", + "sig": "0x0d7be57dfc60b5ec97383761a3404846fcbb71f8c4b317d178ffbc09a0e71b8639ffcedcb3774cf362b50e1c95938d245778c5e3d9679ed4ae63bedafb935b601b" + } + }, { "name": "full_domain_empty_message", "comment": "Domain only EIP-712 message", diff --git a/common/tests/fixtures/ethereum/signmessage.json b/common/tests/fixtures/ethereum/signmessage.json index 41f6df6794..cc3350cf7d 100644 --- a/common/tests/fixtures/ethereum/signmessage.json +++ b/common/tests/fixtures/ethereum/signmessage.json @@ -14,6 +14,45 @@ "sig": "af4eac50f21acc6daeb0ab036f616f5d19fccade46e47100642b3dfc798c9b740d5873887bdc2f02502c90777a082d10dca113bd1ec29d08108396401421c8cc1b" } }, + { + "name": "builtin_Ethereum_do_not_send_network", + "parameters": { + "msg": "This is an example of a signed message.", + "path": "m/44'/60'/0'/0/0", + "definitions": { + "slip44": -1 + } + }, + "result": { + "address": "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8", + "sig": "af4eac50f21acc6daeb0ab036f616f5d19fccade46e47100642b3dfc798c9b740d5873887bdc2f02502c90777a082d10dca113bd1ec29d08108396401421c8cc1b" + } + }, + { + "name": "builtin_Ethereum_send_wrong_network", + "parameters": { + "msg": "This is an example of a signed message.", + "path": "m/44'/60'/0'/0/0", + "definitions": { + "slip44": 6060 + } + }, + "result": { + "address": "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8", + "sig": "af4eac50f21acc6daeb0ab036f616f5d19fccade46e47100642b3dfc798c9b740d5873887bdc2f02502c90777a082d10dca113bd1ec29d08108396401421c8cc1b" + } + }, + { + "name": "extern_GoChain_send_network", + "parameters": { + "msg": "This is an example of a signed message.", + "path": "m/44'/6060'/0'/0/0" + }, + "result": { + "address": "0xA26a450ef46a5f11a510eBA2119A3236fa0Aca92", + "sig": "e642dd21fd87ead65b380f5cc6a9159b8a83e024c3fac13e261ad07dc344b6ef2e8e5ef476a908aeb37aece2afe2e248f029634979fd68b57635fb9e083c91a91c" + } + }, { "parameters": { "msg": "VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!VeryLongMessage!", diff --git a/tests/device_tests/ethereum/test_getaddress.py b/tests/device_tests/ethereum/test_getaddress.py index d31813cc6b..306792f922 100644 --- a/tests/device_tests/ethereum/test_getaddress.py +++ b/tests/device_tests/ethereum/test_getaddress.py @@ -18,7 +18,8 @@ import pytest from trezorlib import ethereum from trezorlib.debuglink import TrezorClientDebugLink as Client -from trezorlib.tools import parse_path +from trezorlib.exceptions import TrezorFailure +from trezorlib.tools import UH_, parse_path from ...common import COMMON_FIXTURES_DIR, parametrize_using_common_fixtures @@ -27,14 +28,26 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] @parametrize_using_common_fixtures("ethereum/getaddress.json") def test_getaddress(client: Client, parameters, result): - encoded_network = None - if not parameters.get("builtin_network", True): - encoded_network = ethereum.network_definition_from_dir( - path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", - slip44=parameters["slip44"], - ) address_n = parse_path(parameters["path"]) + encoded_network_slip44 = UH_(address_n[1]) + if "definitions" in parameters: + encoded_network_slip44 = parameters["definitions"].get( + "slip44", encoded_network_slip44 + ) + + encoded_network = ethereum.network_definition_from_dir( + path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", + slip44=encoded_network_slip44, + ) assert ( ethereum.get_address(client, address_n, encoded_network=encoded_network) == result["address"] ) + + +def test_getaddress_missing_extern_definitions(client: Client): + path = "m/44'/6060'/0'/0/0" # GoChain + address_n = parse_path(path) + + with pytest.raises(TrezorFailure, match=r"DataError:.*Forbidden key path"): + ethereum.get_address(client, address_n, encoded_network=None) diff --git a/tests/device_tests/ethereum/test_sign_typed_data.py b/tests/device_tests/ethereum/test_sign_typed_data.py index a58e828c27..9333d4320c 100644 --- a/tests/device_tests/ethereum/test_sign_typed_data.py +++ b/tests/device_tests/ethereum/test_sign_typed_data.py @@ -18,9 +18,10 @@ import pytest from trezorlib import ethereum, exceptions from trezorlib.debuglink import TrezorClientDebugLink as Client -from trezorlib.tools import parse_path +from trezorlib.exceptions import TrezorFailure +from trezorlib.tools import UH_, parse_path -from ...common import parametrize_using_common_fixtures +from ...common import COMMON_FIXTURES_DIR, parametrize_using_common_fixtures SHOW_MORE = (143, 167) @@ -32,21 +33,61 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] def test_ethereum_sign_typed_data(client: Client, parameters, result): with client: address_n = parse_path(parameters["path"]) + encoded_network_slip44 = UH_(address_n[1]) + if "definitions" in parameters: + encoded_network_slip44 = parameters["definitions"].get( + "slip44", encoded_network_slip44 + ) + + encoded_network = ethereum.network_definition_from_dir( + path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", + slip44=encoded_network_slip44, + ) ret = ethereum.sign_typed_data( client, address_n, parameters["data"], metamask_v4_compat=parameters["metamask_v4_compat"], + encoded_network=encoded_network, ) assert ret.address == result["address"] assert f"0x{ret.signature.hex()}" == result["sig"] +@pytest.mark.skip_t1 +def test_ethereum_sign_typed_data_missing_extern_definitions(client: Client): + path = "m/44'/6060'/0'/0/0" # GoChain + + with pytest.raises(TrezorFailure, match=r"DataError: Forbidden key path"): + ethereum.sign_typed_data( + client, + parse_path(path), + { + "types": {"EIP712Domain": []}, + "primaryType": "EIP712Domain", + "message": {}, + "domain": {}, + }, + metamask_v4_compat=True, + encoded_network=None, + ) + + @pytest.mark.skip_t2 @parametrize_using_common_fixtures("ethereum/sign_typed_data.json") def test_ethereum_sign_typed_data_blind(client: Client, parameters, result): with client: address_n = parse_path(parameters["path"]) + encoded_network_slip44 = UH_(address_n[1]) + if "definitions" in parameters: + encoded_network_slip44 = parameters["definitions"].get( + "slip44", encoded_network_slip44 + ) + + encoded_network = ethereum.network_definition_from_dir( + path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", + slip44=encoded_network_slip44, + ) ret = ethereum.sign_typed_data_hash( client, address_n, @@ -55,11 +96,28 @@ def test_ethereum_sign_typed_data_blind(client: Client, parameters, result): ethereum.decode_hex(parameters["message_hash"]) if parameters["message_hash"] else None, + encoded_network=encoded_network, ) assert ret.address == result["address"] assert f"0x{ret.signature.hex()}" == result["sig"] +@pytest.mark.skip_t2 +def test_ethereum_sign_typed_data_blind_missing_extern_definitions(client: Client): + path = "m/44'/6060'/0'/0/0" # GoChain + + with pytest.raises(TrezorFailure, match=r"DataError:.*Forbidden key path"): + ethereum.sign_typed_data_hash( + client, + parse_path(path), + ethereum.decode_hex( + "0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1" + ), + None, + encoded_network=None, + ) + + # Being the same as the first object in ethereum/sign_typed_data.json DATA = { "types": { diff --git a/tests/device_tests/ethereum/test_sign_verify_message.py b/tests/device_tests/ethereum/test_sign_verify_message.py index 8cf2680ad8..485b7729f3 100644 --- a/tests/device_tests/ethereum/test_sign_verify_message.py +++ b/tests/device_tests/ethereum/test_sign_verify_message.py @@ -18,22 +18,41 @@ import pytest from trezorlib import ethereum from trezorlib.debuglink import TrezorClientDebugLink as Client -from trezorlib.tools import parse_path +from trezorlib.exceptions import TrezorFailure +from trezorlib.tools import UH_, parse_path -from ...common import parametrize_using_common_fixtures +from ...common import COMMON_FIXTURES_DIR, parametrize_using_common_fixtures pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] @parametrize_using_common_fixtures("ethereum/signmessage.json") def test_signmessage(client: Client, parameters, result): - res = ethereum.sign_message( - client, parse_path(parameters["path"]), parameters["msg"] + address_n = parse_path(parameters["path"]) + encoded_network_slip44 = UH_(address_n[1]) + if "definitions" in parameters: + encoded_network_slip44 = parameters["definitions"].get( + "slip44", encoded_network_slip44 + ) + + encoded_network = ethereum.network_definition_from_dir( + path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", + slip44=encoded_network_slip44, ) + res = ethereum.sign_message(client, address_n, parameters["msg"], encoded_network) assert res.address == result["address"] assert res.signature.hex() == result["sig"] +def test_signmessage_missing_extern_definitions(client: Client): + path = "m/44'/6060'/0'/0/0" # GoChain + address_n = parse_path(path) + msg = "This is an example of a signed message." + + with pytest.raises(TrezorFailure, match=r"DataError:.*Forbidden key path"): + ethereum.sign_message(client, address_n, msg, encoded_network=None) + + @parametrize_using_common_fixtures("ethereum/verifymessage.json") def test_verify(client: Client, parameters, result): res = ethereum.verify_message( diff --git a/tests/device_tests/ethereum/test_signtx.py b/tests/device_tests/ethereum/test_signtx.py index f49fb50ac3..6244e832af 100644 --- a/tests/device_tests/ethereum/test_signtx.py +++ b/tests/device_tests/ethereum/test_signtx.py @@ -14,7 +14,7 @@ # You should have received a copy of the License along with this library. # If not, see . -from typing import Optional +from functools import partial import pytest @@ -34,32 +34,35 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] def get_EthereumEncodedDefinitions( parameters: dict, -) -> Optional[messages.EthereumEncodedDefinitions]: - encoded_network = None - encoded_token = None - if not parameters.get("builtin_network", True): - encoded_network = ethereum.network_definition_from_dir( - path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", - chain_id=parameters["chain_id"], - ) - if not parameters.get("builtin_token", True): - encoded_token = ethereum.token_definition_from_dir( - path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", - chain_id=parameters["chain_id"], - token_address=parameters["to_address"], - ) +) -> messages.EthereumEncodedDefinitions: + chain_id = parameters["chain_id"] + token_chain_id = parameters["chain_id"] + token_address = parameters["to_address"] - if encoded_network is not None or encoded_token is not None: - return messages.EthereumEncodedDefinitions( - encoded_network=encoded_network, encoded_token=encoded_token - ) + if "definitions" in parameters: + chain_id = parameters["definitions"].get("chain_id", chain_id) + token_chain_id = parameters["definitions"].get("token_chain_id", token_chain_id) + token_address = parameters["definitions"].get("to_address", token_address) - return None + encoded_network = ethereum.network_definition_from_dir( + path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", + chain_id=chain_id, + ) + encoded_token = ethereum.token_definition_from_dir( + path=COMMON_FIXTURES_DIR / "ethereum" / "definitions-latest", + chain_id=token_chain_id, + token_address=token_address, + ) + + return messages.EthereumEncodedDefinitions( + encoded_network=encoded_network, encoded_token=encoded_token + ) @parametrize_using_common_fixtures( "ethereum/sign_tx.json", "ethereum/sign_tx_eip155.json", + "ethereum/sign_tx_definitions.json", ) def test_signtx(client: Client, parameters, result): with client: @@ -84,7 +87,93 @@ def test_signtx(client: Client, parameters, result): assert sig_v == result["sig_v"] -@parametrize_using_common_fixtures("ethereum/sign_tx_eip1559.json") +def test_signtx_missing_extern_definitions(client: Client): + chain_id = 8 # Ubiq + to_address = "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" # Sphere + + sign_tx_call = partial( + ethereum.sign_tx, + client, + n=parse_path("m/44'/108'/0'/0/0"), + nonce=0, + gas_price=20, + gas_limit=20, + to=to_address, + chain_id=chain_id, + value=0, + data=b"a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + ) + + definitions_vector = [ + get_EthereumEncodedDefinitions( + { + "chain_id": chain_id, + "to_address": to_address, + "definitions": { + "chain_id": -1, + }, + } + ), # missing network + get_EthereumEncodedDefinitions( + { + "chain_id": -1, + "to_address": "", + } + ), # missing network and token + ] + + for definitions in definitions_vector: + with pytest.raises(TrezorFailure, match=r"DataError:.*Forbidden key path"): + sign_tx_call(definitions=definitions) + + +def test_signtx_wrong_extern_definitions(client: Client): + chain_id = 8 # Ubiq + to_address = "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" # Sphere + + sign_tx_call = partial( + ethereum.sign_tx, + client, + n=parse_path("m/44'/108'/0'/0/0"), + nonce=0, + gas_price=20, + gas_limit=20, + to=to_address, + chain_id=chain_id, + value=0, + data=b"a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + ) + + definitions_vector = [ + get_EthereumEncodedDefinitions( + { + "chain_id": chain_id, + "to_address": to_address, + "definitions": { + "chain_id": 1, + }, + } + ), # wrong network + get_EthereumEncodedDefinitions( + { + "chain_id": 1, + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + } + ), # wrong network and token + ] + + for definitions in definitions_vector: + with pytest.raises( + TrezorFailure, + match=r"DataError:.*Invalid network definition - chain IDs not equal.", + ): + sign_tx_call(definitions=definitions) + + +@parametrize_using_common_fixtures( + "ethereum/sign_tx_eip1559.json", + "ethereum/sign_tx_eip1559_definitions.json", +) def test_signtx_eip1559(client: Client, parameters, result): with client: sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559( @@ -106,6 +195,91 @@ def test_signtx_eip1559(client: Client, parameters, result): assert sig_v == result["sig_v"] +def test_signtx_eip1559_missing_extern_definitions(client: Client): + chain_id = 8 # Ubiq + to_address = "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" # Sphere + + sign_tx_eip1559_call = partial( + ethereum.sign_tx_eip1559, + client, + n=parse_path("m/44'/108'/0'/0/0"), + nonce=0, + gas_limit=20, + max_gas_fee=20, + max_priority_fee=1, + to=to_address, + chain_id=chain_id, + value=0, + data=b"a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + ) + + definitions_vector = [ + get_EthereumEncodedDefinitions( + { + "chain_id": chain_id, + "to_address": to_address, + "definitions": { + "chain_id": -1, + }, + } + ), # missing network + get_EthereumEncodedDefinitions( + { + "chain_id": -1, + "to_address": "", + } + ), # missing network and token + ] + + for definitions in definitions_vector: + with pytest.raises(TrezorFailure, match=r"DataError:.*Forbidden key path"): + sign_tx_eip1559_call(definitions=definitions) + + +def test_signtx_eip1559_wrong_extern_definitions(client: Client): + chain_id = 8 # Ubiq + to_address = "0x20e3dd746ddf519b23ffbbb6da7a5d33ea6349d6" # Sphere + + sign_tx_eip1559_call = partial( + ethereum.sign_tx_eip1559, + client, + n=parse_path("m/44'/108'/0'/0/0"), + nonce=0, + gas_limit=20, + max_gas_fee=20, + max_priority_fee=1, + to=to_address, + chain_id=chain_id, + value=0, + data=b"a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + ) + + definitions_vector = [ + get_EthereumEncodedDefinitions( + { + "chain_id": chain_id, + "to_address": to_address, + "definitions": { + "chain_id": 1, + }, + } + ), # wrong network + get_EthereumEncodedDefinitions( + { + "chain_id": 1, + "to_address": "0xd0d6d6c5fe4a677d343cc433536bb717bae167dd", + } + ), # wrong network and token + ] + + for definitions in definitions_vector: + with pytest.raises( + TrezorFailure, + match=r"DataError:.*Invalid network definition - chain IDs not equal.", + ): + sign_tx_eip1559_call(definitions=definitions) + + def test_sanity_checks(client: Client): """Is not vectorized because these are internal-only tests that do not need to be exposed to the public. diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 0b247afc4a..76ca0dcb09 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -337,6 +337,8 @@ "T1_ethereum-test_getaddress.py::test_getaddress[GoChain]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", "T1_ethereum-test_getaddress.py::test_getaddress[Ledger Live legacy path]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", "T1_ethereum-test_getaddress.py::test_getaddress[Wanchain]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", +"T1_ethereum-test_getaddress.py::test_getaddress[builtin_Ethereum_do_not_send_network]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", +"T1_ethereum-test_getaddress.py::test_getaddress[builtin_Ethereum_send_wrong_network]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", "T1_ethereum-test_getaddress.py::test_getaddress[parameters0-result0]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", "T1_ethereum-test_getaddress.py::test_getaddress[parameters1-result1]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", "T1_ethereum-test_getaddress.py::test_getaddress[parameters2-result2]": "37e446e17465ce9823c34c9162d94e4ad3c84faa86bae7966c753be5c5fd77a2", @@ -348,20 +350,28 @@ "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[array_of_structs]": "04b94ca842aa77fdc6b75b07bbe178c4ea99c35e6dae630588fa5d9cb67b9090", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[bare_minimum]": "730a5d3bf1389ac14aec7ee9f65e2cbf516957e5077acc0e07a7541f667e2f0b", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[basic_data]": "fd99dc685a4a125db0f3f8d2a16ffa242bd57e4ff714d66cc9c4161c486f53be", +"T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[builtin_Ethereum_do_n-06060e3d": "730a5d3bf1389ac14aec7ee9f65e2cbf516957e5077acc0e07a7541f667e2f0b", +"T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[builtin_Ethereum_send-a187d8ad": "730a5d3bf1389ac14aec7ee9f65e2cbf516957e5077acc0e07a7541f667e2f0b", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[complex_data]": "24957177a20a1aacba25207e210ee3d97a9ca0b62b19e2fa9598d77bd27f3cde", +"T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[extern_GoChain_send_network]": "a9d7f956d786b8d01d3b325caaf69c02816689622a29050ffd686fda8ed2aecd", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[full_domain_empty_message]": "68d748b8407f9d9005d293b5c6c122051f7376761c3628ea4968255ecbc1df39", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[injective_testcase]": "586a48367b619266abb0ddd39ae825156fcc1945ae01170e5f4ee7ba66c83360", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[struct_list_non_v4]": "eb17b48c8495ae235345920089c1662f5aa36fbb6e90f0c0c4b270c7bb2f2ea8", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[struct_list_v4]": "b0ce2ac7326df63ae12badf47a58db955fe2b17a327fcdc6eee1fd06375a25f7", "T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind[structs_arrays_v4]": "a38f3ef2571424b460cd7351cd7263c8fc19684041d57f32f5599588c89046bf", +"T1_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_blind_missing_extern_definitions": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[builtin_Ethereum_do_not_send_network]": "0f1e81d57996381781e8e3c5865875e6d48c29128d2de78f33556d96f29c2785", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[builtin_Ethereum_send_wrong_network]": "0f1e81d57996381781e8e3c5865875e6d48c29128d2de78f33556d96f29c2785", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[extern_GoChain_send_network]": "a72aad838b023cce57d15c42f0e55da11e30ca965e42cab2e5019d6636dde47d", "T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters0-result0]": "0f1e81d57996381781e8e3c5865875e6d48c29128d2de78f33556d96f29c2785", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters1-result1]": "b56508b17391e12992ce21c04f0ae096ee9b2cd4e1dd2912e75b55a634158976", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters2-result2]": "a8ec598be6255799e7f01e84343cc7e5e02d84cee5c3cb909457304390d6fc9b", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters3-result3]": "c6e541efccc6d50fe6e2d590bd48c5d89fdd3defda6088d11c771827b48e2656", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters4-result4]": "06a642eaad886c01421973efa714c59eb6da8e60d06fc44cc42a5f959ec3dd27", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters5-result5]": "a6b54a1244c1c457de732c2d27371475c02e451a4820f283912a5e3c62fe2842", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters6-result6]": "858c5f14ecf61cbc85acb7d11f85b65a88c3d14f2591f185e1925092a977a7d6", -"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters7-result7]": "72795258943a821df0fca67a6e1d915883c414e5066cff8f93d4a5735c0ba45b", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters10-result10]": "72795258943a821df0fca67a6e1d915883c414e5066cff8f93d4a5735c0ba45b", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters4-result4]": "b56508b17391e12992ce21c04f0ae096ee9b2cd4e1dd2912e75b55a634158976", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters5-result5]": "a8ec598be6255799e7f01e84343cc7e5e02d84cee5c3cb909457304390d6fc9b", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters6-result6]": "c6e541efccc6d50fe6e2d590bd48c5d89fdd3defda6088d11c771827b48e2656", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters7-result7]": "06a642eaad886c01421973efa714c59eb6da8e60d06fc44cc42a5f959ec3dd27", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters8-result8]": "a6b54a1244c1c457de732c2d27371475c02e451a4820f283912a5e3c62fe2842", +"T1_ethereum-test_sign_verify_message.py::test_signmessage[parameters9-result9]": "858c5f14ecf61cbc85acb7d11f85b65a88c3d14f2591f185e1925092a977a7d6", +"T1_ethereum-test_sign_verify_message.py::test_signmessage_missing_extern_definitions": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_ethereum-test_sign_verify_message.py::test_verify[parameters0-result0]": "cdec0f79f2abbd90f4346494037f7bb4dd4dccc7c6739b497873d0c5603f2a26", "T1_ethereum-test_sign_verify_message.py::test_verify[parameters1-result1]": "9e51345ff0d3736f81a5c169768f9a80c555187eef2db3046f5ad12262990466", "T1_ethereum-test_sign_verify_message.py::test_verify[parameters2-result2]": "e2aff8a36dffd76b0e48256a5012ff191d0ce877a42cf31e1f25f7c3cd786d64", @@ -385,6 +395,18 @@ "T1_ethereum-test_signtx.py::test_signtx[Ropsten]": "05db6420b63ecf8b96c61ea206bbc10edeaab5408e72e16e984db2c799ccd778", "T1_ethereum-test_signtx.py::test_signtx[Unknown_chain_id_eth_path]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", "T1_ethereum-test_signtx.py::test_signtx[Unknown_chain_id_testnet_path]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_send_network]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_send_network_token]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_send_nothing]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_send_token]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_wrong_network]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_wrong_network_token]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_builtin_Tether_wrong_token]": "2ad8d58e1c04bfde465902c6edd2308a392a4afeffbeaf5e32e0ef22380acf75", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_extern_adChain_send_network]": "0143f7c4273964eb5eb8113c7e63674c033bebeca7ae619270b7ca77bb6aed66", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_extern_adChain_send_network_token]": "08e9da493a8ac1f4e7f05bbb8f7c2b2fd97481421899a170ac0ead26b0764a21", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_extern_adChain_send_nothing]": "0143f7c4273964eb5eb8113c7e63674c033bebeca7ae619270b7ca77bb6aed66", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_extern_adChain_send_token]": "08e9da493a8ac1f4e7f05bbb8f7c2b2fd97481421899a170ac0ead26b0764a21", +"T1_ethereum-test_signtx.py::test_signtx[builtin_Ethereum_extern_adChain_wrong_token]": "0143f7c4273964eb5eb8113c7e63674c033bebeca7ae619270b7ca77bb6aed66", "T1_ethereum-test_signtx.py::test_signtx[data_1]": "8b432aba21bc4344814cceaf693e114b9d3e3d6ceb83c3a6af7c3ed0f9b37449", "T1_ethereum-test_signtx.py::test_signtx[data_2_bigdata]": "445286b7501ca67dd16dafd7ea09c57cc4a37a642ae50f0c812d74353c37c017", "T1_ethereum-test_signtx.py::test_signtx[known_erc20_token]": "7ef8d3bbf6e299b41522769a893f72b04571fc7176bc93e5c1701a2b5721fb20",