mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-03-19 01:26:06 +00:00
feat(all): implement support information for T2B1
WIP - change trezor{1,2} to their internal names, add support for model R WIP - add EOS and NEM features Capability only for TT WIP - not include EOS and NEM into TR WIP - choose between device models when generating coininfo WIP - regenerate coininfo.py WIP - skip NEM, EOS, Dash, BGold and Decred device tests for TR WIP - fix python support WIP - fix unit tests WIP - import bitcoin-like code only when needed WIP - remove ignored coins for TR in fixtures.json WIP - make all the external references to models UPPERCASE WIP - do the model separation in mako script also for tokens and networks WIP - hot-fixing non-supporting RELEASES_URL for new model names WIP - support.py releases CLI command takes a list of -r key-value pairs DEVICE=VERSION WIP - run `python support.py release` WIP - use utils.MODEL_IS_T2B1 to ignore NEM and EOS WIP - change all the docs and commands to have UPPERCASE model names [no changelog]
This commit is contained in:
parent
2dcdc2be96
commit
76c6e9cd9d
@ -86,7 +86,7 @@ If you want to add a **wallet link**, modify the file [`wallets.json`](wallets.j
|
||||
# Support Information
|
||||
|
||||
We keep track of support status of each built-in coin over our devices. That is
|
||||
`trezor1` for Trezor One, `trezor2` for Trezor T, `connect` for [Connect](https://github.com/trezor/connect)
|
||||
`T1B1` for Trezor One, `T2T1` for Trezor T, `T2B1` for Trezor R, `connect` for [Connect](https://github.com/trezor/connect)
|
||||
and `suite` for [Trezor Suite](https://suite.trezor.io/). In further description, the word "device"
|
||||
applies to Connect and Suite as well.
|
||||
|
||||
|
@ -1,88 +1,5 @@
|
||||
{
|
||||
"connect": {
|
||||
"supported": {
|
||||
"bitcoin:ACM": true,
|
||||
"bitcoin:AXE": true,
|
||||
"bitcoin:BCH": true,
|
||||
"bitcoin:BTC": true,
|
||||
"bitcoin:BTCP": true,
|
||||
"bitcoin:BTG": true,
|
||||
"bitcoin:BTX": true,
|
||||
"bitcoin:DASH": true,
|
||||
"bitcoin:DCR": true,
|
||||
"bitcoin:DGB": true,
|
||||
"bitcoin:DOGE": true,
|
||||
"bitcoin:FIRO": true,
|
||||
"bitcoin:FJC": true,
|
||||
"bitcoin:FLO": true,
|
||||
"bitcoin:FTC": true,
|
||||
"bitcoin:KMD": true,
|
||||
"bitcoin:KOTO": true,
|
||||
"bitcoin:LTC": true,
|
||||
"bitcoin:MONA": true,
|
||||
"bitcoin:NMC": true,
|
||||
"bitcoin:PPC": true,
|
||||
"bitcoin:REGTEST": true,
|
||||
"bitcoin:RITO": true,
|
||||
"bitcoin:RVN": true,
|
||||
"bitcoin:SYS": true,
|
||||
"bitcoin:TAZ": true,
|
||||
"bitcoin:TBCH": true,
|
||||
"bitcoin:TBTG": true,
|
||||
"bitcoin:TDCR": true,
|
||||
"bitcoin:TEST": true,
|
||||
"bitcoin:UNO": true,
|
||||
"bitcoin:VIA": true,
|
||||
"bitcoin:VTC": true,
|
||||
"bitcoin:XPM": true,
|
||||
"bitcoin:XRC": true,
|
||||
"bitcoin:XSN": true,
|
||||
"bitcoin:XVG": true,
|
||||
"bitcoin:ZCR": true,
|
||||
"bitcoin:ZEC": true,
|
||||
"bitcoin:tDASH": true,
|
||||
"bitcoin:tFIRO": true,
|
||||
"bitcoin:tLTC": true,
|
||||
"bitcoin:tPPC": true,
|
||||
"eth:tETH:3": true,
|
||||
"misc:ADA": true,
|
||||
"misc:BNB": true,
|
||||
"misc:EOS": true,
|
||||
"misc:XLM": true,
|
||||
"misc:XRP": true,
|
||||
"misc:XTZ": true,
|
||||
"misc:tADA": true,
|
||||
"misc:tXRP": true,
|
||||
"nem:BREEZE": true,
|
||||
"nem:DIM": true,
|
||||
"nem:DIMTOK": true,
|
||||
"nem:PAC:CHS": true,
|
||||
"nem:PAC:HRT": true,
|
||||
"nem:XEM": true
|
||||
},
|
||||
"unsupported": {}
|
||||
},
|
||||
"suite": {
|
||||
"supported": {
|
||||
"bitcoin:BCH": true,
|
||||
"bitcoin:BTC": true,
|
||||
"bitcoin:BTG": true,
|
||||
"bitcoin:DASH": true,
|
||||
"bitcoin:DGB": true,
|
||||
"bitcoin:DOGE": true,
|
||||
"bitcoin:LTC": true,
|
||||
"bitcoin:NMC": true,
|
||||
"bitcoin:REGTEST": true,
|
||||
"bitcoin:TEST": true,
|
||||
"bitcoin:VTC": true,
|
||||
"bitcoin:ZEC": true,
|
||||
"eth:tETH:3": true,
|
||||
"misc:XRP": true,
|
||||
"misc:tXRP": true
|
||||
},
|
||||
"unsupported": {}
|
||||
},
|
||||
"trezor1": {
|
||||
"T1B1": {
|
||||
"supported": {
|
||||
"bitcoin:ACM": "1.7.2",
|
||||
"bitcoin:AXE": "1.7.3",
|
||||
@ -195,7 +112,120 @@
|
||||
"misc:tXRP": "not implemented"
|
||||
}
|
||||
},
|
||||
"trezor2": {
|
||||
"T2B1": {
|
||||
"supported": {
|
||||
"bitcoin:ACM": "2.6.1",
|
||||
"bitcoin:AXE": "2.6.1",
|
||||
"bitcoin:BCH": "2.6.1",
|
||||
"bitcoin:BTC": "2.6.1",
|
||||
"bitcoin:BTCP": "2.6.1",
|
||||
"bitcoin:BTX": "2.6.1",
|
||||
"bitcoin:CPU": "2.6.1",
|
||||
"bitcoin:CRW": "2.6.1",
|
||||
"bitcoin:DOGE": "2.6.1",
|
||||
"bitcoin:ELEMENTS": "2.6.1",
|
||||
"bitcoin:FIRO": "2.6.1",
|
||||
"bitcoin:FJC": "2.6.1",
|
||||
"bitcoin:FLO": "2.6.1",
|
||||
"bitcoin:FTC": "2.6.1",
|
||||
"bitcoin:GRS": "2.6.1",
|
||||
"bitcoin:KMD": "2.6.1",
|
||||
"bitcoin:KOTO": "2.6.1",
|
||||
"bitcoin:LTC": "2.6.1",
|
||||
"bitcoin:MONA": "2.6.1",
|
||||
"bitcoin:PPC": "2.6.1",
|
||||
"bitcoin:QTUM": "2.6.1",
|
||||
"bitcoin:REGTEST": "2.6.1",
|
||||
"bitcoin:RITO": "2.6.1",
|
||||
"bitcoin:RVN": "2.6.1",
|
||||
"bitcoin:SMART": "2.6.1",
|
||||
"bitcoin:SYS": "2.6.1",
|
||||
"bitcoin:TAZ": "2.6.1",
|
||||
"bitcoin:TBCH": "2.6.1",
|
||||
"bitcoin:TEST": "2.6.1",
|
||||
"bitcoin:UNO": "2.6.1",
|
||||
"bitcoin:VIA": "2.6.1",
|
||||
"bitcoin:VIPS": "2.6.1",
|
||||
"bitcoin:XPM": "2.6.1",
|
||||
"bitcoin:XRC": "2.6.1",
|
||||
"bitcoin:XSN": "2.6.1",
|
||||
"bitcoin:XVG": "2.6.1",
|
||||
"bitcoin:ZCR": "2.6.1",
|
||||
"bitcoin:ZEC": "2.6.1",
|
||||
"bitcoin:tFIRO": "2.6.1",
|
||||
"bitcoin:tGRS": "2.6.1",
|
||||
"bitcoin:tLTC": "2.6.1",
|
||||
"bitcoin:tPPC": "2.6.1",
|
||||
"bitcoin:tQTUM": "2.6.1",
|
||||
"bitcoin:tRVN": "2.6.1",
|
||||
"bitcoin:tSMART": "2.6.1",
|
||||
"erc20:bnb:ATOM": "2.6.1",
|
||||
"erc20:eth:AAVE": "2.6.1",
|
||||
"erc20:eth:APE": "2.6.1",
|
||||
"erc20:eth:AXS": "2.6.1",
|
||||
"erc20:eth:BUSD": "2.6.1",
|
||||
"erc20:eth:CHZ": "2.6.1",
|
||||
"erc20:eth:CRO": "2.6.1",
|
||||
"erc20:eth:DAI": "2.6.1",
|
||||
"erc20:eth:FRAX": "2.6.1",
|
||||
"erc20:eth:LEO": "2.6.1",
|
||||
"erc20:eth:LINK": "2.6.1",
|
||||
"erc20:eth:MANA": "2.6.1",
|
||||
"erc20:eth:MATIC": "2.6.1",
|
||||
"erc20:eth:OKB": "2.6.1",
|
||||
"erc20:eth:QNT": "2.6.1",
|
||||
"erc20:eth:SAND": "2.6.1",
|
||||
"erc20:eth:SHIB": "2.6.1",
|
||||
"erc20:eth:STETH": "2.6.1",
|
||||
"erc20:eth:UNI": "2.6.1",
|
||||
"erc20:eth:USDC": "2.6.1",
|
||||
"erc20:eth:USDT": "2.6.1",
|
||||
"erc20:eth:WBTC": "2.6.1",
|
||||
"erc20:eth:XCN": "2.6.1",
|
||||
"erc20:matic:WAVAX": "2.6.1",
|
||||
"eth:BNB:56": "2.6.1",
|
||||
"eth:ETC:61": "2.6.1",
|
||||
"eth:ETH:1": "2.6.1",
|
||||
"eth:MATIC:137": "2.6.1",
|
||||
"eth:tETH:3": "2.6.1",
|
||||
"eth:tETH:4": "2.6.1",
|
||||
"eth:tETH:5": "2.6.1",
|
||||
"misc:ADA": "2.6.1",
|
||||
"misc:BNB": "2.6.1",
|
||||
"misc:MAID": "2.6.1",
|
||||
"misc:OMNI": "2.6.1",
|
||||
"misc:USDT": "2.6.1",
|
||||
"misc:XLM": "2.6.1",
|
||||
"misc:XMR": "2.6.1",
|
||||
"misc:XRP": "2.6.1",
|
||||
"misc:XTZ": "2.6.1",
|
||||
"misc:tADA": "2.6.1",
|
||||
"misc:tXRP": "2.6.1",
|
||||
"nem:BREEZE": "2.6.1",
|
||||
"nem:DIM": "2.6.1",
|
||||
"nem:DIMTOK": "2.6.1",
|
||||
"nem:PAC:CHS": "2.6.1",
|
||||
"nem:PAC:HRT": "2.6.1"
|
||||
},
|
||||
"unsupported": {
|
||||
"bitcoin:BTG": "not for T2B1 (#2793)",
|
||||
"bitcoin:DASH": "not for T2B1 (#2793)",
|
||||
"bitcoin:DCR": "not for T2B1 (#2793)",
|
||||
"bitcoin:DGB": "not for T2B1 (#2793)",
|
||||
"bitcoin:NMC": "not for T2B1 (#2793)",
|
||||
"bitcoin:PART": "incompatible fork",
|
||||
"bitcoin:TBTG": "not for T2B1 (#2793)",
|
||||
"bitcoin:TDCR": "not for T2B1 (#2793)",
|
||||
"bitcoin:TRC": "address_type collides with Bitcoin",
|
||||
"bitcoin:VTC": "not for T2B1 (#2793)",
|
||||
"bitcoin:tDASH": "not for T2B1 (#2793)",
|
||||
"bitcoin:tPART": "incompatible fork",
|
||||
"misc:EOS": "not for T2B1 (#2793)",
|
||||
"misc:LSK": "Incompatible mainnet hard-fork",
|
||||
"nem:XEM": "not for T2B1 (#2793)"
|
||||
}
|
||||
},
|
||||
"T2T1": {
|
||||
"supported": {
|
||||
"bitcoin:ACM": "2.0.10",
|
||||
"bitcoin:AXE": "2.0.11",
|
||||
@ -307,5 +337,88 @@
|
||||
"bitcoin:tPART": "incompatible fork",
|
||||
"misc:LSK": "Incompatible mainnet hard-fork"
|
||||
}
|
||||
},
|
||||
"connect": {
|
||||
"supported": {
|
||||
"bitcoin:ACM": true,
|
||||
"bitcoin:AXE": true,
|
||||
"bitcoin:BCH": true,
|
||||
"bitcoin:BTC": true,
|
||||
"bitcoin:BTCP": true,
|
||||
"bitcoin:BTG": true,
|
||||
"bitcoin:BTX": true,
|
||||
"bitcoin:DASH": true,
|
||||
"bitcoin:DCR": true,
|
||||
"bitcoin:DGB": true,
|
||||
"bitcoin:DOGE": true,
|
||||
"bitcoin:FIRO": true,
|
||||
"bitcoin:FJC": true,
|
||||
"bitcoin:FLO": true,
|
||||
"bitcoin:FTC": true,
|
||||
"bitcoin:KMD": true,
|
||||
"bitcoin:KOTO": true,
|
||||
"bitcoin:LTC": true,
|
||||
"bitcoin:MONA": true,
|
||||
"bitcoin:NMC": true,
|
||||
"bitcoin:PPC": true,
|
||||
"bitcoin:REGTEST": true,
|
||||
"bitcoin:RITO": true,
|
||||
"bitcoin:RVN": true,
|
||||
"bitcoin:SYS": true,
|
||||
"bitcoin:TAZ": true,
|
||||
"bitcoin:TBCH": true,
|
||||
"bitcoin:TBTG": true,
|
||||
"bitcoin:TDCR": true,
|
||||
"bitcoin:TEST": true,
|
||||
"bitcoin:UNO": true,
|
||||
"bitcoin:VIA": true,
|
||||
"bitcoin:VTC": true,
|
||||
"bitcoin:XPM": true,
|
||||
"bitcoin:XRC": true,
|
||||
"bitcoin:XSN": true,
|
||||
"bitcoin:XVG": true,
|
||||
"bitcoin:ZCR": true,
|
||||
"bitcoin:ZEC": true,
|
||||
"bitcoin:tDASH": true,
|
||||
"bitcoin:tFIRO": true,
|
||||
"bitcoin:tLTC": true,
|
||||
"bitcoin:tPPC": true,
|
||||
"eth:tETH:3": true,
|
||||
"misc:ADA": true,
|
||||
"misc:BNB": true,
|
||||
"misc:EOS": true,
|
||||
"misc:XLM": true,
|
||||
"misc:XRP": true,
|
||||
"misc:XTZ": true,
|
||||
"misc:tADA": true,
|
||||
"misc:tXRP": true,
|
||||
"nem:BREEZE": true,
|
||||
"nem:DIM": true,
|
||||
"nem:DIMTOK": true,
|
||||
"nem:PAC:CHS": true,
|
||||
"nem:PAC:HRT": true,
|
||||
"nem:XEM": true
|
||||
},
|
||||
"unsupported": {}
|
||||
},
|
||||
"suite": {
|
||||
"supported": {
|
||||
"bitcoin:BCH": true,
|
||||
"bitcoin:BTC": true,
|
||||
"bitcoin:BTG": true,
|
||||
"bitcoin:DASH": true,
|
||||
"bitcoin:DGB": true,
|
||||
"bitcoin:DOGE": true,
|
||||
"bitcoin:LTC": true,
|
||||
"bitcoin:NMC": true,
|
||||
"bitcoin:REGTEST": true,
|
||||
"bitcoin:TEST": true,
|
||||
"bitcoin:VTC": true,
|
||||
"bitcoin:ZEC": true,
|
||||
"eth:tETH:3": true,
|
||||
"misc:XRP": true,
|
||||
"misc:tXRP": true
|
||||
},
|
||||
"unsupported": {}
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ for token in defs.erc20:
|
||||
|
||||
support_info = coin_info.support_info(defs.misc)
|
||||
for key, support in support_info.values():
|
||||
t2_support = support["trezor2"]
|
||||
t2_support = support["T2T1"]
|
||||
coin_name = dict_by_coin_key[key]
|
||||
if t2_support:
|
||||
print(coin_name, "is supported since version", t2_support)
|
||||
@ -94,15 +94,15 @@ support statuses at the same time:
|
||||
$ ./support.py show Ontology
|
||||
misc:ONT - Ontology (ONT)
|
||||
* connect : NO
|
||||
* trezor1 : support info missing
|
||||
* trezor2 : support info missing
|
||||
* T1B1 : support info missing
|
||||
* T2T1 : support info missing
|
||||
* suite : NO
|
||||
|
||||
$ ./support.py set misc:ONT trezor1=no -r "not planned on T1" trezor2=2.4.7
|
||||
$ ./support.py set misc:ONT T1B1=no -r "not planned on T1" T2T1=2.4.7
|
||||
misc:ONT - Ontology (ONT)
|
||||
* connect : NO
|
||||
* trezor1 : NO (reason: not planned on T1)
|
||||
* trezor2 : 2.4.7
|
||||
* T1B1 : NO (reason: not planned on T1)
|
||||
* T2T1 : 2.4.7
|
||||
* suite : NO
|
||||
```
|
||||
|
||||
|
@ -39,15 +39,17 @@ class SupportItemVersion(TypedDict):
|
||||
class SupportData(TypedDict):
|
||||
connect: SupportItemBool
|
||||
suite: SupportItemBool
|
||||
trezor1: SupportItemVersion
|
||||
trezor2: SupportItemVersion
|
||||
t1b1: SupportItemVersion
|
||||
t2t1: SupportItemVersion
|
||||
t2b1: SupportItemVersion
|
||||
|
||||
|
||||
class SupportInfoItem(TypedDict):
|
||||
connect: bool
|
||||
suite: bool
|
||||
trezor1: Literal[False] | str
|
||||
trezor2: Literal[False] | str
|
||||
t1b1: Literal[False] | str
|
||||
t2t1: Literal[False] | str
|
||||
t2b1: Literal[False] | str
|
||||
|
||||
|
||||
SupportInfo = Dict[str, SupportInfoItem]
|
||||
@ -452,7 +454,7 @@ def _load_fido_apps() -> FidoApps:
|
||||
|
||||
RELEASES_URL = "https://data.trezor.io/firmware/{}/releases.json"
|
||||
MISSING_SUPPORT_MEANS_NO = ("connect", "suite")
|
||||
VERSIONED_SUPPORT_INFO = ("trezor1", "trezor2")
|
||||
VERSIONED_SUPPORT_INFO = ("T1B1", "T2T1", "T2B1")
|
||||
|
||||
|
||||
def get_support_data() -> SupportData:
|
||||
@ -461,14 +463,16 @@ def get_support_data() -> SupportData:
|
||||
|
||||
|
||||
def latest_releases() -> dict[str, Any]:
|
||||
"""Get latest released firmware versions for Trezor 1 and 2"""
|
||||
"""Get latest released firmware versions for all models"""
|
||||
if not requests:
|
||||
raise RuntimeError("requests library is required for getting release info")
|
||||
|
||||
latest: dict[str, Any] = {}
|
||||
for v in ("1", "2"):
|
||||
releases = requests.get(RELEASES_URL.format(v)).json()
|
||||
latest["trezor" + v] = max(tuple(r["version"]) for r in releases)
|
||||
for model in VERSIONED_SUPPORT_INFO:
|
||||
# TODO: support new UPPERCASE model names in RELEASES_URL
|
||||
url_model = model.lower() # need to be e.g. t1b1 for now
|
||||
releases = requests.get(RELEASES_URL.format(url_model)).json()
|
||||
latest[model] = max(tuple(r["version"]) for r in releases)
|
||||
return latest
|
||||
|
||||
|
||||
@ -505,7 +509,7 @@ def support_info(coins: Iterable[Coin] | CoinsInfo | dict[str, Coin]) -> Support
|
||||
|
||||
Takes a collection of coins and generates a support-info entry for each.
|
||||
The support-info is a dict with keys based on `support.json` keys.
|
||||
These are usually: "trezor1", "trezor2", "connect" and "suite".
|
||||
These are usually: "T1B1", "T2T1", "T2B1", "connect" and "suite".
|
||||
|
||||
The `coins` argument can be a `CoinsInfo` object, a list or a dict of
|
||||
coin items.
|
||||
|
@ -672,7 +672,7 @@ def check(backend: bool, icons: bool) -> None:
|
||||
|
||||
|
||||
type_choice = click.Choice(["bitcoin", "eth", "erc20", "nem", "misc"])
|
||||
device_choice = click.Choice(["connect", "suite", "trezor1", "trezor2"])
|
||||
device_choice = click.Choice(["connect", "suite", "T1B1", "T2T1", "T2B1"])
|
||||
|
||||
|
||||
@cli.command()
|
||||
@ -689,8 +689,8 @@ device_choice = click.Choice(["connect", "suite", "trezor1", "trezor2"])
|
||||
@click.option("-f", "--filter", metavar="FIELD=FILTER", multiple=True, help="Include only coins that match a filter (-f taproot=true -f maintainer='*stick*')")
|
||||
@click.option("-F", "--filter-exclude", metavar="FIELD=FILTER", multiple=True, help="Exclude coins that match a filter (-F 'blockbook=[]' -F 'slip44=*')")
|
||||
@click.option("-t", "--exclude-tokens", is_flag=True, help="Exclude ERC20 tokens. Equivalent to '-E erc20'")
|
||||
@click.option("-d", "--device-include", metavar="NAME", multiple=True, type=device_choice, help="Only include coins supported on these given devices (-d connect -d trezor1)")
|
||||
@click.option("-D", "--device-exclude", metavar="NAME", multiple=True, type=device_choice, help="Only include coins not supported on these given devices (-D suite -D trezor2)")
|
||||
@click.option("-d", "--device-include", metavar="NAME", multiple=True, type=device_choice, help="Only include coins supported on these given devices (-d connect -d T1B1)")
|
||||
@click.option("-D", "--device-exclude", metavar="NAME", multiple=True, type=device_choice, help="Only include coins not supported on these given devices (-D suite -D T2T1)")
|
||||
# fmt: on
|
||||
def dump(
|
||||
outfile: TextIO,
|
||||
@ -739,7 +739,7 @@ def dump(
|
||||
|
||||
Also devices can be used as filters. For example to find out which coins are
|
||||
supported in Suite and connect but not on Trezor 1, it is possible to say
|
||||
'-d suite -d connect -D trezor1'.
|
||||
'-d suite -d connect -D T1B1'.
|
||||
|
||||
Includes even the wallet data, unless turned off by '-W'.
|
||||
These can be filtered by using '-f', for example `-f 'wallet=*exodus*'` (* are necessary)
|
||||
|
@ -1,4 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
@ -225,8 +227,7 @@ def check(ignore_missing):
|
||||
|
||||
@cli.command()
|
||||
# fmt: off
|
||||
@click.option("--v1", help="Version for T1 release (default: guess from latest)")
|
||||
@click.option("--v2", help="Version for TT release (default: guess from latest)")
|
||||
@click.option("-r", '--releases', multiple=True, type=str, help='Key-value pairs of model and version. E.g. "T2B1=2.6.1"')
|
||||
@click.option("-n", "--dry-run", is_flag=True, help="Do not write changes")
|
||||
@click.option("-f", "--force", is_flag=True, help="Proceed even with bad version/device info")
|
||||
@click.option("--skip-testnets/--no-skip-testnets", default=True, help="Automatically exclude testnets")
|
||||
@ -234,11 +235,10 @@ def check(ignore_missing):
|
||||
@click.pass_context
|
||||
def release(
|
||||
ctx,
|
||||
v1,
|
||||
v2,
|
||||
dry_run,
|
||||
force,
|
||||
skip_testnets,
|
||||
releases: list[str],
|
||||
dry_run: bool,
|
||||
force: bool,
|
||||
skip_testnets: bool,
|
||||
):
|
||||
"""Release a new Trezor firmware.
|
||||
|
||||
@ -248,27 +248,36 @@ def release(
|
||||
|
||||
The tool will ask you to confirm each added coin.
|
||||
"""
|
||||
latest_releases = coin_info.latest_releases()
|
||||
# Transforming the user release input into a dict and validating
|
||||
user_releases_dict = {
|
||||
key: val for key, val in (release.split("=") for release in releases)
|
||||
}
|
||||
for key in user_releases_dict:
|
||||
if key not in coin_info.VERSIONED_SUPPORT_INFO:
|
||||
raise click.ClickException(
|
||||
f"Unknown device: {key} - allowed are: {coin_info.VERSIONED_SUPPORT_INFO}"
|
||||
)
|
||||
|
||||
def bump_version(version_tuple):
|
||||
def bump_version(version_tuple: tuple[int]) -> str:
|
||||
version_list = list(version_tuple)
|
||||
version_list[-1] += 1
|
||||
return ".".join(str(n) for n in version_list)
|
||||
|
||||
# guess `version` if not given
|
||||
if not v1:
|
||||
v1 = bump_version(latest_releases["trezor1"])
|
||||
if not v2:
|
||||
v2 = bump_version(latest_releases["trezor2"])
|
||||
latest_releases = coin_info.latest_releases()
|
||||
|
||||
versions = {"trezor1": v1, "trezor2": v2}
|
||||
# Take version either from user or guess it from latest releases info
|
||||
device_release_version: dict[str, str] = {}
|
||||
for device in coin_info.VERSIONED_SUPPORT_INFO:
|
||||
if device in user_releases_dict:
|
||||
device_release_version[device] = user_releases_dict[device]
|
||||
else:
|
||||
device_release_version[device] = bump_version(latest_releases[device])
|
||||
|
||||
for number in "1", "2":
|
||||
device = f"trezor{number}"
|
||||
version = versions[device]
|
||||
if not force and not version.startswith(number + "."):
|
||||
for device, version in device_release_version.items():
|
||||
version_starting_num = device[1] # "T1B1" -> "1", "T2B1" -> "2"
|
||||
if not force and not version.startswith(version_starting_num + "."):
|
||||
raise click.ClickException(
|
||||
f"Device trezor{device} should not be version {version}. "
|
||||
f"Device {device} should not be version {version}. "
|
||||
"Use --force to proceed anyway."
|
||||
)
|
||||
|
||||
@ -295,7 +304,7 @@ def release(
|
||||
if not unsupport_reason:
|
||||
return
|
||||
|
||||
for device, version in versions.items():
|
||||
for device, version in device_release_version.items():
|
||||
if add:
|
||||
support_setdefault(device, coin["key"], version)
|
||||
else:
|
||||
@ -311,7 +320,7 @@ def release(
|
||||
|
||||
for coin in missing_list:
|
||||
if skip_testnets and coin["is_testnet"]:
|
||||
for device, version in versions.items():
|
||||
for device, version in device_release_version.items():
|
||||
support_setdefault(device, coin["key"], False, "(AUTO) exclude testnet")
|
||||
else:
|
||||
maybe_add(coin)
|
||||
@ -346,13 +355,13 @@ def set_support_value(key, entries, reason):
|
||||
"""Set a support info variable.
|
||||
|
||||
Examples:
|
||||
support.py set coin:BTC trezor1=1.10.5 trezor2=2.4.7 suite=yes connect=no
|
||||
support.py set coin:LTC trezor1=yes connect=
|
||||
support.py set coin:BTC T1B1=1.10.5 T2T1=2.4.7 suite=yes connect=no
|
||||
support.py set coin:LTC T1B1=yes connect=
|
||||
|
||||
Setting a variable to "yes", "true" or "1" sets support to true.
|
||||
Setting a variable to "no", "false" or "0" sets support to false.
|
||||
(or null, in case of trezor1/2)
|
||||
Setting variable to empty ("trezor1=") will set to null, or clear the entry.
|
||||
(or null, in case of T1B1/T2T1)
|
||||
Setting variable to empty ("T1B1=") will set to null, or clear the entry.
|
||||
Setting a variable to a particular version string (e.g., "2.4.7") will set that
|
||||
particular version.
|
||||
"""
|
||||
|
@ -70,8 +70,8 @@ CPPDEFINES_MOD += [
|
||||
('USE_ETHEREUM', '1' if EVERYTHING else '0'),
|
||||
('USE_MONERO', '1' if EVERYTHING else '0'),
|
||||
('USE_CARDANO', '1' if EVERYTHING else '0'),
|
||||
('USE_NEM', '1' if EVERYTHING else '0'),
|
||||
('USE_EOS', '1' if EVERYTHING else '0'),
|
||||
('USE_NEM', '1' if (EVERYTHING and TREZOR_MODEL != "R") else '0'),
|
||||
('USE_EOS', '1' if (EVERYTHING and TREZOR_MODEL != "R") else '0'),
|
||||
]
|
||||
SOURCE_MOD += [
|
||||
'embed/extmod/trezorobj.c',
|
||||
@ -601,9 +601,10 @@ if FROZEN:
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/cardano/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Cardano*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Eos*.py'))
|
||||
if TREZOR_MODEL != "R":
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Eos*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/ethereum/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Ethereum*.py'))
|
||||
@ -614,9 +615,10 @@ if FROZEN:
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/DebugMonero*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Monero*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/NEM*.py'))
|
||||
if TREZOR_MODEL != "R":
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/NEM*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/ripple/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Ripple*.py'))
|
||||
@ -632,7 +634,8 @@ if FROZEN:
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/webauthn/*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/decred.py'))
|
||||
if TREZOR_MODEL != "R":
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/decred.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/bitcoinlike.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/zcash_v4.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Zcash*.py'))
|
||||
|
@ -75,8 +75,8 @@ CPPDEFINES_MOD += [
|
||||
('USE_ETHEREUM', '1' if EVERYTHING else '0'),
|
||||
('USE_MONERO', '1' if EVERYTHING else '0'),
|
||||
('USE_CARDANO', '1' if EVERYTHING else '0'),
|
||||
('USE_NEM', '1' if EVERYTHING else '0'),
|
||||
('USE_EOS', '1' if EVERYTHING else '0'),
|
||||
('USE_NEM', '1' if (EVERYTHING and TREZOR_MODEL != "R") else '0'),
|
||||
('USE_EOS', '1' if (EVERYTHING and TREZOR_MODEL != "R") else '0'),
|
||||
]
|
||||
SOURCE_MOD += [
|
||||
'embed/extmod/trezorobj.c',
|
||||
@ -684,9 +684,10 @@ if FROZEN:
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/cardano/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Cardano*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Eos*.py'))
|
||||
if TREZOR_MODEL != "R":
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Eos*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/ethereum/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Ethereum*.py'))
|
||||
@ -697,9 +698,10 @@ if FROZEN:
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/DebugMonero*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Monero*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/NEM*.py'))
|
||||
if TREZOR_MODEL != "R":
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/NEM*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/ripple/*.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Ripple*.py'))
|
||||
@ -715,7 +717,8 @@ if FROZEN:
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/webauthn/*.py'))
|
||||
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/decred.py'))
|
||||
if TREZOR_MODEL != "R":
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/decred.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/bitcoinlike.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/zcash_v4.py'))
|
||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Zcash*.py'))
|
||||
|
@ -358,6 +358,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_address_obj,
|
||||
|
||||
#if !BITCOIN_ONLY
|
||||
|
||||
#if USE_NEM
|
||||
/// def nem_address(self, network: int) -> str:
|
||||
/// """
|
||||
/// Compute a NEM address string from the HD node.
|
||||
@ -425,6 +426,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
|
||||
mod_trezorcrypto_HDNode_nem_encrypt_obj, 5, 5,
|
||||
mod_trezorcrypto_HDNode_nem_encrypt);
|
||||
|
||||
#endif
|
||||
|
||||
/// def ethereum_pubkeyhash(self) -> bytes:
|
||||
/// """
|
||||
/// Compute an Ethereum pubkeyhash (aka address) from the HD node.
|
||||
@ -484,10 +487,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_HDNode_locals_dict_table[] = {
|
||||
{MP_ROM_QSTR(MP_QSTR_address),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_address_obj)},
|
||||
#if !BITCOIN_ONLY
|
||||
#if USE_NEM
|
||||
{MP_ROM_QSTR(MP_QSTR_nem_address),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_nem_address_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_nem_encrypt),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_nem_encrypt_obj)},
|
||||
#endif
|
||||
{MP_ROM_QSTR(MP_QSTR_ethereum_pubkeyhash),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_ethereum_pubkeyhash_obj)},
|
||||
#endif
|
||||
|
@ -36,11 +36,13 @@ def generate(env):
|
||||
# replace "utils.BITCOIN_ONLY" with literal constant (True/False)
|
||||
# so the compiler can optimize out the things we don't want
|
||||
btc_only = env["bitcoin_only"] == "1"
|
||||
is_t2b1 = env["TREZOR_MODEL"] == "R"
|
||||
backlight = env["backlight"]
|
||||
optiga = env["optiga"]
|
||||
interim = f"{target[:-4]}.i" # replace .mpy with .i
|
||||
sed_scripts = " ".join(
|
||||
[
|
||||
rf"-e 's/utils\.MODEL_IS_T2B1/{is_t2b1}/g'",
|
||||
rf"-e 's/utils\.BITCOIN_ONLY/{btc_only}/g'",
|
||||
rf"-e 's/utils\.USE_BACKLIGHT/{backlight}/g'",
|
||||
rf"-e 's/utils\.USE_OPTIGA/{optiga}/g'",
|
||||
|
@ -87,10 +87,8 @@ def get_features() -> Features:
|
||||
Capability.Binance,
|
||||
Capability.Cardano,
|
||||
Capability.Crypto,
|
||||
Capability.EOS,
|
||||
Capability.Ethereum,
|
||||
Capability.Monero,
|
||||
Capability.NEM,
|
||||
Capability.Ripple,
|
||||
Capability.Stellar,
|
||||
Capability.Tezos,
|
||||
@ -100,6 +98,15 @@ def get_features() -> Features:
|
||||
Capability.PassphraseEntry,
|
||||
]
|
||||
|
||||
# We do not support some currencies on T2B1
|
||||
if not utils.MODEL_IS_T2B1:
|
||||
f.capabilities.extend(
|
||||
[
|
||||
Capability.NEM,
|
||||
Capability.EOS,
|
||||
]
|
||||
)
|
||||
|
||||
# Only some models are capable of SD card
|
||||
if utils.USE_SD_CARD:
|
||||
from trezor import sdcard
|
||||
|
@ -4,11 +4,6 @@ from trezor import utils
|
||||
|
||||
from ..keychain import with_keychain
|
||||
|
||||
if not utils.BITCOIN_ONLY:
|
||||
from apps.zcash.signer import Zcash
|
||||
|
||||
from . import bitcoinlike, decred, zcash_v4
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Protocol
|
||||
|
||||
@ -74,13 +69,21 @@ async def sign_tx(
|
||||
signer_class: type[SignerClass] = bitcoin.Bitcoin
|
||||
else:
|
||||
if coin.decred:
|
||||
from . import decred
|
||||
|
||||
signer_class = decred.Decred
|
||||
elif coin.overwintered:
|
||||
if msg.version == 5:
|
||||
from apps.zcash.signer import Zcash
|
||||
|
||||
signer_class = Zcash
|
||||
else:
|
||||
from . import zcash_v4
|
||||
|
||||
signer_class = zcash_v4.ZcashV4
|
||||
else:
|
||||
from . import bitcoinlike
|
||||
|
||||
signer_class = bitcoinlike.Bitcoinlike
|
||||
|
||||
signer = signer_class(msg, keychain, coin, approver).signer()
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -136,21 +136,18 @@ ATTRIBUTES = (
|
||||
|
||||
btc_names = ["Bitcoin", "Testnet", "Regtest"]
|
||||
|
||||
coins_btc = [c for c in supported_on("trezor2", bitcoin) if c.name in btc_names]
|
||||
coins_alt = [c for c in supported_on("trezor2", bitcoin) if c.name not in btc_names]
|
||||
# TODO: make this easily extendable for more models
|
||||
|
||||
coins_btc_t2t1 = [c for c in supported_on("T2T1", bitcoin) if c.name in btc_names]
|
||||
coins_alt_t2t1 = [c for c in supported_on("T2T1", bitcoin) if c.name not in btc_names]
|
||||
|
||||
coins_btc_t2b1 = [c for c in supported_on("T2B1", bitcoin) if c.name in btc_names]
|
||||
coins_alt_t2b1 = [c for c in supported_on("T2B1", bitcoin) if c.name not in btc_names]
|
||||
|
||||
%>\
|
||||
def by_name(name: str) -> CoinInfo:
|
||||
% for coin in coins_btc:
|
||||
if name == ${black_repr(coin["coin_name"])}:
|
||||
return CoinInfo(
|
||||
% for attr, func in ATTRIBUTES:
|
||||
${func(coin[attr])}, # ${attr}
|
||||
% endfor
|
||||
)
|
||||
% endfor
|
||||
if not utils.BITCOIN_ONLY:
|
||||
% for coin in coins_alt:
|
||||
if utils.MODEL_IS_T2B1:
|
||||
% for coin in coins_btc_t2b1:
|
||||
if name == ${black_repr(coin["coin_name"])}:
|
||||
return CoinInfo(
|
||||
% for attr, func in ATTRIBUTES:
|
||||
@ -158,4 +155,32 @@ def by_name(name: str) -> CoinInfo:
|
||||
% endfor
|
||||
)
|
||||
% endfor
|
||||
raise ValueError # Unknown coin name
|
||||
if not utils.BITCOIN_ONLY:
|
||||
% for coin in coins_alt_t2b1:
|
||||
if name == ${black_repr(coin["coin_name"])}:
|
||||
return CoinInfo(
|
||||
% for attr, func in ATTRIBUTES:
|
||||
${func(coin[attr])}, # ${attr}
|
||||
% endfor
|
||||
)
|
||||
% endfor
|
||||
raise ValueError # Unknown coin name
|
||||
else:
|
||||
% for coin in coins_btc_t2t1:
|
||||
if name == ${black_repr(coin["coin_name"])}:
|
||||
return CoinInfo(
|
||||
% for attr, func in ATTRIBUTES:
|
||||
${func(coin[attr])}, # ${attr}
|
||||
% endfor
|
||||
)
|
||||
% endfor
|
||||
if not utils.BITCOIN_ONLY:
|
||||
% for coin in coins_alt_t2t1:
|
||||
if name == ${black_repr(coin["coin_name"])}:
|
||||
return CoinInfo(
|
||||
% for attr, func in ATTRIBUTES:
|
||||
${func(coin[attr])}, # ${attr}
|
||||
% endfor
|
||||
)
|
||||
% endfor
|
||||
raise ValueError # Unknown coin name
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from trezor import utils
|
||||
from trezor.messages import EthereumNetworkInfo
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@ -58,45 +59,89 @@ def by_slip44(slip44: int) -> EthereumNetworkInfo:
|
||||
|
||||
# fmt: off
|
||||
def _networks_iterator() -> Iterator[NetworkInfoTuple]:
|
||||
yield (
|
||||
1, # chain_id
|
||||
60, # slip44
|
||||
"ETH", # symbol
|
||||
"Ethereum", # name
|
||||
)
|
||||
yield (
|
||||
3, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Ropsten", # name
|
||||
)
|
||||
yield (
|
||||
4, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Rinkeby", # name
|
||||
)
|
||||
yield (
|
||||
5, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Görli", # name
|
||||
)
|
||||
yield (
|
||||
56, # chain_id
|
||||
714, # slip44
|
||||
"BNB", # symbol
|
||||
"Binance Smart Chain", # name
|
||||
)
|
||||
yield (
|
||||
61, # chain_id
|
||||
61, # slip44
|
||||
"ETC", # symbol
|
||||
"Ethereum Classic", # name
|
||||
)
|
||||
yield (
|
||||
137, # chain_id
|
||||
966, # slip44
|
||||
"MATIC", # symbol
|
||||
"Polygon", # name
|
||||
)
|
||||
if utils.MODEL_IS_T2B1:
|
||||
yield (
|
||||
1, # chain_id
|
||||
60, # slip44
|
||||
"ETH", # symbol
|
||||
"Ethereum", # name
|
||||
)
|
||||
yield (
|
||||
3, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Ropsten", # name
|
||||
)
|
||||
yield (
|
||||
4, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Rinkeby", # name
|
||||
)
|
||||
yield (
|
||||
5, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Görli", # name
|
||||
)
|
||||
yield (
|
||||
56, # chain_id
|
||||
714, # slip44
|
||||
"BNB", # symbol
|
||||
"Binance Smart Chain", # name
|
||||
)
|
||||
yield (
|
||||
61, # chain_id
|
||||
61, # slip44
|
||||
"ETC", # symbol
|
||||
"Ethereum Classic", # name
|
||||
)
|
||||
yield (
|
||||
137, # chain_id
|
||||
966, # slip44
|
||||
"MATIC", # symbol
|
||||
"Polygon", # name
|
||||
)
|
||||
else:
|
||||
yield (
|
||||
1, # chain_id
|
||||
60, # slip44
|
||||
"ETH", # symbol
|
||||
"Ethereum", # name
|
||||
)
|
||||
yield (
|
||||
3, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Ropsten", # name
|
||||
)
|
||||
yield (
|
||||
4, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Rinkeby", # name
|
||||
)
|
||||
yield (
|
||||
5, # chain_id
|
||||
1, # slip44
|
||||
"tETH", # symbol
|
||||
"Görli", # name
|
||||
)
|
||||
yield (
|
||||
56, # chain_id
|
||||
714, # slip44
|
||||
"BNB", # symbol
|
||||
"Binance Smart Chain", # name
|
||||
)
|
||||
yield (
|
||||
61, # chain_id
|
||||
61, # slip44
|
||||
"ETC", # symbol
|
||||
"Ethereum Classic", # name
|
||||
)
|
||||
yield (
|
||||
137, # chain_id
|
||||
966, # slip44
|
||||
"MATIC", # symbol
|
||||
"Polygon", # name
|
||||
)
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from trezor import utils
|
||||
from trezor.messages import EthereumNetworkInfo
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@ -58,11 +59,21 @@ def by_slip44(slip44: int) -> EthereumNetworkInfo:
|
||||
|
||||
# fmt: off
|
||||
def _networks_iterator() -> Iterator[NetworkInfoTuple]:
|
||||
% for n in sorted(supported_on("trezor2", eth), key=lambda network: (int(network.chain_id), network.name)):
|
||||
yield (
|
||||
${n.chain_id}, # chain_id
|
||||
${n.slip44}, # slip44
|
||||
"${n.shortcut}", # symbol
|
||||
"${n.name}", # name
|
||||
)
|
||||
if utils.MODEL_IS_T2B1:
|
||||
% for n in sorted(supported_on("T2B1", eth), key=lambda network: (int(network.chain_id), network.name)):
|
||||
yield (
|
||||
${n.chain_id}, # chain_id
|
||||
${n.slip44}, # slip44
|
||||
"${n.shortcut}", # symbol
|
||||
"${n.name}", # name
|
||||
)
|
||||
% endfor
|
||||
else:
|
||||
% for n in sorted(supported_on("T2T1", eth), key=lambda network: (int(network.chain_id), network.name)):
|
||||
yield (
|
||||
${n.chain_id}, # chain_id
|
||||
${n.slip44}, # slip44
|
||||
"${n.shortcut}", # symbol
|
||||
"${n.name}", # name
|
||||
)
|
||||
% endfor
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
from typing import Iterator
|
||||
|
||||
from trezor import utils
|
||||
from trezor.messages import EthereumTokenInfo
|
||||
|
||||
UNKNOWN_TOKEN = EthereumTokenInfo(
|
||||
@ -41,150 +42,299 @@ def token_by_chain_address(chain_id: int, address: bytes) -> EthereumTokenInfo |
|
||||
|
||||
|
||||
def _token_iterator(chain_id: int) -> Iterator[tuple[bytes, str, int, str]]:
|
||||
if chain_id == 1: # eth
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x7f\xc6\x65\x00\xc8\x4a\x76\xad\x7e\x9c\x93\x43\x7b\xfc\x5a\xc3\x3e\x2d\xda\xe9",
|
||||
"AAVE",
|
||||
18,
|
||||
"Aave",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4d\x22\x44\x52\x80\x1a\xce\xd8\xb2\xf0\xae\xbe\x15\x53\x79\xbb\x5d\x59\x43\x81",
|
||||
"APE",
|
||||
18,
|
||||
"ApeCoin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xbb\x0e\x17\xef\x65\xf8\x2a\xb0\x18\xd8\xed\xd7\x76\xe8\xdd\x94\x03\x27\xb2\x8b",
|
||||
"AXS",
|
||||
18,
|
||||
"Axie Infinity",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4f\xab\xb1\x45\xd6\x46\x52\xa9\x48\xd7\x25\x33\x02\x3f\x6e\x7a\x62\x3c\x7c\x53",
|
||||
"BUSD",
|
||||
18,
|
||||
"Binance USD",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x35\x06\x42\x4f\x91\xfd\x33\x08\x44\x66\xf4\x02\xd5\xd9\x7f\x05\xf8\xe3\xb4\xaf",
|
||||
"CHZ",
|
||||
18,
|
||||
"Chiliz",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa0\xb7\x3e\x1f\xf0\xb8\x09\x14\xab\x6f\xe0\x44\x4e\x65\x84\x8c\x4c\x34\x45\x0b",
|
||||
"CRO",
|
||||
8,
|
||||
"Cronos",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x6b\x17\x54\x74\xe8\x90\x94\xc4\x4d\xa9\x8b\x95\x4e\xed\xea\xc4\x95\x27\x1d\x0f",
|
||||
"DAI",
|
||||
18,
|
||||
"Dai",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x85\x3d\x95\x5a\xce\xf8\x22\xdb\x05\x8e\xb8\x50\x59\x11\xed\x77\xf1\x75\xb9\x9e",
|
||||
"FRAX",
|
||||
18,
|
||||
"Frax",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x2a\xf5\xd2\xad\x76\x74\x11\x91\xd1\x5d\xfe\x7b\xf6\xac\x92\xd4\xbd\x91\x2c\xa3",
|
||||
"LEO",
|
||||
18,
|
||||
"LEO Token",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x51\x49\x10\x77\x1a\xf9\xca\x65\x6a\xf8\x40\xdf\xf8\x3e\x82\x64\xec\xf9\x86\xca",
|
||||
"LINK",
|
||||
18,
|
||||
"Chainlink",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x0f\x5d\x2f\xb2\x9f\xb7\xd3\xcf\xee\x44\x4a\x20\x02\x98\xf4\x68\x90\x8c\xc9\x42",
|
||||
"MANA",
|
||||
18,
|
||||
"Decentraland",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x7d\x1a\xfa\x7b\x71\x8f\xb8\x93\xdb\x30\xa3\xab\xc0\xcf\xc6\x08\xaa\xcf\xeb\xb0",
|
||||
"MATIC",
|
||||
18,
|
||||
"Polygon",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x75\x23\x1f\x58\xb4\x32\x40\xc9\x71\x8d\xd5\x8b\x49\x67\xc5\x11\x43\x42\xa8\x6c",
|
||||
"OKB",
|
||||
18,
|
||||
"OKB",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4a\x22\x0e\x60\x96\xb2\x5e\xad\xb8\x83\x58\xcb\x44\x06\x8a\x32\x48\x25\x46\x75",
|
||||
"QNT",
|
||||
18,
|
||||
"Quant",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x38\x45\xba\xda\xde\x8e\x6d\xff\x04\x98\x20\x68\x0d\x1f\x14\xbd\x39\x03\xa5\xd0",
|
||||
"SAND",
|
||||
18,
|
||||
"The Sandbox",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x95\xad\x61\xb0\xa1\x50\xd7\x92\x19\xdc\xf6\x4e\x1e\x6c\xc0\x1f\x0b\x64\xc4\xce",
|
||||
"SHIB",
|
||||
18,
|
||||
"Shiba Inu",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xae\x7a\xb9\x65\x20\xde\x3a\x18\xe5\xe1\x11\xb5\xea\xab\x09\x53\x12\xd7\xfe\x84",
|
||||
"STETH",
|
||||
18,
|
||||
"Lido Staked Ether",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x1f\x98\x40\xa8\x5d\x5a\xf5\xbf\x1d\x17\x62\xf9\x25\xbd\xad\xdc\x42\x01\xf9\x84",
|
||||
"UNI",
|
||||
18,
|
||||
"Uniswap",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa0\xb8\x69\x91\xc6\x21\x8b\x36\xc1\xd1\x9d\x4a\x2e\x9e\xb0\xce\x36\x06\xeb\x48",
|
||||
"USDC",
|
||||
6,
|
||||
"USD Coin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xda\xc1\x7f\x95\x8d\x2e\xe5\x23\xa2\x20\x62\x06\x99\x45\x97\xc1\x3d\x83\x1e\xc7",
|
||||
"USDT",
|
||||
6,
|
||||
"Tether",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x22\x60\xfa\xc5\xe5\x54\x2a\x77\x3a\xa4\x4f\xbc\xfe\xdf\x7c\x19\x3b\xc2\xc5\x99",
|
||||
"WBTC",
|
||||
8,
|
||||
"Wrapped Bitcoin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa2\xcd\x3d\x43\xc7\x75\x97\x8a\x96\xbd\xbf\x12\xd7\x33\xd5\xa1\xed\x94\xfb\x18",
|
||||
"XCN",
|
||||
18,
|
||||
"Chain",
|
||||
)
|
||||
if chain_id == 56: # bnb
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x0e\xb3\xa7\x05\xfc\x54\x72\x50\x37\xcc\x9e\x00\x8b\xde\xde\x69\x7f\x62\xf3\x35",
|
||||
"ATOM",
|
||||
18,
|
||||
"Cosmos Hub",
|
||||
)
|
||||
if chain_id == 137: # matic
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x2c\x89\xbb\xc9\x2b\xd8\x6f\x80\x75\xd1\xde\xcc\x58\xc7\xf4\xe0\x10\x7f\x28\x6b",
|
||||
"WAVAX",
|
||||
18,
|
||||
"Wrapped AVAX",
|
||||
)
|
||||
if utils.MODEL_IS_T2B1:
|
||||
if chain_id == 1: # eth
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x7f\xc6\x65\x00\xc8\x4a\x76\xad\x7e\x9c\x93\x43\x7b\xfc\x5a\xc3\x3e\x2d\xda\xe9",
|
||||
"AAVE",
|
||||
18,
|
||||
"Aave",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4d\x22\x44\x52\x80\x1a\xce\xd8\xb2\xf0\xae\xbe\x15\x53\x79\xbb\x5d\x59\x43\x81",
|
||||
"APE",
|
||||
18,
|
||||
"ApeCoin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xbb\x0e\x17\xef\x65\xf8\x2a\xb0\x18\xd8\xed\xd7\x76\xe8\xdd\x94\x03\x27\xb2\x8b",
|
||||
"AXS",
|
||||
18,
|
||||
"Axie Infinity",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4f\xab\xb1\x45\xd6\x46\x52\xa9\x48\xd7\x25\x33\x02\x3f\x6e\x7a\x62\x3c\x7c\x53",
|
||||
"BUSD",
|
||||
18,
|
||||
"Binance USD",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x35\x06\x42\x4f\x91\xfd\x33\x08\x44\x66\xf4\x02\xd5\xd9\x7f\x05\xf8\xe3\xb4\xaf",
|
||||
"CHZ",
|
||||
18,
|
||||
"Chiliz",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa0\xb7\x3e\x1f\xf0\xb8\x09\x14\xab\x6f\xe0\x44\x4e\x65\x84\x8c\x4c\x34\x45\x0b",
|
||||
"CRO",
|
||||
8,
|
||||
"Cronos",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x6b\x17\x54\x74\xe8\x90\x94\xc4\x4d\xa9\x8b\x95\x4e\xed\xea\xc4\x95\x27\x1d\x0f",
|
||||
"DAI",
|
||||
18,
|
||||
"Dai",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x85\x3d\x95\x5a\xce\xf8\x22\xdb\x05\x8e\xb8\x50\x59\x11\xed\x77\xf1\x75\xb9\x9e",
|
||||
"FRAX",
|
||||
18,
|
||||
"Frax",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x2a\xf5\xd2\xad\x76\x74\x11\x91\xd1\x5d\xfe\x7b\xf6\xac\x92\xd4\xbd\x91\x2c\xa3",
|
||||
"LEO",
|
||||
18,
|
||||
"LEO Token",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x51\x49\x10\x77\x1a\xf9\xca\x65\x6a\xf8\x40\xdf\xf8\x3e\x82\x64\xec\xf9\x86\xca",
|
||||
"LINK",
|
||||
18,
|
||||
"Chainlink",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x0f\x5d\x2f\xb2\x9f\xb7\xd3\xcf\xee\x44\x4a\x20\x02\x98\xf4\x68\x90\x8c\xc9\x42",
|
||||
"MANA",
|
||||
18,
|
||||
"Decentraland",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x7d\x1a\xfa\x7b\x71\x8f\xb8\x93\xdb\x30\xa3\xab\xc0\xcf\xc6\x08\xaa\xcf\xeb\xb0",
|
||||
"MATIC",
|
||||
18,
|
||||
"Polygon",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x75\x23\x1f\x58\xb4\x32\x40\xc9\x71\x8d\xd5\x8b\x49\x67\xc5\x11\x43\x42\xa8\x6c",
|
||||
"OKB",
|
||||
18,
|
||||
"OKB",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4a\x22\x0e\x60\x96\xb2\x5e\xad\xb8\x83\x58\xcb\x44\x06\x8a\x32\x48\x25\x46\x75",
|
||||
"QNT",
|
||||
18,
|
||||
"Quant",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x38\x45\xba\xda\xde\x8e\x6d\xff\x04\x98\x20\x68\x0d\x1f\x14\xbd\x39\x03\xa5\xd0",
|
||||
"SAND",
|
||||
18,
|
||||
"The Sandbox",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x95\xad\x61\xb0\xa1\x50\xd7\x92\x19\xdc\xf6\x4e\x1e\x6c\xc0\x1f\x0b\x64\xc4\xce",
|
||||
"SHIB",
|
||||
18,
|
||||
"Shiba Inu",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xae\x7a\xb9\x65\x20\xde\x3a\x18\xe5\xe1\x11\xb5\xea\xab\x09\x53\x12\xd7\xfe\x84",
|
||||
"STETH",
|
||||
18,
|
||||
"Lido Staked Ether",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x1f\x98\x40\xa8\x5d\x5a\xf5\xbf\x1d\x17\x62\xf9\x25\xbd\xad\xdc\x42\x01\xf9\x84",
|
||||
"UNI",
|
||||
18,
|
||||
"Uniswap",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa0\xb8\x69\x91\xc6\x21\x8b\x36\xc1\xd1\x9d\x4a\x2e\x9e\xb0\xce\x36\x06\xeb\x48",
|
||||
"USDC",
|
||||
6,
|
||||
"USD Coin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xda\xc1\x7f\x95\x8d\x2e\xe5\x23\xa2\x20\x62\x06\x99\x45\x97\xc1\x3d\x83\x1e\xc7",
|
||||
"USDT",
|
||||
6,
|
||||
"Tether",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x22\x60\xfa\xc5\xe5\x54\x2a\x77\x3a\xa4\x4f\xbc\xfe\xdf\x7c\x19\x3b\xc2\xc5\x99",
|
||||
"WBTC",
|
||||
8,
|
||||
"Wrapped Bitcoin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa2\xcd\x3d\x43\xc7\x75\x97\x8a\x96\xbd\xbf\x12\xd7\x33\xd5\xa1\xed\x94\xfb\x18",
|
||||
"XCN",
|
||||
18,
|
||||
"Chain",
|
||||
)
|
||||
if chain_id == 56: # bnb
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x0e\xb3\xa7\x05\xfc\x54\x72\x50\x37\xcc\x9e\x00\x8b\xde\xde\x69\x7f\x62\xf3\x35",
|
||||
"ATOM",
|
||||
18,
|
||||
"Cosmos Hub",
|
||||
)
|
||||
if chain_id == 137: # matic
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x2c\x89\xbb\xc9\x2b\xd8\x6f\x80\x75\xd1\xde\xcc\x58\xc7\xf4\xe0\x10\x7f\x28\x6b",
|
||||
"WAVAX",
|
||||
18,
|
||||
"Wrapped AVAX",
|
||||
)
|
||||
else:
|
||||
if chain_id == 1: # eth
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x7f\xc6\x65\x00\xc8\x4a\x76\xad\x7e\x9c\x93\x43\x7b\xfc\x5a\xc3\x3e\x2d\xda\xe9",
|
||||
"AAVE",
|
||||
18,
|
||||
"Aave",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4d\x22\x44\x52\x80\x1a\xce\xd8\xb2\xf0\xae\xbe\x15\x53\x79\xbb\x5d\x59\x43\x81",
|
||||
"APE",
|
||||
18,
|
||||
"ApeCoin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xbb\x0e\x17\xef\x65\xf8\x2a\xb0\x18\xd8\xed\xd7\x76\xe8\xdd\x94\x03\x27\xb2\x8b",
|
||||
"AXS",
|
||||
18,
|
||||
"Axie Infinity",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4f\xab\xb1\x45\xd6\x46\x52\xa9\x48\xd7\x25\x33\x02\x3f\x6e\x7a\x62\x3c\x7c\x53",
|
||||
"BUSD",
|
||||
18,
|
||||
"Binance USD",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x35\x06\x42\x4f\x91\xfd\x33\x08\x44\x66\xf4\x02\xd5\xd9\x7f\x05\xf8\xe3\xb4\xaf",
|
||||
"CHZ",
|
||||
18,
|
||||
"Chiliz",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa0\xb7\x3e\x1f\xf0\xb8\x09\x14\xab\x6f\xe0\x44\x4e\x65\x84\x8c\x4c\x34\x45\x0b",
|
||||
"CRO",
|
||||
8,
|
||||
"Cronos",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x6b\x17\x54\x74\xe8\x90\x94\xc4\x4d\xa9\x8b\x95\x4e\xed\xea\xc4\x95\x27\x1d\x0f",
|
||||
"DAI",
|
||||
18,
|
||||
"Dai",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x85\x3d\x95\x5a\xce\xf8\x22\xdb\x05\x8e\xb8\x50\x59\x11\xed\x77\xf1\x75\xb9\x9e",
|
||||
"FRAX",
|
||||
18,
|
||||
"Frax",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x2a\xf5\xd2\xad\x76\x74\x11\x91\xd1\x5d\xfe\x7b\xf6\xac\x92\xd4\xbd\x91\x2c\xa3",
|
||||
"LEO",
|
||||
18,
|
||||
"LEO Token",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x51\x49\x10\x77\x1a\xf9\xca\x65\x6a\xf8\x40\xdf\xf8\x3e\x82\x64\xec\xf9\x86\xca",
|
||||
"LINK",
|
||||
18,
|
||||
"Chainlink",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x0f\x5d\x2f\xb2\x9f\xb7\xd3\xcf\xee\x44\x4a\x20\x02\x98\xf4\x68\x90\x8c\xc9\x42",
|
||||
"MANA",
|
||||
18,
|
||||
"Decentraland",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x7d\x1a\xfa\x7b\x71\x8f\xb8\x93\xdb\x30\xa3\xab\xc0\xcf\xc6\x08\xaa\xcf\xeb\xb0",
|
||||
"MATIC",
|
||||
18,
|
||||
"Polygon",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x75\x23\x1f\x58\xb4\x32\x40\xc9\x71\x8d\xd5\x8b\x49\x67\xc5\x11\x43\x42\xa8\x6c",
|
||||
"OKB",
|
||||
18,
|
||||
"OKB",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x4a\x22\x0e\x60\x96\xb2\x5e\xad\xb8\x83\x58\xcb\x44\x06\x8a\x32\x48\x25\x46\x75",
|
||||
"QNT",
|
||||
18,
|
||||
"Quant",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x38\x45\xba\xda\xde\x8e\x6d\xff\x04\x98\x20\x68\x0d\x1f\x14\xbd\x39\x03\xa5\xd0",
|
||||
"SAND",
|
||||
18,
|
||||
"The Sandbox",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x95\xad\x61\xb0\xa1\x50\xd7\x92\x19\xdc\xf6\x4e\x1e\x6c\xc0\x1f\x0b\x64\xc4\xce",
|
||||
"SHIB",
|
||||
18,
|
||||
"Shiba Inu",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xae\x7a\xb9\x65\x20\xde\x3a\x18\xe5\xe1\x11\xb5\xea\xab\x09\x53\x12\xd7\xfe\x84",
|
||||
"STETH",
|
||||
18,
|
||||
"Lido Staked Ether",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x1f\x98\x40\xa8\x5d\x5a\xf5\xbf\x1d\x17\x62\xf9\x25\xbd\xad\xdc\x42\x01\xf9\x84",
|
||||
"UNI",
|
||||
18,
|
||||
"Uniswap",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa0\xb8\x69\x91\xc6\x21\x8b\x36\xc1\xd1\x9d\x4a\x2e\x9e\xb0\xce\x36\x06\xeb\x48",
|
||||
"USDC",
|
||||
6,
|
||||
"USD Coin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xda\xc1\x7f\x95\x8d\x2e\xe5\x23\xa2\x20\x62\x06\x99\x45\x97\xc1\x3d\x83\x1e\xc7",
|
||||
"USDT",
|
||||
6,
|
||||
"Tether",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x22\x60\xfa\xc5\xe5\x54\x2a\x77\x3a\xa4\x4f\xbc\xfe\xdf\x7c\x19\x3b\xc2\xc5\x99",
|
||||
"WBTC",
|
||||
8,
|
||||
"Wrapped Bitcoin",
|
||||
)
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\xa2\xcd\x3d\x43\xc7\x75\x97\x8a\x96\xbd\xbf\x12\xd7\x33\xd5\xa1\xed\x94\xfb\x18",
|
||||
"XCN",
|
||||
18,
|
||||
"Chain",
|
||||
)
|
||||
if chain_id == 56: # bnb
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x0e\xb3\xa7\x05\xfc\x54\x72\x50\x37\xcc\x9e\x00\x8b\xde\xde\x69\x7f\x62\xf3\x35",
|
||||
"ATOM",
|
||||
18,
|
||||
"Cosmos Hub",
|
||||
)
|
||||
if chain_id == 137: # matic
|
||||
yield ( # address, symbol, decimals, name
|
||||
b"\x2c\x89\xbb\xc9\x2b\xd8\x6f\x80\x75\xd1\xde\xcc\x58\xc7\xf4\xe0\x10\x7f\x28\x6b",
|
||||
"WAVAX",
|
||||
18,
|
||||
"Wrapped AVAX",
|
||||
)
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
from typing import Iterator
|
||||
|
||||
from trezor import utils
|
||||
from trezor.messages import EthereumTokenInfo
|
||||
<%
|
||||
from collections import defaultdict
|
||||
@ -50,14 +51,27 @@ def token_by_chain_address(chain_id: int, address: bytes) -> EthereumTokenInfo |
|
||||
|
||||
|
||||
def _token_iterator(chain_id: int) -> Iterator[tuple[bytes, str, int, str]]:
|
||||
% for token_chain_id, tokens in group_tokens(supported_on("trezor2", erc20)).items():
|
||||
if chain_id == ${token_chain_id}: # ${tokens[0].chain}
|
||||
% for t in tokens:
|
||||
yield ( # address, symbol, decimals, name
|
||||
${black_repr(t.address_bytes)},
|
||||
${black_repr(t.symbol)},
|
||||
${t.decimals},
|
||||
${black_repr(t.name.strip())},
|
||||
)
|
||||
% endfor
|
||||
if utils.MODEL_IS_T2B1:
|
||||
% for token_chain_id, tokens in group_tokens(supported_on("T2B1", erc20)).items():
|
||||
if chain_id == ${token_chain_id}: # ${tokens[0].chain}
|
||||
% for t in tokens:
|
||||
yield ( # address, symbol, decimals, name
|
||||
${black_repr(t.address_bytes)},
|
||||
${black_repr(t.symbol)},
|
||||
${t.decimals},
|
||||
${black_repr(t.name.strip())},
|
||||
)
|
||||
% endfor
|
||||
% endfor
|
||||
else:
|
||||
% for token_chain_id, tokens in group_tokens(supported_on("T2T1", erc20)).items():
|
||||
if chain_id == ${token_chain_id}: # ${tokens[0].chain}
|
||||
% for t in tokens:
|
||||
yield ( # address, symbol, decimals, name
|
||||
${black_repr(t.address_bytes)},
|
||||
${black_repr(t.symbol)},
|
||||
${t.decimals},
|
||||
${black_repr(t.name.strip())},
|
||||
)
|
||||
% endfor
|
||||
% endfor
|
||||
|
@ -45,7 +45,7 @@ class Mosaic:
|
||||
|
||||
|
||||
def mosaics_iterator() -> Iterator[Mosaic]:
|
||||
% for m in supported_on("trezor2", nem):
|
||||
% for m in supported_on("T2T1", nem):
|
||||
yield Mosaic(
|
||||
"${m.name}", # name
|
||||
" ${m.ticker}", # ticker
|
||||
|
@ -23,6 +23,10 @@ from trezorutils import ( # noqa: F401
|
||||
)
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
# Will get replaced by "True" / "False" in the build process
|
||||
# However, needs to stay as an exported symbol for the unit tests
|
||||
MODEL_IS_T2B1: bool = INTERNAL_MODEL == "T2B1"
|
||||
|
||||
DISABLE_ANIMATION = 0
|
||||
|
||||
if __debug__:
|
||||
|
@ -23,7 +23,7 @@ def hex(x):
|
||||
#include "secp256k1.h"
|
||||
|
||||
const CoinInfo coins[COINS_COUNT] = {
|
||||
% for c in supported_on("trezor1", bitcoin):
|
||||
% for c in supported_on("T1B1", bitcoin):
|
||||
{
|
||||
.coin_name = ${c_str(c.coin_name)},
|
||||
.coin_shortcut = ${c_str(c.coin_shortcut)},
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "coins.h"
|
||||
|
||||
<% coins_list = list(supported_on("trezor1", bitcoin)) %>\
|
||||
<% coins_list = list(supported_on("T1B1", bitcoin)) %>\
|
||||
#define COINS_COUNT (${len(coins_list)})
|
||||
|
||||
extern const CoinInfo coins[COINS_COUNT];
|
||||
|
@ -1,4 +1,4 @@
|
||||
<% networks = list(supported_on("trezor1", eth)) %>\
|
||||
<% networks = list(supported_on("T1B1", eth)) %>\
|
||||
// This file is automatically generated from ethereum_networks.c.mako
|
||||
// DO NOT EDIT
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include "ethereum.h"
|
||||
#include "ethereum_tokens.h"
|
||||
|
||||
<% erc20_list = list(supported_on("trezor1", erc20)) %>\
|
||||
<% erc20_list = list(supported_on("T1B1", erc20)) %>\
|
||||
#define TOKENS_COUNT ${len(erc20_list)}
|
||||
|
||||
static const EthereumTokenInfo tokens[TOKENS_COUNT] = {
|
||||
|
@ -20,7 +20,7 @@ ATTRIBUTES_OPTIONAL = (
|
||||
#include "nem_mosaics.h"
|
||||
|
||||
const NEMMosaicDefinition NEM_MOSAIC_DEFINITIONS[NEM_MOSAIC_DEFINITIONS_COUNT] = {
|
||||
% for m in supported_on("trezor1", nem):
|
||||
% for m in supported_on("T1B1", nem):
|
||||
{
|
||||
% for attr, func in ATTRIBUTES_REQUIRED:
|
||||
% if attr in m:
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "messages-nem.pb.h"
|
||||
|
||||
<% nem_list = list(supported_on("trezor1", nem)) %>\
|
||||
<% nem_list = list(supported_on("T1B1", nem)) %>\
|
||||
#define NEM_MOSAIC_DEFINITIONS_COUNT (${len(nem_list)})
|
||||
|
||||
extern const NEMMosaicDefinition NEM_MOSAIC_DEFINITIONS[NEM_MOSAIC_DEFINITIONS_COUNT];
|
||||
|
@ -46,7 +46,7 @@ FAKE_TXHASH_a63dbe = bytes.fromhex(
|
||||
"a63dbedd8cd284bf0d3c468e84b9b0eeb14c3a08824eab8f80e7723a299f30db"
|
||||
)
|
||||
|
||||
pytestmark = pytest.mark.altcoin
|
||||
pytestmark = [pytest.mark.altcoin, pytest.mark.skip_tr]
|
||||
|
||||
|
||||
# All data taken from T1
|
||||
|
@ -39,7 +39,7 @@ TXHASH_15575a = bytes.fromhex(
|
||||
"15575a1c874bd60a819884e116c42e6791c8283ce1fc3b79f0d18531a61bbb8a"
|
||||
)
|
||||
|
||||
pytestmark = pytest.mark.altcoin
|
||||
pytestmark = [pytest.mark.altcoin, pytest.mark.skip_tr]
|
||||
|
||||
|
||||
def test_send_dash(client: Client):
|
||||
|
@ -49,7 +49,7 @@ FAKE_TXHASH_51bc9c = bytes.fromhex(
|
||||
"51bc9c71f10a81eef3caedb5333062eb4b1f70998adf02916fe98fdc04c572e8"
|
||||
)
|
||||
|
||||
pytestmark = [pytest.mark.altcoin, pytest.mark.decred]
|
||||
pytestmark = [pytest.mark.altcoin, pytest.mark.decred, pytest.mark.skip_tr]
|
||||
|
||||
|
||||
def test_send_decred(client: Client):
|
||||
|
@ -28,12 +28,20 @@ from ...input_flows import InputFlowSignMessagePagination
|
||||
S = messages.InputScriptType
|
||||
|
||||
|
||||
def case(id: str, *args: Any, altcoin: bool = False, skip_t1: bool = False):
|
||||
def case(
|
||||
id: str,
|
||||
*args: Any,
|
||||
altcoin: bool = False,
|
||||
skip_t1: bool = False,
|
||||
skip_tr: bool = False
|
||||
):
|
||||
marks = []
|
||||
if altcoin:
|
||||
marks.append(pytest.mark.altcoin)
|
||||
if skip_t1:
|
||||
marks.append(pytest.mark.skip_t1)
|
||||
if skip_tr:
|
||||
marks.append(pytest.mark.skip_tr)
|
||||
return pytest.param(*args, id=id, marks=marks)
|
||||
|
||||
|
||||
@ -253,6 +261,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat
|
||||
"This is an example of a signed message.",
|
||||
"206b1f8ba47ef9eaf87aa900e41ab1e97f67e8c09292faa4acf825228d074c4b774484046dcb1d9bbf0603045dbfb328c3e1b0c09c5ae133e89e604a67a1fc6cca",
|
||||
altcoin=True,
|
||||
skip_tr=True,
|
||||
),
|
||||
case(
|
||||
"decred-empty",
|
||||
@ -264,6 +273,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat
|
||||
"",
|
||||
"1fd2d57490b44a0361c7809768cad032d41ba1d4b7a297f935fc65ae05f71de7ea0c6c6fd265cc5154f1fa4acd7006b6a00ddd67fb7333c1594aff9120b3ba8024",
|
||||
altcoin=True,
|
||||
skip_tr=True,
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -36,11 +36,12 @@ PREV_TXES = {PREV_HASH: PREV_TX}
|
||||
pytestmark = [pytest.mark.skip_t1, pytest.mark.experimental]
|
||||
|
||||
|
||||
def case(id, *args, altcoin=False):
|
||||
def case(id, *args, altcoin: bool = False, skip_tr: bool = False):
|
||||
marks = []
|
||||
if altcoin:
|
||||
marks = pytest.mark.altcoin
|
||||
else:
|
||||
marks = ()
|
||||
marks.append(pytest.mark.altcoin)
|
||||
if skip_tr:
|
||||
marks.append(pytest.mark.skip_tr)
|
||||
return pytest.param(*args, id=id, marks=marks)
|
||||
|
||||
|
||||
@ -110,10 +111,16 @@ SERIALIZED_TX = "01000000000101e29305e85821ea86f2bca1fcfe45e7cb0c8de87b612479ee6
|
||||
"payment_request_params",
|
||||
(
|
||||
case(
|
||||
"out0", (PaymentRequestParams([0], memos1, get_nonce=True),), altcoin=True
|
||||
"out0",
|
||||
(PaymentRequestParams([0], memos1, get_nonce=True),),
|
||||
altcoin=True,
|
||||
skip_tr=True,
|
||||
),
|
||||
case(
|
||||
"out1", (PaymentRequestParams([1], memos2, get_nonce=True),), altcoin=True
|
||||
"out1",
|
||||
(PaymentRequestParams([1], memos2, get_nonce=True),),
|
||||
altcoin=True,
|
||||
skip_tr=True,
|
||||
),
|
||||
case("out2", (PaymentRequestParams([2], [], get_nonce=True),)),
|
||||
case(
|
||||
@ -268,6 +275,7 @@ def test_payment_req_wrong_mac_refund(client: Client):
|
||||
|
||||
|
||||
@pytest.mark.altcoin
|
||||
@pytest.mark.skip_tr
|
||||
def test_payment_req_wrong_mac_purchase(client: Client):
|
||||
# Test wrong MAC in payment request memo.
|
||||
memo = CoinPurchaseMemo(
|
||||
|
@ -27,6 +27,7 @@ from ...input_flows import InputFlowShowXpubQRCode
|
||||
@pytest.mark.altcoin
|
||||
@pytest.mark.eos
|
||||
@pytest.mark.skip_t1
|
||||
@pytest.mark.skip_tr # coin not supported
|
||||
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
|
||||
def test_eos_get_public_key(client: Client):
|
||||
with client:
|
||||
|
@ -30,6 +30,7 @@ pytestmark = [
|
||||
pytest.mark.altcoin,
|
||||
pytest.mark.eos,
|
||||
pytest.mark.skip_t1,
|
||||
pytest.mark.skip_tr, # coin not supported
|
||||
pytest.mark.setup_client(mnemonic=MNEMONIC12),
|
||||
]
|
||||
|
||||
|
@ -25,6 +25,7 @@ from ...common import MNEMONIC12
|
||||
|
||||
@pytest.mark.altcoin
|
||||
@pytest.mark.nem
|
||||
@pytest.mark.skip_tr # coin not supported,
|
||||
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
|
||||
def test_nem_getaddress(client: Client):
|
||||
assert (
|
||||
|
@ -27,6 +27,7 @@ ADDRESS_N = parse_path("m/44h/1h/0h/0h/0h")
|
||||
pytestmark = [
|
||||
pytest.mark.altcoin,
|
||||
pytest.mark.nem,
|
||||
pytest.mark.skip_tr, # coin not supported,
|
||||
pytest.mark.setup_client(mnemonic=MNEMONIC12),
|
||||
]
|
||||
|
||||
|
@ -25,6 +25,7 @@ from ...common import MNEMONIC12
|
||||
pytestmark = [
|
||||
pytest.mark.altcoin,
|
||||
pytest.mark.nem,
|
||||
pytest.mark.skip_tr, # coin not supported,
|
||||
pytest.mark.setup_client(mnemonic=MNEMONIC12),
|
||||
]
|
||||
|
||||
|
@ -25,6 +25,7 @@ from ...common import MNEMONIC12
|
||||
pytestmark = [
|
||||
pytest.mark.altcoin,
|
||||
pytest.mark.nem,
|
||||
pytest.mark.skip_tr, # coin not supported,
|
||||
pytest.mark.setup_client(mnemonic=MNEMONIC12),
|
||||
]
|
||||
|
||||
|
@ -25,6 +25,7 @@ from ...common import MNEMONIC12
|
||||
pytestmark = [
|
||||
pytest.mark.altcoin,
|
||||
pytest.mark.nem,
|
||||
pytest.mark.skip_tr, # coin not supported,
|
||||
pytest.mark.setup_client(mnemonic=MNEMONIC12),
|
||||
]
|
||||
|
||||
|
@ -761,22 +761,6 @@
|
||||
"TR_bitcoin-test_bcash.py::test_send_bch_multisig_wrongchange": "faad9ce4f88c1abe8e0e4c880c88c5422ffe49a3880049036f01f89ed0a8204f",
|
||||
"TR_bitcoin-test_bcash.py::test_send_bch_nochange": "8f53026a2ba7bb2946a775d42e27ff12810288e74e8fc06176f517ee2cabc170",
|
||||
"TR_bitcoin-test_bcash.py::test_send_bch_oldaddr": "aa1129e9d1a830c9c0fc5a33ecc95a1086f9831ea3b25d7e54c553f6b842aad4",
|
||||
"TR_bitcoin-test_bgold.py::test_attack_change_input": "eee666767f83a9d3fa54e495ad398efb7b2c124c4b369e5645b8b2ecc0a2b257",
|
||||
"TR_bitcoin-test_bgold.py::test_send_bitcoin_gold_change": "eee666767f83a9d3fa54e495ad398efb7b2c124c4b369e5645b8b2ecc0a2b257",
|
||||
"TR_bitcoin-test_bgold.py::test_send_bitcoin_gold_nochange": "300d966de8e4858b1d4aaa5bbd612e207b0c4c795a201056c1fb802a1f6e0e32",
|
||||
"TR_bitcoin-test_bgold.py::test_send_btg_external_presigned": "19fa7bebae4ed810dc6322a03b98037d41e4e60e4e247fdcff127e843e432458",
|
||||
"TR_bitcoin-test_bgold.py::test_send_btg_multisig_change": "762b2f07b824181117293cfc89a5f6d0ca0233c947248927643a94a33b38e092",
|
||||
"TR_bitcoin-test_bgold.py::test_send_mixed_inputs": "014c8de418f71ba83aa8036c7b7858bb8f16d938252da3a16c9536aee766c70f",
|
||||
"TR_bitcoin-test_bgold.py::test_send_multisig_1": "e8f6fdb8da5035ddf07fd372a101f86f096a009bc54e1af1861f079b6bc49493",
|
||||
"TR_bitcoin-test_bgold.py::test_send_p2sh": "b11530cd73e89a8c0cf97423d6fb24479524d70ae2bc8b425eacbeda3ac9ee46",
|
||||
"TR_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "4bc8ef43ff3e5ebcd66a1b42c74b37aedb028eb89b4c7507c93e8c761662286e",
|
||||
"TR_bitcoin-test_dash.py::test_send_dash": "53ec61f3ecccd062b5ad5eb24a34758f251f043333e6d8e5761adb706753abd2",
|
||||
"TR_bitcoin-test_dash.py::test_send_dash_dip2_input": "dce4ad2a6417e2e041eb5c71ff595fd9e8abb0f0c4173199c7c62ff3c896776e",
|
||||
"TR_bitcoin-test_decred.py::test_decred_multisig_change": "8bd35c39d6361c3a5feac6ed8c97de8c3134d7978c021fda8956d5ed3cedb445",
|
||||
"TR_bitcoin-test_decred.py::test_purchase_ticket_decred": "bcc0984b233a98bea521f76b8a6774e48f84f3e33043785c5647ef45291efb6d",
|
||||
"TR_bitcoin-test_decred.py::test_send_decred": "e3f16c81bb094271fdb94bc5dbb3e1485f217bdf82e01f46979ea8f7645b95d6",
|
||||
"TR_bitcoin-test_decred.py::test_send_decred_change": "9b76664898560172a8031d92fc8d0cf6d93d29734a53abce3ef727f272c00053",
|
||||
"TR_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "607d9dfaea375d5c2b9893cd1a81b9f1b05f1201454b92677d1a03e6c41c4e92",
|
||||
"TR_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-10025-InputScriptType.SPENDTAPROOT--ad9e3c78": "b548cc09a709153638392cd940bf0297c85b9bc7442cc06ff370590b9a91c6dc",
|
||||
"TR_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-44-InputScriptType.SPENDADDRESS-pkh-efa37663": "55af89626933a7d87a0ce9d7f3d1ad74a80afb2ea304e57245424891d1f4c9a3",
|
||||
"TR_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-49-InputScriptType.SPENDP2SHWITNESS-77f1e2d2": "9ba1431983d453d93d279f12730710fc846aa62af391b488aaa0de93e6d89eea",
|
||||
@ -986,8 +970,6 @@
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[NFC message]": "ab3a71cb3e8eb516bdba44aa751d6f0fd4715a4635a84b54c2c0adaaf08319d5",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[NFKD message]": "ab3a71cb3e8eb516bdba44aa751d6f0fd4715a4635a84b54c2c0adaaf08319d5",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[bcash]": "c960bf499d53b56189fa15acc27115ed1b3ccbb5cab8b87036fc675c6ddf6992",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[decred-empty]": "456a799a936e43e05da46a17ed56e3fc5bf08f828705e1b5a2be820e837f830a",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[decred]": "e3fd9169aab4e0ad8b0e697adbec7ce3dbde009cd4e05171e4f2e6f6a0f76f87",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[grs-p2pkh]": "05019729b386a6380eec9109c41651e09050d5c61bf99ffa4ee266b85b70d67c",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[grs-segwit-native]": "b3d94052b376384494ac5645cf8ad2f1839fe51fc104e1a4cab8297e688a50d4",
|
||||
"TR_bitcoin-test_signmessage.py::test_signmessage[grs-segwit-p2sh]": "5f162905b7772ce35bdb42f17f9ffafe80cba2a1397623f2036551393ff04848",
|
||||
@ -1088,15 +1070,12 @@
|
||||
"TR_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "dfc5684ecc27ba18a9870974098aeff0edefbab94a60959b047d130c14e31100",
|
||||
"TR_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_segwit_inputs": "50b75854569e1358d5f6d8f96dcc61c45e01458b00e33a17f93dcbd2e5db7709",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_amount": "c072f90fecb07a693c09038a26d44eadae88854df02e0537aa99f946d641af83",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_purchase": "19d738c0babfd39c17793e98e5d621e147d02367f4e4a7c712bb08c0f914a04e",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_refund": "19d738c0babfd39c17793e98e5d621e147d02367f4e4a7c712bb08c0f914a04e",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_output": "249e65809ac735eec03907514834fa347df6fa2f44d63dfc09cc89defd85885e",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out0+out1]": "a573b011d1a31fc79e2cfdb6e687b5c8eb8d1803286d94afd09215a33c2ffb14",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out012]": "1594934f96bd424c407a5c77eaa18d8b613b02d8eb5831cee980d18b08cdc522",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out01]": "25c87a158b0c4cc2cc0e35fb28222170ef79ed3bf7f376ed69587c9111910dc8",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out0]": "6d138367fa6a77784cc58530614435a443c142de8c2b550201a4452fe057812f",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out12]": "30ab6d261e64bb817338a8d5fca8c933c82142be1dc4a31b20ac42e1f1c2f2c9",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out1]": "0b40c6267d6e3b23f32cc99dd5b712de77dbb01c6e868076add5fe7065a2fa3d",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request[out2]": "2da5ced4361fe9e80786d436a69b27d80812ff7a7d40ec3ad22b9cab87f66bdc",
|
||||
"TR_bitcoin-test_signtx_payreq.py::test_payment_request_details": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
|
||||
"TR_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[]": "19d738c0babfd39c17793e98e5d621e147d02367f4e4a7c712bb08c0f914a04e",
|
||||
@ -1461,23 +1440,6 @@
|
||||
"TR_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_total_co-e846c221": "cde51419b852c289c267cc21a10dfbd793a1ef9641d29801745e0a237c6ea8e6",
|
||||
"TR_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[transaction_with_cip36_registrat-b9111c27": "7f4275e5f1da7312e87d53bbb92c6dd92eb79087c34b3af879c1011a8cb43f86",
|
||||
"TR_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[transaction_with_stake_deregistr-6e84da2f": "00419869d61f0875c4bf6b08ad1983e48d4daa7837fd9ab287e36a20696b5373",
|
||||
"TR_eos-test_get_public_key.py::test_eos_get_public_key": "eb0aa54cfe9f6fec9ef3ecb30ed4f1f62ec51163248823e9e69a5f683f99ccea",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_buyram": "e60c4713e28f92984a4ceb369c53bc7dc8b5c68f66e090d271983ce214d1f217",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_buyrambytes": "eeb48edfe6cc7fef7e86ca0a0ff1474804df89bdaec3d329e19d5b241d70adb4",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_delegate": "c52be103fe8205f73ec5cad7fa78ec63ed287efe3c2faccf30dd5d0e29c848c5",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_deleteauth": "ce297fe2e737a920658ea595330303bcce87426ed184771d810ad49a343e1b34",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_linkauth": "efa47b1f3e1d6158189325d039808a73d7892aa10216dcddcf9f528e304e6c23",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_newaccount": "3464ade18d5cedc828ede6e57277ccacd1237887a5e64f4ee47a04cb3bc1e5d6",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_refund": "194eee782504f5b9e657066fe3c359370f0f363e1ceae05acc1bca2f35694c96",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_sellram": "070d6b2e30ca9dbddcafe4bdeff2d121090e9ee2f71ce487b402ac2f0f92bfe6",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_setcontract": "2fe58a86cf7d27990ba3069254226f01774deede22ab5a39f885b11eb63ef78e",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_transfer_token": "16642da419c7d0cc18b6f64f0553efc011a3cce224bd5f3f292aecfee4816d56",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_undelegate": "49fc2ab8be93e26ec59bf5fb64c25cb3498ec1b6176f255c574e2bb83b153a9c",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_unknown": "4b976c1ba143c2b202d28bebab97fee4cdce5a0a8c19ba5917809d5f03aa1d5f",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_unlinkauth": "ba9edacffb6f7159184c900fab74e5f4f7ecc62ba676cf1fafee28ad071b881a",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_updateauth": "588029c8b6930a4a362670964ca725ee49b902c37c301f8b5669c0b7cd869e60",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_vote": "942fcbfa267d23630f72057ef9c3cc6c9efe97ba0d69019e55e779486b4eae3d",
|
||||
"TR_eos-test_signtx.py::test_eos_signtx_vote_proxy": "76cd6c2d2c7676b04df7492b5ae1d884b1862c3423540ce49324d13601a3ee6e",
|
||||
"TR_ethereum-test_definitions.py::test_builtin": "0f7c5f3f28c296fa300571713636fd7f7603164a1b408b2b0319a8c30e543385",
|
||||
"TR_ethereum-test_definitions.py::test_builtin_token": "7277808c8458316cf889f650886c805a3c5cc96d0c03c53c5897d790f2b87e49",
|
||||
"TR_ethereum-test_definitions.py::test_chain_id_allowed": "f6a80cf048a64de10ed9c4ee49d754a3dee42c4665d59b0c5aba236fa0c20d44",
|
||||
@ -1645,23 +1607,6 @@
|
||||
"TR_misc-test_msg_signidentity.py::test_sign": "4ea3ff06287458ae5c08e118e489c0b432316521fbfa47ff587d748761f9c6c2",
|
||||
"TR_monero-test_getaddress.py::test_monero_getaddress": "5dc8b30cf58003e34eb6d1fb2bbe446578a291ed979d82699fa2b932a093fb61",
|
||||
"TR_monero-test_getwatchkey.py::test_monero_getwatchkey": "e0a4795c4167750f9b3a79ca5c8c5af31857a0aab102d1eb8f7722f6643656b9",
|
||||
"TR_nem-test_getaddress.py::test_nem_getaddress": "b26ee6bdd9ad8c1cc8578e54c62ba2d18c096d4673941bb04354d92a7358e123",
|
||||
"TR_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_creation": "5c1a1b10f09b91650944df080aa874e2aaaccb8102e88e1a2c98addfa49d3d0a",
|
||||
"TR_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_creation_levy": "7faeacf4118d47a3c9e10fab4b9053aa93cb46a1b32e12831f91095ee7c0dc5a",
|
||||
"TR_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_creation_properties": "d7e26600bdfbec93c1db2b5f09444a35a5fe9cf86950260a775842d25fe33fba",
|
||||
"TR_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_supply_change": "b647a074c894f92139d7fe540c69e3354e3f168b6e6c58ad22f116a8fbe58581",
|
||||
"TR_nem-test_signtx_multisig.py::test_nem_signtx_aggregate_modification": "2d60afa983f359691dc3f48281cde486ca3fec08cc0e981547e5b89d91b89ad0",
|
||||
"TR_nem-test_signtx_multisig.py::test_nem_signtx_multisig": "0e4854bef1ecd2a5c5e9bca162c8529bca4e5bc1cb4650ea3fda070d67ed2aa0",
|
||||
"TR_nem-test_signtx_multisig.py::test_nem_signtx_multisig_signer": "8dd64558a8fdfbfa9aa80a2755f3a95375c3512470eb64dc86f6d39d628979d0",
|
||||
"TR_nem-test_signtx_others.py::test_nem_signtx_importance_transfer": "823ce7e09df8f9c28892044ac1e937a41e57587d53792f93c6653e362bc33086",
|
||||
"TR_nem-test_signtx_others.py::test_nem_signtx_provision_namespace": "e5f3adcb7a15baaa2fae2ad1165d9956fd63a9db1ae9619e92777e5b7a629823",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_encrypted_payload": "8e4760a85f6a646ca1cf76e9337b0bdf6382356fdb9d79c4dcdd05504f118d3b",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic": "9f5ec0c863800fe55ce07d8a35e18ae7ff33768795c1ab4523c047e737241071",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic_with_levy": "20581f9ad888e420c5c5e0547f4d5c5b9dafea34954086b69a7f78e97023bb4b",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "7bbb5105dfabb6ba151a6ae85718be28bc54c1defdec66a6d7fe67b1e74c93e7",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_simple": "a354d16bbe7096d8c451d96eaa6058b9042a1c0356434ad5b772fd42f54b4e1b",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_unknown_mosaic": "1a7a2a7cfa818bdf213388438cf440c5815a8355e466251eae8b10e0dd57ed58",
|
||||
"TR_nem-test_signtx_transfers.py::test_nem_signtx_xem_as_mosaic": "2006f688a42bc0ac7237a4857f1d48104e8e66e0e6806877b1697aea4aa945ce",
|
||||
"TR_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[label-test]": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
|
||||
"TR_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[language-test]": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
|
||||
"TR_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[passphrase_protection-True]": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
RETURN=0
|
||||
|
||||
EXCEPTIONS=()
|
||||
@ -18,7 +18,7 @@ for exception in "${EXCEPTIONS[@]}"; do
|
||||
done
|
||||
|
||||
# dump all coins except the first 3 (Bitcoin, Testnet, Regtest)
|
||||
ALTCOINS=$(./common/tools/cointool.py dump -l -p -t -d trezor1 -d trezor2 | grep '"name"' | cut -d '"' -f 4 | tail -n +4)
|
||||
ALTCOINS=$(./common/tools/cointool.py dump -l -p -t -d T1B1 -d T2T1 -d T2B1 | grep '"name"' | cut -d '"' -f 4 | tail -n +4)
|
||||
# split on newlines only
|
||||
OLDIFS=$IFS
|
||||
IFS="
|
||||
|
Loading…
Reference in New Issue
Block a user