.. | ||
coin_info.py | ||
cointool.py | ||
marketcap.py | ||
maxfee.py | ||
README.md | ||
release.sh | ||
support.py |
Common Tools
This directory contains mostly tools that can manipulate definitions in defs/.
Tools are written with Click, so you always get a help text
if you use the --help
option.
All tools require Python 3.6 or higher and a bunch of dependencies, listed in requirements.txt
.
You can install them all with pip3 install -r requirements.txt
.
Tools overview
cointool.py
This is a general-purpose tool to examine coin definitions. Currently it implements the following commands:
render
: generate code based on a Mako template. By default,cointool.py render foo.bar.mako
will put its result into filefoo.bar
in the same directory. See usage intrezor-core
.check
: check validity of json definitions and associated data. Used in CI.dump
: dump coin information, including support status, in JSON format. Various filtering options are available, check help for details.
Use cointool.py command --help
to get more information on each command.
support.py
Used to query and manage info in support.json
. This mainly supports the release flow.
The following commands are available:
check
: check validity of json data. Used in CI.fix
: fix expected problems: prune keys without associated coins and ensure that ERC20 tokens are correctly entered as duplicate.show
: keyword-search for a coin and show its support status for each device.set
: set support data.release
: perform the release workflow.
Use support.py command --help
to get more information on each command.
coin_info.py
In case where code generation with cointool.py render
is impractical or not sufficient,
you can query the data directly through Python. Short usage example:
import coin_info
defs = coin_info.coin_info()
list_of_all_coins = defs.as_list()
dict_by_coin_key = defs.as_dict()
for token in defs.erc20:
print(token["key"], token["name"], token["shortcut"])
support_info = coin_info.support_info(defs.misc)
for key, support in support_info.values():
t2_support = support["trezor2"]
coin_name = dict_by_coin_key[key]
if t2_support:
print(coin_name, "is supported since version", t2_support)
else:
print(coin_name, "is not supported")
See docstrings for the most important functions: coin_info()
and support_info()
.
The file coindef.py
is a protobuf definition for passing coin data to Trezor
from the outside.
marketcap.py
Module for obtaining market cap and price data used by maxfee.py
.
maxfee.py
Updates the maxfee_kb
coin property based on a specified maximum per-transaction fee. The command
fetches current price data from https://coinmarketcap.com/ to convert from fiat-denominated maximum
fee.
Release Workflow
This entails collecting information on coins whose support status is unknown and including new Ethereum chains and ERC20 tokens.
Maintaining Support Status
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, you need to switch it to supported in a particular version first. You can set multiple support statuses at the same time:
$ ./support.py show Ontology
misc:ONT - Ontology (ONT)
* connect : NO
* trezor1 : support info missing
* trezor2 : support info missing
* suite : NO
$ ./support.py set misc:ONT trezor1=no -r "not planned on T1" trezor2=2.4.7
misc:ONT - Ontology (ONT)
* connect : NO
* trezor1 : NO (reason: not planned on T1)
* trezor2 : 2.4.7
* suite : NO
Afterwards, review and commit changes to defs/support.json
, and update the trezor-common
submodule in your target firmware.
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.
Or mark them as unsupported explicitly.
Releasing a new firmware
Step 1: run the release script
./tools/release.sh
All currently known unreleased ERC20 tokens are automatically set to the given version.
Note that "soon" feature was already removed and following paragraph is deprecated.
All coins marked soon are set to the current version. This is automatic - coins that
were marked soon were used in code generation and so should be released. If you want
to avoid this, you will have to manually revert each coin to soon status, either with
support.py set
, or by manually editing support.json
.
Coins in state unknown, i.e., coins that are known in the definitions but not listed
in support files, will be also added. But you will be interactively asked to confirm
each one. Use -y
or --add-all
to auto-add all of them.
Use -n
or --dry-run
to see changes without writing them to support.json
. Use
-v
or --verbose
to also show ERC20 tokens which are processed silently by default.
Use -g
or --git-tag
to automatically tag the current HEAD
with a version, e.g.,
trezor2-2.1.0
. This might become default in the future.
XXX this should also commit the changes though, otherwise the tag will apply to the wrong commit.
Step 2: review and commit your changes
Use git diff
to review changes made, commit and push. If you tagged the commit in the
previous step, don't forget to git push --tags
too.