This directory hosts JSON definitions of recognized coins, tokens, and FIDO/U2F apps.
The fido/ subdirectory contains definitons of apps whose logos and
names are shown on Trezor T screen for FIDO/U2F authentication.
Each app must have a single JSON file in the fido/ subdirectory. Every app must have
its label set to the user-recognizable application name. The u2f field is a list of
U2F origin hashes, and the webauthn field is a list of FIDO2/WebAuthn hostnames for
the app. At least one must be present.
Each app can have an icon. If present, it must be a 128x128 pixels RGBA PNG of the same
name as the corresponding JSON name. If the app does not have an icon, it must instead
have a field no_icon set to true in the JSON.
We currently recognize five categories of coins.
The bitcoin/ subdirectory contains definitions for Bitcoin and altcoins
based on Bitcoin code.
Each Bitcoin-like coin must have a single JSON file in the bitcoin/ subdirectory,
and a corresponding PNG image with the same name. The PNG must be 96x96 pixels and
the picture must be a circle suitable for displaying on Trezor T.
Testnet is considered a separate coin, so it must have its own JSON and icon.
We will not support coins that have address_type 0, i.e., same as Bitcoin.
The file ethereum/networks.json has a list of descriptions
of Ethereum networks. Each network must also have a PNG icon in ethereum/<chain>.png
file.
ethereum/tokens is a submodule linking to Ethereum Lists
project with descriptions of ERC20 tokens. If you want to add or update a token
definition in Trezor, you need to get your change to the tokens repository first.
Trezor will only support tokens that have a unique symbol.
The file nem/nem_mosaics.json describes NEM mosaics.
Supported coins that are not derived from Bitcoin, Ethereum or NEM are currently grouped
and listed in separate file misc/misc.json. Each coin must also have
an icon in misc/<short>.png, where short is lowercased shortcut field from the JSON.
Throughout the system, coins are identified by a key - a colon-separated string generated from the coin's type and shortcut:
- for Bitcoin-likes, key is
bitcoin:XYZ - for Ethereum networks, key is
eth:XYZ - for ERC20 tokens, key is
erc20:<chain>:XYZ - for NEM mosaic, key is
nem:XYZ - for others, key is
misc:XYZ
If a token shortcut has a suffix, such as CAT (BlockCat), the whole thing is part
of the key (so the key is erc20:eth:CAT (BlockCat)).
Sometimes coins end up with duplicate symbols, which in case of ERC20 tokens leads to
key collisions. We do not allow duplicate symbols in the data, so this doesn't affect
everyday use (see below). However, for validation purposes, it is sometimes useful
to work with unfiltered data that includes the duplicates. In such cases, keys are
deduplicated by adding a counter at end, e.g.: erc20:eth:SMT:0, erc20:eth:SMT:1.
Note that the suffix is not stable, so these coins can't be reliably uniquely identified.
Duplicate symbols are not allowed in our data. Tokens that have symbol collisions
are removed from the data set before processing. The duplicate status is mentioned
in support.json (see below), but it is impossible to override from there.
Duplicate detection works as follows:
- a symbol is split off from the shortcut string. E.g., for
CAT (BlockCat), symbol is justCAT. It is compared, case-insensitive, with other coins (soWICandWiCare considered the same symbol), and identical symbols are put into a bucket. - if all coins in the bucket also have a suffix (
CAT (BlockCat)andCAT (BitClave)), they are not considered duplicate. - if any coin in the bucket does not have a suffix (
MITandMIT (Mychatcoin)), all coins in the bucket are considered duplicate. - Duplicate tokens (coins from the
erc20group) are automatically removed from data. Duplicate non-tokens are marked but not removed. For instance,bitcoin:FTC(Feathercoin) anderc20:eth:FTC(FTC) are duplicate, anderc20:eth:FTCis removed. - If two non-tokens collide with each other, it is an error that fails the CI build.
The file duplicity_overrides.json can override detection
results: keys set to true are considered duplicate (in a separate bucket), keys set
to false are considered non-duplicate even if auto-detected. This is useful for
whitelisting a supported token explicitly, or blacklisting things that the detection
can't match (for instance "Battle" and "Bitlle" have suffixes, but they are too similar).
External contributors should not make changes to duplicity_overrides.json, unless
asked to.
You can use ./tools/cointool.py check -d all to inspect duplicate detection in detail.
The file coins_details.json is a list of all known coins
with support status, market cap information and relevant links. This is the source
file for https://trezor.io/coins.
You should never make changes to coins_details.json directly. Use ./tools/coins_details.py
to regenerate it from known data.
If you need to change information in this file, modify the source information instead -
one of the JSON files in the groups listed above, support info in support.json, or
make a pull request to the tokens repository.
If you want to add a wallet link, modify the file wallets.json.
If this is not viable for some reason, or if there is no source information ,
you can also edit coins_details.override.json.
External contributors should not touch this file unless asked to.
We keep track of support status of each coin over our devices. That is
trezor1 for Trezor One, trezor2 for Trezor T, connect for Connect
and webwallet for Trezor Wallet. In further description, the word "device"
applies to Connect and webwallet as well.
This information is stored in support.json.
External contributors should not touch this file unless asked to.
Each coin on each device can be in one of four support states:
- supported explicitly: coin's key is listed in the device's
supporteddictionary. If it's a Trezor device, it contains the firmware version from which it is supported. For connect and webwallet, the value is simplytrue. - unsupported explicitly: coin's key is listed in the device's
unsupporteddictionary. The value is a string with reason for not supporting. For connect and webwallet, if the key is not listed at all, it is also considered unsupported. ERC20 tokens detected as duplicates are also considered unsupported. - soon: coin's key is listed in the device's
supporteddictionary, with the value"soon". ERC20 tokens that are not listed at all are also consideredsoon, unless detected as duplicates. - unknown: coin's key is not listed at all.
Supported and soon coins are used in code generation (i.e., included in built firmware). 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.
See tools docs for details.