1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-25 07:48:10 +00:00

core/ethereum: add support for wanchain slip44 id (#440)

This commit is contained in:
matejcik 2019-08-25 16:36:14 +02:00 committed by Pavol Rusnak
parent c307d9f14b
commit 2022c39ef9
5 changed files with 59 additions and 0 deletions

View File

@ -1,8 +1,13 @@
# generated from networks.py.mako # generated from networks.py.mako
# do not edit manually! # do not edit manually!
from micropython import const
from apps.common import HARDENED from apps.common import HARDENED
SLIP44_WANCHAIN = const(5718350)
SLIP44_ETHEREUM = const(60)
if False: if False:
from typing import Iterator, Optional from typing import Iterator, Optional
@ -23,6 +28,9 @@ def by_chain_id(chain_id: int) -> Optional["NetworkInfo"]:
def by_slip44(slip44: int) -> Optional["NetworkInfo"]: def by_slip44(slip44: int) -> Optional["NetworkInfo"]:
if slip44 == SLIP44_WANCHAIN:
# Coerce to Ethereum
slip44 == SLIP44_ETHEREUM
for n in NETWORKS: for n in NETWORKS:
if n.slip44 == slip44: if n.slip44 == slip44:
return n return n
@ -32,6 +40,7 @@ def by_slip44(slip44: int) -> Optional["NetworkInfo"]:
def all_slip44_ids_hardened() -> Iterator[int]: def all_slip44_ids_hardened() -> Iterator[int]:
for n in NETWORKS: for n in NETWORKS:
yield n.slip44 | HARDENED yield n.slip44 | HARDENED
yield SLIP44_WANCHAIN | HARDENED
class NetworkInfo: class NetworkInfo:

View File

@ -1,8 +1,13 @@
# generated from networks.py.mako # generated from networks.py.mako
# do not edit manually! # do not edit manually!
from micropython import const
from apps.common import HARDENED from apps.common import HARDENED
SLIP44_WANCHAIN = const(5718350)
SLIP44_ETHEREUM = const(60)
if False: if False:
from typing import Iterator, Optional from typing import Iterator, Optional
@ -23,6 +28,9 @@ def by_chain_id(chain_id: int) -> Optional["NetworkInfo"]:
def by_slip44(slip44: int) -> Optional["NetworkInfo"]: def by_slip44(slip44: int) -> Optional["NetworkInfo"]:
if slip44 == SLIP44_WANCHAIN:
# Coerce to Ethereum
slip44 == SLIP44_ETHEREUM
for n in NETWORKS: for n in NETWORKS:
if n.slip44 == slip44: if n.slip44 == slip44:
return n return n
@ -32,6 +40,7 @@ def by_slip44(slip44: int) -> Optional["NetworkInfo"]:
def all_slip44_ids_hardened() -> Iterator[int]: def all_slip44_ids_hardened() -> Iterator[int]:
for n in NETWORKS: for n in NETWORKS:
yield n.slip44 | HARDENED yield n.slip44 | HARDENED
yield SLIP44_WANCHAIN | HARDENED
class NetworkInfo: class NetworkInfo:

View File

@ -70,6 +70,7 @@ class TestEthereumGetAddress(unittest.TestCase):
[44 | HARDENED, 60 | HARDENED, 0 | HARDENED, 0, 9999], [44 | HARDENED, 60 | HARDENED, 0 | HARDENED, 0, 9999],
[44 | HARDENED, 6060 | HARDENED, 0 | HARDENED, 0, 0], [44 | HARDENED, 6060 | HARDENED, 0 | HARDENED, 0, 0],
[44 | HARDENED, 1 | HARDENED, 0 | HARDENED, 0, 0], [44 | HARDENED, 1 | HARDENED, 0 | HARDENED, 0, 0],
[44 | HARDENED, 5718350 | HARDENED, 0 | HARDENED, 0, 0],
] ]
for path in incorrect_paths: for path in incorrect_paths:

View File

@ -51,3 +51,8 @@ class TestMsgEthereumGetaddress(TrezorTest):
ethereum.get_address(self.client, [H_(44), H_(6060), 0, 9999999]) ethereum.get_address(self.client, [H_(44), H_(6060), 0, 9999999])
== "0x98b8e926bd224764De2A0E4f4CBe1521474050AF" == "0x98b8e926bd224764De2A0E4f4CBe1521474050AF"
) )
# Wanchain SLIP44 id
assert (
ethereum.get_address(self.client, [H_(44), H_(5718350), H_(0)])
== "0x4d643B1b556E14A27143a38bcE61230FFf5AFca8"
)

View File

@ -80,6 +80,41 @@ class TestMsgEthereumSigntx(TrezorTest):
== "7001bfe3ba357e4a9f9e0d3a3f8a8962257615a4cf215db93e48b98999fc51b7" == "7001bfe3ba357e4a9f9e0d3a3f8a8962257615a4cf215db93e48b98999fc51b7"
) )
def test_ethereum_signtx_wanchain(self):
self.setup_mnemonic_nopin_nopassphrase()
with self.client:
self.client.set_expected_responses(
[
proto.ButtonRequest(code=proto.ButtonRequestType.SignTx),
proto.ButtonRequest(code=proto.ButtonRequestType.SignTx),
proto.EthereumTxRequest(data_length=None),
]
)
sig_v, sig_r, sig_s = ethereum.sign_tx(
self.client,
n=parse_path("44'/5718350'/0'/0/0"),
nonce=0,
gas_price=20,
gas_limit=20,
# ADT token address
to="0xd0d6d6c5fe4a677d343cc433536bb717bae167dd",
chain_id=1,
tx_type=1,
# value needs to be 0, token value is set in the contract (data)
value=100,
)
# ad-hoc generated signature. might not be valid.
assert (
sig_r.hex()
== "d6e197029031ec90b53ed14e8233aa78b592400513ac0386d2d55cdedc3d796f"
)
assert (
sig_s.hex()
== "326e0d600dd1b7ee606eb531b998a6a3b3293d4995fb8cfe0677962e8a43cff6"
)
def test_ethereum_signtx_unknown_erc20_token(self): def test_ethereum_signtx_unknown_erc20_token(self):
self.setup_mnemonic_nopin_nopassphrase() self.setup_mnemonic_nopin_nopassphrase()