chore(core): add coin support info for T3T1

Ioan Bizău 3 weeks ago
parent be049ba619
commit 864ba85aca

@ -341,6 +341,120 @@
"misc:LSK": "Incompatible mainnet hard-fork"
}
},
"T3T1": {
"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:SOL": "2.6.4",
"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 T3T1 (#2793)",
"bitcoin:DASH": "not for T3T1 (#2793)",
"bitcoin:DCR": "not for T3T1 (#2793)",
"bitcoin:DGB": "not for T3T1 (#2793)",
"bitcoin:NMC": "not for T3T1 (#2793)",
"bitcoin:PART": "incompatible fork",
"bitcoin:TBTG": "not for T3T1 (#2793)",
"bitcoin:TDCR": "not for T3T1 (#2793)",
"bitcoin:TRC": "address_type collides with Bitcoin",
"bitcoin:VTC": "not for T3T1 (#2793)",
"bitcoin:tDASH": "not for T3T1 (#2793)",
"bitcoin:tPART": "incompatible fork",
"misc:EOS": "not for T3T1 (#2793)",
"misc:LSK": "Incompatible mainnet hard-fork",
"nem:XEM": "not for T3T1 (#2793)"
}
},
"connect": {
"supported": {
"bitcoin:ACM": true,

@ -43,6 +43,7 @@ def generate(env):
# so the compiler can optimize out the things we don't want
btc_only = env["bitcoin_only"] == "1"
is_t2b1 = env["TREZOR_MODEL"] == "R"
is_t3t1 = env["TREZOR_MODEL"] == "T3T1"
backlight = env["backlight"]
optiga = env["optiga"]
layout_tt = env["ui_layout"] == "UI_LAYOUT_TT"
@ -51,6 +52,7 @@ def generate(env):
sed_scripts = " ".join(
[
rf"-e 's/utils\.MODEL_IS_T2B1/{is_t2b1}/g'",
rf"-e 's/utils\.MODEL_IS_T3T1/{is_t3t1}/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'",

@ -126,8 +126,8 @@ def get_features() -> Features:
Capability.Translations,
]
# We do not support some currencies on T2B1
if not utils.MODEL_IS_T2B1:
# We don't support some currencies on T2B1 and T3T1 (see #2793)
if not (utils.MODEL_IS_T2B1 or utils.MODEL_IS_T3T1):
f.capabilities.extend(
[
Capability.NEM,

File diff suppressed because it is too large Load Diff

@ -144,6 +144,9 @@ coins_alt_t2t1 = [c for c in supported_on("T2T1", bitcoin) if c.name not in btc_
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]
coins_btc_t3t1 = [c for c in supported_on("T3T1", bitcoin) if c.name in btc_names]
coins_alt_t3t1 = [c for c in supported_on("T3T1", bitcoin) if c.name not in btc_names]
%>\
def by_name(name: str) -> CoinInfo:
if utils.MODEL_IS_T2B1:
@ -163,6 +166,25 @@ def by_name(name: str) -> CoinInfo:
${func(coin[attr])}, # ${attr}
% endfor
)
% endfor
raise ValueError # Unknown coin name
elif utils.MODEL_IS_T3T1:
% for coin in coins_btc_t3t1:
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_t3t1:
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:

@ -102,6 +102,49 @@ def _networks_iterator() -> Iterator[NetworkInfoTuple]:
"MATIC", # symbol
"Polygon", # name
)
elif utils.MODEL_IS_T3T1:
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

@ -67,6 +67,15 @@ def _networks_iterator() -> Iterator[NetworkInfoTuple]:
"${n.shortcut}", # symbol
"${n.name}", # name
)
% endfor
elif utils.MODEL_IS_T3T1:
% for n in sorted(supported_on("T3T1", 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)):

@ -190,6 +190,154 @@ def _token_iterator(chain_id: int) -> Iterator[tuple[bytes, str, int, str]]:
18,
"Wrapped AVAX",
)
elif utils.MODEL_IS_T3T1:
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

@ -62,6 +62,18 @@ def _token_iterator(chain_id: int) -> Iterator[tuple[bytes, str, int, str]]:
${black_repr(t.name.strip())},
)
% endfor
% endfor
elif utils.MODEL_IS_T3T1:
% for token_chain_id, tokens in group_tokens(supported_on("T3T1", 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():

@ -32,6 +32,7 @@ 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"
MODEL_IS_T3T1: bool = INTERNAL_MODEL == "T3T1"
DISABLE_ANIMATION = 0

@ -1,6 +1,6 @@
from common import * # isort:skip
if not utils.MODEL_IS_T2B1:
if not (utils.MODEL_IS_T2B1 or utils.MODEL_IS_T3T1):
from trezor.crypto import bip39
from trezor.enums import AmountUnit, OutputScriptType
from trezor.enums.RequestType import TXFINISHED, TXINPUT, TXMETA, TXOUTPUT
@ -405,5 +405,5 @@ class TestSignTxDecred(unittest.TestCase):
if __name__ == "__main__":
if not utils.MODEL_IS_T2B1:
if not (utils.MODEL_IS_T2B1 or utils.MODEL_IS_T3T1):
unittest.main()

@ -22,7 +22,7 @@ class TestCoins(unittest.TestCase):
("ZEC", "Zcash", 7352),
("TAZ", "Zcash Testnet", 7461),
]
if not utils.MODEL_IS_T2B1:
if not (utils.MODEL_IS_T2B1 or utils.MODEL_IS_T3T1):
ref.extend(
[
("NMC", "Namecoin", 52),

Loading…
Cancel
Save