mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 04:18:10 +00:00
feat(common): remove "soon" as support status
This commit is contained in:
parent
1a291660e5
commit
d329052334
@ -149,18 +149,10 @@ Each coin on each device can be in one of four support states:
|
|||||||
dictionary. The value is a string with reason for not supporting.
|
dictionary. The value is a string with reason for not supporting.
|
||||||
For connect and suite, if the key is not listed at all, it is also considered unsupported.
|
For connect and suite, if the key is not listed at all, it is also considered unsupported.
|
||||||
ERC20 tokens detected as duplicates are also considered unsupported.
|
ERC20 tokens detected as duplicates are also considered unsupported.
|
||||||
* **soon**: coin's key is listed in the device's `supported` dictionary, with
|
|
||||||
the value `"soon"`.
|
|
||||||
ERC20 tokens that are not listed at all are also considered `soon`, unless detected
|
|
||||||
as duplicates.
|
|
||||||
* **unknown**: coin's key is not listed at all.
|
* **unknown**: coin's key is not listed at all.
|
||||||
|
|
||||||
_Supported_ and _soon_ coins are used in code generation (i.e., included in built firmware).
|
_Supported_ coins are used in code generation (i.e., included in built firmware).
|
||||||
_Unsupported_ and _unknown_ coins are excluded from code generation.
|
_Unsupported_ and _unknown_ coins are excluded from code generation.
|
||||||
|
|
||||||
That means that new ERC20 tokens are included as soon as you update the tokens repository.
|
|
||||||
New coin definitions, on the other hand, are not included until someone sets their
|
|
||||||
support status to _soon_ (or a version) explicitly.
|
|
||||||
|
|
||||||
You can edit `support.json` manually, but it is usually better to use the `support.py` tool.
|
You can edit `support.json` manually, but it is usually better to use the `support.py` tool.
|
||||||
See [tools docs](../tools) for details.
|
See [tools docs](../tools) for details.
|
||||||
|
@ -72,9 +72,7 @@ support_info = coin_info.support_info(defs.misc)
|
|||||||
for key, support in support_info.values():
|
for key, support in support_info.values():
|
||||||
t2_support = support["trezor2"]
|
t2_support = support["trezor2"]
|
||||||
coin_name = dict_by_coin_key[key]
|
coin_name = dict_by_coin_key[key]
|
||||||
if t2_support == "soon":
|
if t2_support:
|
||||||
print(coin_name, "will be supported soon!")
|
|
||||||
elif t2_support:
|
|
||||||
print(coin_name, "is supported since version", t2_support)
|
print(coin_name, "is supported since version", t2_support)
|
||||||
else:
|
else:
|
||||||
print(coin_name, "is not supported")
|
print(coin_name, "is not supported")
|
||||||
@ -97,15 +95,15 @@ fee.
|
|||||||
|
|
||||||
# Release Workflow
|
# Release Workflow
|
||||||
|
|
||||||
This entails collecting information on coins whose support status is unknown,
|
This entails collecting information on coins whose support status is unknown and
|
||||||
marking coins whose support status is `soon`, and including new ERC20 tokens.
|
including new Ethereum chains and ERC20 tokens.
|
||||||
|
|
||||||
## Maintaining Support Status
|
## Maintaining Support Status
|
||||||
|
|
||||||
When a new coin definition is added, its support status is _unknown_. It is excluded
|
When a new coin definition is added, its support status is _unknown_. It is excluded
|
||||||
from code generation by default. If you want to include a coin in a firmware build,
|
from code generation by default. If you want to include a coin in a firmware build,
|
||||||
you need to switch it to _soon_ first. You can set multiple support statuses at the
|
you need to switch it to supported in a particular version first. You can set multiple
|
||||||
same time:
|
support statuses at the same time:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./support.py show Ontology
|
$ ./support.py show Ontology
|
||||||
@ -115,20 +113,17 @@ misc:ONT - Ontology (ONT)
|
|||||||
* trezor2 : support info missing
|
* trezor2 : support info missing
|
||||||
* suite : NO
|
* suite : NO
|
||||||
|
|
||||||
$ ./support.py set misc:ONT trezor1=no -r "not planned on T1" trezor2=soon
|
$ ./support.py set misc:ONT trezor1=no -r "not planned on T1" trezor2=2.4.7
|
||||||
misc:ONT - Ontology (ONT)
|
misc:ONT - Ontology (ONT)
|
||||||
* connect : NO
|
* connect : NO
|
||||||
* trezor1 : NO (reason: not planned on T1)
|
* trezor1 : NO (reason: not planned on T1)
|
||||||
* trezor2 : SOON
|
* trezor2 : 2.4.7
|
||||||
* suite : NO
|
* suite : NO
|
||||||
```
|
```
|
||||||
|
|
||||||
Afterwards, review and commit changes to `defs/support.json`, and update the `trezor-common`
|
Afterwards, review and commit changes to `defs/support.json`, and update the `trezor-common`
|
||||||
submodule in your target firmware.
|
submodule in your target firmware.
|
||||||
|
|
||||||
If you're adding multiple coins at once, you can use `support.py release 1 --soon` to automatically
|
|
||||||
add all currently-unknown coins to _soon_. (The `1` indicates that this is for Trezor One)
|
|
||||||
|
|
||||||
ERC20 tokens in _unknown_ state are considered _soon_ as well, unless their symbols
|
ERC20 tokens in _unknown_ state are considered _soon_ as well, unless their symbols
|
||||||
are duplicates. Use `support.py fix` to synchronize duplicate status in `support.json` file.
|
are duplicates. Use `support.py fix` to synchronize duplicate status in `support.json` file.
|
||||||
Or mark them as unsupported explicitly.
|
Or mark them as unsupported explicitly.
|
||||||
|
@ -362,15 +362,13 @@ def support_info_single(support_data, coin):
|
|||||||
top-level key.
|
top-level key.
|
||||||
|
|
||||||
The support value for each device is determined in order of priority:
|
The support value for each device is determined in order of priority:
|
||||||
* if the coin is a duplicate ERC20 token, all support values are `None`
|
* if the coin has an entry in `unsupported`, its support is `False`
|
||||||
* if the coin has an entry in `unsupported`, its support is `None`
|
|
||||||
* if the coin has an entry in `supported` its support is that entry
|
* if the coin has an entry in `supported` its support is that entry
|
||||||
(usually a version string, or `True` for connect/suite)
|
(usually a version string, or `True` for connect/suite)
|
||||||
* otherwise support is presumed "soon"
|
* if the coin doesn't have an entry, its support status is `None`
|
||||||
"""
|
"""
|
||||||
support_info = {}
|
support_info = {}
|
||||||
key = coin["key"]
|
key = coin["key"]
|
||||||
dup = coin.get("duplicate")
|
|
||||||
for device, values in support_data.items():
|
for device, values in support_data.items():
|
||||||
if key in values["unsupported"]:
|
if key in values["unsupported"]:
|
||||||
support_value = False
|
support_value = False
|
||||||
@ -378,13 +376,6 @@ def support_info_single(support_data, coin):
|
|||||||
support_value = values["supported"][key]
|
support_value = values["supported"][key]
|
||||||
elif device in MISSING_SUPPORT_MEANS_NO:
|
elif device in MISSING_SUPPORT_MEANS_NO:
|
||||||
support_value = False
|
support_value = False
|
||||||
elif is_token(coin):
|
|
||||||
if dup:
|
|
||||||
# if duplicate token that is not explicitly listed, it's unsupported
|
|
||||||
support_value = False
|
|
||||||
else:
|
|
||||||
# otherwise implicitly supported in next
|
|
||||||
support_value = "soon"
|
|
||||||
else:
|
else:
|
||||||
support_value = None
|
support_value = None
|
||||||
support_info[device] = support_value
|
support_info[device] = support_value
|
||||||
|
@ -14,7 +14,7 @@ import marketcap
|
|||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
OPTIONAL_KEYS = ("links", "notes", "wallet")
|
OPTIONAL_KEYS = ("links", "notes", "wallet")
|
||||||
ALLOWED_SUPPORT_STATUS = ("yes", "no", "planned", "soon")
|
ALLOWED_SUPPORT_STATUS = ("yes", "no")
|
||||||
|
|
||||||
WALLETS = coin_info.load_json("wallets.json")
|
WALLETS = coin_info.load_json("wallets.json")
|
||||||
OVERRIDES = coin_info.load_json("coins_details.override.json")
|
OVERRIDES = coin_info.load_json("coins_details.override.json")
|
||||||
@ -78,18 +78,9 @@ def summary(coins, api_key):
|
|||||||
|
|
||||||
|
|
||||||
def _is_supported(support, trezor_version):
|
def _is_supported(support, trezor_version):
|
||||||
version = VERSIONS[trezor_version]
|
# True or version string means YES
|
||||||
nominal = support.get(trezor_version)
|
# False or None means NO
|
||||||
if nominal is None:
|
return "yes" if support.get(trezor_version) else "no"
|
||||||
return "no"
|
|
||||||
elif isinstance(nominal, bool):
|
|
||||||
return "yes" if nominal else "no"
|
|
||||||
|
|
||||||
try:
|
|
||||||
nominal_version = tuple(map(int, nominal.split(".")))
|
|
||||||
return "yes" if nominal_version <= version else "soon"
|
|
||||||
except ValueError:
|
|
||||||
return nominal
|
|
||||||
|
|
||||||
|
|
||||||
def _suite_support(coin, support):
|
def _suite_support(coin, support):
|
||||||
@ -227,10 +218,10 @@ def check_missing_data(coins):
|
|||||||
LOG.log(level, f"{k}: Missing homepage")
|
LOG.log(level, f"{k}: Missing homepage")
|
||||||
hide = True
|
hide = True
|
||||||
if coin["t1_enabled"] not in ALLOWED_SUPPORT_STATUS:
|
if coin["t1_enabled"] not in ALLOWED_SUPPORT_STATUS:
|
||||||
LOG.warning(f"{k}: Unknown t1_enabled")
|
LOG.error(f"{k}: Unknown t1_enabled: {coin['t1_enabled']}")
|
||||||
hide = True
|
hide = True
|
||||||
if coin["t2_enabled"] not in ALLOWED_SUPPORT_STATUS:
|
if coin["t2_enabled"] not in ALLOWED_SUPPORT_STATUS:
|
||||||
LOG.warning(f"{k}: Unknown t2_enabled")
|
LOG.error(f"{k}: Unknown t2_enabled: {coin['t2_enabled']}")
|
||||||
hide = True
|
hide = True
|
||||||
|
|
||||||
# check wallets
|
# check wallets
|
||||||
|
@ -104,12 +104,7 @@ def ascii_filter(s):
|
|||||||
|
|
||||||
def make_support_filter(support_info):
|
def make_support_filter(support_info):
|
||||||
def supported_on(device, coins):
|
def supported_on(device, coins):
|
||||||
for coin in coins:
|
return (c for c in coins if support_info[c.key].get(device))
|
||||||
supp = support_info[coin.key].get(device)
|
|
||||||
if not supp:
|
|
||||||
continue
|
|
||||||
if coin_info.is_token(coin) or supp != "soon":
|
|
||||||
yield coin
|
|
||||||
|
|
||||||
return supported_on
|
return supported_on
|
||||||
|
|
||||||
|
@ -67,8 +67,6 @@ def print_support(coin):
|
|||||||
val = where["supported"][key]
|
val = where["supported"][key]
|
||||||
if val is True:
|
if val is True:
|
||||||
return "YES"
|
return "YES"
|
||||||
elif val == "soon":
|
|
||||||
return "SOON"
|
|
||||||
elif VERSION_RE.match(val):
|
elif VERSION_RE.match(val):
|
||||||
return f"YES since {val}"
|
return f"YES since {val}"
|
||||||
else:
|
else:
|
||||||
@ -98,10 +96,8 @@ def check_support_values():
|
|||||||
if not isinstance(value, str):
|
if not isinstance(value, str):
|
||||||
raise ValueError(f"non-str value: {value}")
|
raise ValueError(f"non-str value: {value}")
|
||||||
|
|
||||||
is_version = VERSION_RE.match(value)
|
if not VERSION_RE.match(value):
|
||||||
is_soon = value == "soon"
|
raise ValueError(f"expected version, found '{value}'")
|
||||||
if not (is_version or is_soon):
|
|
||||||
raise ValueError(f"expected version or 'soon', found '{value}'")
|
|
||||||
|
|
||||||
errors = []
|
errors = []
|
||||||
for device, values in SUPPORT_INFO.items():
|
for device, values in SUPPORT_INFO.items():
|
||||||
@ -437,14 +433,15 @@ def set_support_value(key, entries, reason):
|
|||||||
"""Set a support info variable.
|
"""Set a support info variable.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
support.py set coin:BTC trezor1=soon trezor2=2.0.7 suite=yes connect=no
|
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:LTC trezor1=yes connect=
|
||||||
|
|
||||||
Setting a variable to "yes", "true" or "1" sets support to true.
|
Setting a variable to "yes", "true" or "1" sets support to true.
|
||||||
Setting a variable to "no", "false" or "0" sets support to false.
|
Setting a variable to "no", "false" or "0" sets support to false.
|
||||||
(or null, in case of trezor1/2)
|
(or null, in case of trezor1/2)
|
||||||
Setting variable to empty ("trezor1=") will set to null, or clear the entry.
|
Setting variable to empty ("trezor1=") will set to null, or clear the entry.
|
||||||
Setting to "soon", "planned", "2.1.1" etc. will set the literal string.
|
Setting a variable to a particular version string (e.g., "2.4.7") will set that
|
||||||
|
particular version.
|
||||||
"""
|
"""
|
||||||
defs, _ = coin_info.coin_info_with_duplicates()
|
defs, _ = coin_info.coin_info_with_duplicates()
|
||||||
coins = defs.as_dict()
|
coins = defs.as_dict()
|
||||||
|
Loading…
Reference in New Issue
Block a user