diff --git a/ci/build.yml b/ci/build.yml index f5ab316b268..8d996fc7d4c 100644 --- a/ci/build.yml +++ b/ci/build.yml @@ -306,6 +306,7 @@ core unix frozen debug build arm: core unix frozen btconly debug t1 build: stage: build + <<: *gitlab_caching needs: [] variables: BITCOIN_ONLY: "1" diff --git a/ci/prebuild.yml b/ci/prebuild.yml index 80852b284f5..e97215402d3 100644 --- a/ci/prebuild.yml +++ b/ci/prebuild.yml @@ -19,7 +19,7 @@ style prebuild: GIT_SUBMODULE_STRATEGY: "none" <<: *gitlab_caching script: - - nix-shell --run "poetry run make style_check" + - nix-shell --run "poetry run make -j1 style_check" # Check validity of coin definitions and protobuf files. common prebuild: @@ -33,7 +33,7 @@ gen prebuild: stage: prebuild <<: *gitlab_caching script: - - nix-shell --run "poetry run make gen_check" + - nix-shell --run "poetry run make -j1 gen_check" # Checking format of .editorconfig files. editor prebuild: diff --git a/ci/shell.nix b/ci/shell.nix index bffed3e5657..0ead76d3086 100644 --- a/ci/shell.nix +++ b/ci/shell.nix @@ -70,7 +70,6 @@ stdenvNoCC.mkDerivation ({ ] ++ [ SDL2 SDL2_image - autoflake bash check curl # for connect tests diff --git a/common/defs/coins_details.json b/common/defs/coins_details.json index eea18f33125..b6193efb235 100644 --- a/common/defs/coins_details.json +++ b/common/defs/coins_details.json @@ -5,7 +5,7 @@ "Github": "https://github.com/Actinium-project/Actinium", "Homepage": "https://actinium.org" }, - "marketcap_usd": 643850, + "marketcap_usd": 184701, "name": "Actinium", "shortcut": "ACM", "t1_enabled": "yes", @@ -23,7 +23,7 @@ "Github": "https://github.com/axerunners/axe", "Homepage": "https://axerunners.com" }, - "marketcap_usd": 87492, + "marketcap_usd": 56264, "name": "Axe", "shortcut": "AXE", "t1_enabled": "yes", @@ -41,7 +41,7 @@ "Github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "Homepage": "https://www.bitcoincash.org" }, - "marketcap_usd": 7219413148, + "marketcap_usd": 2496066891, "name": "Bitcoin Cash", "shortcut": "BCH", "t1_enabled": "yes", @@ -67,7 +67,7 @@ "Github": "https://github.com/bitcoin/bitcoin", "Homepage": "https://bitcoin.org" }, - "marketcap_usd": 909440053192, + "marketcap_usd": 434848242730, "name": "Bitcoin", "shortcut": "BTC", "t1_enabled": "yes", @@ -93,7 +93,7 @@ "Github": "https://github.com/BTCPrivate/BitcoinPrivate", "Homepage": "https://btcprivate.org" }, - "marketcap_usd": 17476086, + "marketcap_usd": 3886616, "name": "Bitcoin Private", "shortcut": "BTCP", "t1_enabled": "yes", @@ -111,7 +111,7 @@ "Github": "https://github.com/BTCGPU/BTCGPU", "Homepage": "https://bitcoingold.org" }, - "marketcap_usd": 783476449, + "marketcap_usd": 481737614, "name": "Bitcoin Gold", "shortcut": "BTG", "t1_enabled": "yes", @@ -137,7 +137,7 @@ "Github": "https://github.com/LIMXTEC/BitCore", "Homepage": "https://bitcore.cc" }, - "marketcap_usd": 1556795, + "marketcap_usd": 1458461, "name": "Bitcore", "shortcut": "BTX", "t1_enabled": "yes", @@ -155,7 +155,7 @@ "Github": "https://github.com/cpuchain/cpuchain", "Homepage": "https://cpuchain.org" }, - "marketcap_usd": 107731, + "marketcap_usd": 0, "name": "CPUchain", "shortcut": "CPU", "t1_enabled": "yes", @@ -173,7 +173,7 @@ "Github": "https://github.com/Crowndev/crowncoin", "Homepage": "https://crownplatform.com" }, - "marketcap_usd": 1138620, + "marketcap_usd": 481509, "name": "Crown", "shortcut": "CRW", "t1_enabled": "yes", @@ -191,7 +191,7 @@ "Github": "https://github.com/dashpay/dash", "Homepage": "https://www.dash.org" }, - "marketcap_usd": 1405875317, + "marketcap_usd": 515576993, "name": "Dash", "shortcut": "DASH", "t1_enabled": "yes", @@ -221,7 +221,7 @@ "Github": "https://github.com/decred/dcrd", "Homepage": "https://www.decred.org" }, - "marketcap_usd": 926018012, + "marketcap_usd": 371163963, "name": "Decred", "shortcut": "DCR", "t1_enabled": "yes", @@ -239,7 +239,7 @@ "Github": "https://github.com/digibyte/digibyte", "Homepage": "https://digibyte.io" }, - "marketcap_usd": 523256573, + "marketcap_usd": 171723512, "name": "DigiByte", "shortcut": "DGB", "t1_enabled": "yes", @@ -261,7 +261,7 @@ "Github": "https://github.com/dogecoin/dogecoin", "Homepage": "https://dogecoin.com" }, - "marketcap_usd": 19473522353, + "marketcap_usd": 8778128377, "name": "Dogecoin", "shortcut": "DOGE", "t1_enabled": "yes", @@ -296,7 +296,7 @@ "Github": "https://github.com/firoorg/firo", "Homepage": "https://firo.org" }, - "marketcap_usd": 58990223, + "marketcap_usd": 30950896, "name": "Firo", "shortcut": "FIRO", "t1_enabled": "yes", @@ -318,7 +318,7 @@ "Github": "https://github.com/fujicoin/fujicoin", "Homepage": "https://fujicoin.org" }, - "marketcap_usd": 1958813, + "marketcap_usd": 0, "name": "Fujicoin", "shortcut": "FJC", "t1_enabled": "yes", @@ -354,7 +354,7 @@ "Github": "https://github.com/FeatherCoin/Feathercoin", "Homepage": "https://feathercoin.com" }, - "marketcap_usd": 1812248, + "marketcap_usd": 1667054, "name": "Feathercoin", "shortcut": "FTC", "t1_enabled": "yes", @@ -372,7 +372,7 @@ "Github": "https://github.com/Groestlcoin/groestlcoin", "Homepage": "https://www.groestlcoin.org" }, - "marketcap_usd": 59823174, + "marketcap_usd": 27800688, "name": "Groestlcoin", "shortcut": "GRS", "t1_enabled": "yes", @@ -390,7 +390,7 @@ "Github": "https://github.com/komodoplatform/komodo", "Homepage": "https://komodoplatform.com" }, - "marketcap_usd": 76380332, + "marketcap_usd": 39771179, "name": "Komodo", "shortcut": "KMD", "t1_enabled": "yes", @@ -421,7 +421,7 @@ "Github": "https://github.com/litecoin-project/litecoin", "Homepage": "https://litecoin.org" }, - "marketcap_usd": 9102568402, + "marketcap_usd": 4045640645, "name": "Litecoin", "shortcut": "LTC", "t1_enabled": "yes", @@ -447,7 +447,7 @@ "Github": "https://github.com/monacoinproject/monacoin", "Homepage": "https://monacoin.org" }, - "marketcap_usd": 65906519, + "marketcap_usd": 36577322, "name": "Monacoin", "shortcut": "MONA", "t1_enabled": "yes", @@ -465,7 +465,7 @@ "Github": "https://github.com/muecoin/MUE", "Homepage": "https://www.monetaryunit.org" }, - "marketcap_usd": 830517, + "marketcap_usd": 0, "name": "MonetaryUnit", "shortcut": "MUE", "t1_enabled": "yes", @@ -483,7 +483,7 @@ "Github": "https://github.com/namecoin/namecoin-core", "Homepage": "https://namecoin.org" }, - "marketcap_usd": 35773607, + "marketcap_usd": 17450523, "name": "Namecoin", "shortcut": "NMC", "t1_enabled": "yes", @@ -505,7 +505,7 @@ "Github": "https://github.com/peercoin/peercoin", "Homepage": "https://peercoin.net" }, - "marketcap_usd": 16244915, + "marketcap_usd": 9800439, "name": "Peercoin", "shortcut": "PPC", "t1_enabled": "yes", @@ -518,7 +518,7 @@ "Github": "https://github.com/qtumproject/qtum", "Homepage": "https://qtum.org" }, - "marketcap_usd": 854953214, + "marketcap_usd": 404698981, "name": "Qtum", "shortcut": "QTUM", "t1_enabled": "yes", @@ -536,7 +536,7 @@ "Github": "https://github.com/RitoProject", "Homepage": "https://ritocoin.org" }, - "marketcap_usd": 160421, + "marketcap_usd": 38680, "name": "Ritocoin", "shortcut": "RITO", "t1_enabled": "yes", @@ -554,7 +554,7 @@ "Github": "https://github.com/RavenProject/Ravencoin", "Homepage": "https://ravencoin.org" }, - "marketcap_usd": 750559910, + "marketcap_usd": 368391051, "name": "Ravencoin", "shortcut": "RVN", "t1_enabled": "yes", @@ -576,7 +576,7 @@ "Github": "https://github.com/SmartCash/Core-Smart", "Homepage": "https://smartcash.cc" }, - "marketcap_usd": 2318067, + "marketcap_usd": 689180, "name": "SmartCash", "shortcut": "SMART", "t1_enabled": "yes", @@ -594,7 +594,7 @@ "Github": "https://github.com/syscoin/syscoin", "Homepage": "https://syscoin.org" }, - "marketcap_usd": 440397266, + "marketcap_usd": 113145909, "name": "Syscoin", "shortcut": "SYS", "t1_enabled": "yes", @@ -630,7 +630,7 @@ "Github": "https://github.com/viacoin", "Homepage": "https://viacoin.org" }, - "marketcap_usd": 2895597, + "marketcap_usd": 4313627, "name": "Viacoin", "shortcut": "VIA", "t1_enabled": "yes", @@ -666,7 +666,7 @@ "Github": "https://github.com/vertcoin-project/vertcoin-core", "Homepage": "https://vertcoin.org" }, - "marketcap_usd": 20109915, + "marketcap_usd": 9923431, "name": "Vertcoin", "shortcut": "VTC", "t1_enabled": "yes", @@ -684,7 +684,7 @@ "Github": "https://github.com/primecoin/primecoin", "Homepage": "https://primecoin.io" }, - "marketcap_usd": 2806223, + "marketcap_usd": 1608155, "name": "Primecoin", "shortcut": "XPM", "t1_enabled": "yes", @@ -702,7 +702,7 @@ "Github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "Homepage": "https://xrhodium.org" }, - "marketcap_usd": 968087, + "marketcap_usd": 329364, "name": "xRhodium", "shortcut": "XRC", "t1_enabled": "yes", @@ -720,7 +720,7 @@ "Github": "https://github.com/X9Developers/XSN", "Homepage": "https://stakenet.io" }, - "marketcap_usd": 2989674, + "marketcap_usd": 0, "name": "Stakenet", "shortcut": "XSN", "t1_enabled": "yes", @@ -738,7 +738,7 @@ "Github": "https://github.com/vergecurrency/VERGE", "Homepage": "https://vergecurrency.com" }, - "marketcap_usd": 207359599, + "marketcap_usd": 60572022, "name": "Verge", "shortcut": "XVG", "t1_enabled": "yes", @@ -756,7 +756,7 @@ "Github": "https://github.com/zcore-coin/zcore-2.0", "Homepage": "https://zcore.cash" }, - "marketcap_usd": 70634, + "marketcap_usd": 47421, "name": "ZCore", "shortcut": "ZCR", "t1_enabled": "yes", @@ -774,7 +774,7 @@ "Github": "https://github.com/zcash/zcash", "Homepage": "https://z.cash" }, - "marketcap_usd": 2757663403, + "marketcap_usd": 903925624, "name": "Zcash", "shortcut": "ZEC", "t1_enabled": "yes", @@ -791,6 +791,53 @@ } ] }, + "erc20:avax:AVAX": { + "address": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", + "links": { + "Github": "https://github.com/ava-labs", + "Homepage": "https://www.avalabs.org" + }, + "marketcap_usd": 0, + "name": "Avalanche", + "network": "avax", + "shortcut": "AVAX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:avax:USDT": { + "address": "0xde3A24028580884448a5397872046a019649b084", + "links": { + "Homepage": "https://tether.to/" + }, + "marketcap_usd": 0, + "name": "Tether", + "network": "avax", + "shortcut": "USDT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "erc20:ella:MINING": { "address": "0x991e7Fe4b05f2b3db1D788e705963f5D647b0044", "links": { @@ -915,7 +962,7 @@ "links": { "Homepage": "https://0xbitcoin.org/" }, - "marketcap_usd": 6245135, + "marketcap_usd": 3040703, "name": "0xBitcoin", "network": "eth", "shortcut": "0xBTC", @@ -973,7 +1020,7 @@ "links": { "Homepage": "https://ico.1worldonline.com" }, - "marketcap_usd": 3973354, + "marketcap_usd": 2921886, "name": "1World", "network": "eth", "shortcut": "1WO", @@ -1051,7 +1098,7 @@ "Github": "https://github.com/crypt04dvisor/AlphaWallet", "Homepage": "https://alphaplatform.co/" }, - "marketcap_usd": 534951, + "marketcap_usd": 289970, "name": "Alpha", "network": "eth", "shortcut": "A", @@ -1071,7 +1118,7 @@ "Github": "https://github.com/aave", "Homepage": "https://aave.com/ " }, - "marketcap_usd": 2827679640, + "marketcap_usd": 1263971663, "name": "Aave", "network": "eth", "shortcut": "AAVE", @@ -1150,7 +1197,7 @@ "links": { "Homepage": "https://www.arcblock.io" }, - "marketcap_usd": 13904197, + "marketcap_usd": 9017642, "name": "ArcBlock Token", "network": "eth", "shortcut": "ABT", @@ -1170,7 +1217,7 @@ "Github": "https://github.com/theabyssportal", "Homepage": "https://www.theabyss.com" }, - "marketcap_usd": 9236667, + "marketcap_usd": 4225172, "name": "Abyss Token", "network": "eth", "shortcut": "ABYSS", @@ -1227,7 +1274,7 @@ "links": { "Homepage": "https://adbank.network" }, - "marketcap_usd": 965952, + "marketcap_usd": 410296, "name": "adbank", "network": "eth", "shortcut": "ADB", @@ -1306,7 +1353,7 @@ "Github": "https://github.com/aditus", "Homepage": "https://aditus.net" }, - "marketcap_usd": 99092, + "marketcap_usd": 48681, "name": "Aditus", "network": "eth", "shortcut": "ADI", @@ -1385,7 +1432,7 @@ "Github": "https://github.com/AdExNetwork", "Homepage": "https://www.adex.network" }, - "marketcap_usd": 63154215, + "marketcap_usd": 25841840, "name": "AdEx Network", "network": "eth", "shortcut": "ADX", @@ -1525,7 +1572,7 @@ "Github": "https://github.com/IDNI", "Homepage": "https://tau.net/" }, - "marketcap_usd": 11129222, + "marketcap_usd": 6421395, "name": "Agoras: Currency of Tau", "network": "eth", "shortcut": "AGRS", @@ -1583,7 +1630,7 @@ "links": { "Homepage": "https://www.aidcoin.co" }, - "marketcap_usd": 305138, + "marketcap_usd": 80657, "name": "AidCoin", "network": "eth", "shortcut": "AID", @@ -1642,7 +1689,7 @@ "Github": "https://github.com/AigangNetwork", "Homepage": "https://aigang.network/" }, - "marketcap_usd": 374146, + "marketcap_usd": 120685, "name": "Aigang", "network": "eth", "shortcut": "AIX", @@ -1701,7 +1748,7 @@ "Github": "https://github.com/aleph-im/", "Homepage": "https://aleph.im" }, - "marketcap_usd": 62417626, + "marketcap_usd": 63449522, "name": "Aleph.im", "network": "eth", "shortcut": "ALEPH", @@ -1720,7 +1767,7 @@ "links": { "Homepage": "http://ailink.in" }, - "marketcap_usd": 182328, + "marketcap_usd": 151862, "name": "AiLink Token", "network": "eth", "shortcut": "ALI", @@ -1878,7 +1925,7 @@ "Github": "https://github.com/amlt-by-coinfirm", "Homepage": "https://amlt.coinfirm.io/" }, - "marketcap_usd": 3704621, + "marketcap_usd": 1252595, "name": "AMLT", "network": "eth", "shortcut": "AMLT", @@ -1898,7 +1945,7 @@ "Github": "https://github.com/amontech", "Homepage": "https://amon.tech" }, - "marketcap_usd": 1388057, + "marketcap_usd": 119908, "name": "Amon", "network": "eth", "shortcut": "AMN", @@ -1918,7 +1965,7 @@ "Github": "https://github.com/AMO-Project/", "Homepage": "https://amo.foundation" }, - "marketcap_usd": 35001668, + "marketcap_usd": 25939045, "name": "AMO Coin", "network": "eth", "shortcut": "AMO", @@ -1937,7 +1984,7 @@ "links": { "Homepage": "https://ados.foundation/" }, - "marketcap_usd": 1342255, + "marketcap_usd": 673061, "name": "Token AmonD", "network": "eth", "shortcut": "AMON", @@ -1957,7 +2004,7 @@ "Github": "https://github.com/amptoken", "Homepage": "https://amptoken.org" }, - "marketcap_usd": 1168152518, + "marketcap_usd": 348662440, "name": "Amp", "network": "eth", "shortcut": "AMP", @@ -1977,7 +2024,7 @@ "Github": "https://github.com/ampleforth", "Homepage": "https://ampleforth.org" }, - "marketcap_usd": 87761062, + "marketcap_usd": 42132846, "name": "Ampleforth", "network": "eth", "shortcut": "AMPL", @@ -2036,7 +2083,7 @@ "Github": "https://github.com/aragon/aragon-court", "Homepage": "https://anj.aragon.org/" }, - "marketcap_usd": 34304320, + "marketcap_usd": 0, "name": "Aragon Network Juror", "network": "eth", "shortcut": "ANJ", @@ -2055,7 +2102,7 @@ "links": { "Homepage": "https://www.aurorachain.io" }, - "marketcap_usd": 9216375, + "marketcap_usd": 3587829, "name": "Aurora", "network": "eth", "shortcut": "AOA", @@ -2075,7 +2122,7 @@ "Github": "https://github.com/api3dao", "Homepage": "https://api3.org/" }, - "marketcap_usd": 215836440, + "marketcap_usd": 106625736, "name": "API3", "network": "eth", "shortcut": "API3", @@ -2154,7 +2201,7 @@ "Github": "https://github.com/alphaquark/Alpha-Quark", "Homepage": "https://www.alphaquark.io" }, - "marketcap_usd": 81858314, + "marketcap_usd": 37868889, "name": "AlphaQuarkToken", "network": "eth", "shortcut": "AQT", @@ -2193,7 +2240,7 @@ "links": { "Homepage": "https://www.arbitragect.com" }, - "marketcap_usd": 100201, + "marketcap_usd": 35721, "name": "ArbitrageCT", "network": "eth", "shortcut": "ARCT", @@ -2272,7 +2319,7 @@ "Github": "https://github.com/aeronaero/aeron", "Homepage": "https://aeron.aero" }, - "marketcap_usd": 9574, + "marketcap_usd": 188497, "name": "Aeron", "network": "eth", "shortcut": "ARNX", @@ -2291,7 +2338,7 @@ "links": { "Homepage": "http://www.maecenas.co" }, - "marketcap_usd": 140171, + "marketcap_usd": 228674, "name": "Maecenas", "network": "eth", "shortcut": "ART", @@ -2369,7 +2416,7 @@ "links": { "Homepage": "https://airswap.io" }, - "marketcap_usd": 26934363, + "marketcap_usd": 12756061, "name": "Airswap", "network": "eth", "shortcut": "AST", @@ -2408,7 +2455,7 @@ "links": { "Homepage": "https://atlant.io" }, - "marketcap_usd": 659342, + "marketcap_usd": 157448, "name": "ATLANT", "network": "eth", "shortcut": "ATL", @@ -2524,7 +2571,7 @@ "links": { "Homepage": "https://auctus.org" }, - "marketcap_usd": 1397475, + "marketcap_usd": 136763, "name": "Auctus", "network": "eth", "shortcut": "AUC", @@ -2544,7 +2591,7 @@ "Github": "https://github.com/audiusproject", "Homepage": "https://audius.co" }, - "marketcap_usd": 689264363, + "marketcap_usd": 272001092, "name": "Audius", "network": "eth", "shortcut": "AUDIO", @@ -2641,7 +2688,7 @@ "links": { "Homepage": "https://aventus.io" }, - "marketcap_usd": 17270857, + "marketcap_usd": 9329258, "name": "Aventus", "network": "eth", "shortcut": "AVT", @@ -2740,7 +2787,7 @@ "Github": "https://github.com/axieinfinity", "Homepage": "https://axieinfinity.com/" }, - "marketcap_usd": 4263086025, + "marketcap_usd": 1386248511, "name": "Axie Infinity Shards", "network": "eth", "shortcut": "AXS", @@ -2799,7 +2846,7 @@ "Github": "https://github.com/balancer-labs", "Homepage": "https://balancer.finance" }, - "marketcap_usd": 104549974, + "marketcap_usd": 248211099, "name": "Balancer", "network": "eth", "shortcut": "BAL", @@ -2858,7 +2905,7 @@ "links": { "Homepage": "https://www.banca.world" }, - "marketcap_usd": 581046, + "marketcap_usd": 395270, "name": "Banca", "network": "eth", "shortcut": "BANCA", @@ -2916,7 +2963,7 @@ "links": { "Homepage": "https://basicattentiontoken.org" }, - "marketcap_usd": 1359286971, + "marketcap_usd": 586806236, "name": "Basic Attention Token", "network": "eth", "shortcut": "BAT", @@ -2935,7 +2982,7 @@ "links": { "Homepage": "https://getbabb.com" }, - "marketcap_usd": 16712055, + "marketcap_usd": 0, "name": "BABB", "network": "eth", "shortcut": "BAX", @@ -3012,7 +3059,7 @@ "links": { "Homepage": "https://bigbom.com" }, - "marketcap_usd": 119469, + "marketcap_usd": 80106, "name": "Bigbom", "network": "eth", "shortcut": "BBO", @@ -3110,7 +3157,7 @@ "Github": "https://github.com/VinceBCD/BCDiploma", "Homepage": "https://www.bcdiploma.com" }, - "marketcap_usd": 4323403, + "marketcap_usd": 3360710, "name": "Blockchain Certified Data Token", "network": "eth", "shortcut": "BCDT", @@ -3168,7 +3215,7 @@ "Github": "https://github.com/blockmason", "Homepage": "https://blockmason.io" }, - "marketcap_usd": 316544, + "marketcap_usd": 209143, "name": "BlockMason Credit Protocol Token", "network": "eth", "shortcut": "BCPT", @@ -3188,7 +3235,7 @@ "Github": "https://github.com/bitcv", "Homepage": "https://bitcv.one/" }, - "marketcap_usd": 175696, + "marketcap_usd": 138527, "name": "BitCapitalVendor Token", "network": "eth", "shortcut": "BCV", @@ -3287,7 +3334,7 @@ "Github": "https://github.com/Rentberry", "Homepage": "https://rentberry.com" }, - "marketcap_usd": 147616, + "marketcap_usd": 144721, "name": "Berry", "network": "eth", "shortcut": "BERRY", @@ -3385,7 +3432,7 @@ "links": { "Homepage": "https://bnktothefuture.com" }, - "marketcap_usd": 9095802, + "marketcap_usd": 3835740, "name": "BnkToTheFuture", "network": "eth", "shortcut": "BFT", @@ -3501,7 +3548,7 @@ "Github": "https://github.com/BitScreenerTech", "Homepage": "https://tokensale.bitscreener.com/" }, - "marketcap_usd": 869663, + "marketcap_usd": 56549, "name": "Token BitScreenerToken", "network": "eth", "shortcut": "BITX", @@ -3657,7 +3704,7 @@ "Github": "https://github.com/hellobloom", "Homepage": "https://hellobloom.io" }, - "marketcap_usd": 0, + "marketcap_usd": 267371, "name": "Bloom", "network": "eth", "shortcut": "BLT", @@ -3677,7 +3724,7 @@ "Github": "https://github.com/BlueCrypto", "Homepage": "https://blueprotocol.com/" }, - "marketcap_usd": 686677, + "marketcap_usd": 380317, "name": "Ethereum Blue", "network": "eth", "shortcut": "BLUE", @@ -3735,7 +3782,7 @@ "links": { "Homepage": "https://bluzelle.com" }, - "marketcap_usd": 63575125, + "marketcap_usd": 32920340, "name": "Bluzelle", "network": "eth", "shortcut": "BLZ", @@ -3774,7 +3821,7 @@ "links": { "Homepage": "https://www.bitmart.com" }, - "marketcap_usd": 53196314, + "marketcap_usd": 35600307, "name": "BitMart Token", "network": "eth", "shortcut": "BMX", @@ -3793,7 +3840,7 @@ "links": { "Homepage": "https://www.binance.com" }, - "marketcap_usd": 72574315643, + "marketcap_usd": 44690398276, "name": "Binance Coin", "network": "eth", "shortcut": "BNB", @@ -3852,7 +3899,7 @@ "Github": "https://github.com/bancorprotocol", "Homepage": "https://www.bancor.network" }, - "marketcap_usd": 724022143, + "marketcap_usd": 110012703, "name": "Bancor Network Token", "network": "eth", "shortcut": "BNT", @@ -3871,7 +3918,7 @@ "links": { "Homepage": "https://bounty0x.io" }, - "marketcap_usd": 192030, + "marketcap_usd": 208716, "name": "Bounty0x Token", "network": "eth", "shortcut": "BNTY", @@ -3890,7 +3937,7 @@ "links": { "Homepage": "https://bobsrepair.com" }, - "marketcap_usd": 661689, + "marketcap_usd": 412870, "name": "Bob's repair", "network": "eth", "shortcut": "BOB", @@ -3967,7 +4014,7 @@ "links": { "Homepage": "https://bonpay.com" }, - "marketcap_usd": 16214, + "marketcap_usd": 7707, "name": "Bonpay", "network": "eth", "shortcut": "BON", @@ -4024,7 +4071,7 @@ "links": { "Homepage": "https://www.bouts.pro" }, - "marketcap_usd": 236897, + "marketcap_usd": 30800, "name": "BoutsPro", "network": "eth", "shortcut": "BOUTS", @@ -4057,6 +4104,26 @@ } ] }, + "erc20:eth:BPF": { + "address": "0x5197FBE1a86679FF1360E27862BF88B0c5119BD8", + "links": { + "Github": "https://github.com/bitpif", + "Homepage": "https://bitpif.com" + }, + "marketcap_usd": 0, + "name": "BITPIF", + "network": "eth", + "shortcut": "BPF", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:BPT": { "address": "0x327682779bAB2BF4d1337e8974ab9dE8275A7Ca8", "links": { @@ -4121,7 +4188,7 @@ "Github": "https://github.com/breadwallet", "Homepage": "https://token.breadapp.com/en" }, - "marketcap_usd": 25057824, + "marketcap_usd": 6943143, "name": "Bread", "network": "eth", "shortcut": "BRD", @@ -4296,7 +4363,7 @@ "links": { "Homepage": "http://btclite.org" }, - "marketcap_usd": 17904, + "marketcap_usd": 0, "name": "BTC Lite", "network": "eth", "shortcut": "BTCL", @@ -4453,7 +4520,7 @@ "links": { "Homepage": "https://www.bottos.org" }, - "marketcap_usd": 315803, + "marketcap_usd": 310857, "name": "Bottos", "network": "eth", "shortcut": "BTO", @@ -4511,7 +4578,7 @@ "links": { "Homepage": "https://biotron.io" }, - "marketcap_usd": 63158, + "marketcap_usd": 0, "name": "Biotron", "network": "eth", "shortcut": "BTRN", @@ -4531,7 +4598,7 @@ "Github": "https://github.com/btuprotocol", "Homepage": "https://btu-protocol.com" }, - "marketcap_usd": 34490452, + "marketcap_usd": 27884983, "name": "BTU Protocol", "network": "eth", "shortcut": "BTU", @@ -4590,7 +4657,7 @@ "Github": "https://github.com/paxosglobal/busd-contract", "Homepage": "https://www.paxos.com/busd" }, - "marketcap_usd": 17553268623, + "marketcap_usd": 17917643708, "name": "Binance USD (BUSD)", "network": "eth", "shortcut": "BUSD", @@ -4667,7 +4734,7 @@ "links": { "Homepage": "https://bezant.io" }, - "marketcap_usd": 822362, + "marketcap_usd": 194653, "name": "Bezant", "network": "eth", "shortcut": "BZNT", @@ -4707,7 +4774,7 @@ "Github": "https://github.com/cryptotwenty", "Homepage": "https://crypto20.com" }, - "marketcap_usd": 157880605, + "marketcap_usd": 1526658, "name": "Crypto20's Token", "network": "eth", "shortcut": "C20", @@ -4765,7 +4832,7 @@ "Github": "https://github.com/Global-Crypto-Alliance/call-token", "Homepage": "https://gcalliance.io" }, - "marketcap_usd": 60447, + "marketcap_usd": 142187, "name": "CALL token", "network": "eth", "shortcut": "CALL", @@ -4879,7 +4946,7 @@ "links": { "Homepage": "https://coin.cashbet.com" }, - "marketcap_usd": 6881097, + "marketcap_usd": 1528635, "name": "CashBet Coin", "network": "eth", "shortcut": "CBC", @@ -4995,7 +5062,7 @@ "links": { "Homepage": "https://ccore.io" }, - "marketcap_usd": 22978, + "marketcap_usd": 10040, "name": "Ccore", "network": "eth", "shortcut": "CCO", @@ -5072,7 +5139,7 @@ "links": { "Homepage": "https://www.ceek.com/" }, - "marketcap_usd": 342139054, + "marketcap_usd": 187145747, "name": "CEEK VR Token", "network": "eth", "shortcut": "CEEK", @@ -5092,7 +5159,7 @@ "Github": "https://github.com/celer-network", "Homepage": "https://www.celer.network/" }, - "marketcap_usd": 396270900, + "marketcap_usd": 141526232, "name": "CelerToken", "network": "eth", "shortcut": "CELR", @@ -5131,7 +5198,7 @@ "links": { "Homepage": "https://www.centrality.ai" }, - "marketcap_usd": 143136393, + "marketcap_usd": 57806547, "name": "Centrality", "network": "eth", "shortcut": "CENNZ", @@ -5229,7 +5296,7 @@ "Github": "https://github.com/cache-token/cache-contract", "Homepage": "https://cache.gold" }, - "marketcap_usd": 5488496, + "marketcap_usd": 4448130, "name": "CACHE Gold", "network": "eth", "shortcut": "CGT", @@ -5287,7 +5354,7 @@ "links": { "Homepage": "https://swissborg.com" }, - "marketcap_usd": 469959129, + "marketcap_usd": 191040193, "name": "SwissBorg", "network": "eth", "shortcut": "CHSB", @@ -5326,7 +5393,7 @@ "Github": "https://github.com/CivilizationCIV", "Homepage": "https://civfund.org" }, - "marketcap_usd": 29029032, + "marketcap_usd": 15548799, "name": "Civilization", "network": "eth", "shortcut": "CIV", @@ -5501,7 +5568,7 @@ "links": { "Homepage": "https://coinloan.io" }, - "marketcap_usd": 42375318, + "marketcap_usd": 35569899, "name": "CoinLoan", "network": "eth", "shortcut": "CLT", @@ -5577,7 +5644,7 @@ "links": { "Homepage": "https://app.coinmerge.io/" }, - "marketcap_usd": 3484745, + "marketcap_usd": 1941554, "name": "Coin Merge", "network": "eth", "shortcut": "CMERGE", @@ -5615,7 +5682,7 @@ "links": { "Homepage": "https://cindicator.com" }, - "marketcap_usd": 2053877, + "marketcap_usd": 1343358, "name": "Cindicator", "network": "eth", "shortcut": "CND", @@ -5629,32 +5696,12 @@ } ] }, - "erc20:eth:CNDL": { - "address": "0xbc138bD20C98186CC0342C8e380953aF0cb48BA8", - "links": { - "Github": "https://GitHub.com/candleplatforms", - "Homepage": "https://candlelabs.org" - }, - "marketcap_usd": 0, - "name": "Candle", - "network": "eth", - "shortcut": "CNDL", - "t1_enabled": "yes", - "t2_enabled": "yes", - "type": "erc20", - "wallet": [ - { - "name": "Trezor Suite", - "url": "https://suite.trezor.io" - } - ] - }, "erc20:eth:CNN": { "address": "0x8713d26637CF49e1b6B4a7Ce57106AaBc9325343", "links": { "Homepage": "https://cnntoken.io" }, - "marketcap_usd": 340103, + "marketcap_usd": 267360, "name": "Content Neutrality Network", "network": "eth", "shortcut": "CNN", @@ -5713,7 +5760,7 @@ "Github": "https://github.com/cobinhood", "Homepage": "https://cobinhood.com" }, - "marketcap_usd": 196754, + "marketcap_usd": 93522, "name": "Cobinhood Token", "network": "eth", "shortcut": "COB", @@ -5753,7 +5800,7 @@ "Github": "https://github.com/coinfi", "Homepage": "https://www.coinfi.com" }, - "marketcap_usd": 522082, + "marketcap_usd": 250832, "name": "CoinFi Token", "network": "eth", "shortcut": "COFI", @@ -5793,7 +5840,7 @@ "Github": "https://github.com/compound-finance", "Homepage": "https://compound.finance" }, - "marketcap_usd": 956428162, + "marketcap_usd": 396375692, "name": "Compound", "network": "eth", "shortcut": "COMP", @@ -5851,7 +5898,7 @@ "Github": "https://github.com/coti-io", "Homepage": "https://coti.io" }, - "marketcap_usd": 306047919, + "marketcap_usd": 112294069, "name": "COTI", "network": "eth", "shortcut": "COTI", @@ -5928,7 +5975,7 @@ "links": { "Homepage": "http://www.cpchain.io" }, - "marketcap_usd": 2621399, + "marketcap_usd": 1418086, "name": "CPChain", "network": "eth", "shortcut": "CPC", @@ -6181,7 +6228,7 @@ "links": { "Homepage": "https://credits.com/en" }, - "marketcap_usd": 6876327, + "marketcap_usd": 1618637, "name": "Credits", "network": "eth", "shortcut": "CS", @@ -6299,7 +6346,7 @@ "Github": "https://github.com/cartesi", "Homepage": "https://cartesi.io" }, - "marketcap_usd": 225142914, + "marketcap_usd": 95485176, "name": "Cartesi Token", "network": "eth", "shortcut": "CTSI", @@ -6395,7 +6442,7 @@ "links": { "Homepage": "https://www.civic.com" }, - "marketcap_usd": 239825449, + "marketcap_usd": 152337117, "name": "Civic", "network": "eth", "shortcut": "CVC", @@ -6434,7 +6481,7 @@ "links": { "Homepage": "http://www.cybervein.org" }, - "marketcap_usd": 4586220, + "marketcap_usd": 1846634, "name": "CyberVein", "network": "eth", "shortcut": "CVT", @@ -6474,7 +6521,7 @@ "Github": "https://github.com/cargoxio", "Homepage": "https://cargox.io" }, - "marketcap_usd": 56860188, + "marketcap_usd": 17189874, "name": "CargoX", "network": "eth", "shortcut": "CXO", @@ -6532,7 +6579,7 @@ "links": { "Homepage": "https://cybermusic.io" }, - "marketcap_usd": 43262, + "marketcap_usd": 14035, "name": "CyberMusic", "network": "eth", "shortcut": "CYMT", @@ -6609,7 +6656,7 @@ "links": { "Homepage": "https://dacsee.io/#" }, - "marketcap_usd": 722838, + "marketcap_usd": 0, "name": "DACSEE", "network": "eth", "shortcut": "DACS", @@ -6662,6 +6709,26 @@ } ] }, + "erc20:eth:DAI": { + "address": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "links": { + "Github": "https://github.com/makerdao", + "Homepage": "https://makerdao.com" + }, + "marketcap_usd": 7461820568, + "name": "Dai Stablecoin v2.0", + "network": "eth", + "shortcut": "DAI", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:DALC": { "address": "0x07D9e49Ea402194bf48A8276dAfB16E4eD633317", "links": { @@ -6745,7 +6812,7 @@ "links": { "Homepage": "https://www.datx.co" }, - "marketcap_usd": 59406, + "marketcap_usd": 10979, "name": "DATx", "network": "eth", "shortcut": "DATX", @@ -6765,7 +6832,7 @@ "Github": "https://github.com/DAVFoundation", "Homepage": "https://dav.network/" }, - "marketcap_usd": 1769948, + "marketcap_usd": 521678, "name": "DAV Token", "network": "eth", "shortcut": "DAV", @@ -6784,7 +6851,7 @@ "links": { "Homepage": "https://www.daex.io" }, - "marketcap_usd": 2349711, + "marketcap_usd": 1573251, "name": "DAEX", "network": "eth", "shortcut": "DAX", @@ -6823,7 +6890,7 @@ "Github": "https://github.com/chronologic", "Homepage": "https://chronologic.network" }, - "marketcap_usd": 142319, + "marketcap_usd": 47374, "name": "ChronoLogic DAY", "network": "eth", "shortcut": "DAY", @@ -6842,7 +6909,7 @@ "links": { "Homepage": "https://www.decent.bet" }, - "marketcap_usd": 451674, + "marketcap_usd": 51152, "name": "DecentBet", "network": "eth", "shortcut": "DBET", @@ -6941,7 +7008,7 @@ "Github": "https://github.com/Dentacoin", "Homepage": "https://dentacoin.com" }, - "marketcap_usd": 7026118, + "marketcap_usd": 1574380, "name": "Dentacoin", "network": "eth", "shortcut": "DCN", @@ -6980,7 +7047,7 @@ "links": { "Homepage": "https://debitum.network/" }, - "marketcap_usd": 1145268, + "marketcap_usd": 349227, "name": "DEBITUM", "network": "eth", "shortcut": "DEB", @@ -7038,7 +7105,7 @@ "links": { "Homepage": "https://www.dentwireless.com" }, - "marketcap_usd": 337010455, + "marketcap_usd": 102259438, "name": "DENT", "network": "eth", "shortcut": "DENT", @@ -7096,7 +7163,7 @@ "Github": "https://github.com/dforcenetwork", "Homepage": "https://dforce.network" }, - "marketcap_usd": 35765039, + "marketcap_usd": 17977739, "name": "dForce Platform Token", "network": "eth", "shortcut": "DF", @@ -7110,6 +7177,25 @@ } ] }, + "erc20:eth:DGD": { + "address": "0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A", + "links": { + "Homepage": "https://digix.global/" + }, + "marketcap_usd": 9504432, + "name": "Digix DAO", + "network": "eth", + "shortcut": "DGD", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:DGPT": { "address": "0xf6cFe53d6FEbaEEA051f400ff5fc14F0cBBDacA1", "links": { @@ -7156,7 +7242,7 @@ "Github": "https://github.com/DigixGlobal", "Homepage": "https://digix.global" }, - "marketcap_usd": 1346529, + "marketcap_usd": 839022, "name": "Digix Gold Token", "network": "eth", "shortcut": "DGX", @@ -7234,7 +7320,7 @@ "links": { "Homepage": "https://inmediate.io" }, - "marketcap_usd": 860437, + "marketcap_usd": 247665, "name": "Digital Insurance Token", "network": "eth", "shortcut": "DIT", @@ -7272,7 +7358,7 @@ "links": { "Homepage": "https://www.agrello.org" }, - "marketcap_usd": 430793, + "marketcap_usd": 117479, "name": "Agrello", "network": "eth", "shortcut": "DLT", @@ -7292,7 +7378,7 @@ "Github": "https://github.com/suntechsoft/dmarket-smartcontract", "Homepage": "https://dmarket.com" }, - "marketcap_usd": 782420, + "marketcap_usd": 544003, "name": "DMarket Token", "network": "eth", "shortcut": "DMT", @@ -7331,7 +7417,7 @@ "Github": "https://github.com/district0x", "Homepage": "https://district0x.io" }, - "marketcap_usd": 52006400, + "marketcap_usd": 31686626, "name": "District0x Network Token", "network": "eth", "shortcut": "DNT", @@ -7427,7 +7513,7 @@ "links": { "Homepage": "https://dovu.io" }, - "marketcap_usd": 38621154, + "marketcap_usd": 5230518, "name": "Dovu", "network": "eth", "shortcut": "DOV", @@ -7486,7 +7572,7 @@ "Github": "https://github.com/dragonchain/dragonchain", "Homepage": "https://dragonchain.com" }, - "marketcap_usd": 23845398, + "marketcap_usd": 7778910, "name": "Dragon", "network": "eth", "shortcut": "DRGN", @@ -7524,7 +7610,7 @@ "links": { "Homepage": "https://token.domraider.com" }, - "marketcap_usd": 339796, + "marketcap_usd": 141467, "name": "DomRaider", "network": "eth", "shortcut": "DRT", @@ -7623,7 +7709,7 @@ "Github": "https://github.com/dethertech", "Homepage": "https://dether.io" }, - "marketcap_usd": 513776, + "marketcap_usd": 188995, "name": "dether", "network": "eth", "shortcut": "DTH", @@ -7661,7 +7747,7 @@ "links": { "Homepage": "https://datarius.io" }, - "marketcap_usd": 9039, + "marketcap_usd": 47699, "name": "Datarius Credit", "network": "eth", "shortcut": "DTRC", @@ -7874,7 +7960,7 @@ "links": { "Homepage": "https://omnitude.tech" }, - "marketcap_usd": 582108, + "marketcap_usd": 0, "name": "Omnitude", "network": "eth", "shortcut": "ECOM", @@ -7912,7 +7998,7 @@ "links": { "Homepage": "https://edgeless.io" }, - "marketcap_usd": 4578145, + "marketcap_usd": 2056791, "name": "Edgeless", "network": "eth", "shortcut": "EDG", @@ -7971,7 +8057,7 @@ "Github": "https://github.com/EndorCoin", "Homepage": "https://www.endor.com" }, - "marketcap_usd": 836813, + "marketcap_usd": 217260, "name": "Endor Protocol Token", "network": "eth", "shortcut": "EDR", @@ -8031,7 +8117,7 @@ "Github": "https://github.com/egretia", "Homepage": "https://www.egretia.io" }, - "marketcap_usd": 3219208, + "marketcap_usd": 1594501, "name": "Egretia Token", "network": "eth", "shortcut": "EGT", @@ -8089,7 +8175,7 @@ "links": { "Homepage": "https://echolink.info" }, - "marketcap_usd": 131515, + "marketcap_usd": 55123, "name": "EchoLink", "network": "eth", "shortcut": "EKO", @@ -8127,7 +8213,7 @@ "links": { "Homepage": "https://electrify.asia" }, - "marketcap_usd": 486257, + "marketcap_usd": 395915, "name": "Electrify.Asia", "network": "eth", "shortcut": "ELEC", @@ -8147,7 +8233,7 @@ "Github": "https://github.com/aelfProject", "Homepage": "https://aelf.io/" }, - "marketcap_usd": 219834487, + "marketcap_usd": 91873409, "name": "ELF Token", "network": "eth", "shortcut": "ELF", @@ -8186,7 +8272,7 @@ "Github": "https://github.com/eltcoin", "Homepage": "http://www.eltcoin.tech/" }, - "marketcap_usd": 43446, + "marketcap_usd": 38197, "name": "ELTCOIN", "network": "eth", "shortcut": "ELTCOIN", @@ -8206,7 +8292,7 @@ "Github": "https://github.com/Elysian-ELY", "Homepage": "https://elycoin.io" }, - "marketcap_usd": 101340, + "marketcap_usd": 41659, "name": "ELYCOIN", "network": "eth", "shortcut": "ELY", @@ -8344,7 +8430,7 @@ "Github": "https://github.com/enigmampc", "Homepage": "https://enigma.co/" }, - "marketcap_usd": 517011, + "marketcap_usd": 186432, "name": "Enigma", "network": "eth", "shortcut": "ENG", @@ -8383,7 +8469,7 @@ "Github": "https://github.com/enjin/contracts", "Homepage": "https://enjincoin.io" }, - "marketcap_usd": 1572753631, + "marketcap_usd": 540499436, "name": "ENJIN", "network": "eth", "shortcut": "ENJ", @@ -8403,7 +8489,7 @@ "Github": "https://github.com/Enecuum", "Homepage": "https://enecuum.com" }, - "marketcap_usd": 7211597, + "marketcap_usd": 896242, "name": "Enecuum", "network": "eth", "shortcut": "ENQ", @@ -8520,7 +8606,7 @@ "links": { "Homepage": "https://eroscoin.org" }, - "marketcap_usd": 89398, + "marketcap_usd": 42493, "name": "Eroscoin", "network": "eth", "shortcut": "ERO", @@ -8637,7 +8723,7 @@ "links": { "Homepage": "https://www.etgproject.org" }, - "marketcap_usd": 335145, + "marketcap_usd": 180816, "name": "Ethereum Gold", "network": "eth", "shortcut": "ETG", @@ -8774,7 +8860,7 @@ "Github": "https://github.com/stasisnet", "Homepage": "https://stasis.net" }, - "marketcap_usd": 137660532, + "marketcap_usd": 126914757, "name": "STASIS EURS", "network": "eth", "shortcut": "EURS", @@ -8812,7 +8898,7 @@ "links": { "Homepage": "https://eventchain.io" }, - "marketcap_usd": 125334, + "marketcap_usd": 44616, "name": "EventChain", "network": "eth", "shortcut": "EVC", @@ -8851,7 +8937,7 @@ "Github": "https://github.com/devery", "Homepage": "https://devery.io" }, - "marketcap_usd": 89027, + "marketcap_usd": 68606, "name": "Devery", "network": "eth", "shortcut": "EVE", @@ -8871,7 +8957,7 @@ "Github": "https://github.com/evedo-co", "Homepage": "https://www.evedo.co" }, - "marketcap_usd": 1106088, + "marketcap_usd": 520542, "name": "Evedo Token", "network": "eth", "shortcut": "EVED", @@ -8930,7 +9016,7 @@ "links": { "Homepage": "https://everex.io " }, - "marketcap_usd": 500074, + "marketcap_usd": 319228, "name": "Everex", "network": "eth", "shortcut": "EVX", @@ -9028,7 +9114,7 @@ "links": { "Homepage": "https://exrnchain.com" }, - "marketcap_usd": 3380922, + "marketcap_usd": 1158190, "name": "EXRNchain", "network": "eth", "shortcut": "EXRN", @@ -9144,7 +9230,7 @@ "links": { "Homepage": "https://tokensale.faceter.io" }, - "marketcap_usd": 632167, + "marketcap_usd": 354513, "name": "Faceter", "network": "eth", "shortcut": "FACE", @@ -9242,7 +9328,7 @@ "links": { "Homepage": "https://friendz.io" }, - "marketcap_usd": 432362, + "marketcap_usd": 227649, "name": "Friendz", "network": "eth", "shortcut": "FDZ", @@ -9380,7 +9466,7 @@ "links": { "Homepage": "https://www.flixxo.com" }, - "marketcap_usd": 538774, + "marketcap_usd": 161120, "name": "Flixxo", "network": "eth", "shortcut": "FLIXX", @@ -9399,7 +9485,7 @@ "links": { "Homepage": "https://firelotto.io" }, - "marketcap_usd": 200286, + "marketcap_usd": 64930, "name": "Fire Lotto", "network": "eth", "shortcut": "FLOT", @@ -9419,7 +9505,7 @@ "Github": "https://github.com/gameflip", "Homepage": "https://gameflip.com" }, - "marketcap_usd": 0, + "marketcap_usd": 320942, "name": "FLIP Token", "network": "eth", "shortcut": "FLP", @@ -9497,7 +9583,7 @@ "Github": "https://github.com/civitas-fundamenta", "Homepage": "https://fundamenta.network" }, - "marketcap_usd": 115460, + "marketcap_usd": 57162, "name": "Fundamenta", "network": "eth", "shortcut": "FMTA", @@ -9575,7 +9661,7 @@ "Github": "https://github.com/f-o-a-m", "Homepage": "http://foam.space" }, - "marketcap_usd": 17555431, + "marketcap_usd": 7679395, "name": "FOAM Token", "network": "eth", "shortcut": "FOAM", @@ -9652,7 +9738,7 @@ "links": { "Homepage": "https://shapeshift.com" }, - "marketcap_usd": 92814510, + "marketcap_usd": 29493352, "name": "FOX", "network": "eth", "shortcut": "FOX", @@ -9788,7 +9874,7 @@ "links": { "Homepage": "https://fanstime.org" }, - "marketcap_usd": 186911, + "marketcap_usd": 199104, "name": "FansTime", "network": "eth", "shortcut": "FTI", @@ -9808,7 +9894,7 @@ "Github": "https://github.com/Fantom-foundation/", "Homepage": "https://fantom.foundation/" }, - "marketcap_usd": 3741341758, + "marketcap_usd": 826656185, "name": "Fantom Token", "network": "eth", "shortcut": "FTM", @@ -9866,7 +9952,7 @@ "links": { "Homepage": "https://www.fintrux.com" }, - "marketcap_usd": 1163179, + "marketcap_usd": 556716, "name": "FintruX Network", "network": "eth", "shortcut": "FTX", @@ -9886,7 +9972,7 @@ "Github": "https://github.com/futuraxproject", "Homepage": "https://futurax.global" }, - "marketcap_usd": 19967, + "marketcap_usd": 6974, "name": "FUTURAX", "network": "eth", "shortcut": "FTXT", @@ -9906,7 +9992,7 @@ "Github": "https://github.com/etherparty", "Homepage": "https://etherparty.io" }, - "marketcap_usd": 376761, + "marketcap_usd": 265511, "name": "Etherparty FUEL", "network": "eth", "shortcut": "FUEL", @@ -9925,7 +10011,7 @@ "links": { "Homepage": "https://funfair.io" }, - "marketcap_usd": 128187550, + "marketcap_usd": 89998609, "name": "Funfair", "network": "eth", "shortcut": "FUN", @@ -9944,7 +10030,7 @@ "links": { "Homepage": "https://fuzex.co" }, - "marketcap_usd": 306830, + "marketcap_usd": 147005, "name": "FuzeX", "network": "eth", "shortcut": "FXT", @@ -10002,7 +10088,7 @@ "links": { "Homepage": "https://flyp.me" }, - "marketcap_usd": 1393261, + "marketcap_usd": 646479, "name": "FlypMe", "network": "eth", "shortcut": "FYP", @@ -10021,7 +10107,7 @@ "links": { "Homepage": "https://www.fyooz.io/" }, - "marketcap_usd": 108057, + "marketcap_usd": 19899, "name": "Fyooz", "network": "eth", "shortcut": "FYZ", @@ -10061,7 +10147,7 @@ "Github": "https://github.com/gluwa/Creditcoin", "Homepage": "https://creditcoinfoundation.org" }, - "marketcap_usd": 0, + "marketcap_usd": 82860717, "name": "Creditcoin Token", "network": "eth", "shortcut": "G-CRE", @@ -10101,7 +10187,7 @@ "Github": "https://github.com/gamecredits-project", "Homepage": "https://www.gamecredits.org" }, - "marketcap_usd": 17131562, + "marketcap_usd": 3056175, "name": "GAME Credits", "network": "eth", "shortcut": "GAME", @@ -10140,7 +10226,7 @@ "Github": "https://github.com/GateNet-IO/gate-erc20-token", "Homepage": "https://gatetoken.io/" }, - "marketcap_usd": 9503925, + "marketcap_usd": 4392910, "name": "GATE Token", "network": "eth", "shortcut": "GATE", @@ -10336,7 +10422,7 @@ "Github": "https://github.com/Governor-DAO", "Homepage": "https://www.governordao.org" }, - "marketcap_usd": 1624074, + "marketcap_usd": 573375, "name": "Governor DAO", "network": "eth", "shortcut": "GDAO", @@ -10414,7 +10500,7 @@ "links": { "Homepage": "https://gems.org" }, - "marketcap_usd": 248689, + "marketcap_usd": 120129, "name": "Gems", "network": "eth", "shortcut": "GEM", @@ -10434,7 +10520,7 @@ "Github": "https://github.com/daostack", "Homepage": "https://daostack.io" }, - "marketcap_usd": 1650573, + "marketcap_usd": 305299, "name": "DAOstack", "network": "eth", "shortcut": "GEN", @@ -10473,7 +10559,7 @@ "Github": "https://github.com/Getprotocol", "Homepage": "http://www.get-protocol.io" }, - "marketcap_usd": 28917418, + "marketcap_usd": 18653626, "name": "GET Protocol", "network": "eth", "shortcut": "GET", @@ -10531,7 +10617,7 @@ "links": { "Homepage": "https://gamerhash.io/" }, - "marketcap_usd": 22948571, + "marketcap_usd": 8528648, "name": "GamerCoin", "network": "eth", "shortcut": "GHX", @@ -10643,12 +10729,31 @@ } ] }, + "erc20:eth:GMB": { + "address": "0xA0008F510fE9eE696E7E320C9e5cbf61E27791Ee", + "links": { + "Homepage": "https://gamb.io" + }, + "marketcap_usd": 1360261, + "name": "GAMB", + "network": "eth", + "shortcut": "GMB", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:GNO": { "address": "0x6810e776880C02933D47DB1b9fc05908e5386b96", "links": { "Homepage": "https://gnosis.pm" }, - "marketcap_usd": 939179794, + "marketcap_usd": 393061882, "name": "Gnosis", "network": "eth", "shortcut": "GNO", @@ -10662,12 +10767,32 @@ } ] }, + "erc20:eth:GNT": { + "address": "0xa74476443119A942dE498590Fe1f2454d7D4aC0d", + "links": { + "Github": "https://github.com/golemfactory/golem", + "Homepage": "https://golem.network" + }, + "marketcap_usd": 0, + "name": "Golem", + "network": "eth", + "shortcut": "GNT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:GNX": { "address": "0x6EC8a24CaBdc339A06a172F8223ea557055aDAa5", "links": { "Homepage": "https://genaro.network" }, - "marketcap_usd": 11298673, + "marketcap_usd": 1858613, "name": "Genaro Network", "network": "eth", "shortcut": "GNX", @@ -10726,7 +10851,7 @@ "links": { "Homepage": "https://gonetwork.co/index.html" }, - "marketcap_usd": 105119, + "marketcap_usd": 63890, "name": "GoNetwork", "network": "eth", "shortcut": "GOT", @@ -10746,7 +10871,7 @@ "Github": "https://github.com/coti-io/cvi-contracts", "Homepage": "https://cvi.finance" }, - "marketcap_usd": 13380803, + "marketcap_usd": 5061991, "name": "GOVI", "network": "eth", "shortcut": "GOVI", @@ -10784,7 +10909,7 @@ "links": { "Homepage": "http://gridplus.io" }, - "marketcap_usd": 70803692, + "marketcap_usd": 13103130, "name": "Grid+", "network": "eth", "shortcut": "GRID", @@ -10863,7 +10988,7 @@ "Github": "https://github.com/graphprotocol", "Homepage": "https://thegraph.com" }, - "marketcap_usd": 2284562024, + "marketcap_usd": 794401640, "name": "Graph Token", "network": "eth", "shortcut": "GRT", @@ -10882,7 +11007,7 @@ "links": { "Homepage": "https://www.gsc.social" }, - "marketcap_usd": 1609629, + "marketcap_usd": 789186, "name": "Global Social Chain", "network": "eth", "shortcut": "GSC", @@ -10921,7 +11046,7 @@ "Github": "https://github.com/GameLeLe", "Homepage": "https://game.com" }, - "marketcap_usd": 1434696, + "marketcap_usd": 623479, "name": "GTC Token", "network": "eth", "shortcut": "GTC", @@ -10935,6 +11060,26 @@ } ] }, + "erc20:eth:GTH": { + "address": "0xeb986DA994E4a118d5956b02d8b7c3C7CE373674", + "links": { + "Github": "https://github.com/GatherNetwork", + "Homepage": "https://gather.network" + }, + "marketcap_usd": 1369428, + "name": "GTH", + "network": "eth", + "shortcut": "GTH", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:GTKT": { "address": "0x025abAD9e518516fdaAFBDcdB9701b37fb7eF0FA", "links": { @@ -10961,7 +11106,7 @@ "Github": "https://github.com/GIFTO-io", "Homepage": "https://gifto.io/" }, - "marketcap_usd": 42042083, + "marketcap_usd": 26392102, "name": "Gifto", "network": "eth", "shortcut": "GTO", @@ -11014,13 +11159,32 @@ } ] }, + "erc20:eth:GUP": { + "address": "0xf7B098298f7C69Fc14610bf71d5e02c60792894C", + "links": { + "Homepage": "https://matchpool.co" + }, + "marketcap_usd": 0, + "name": "Matchpool", + "network": "eth", + "shortcut": "GUP", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:GVT": { "address": "0x103c3A209da59d3E7C4A89307e66521e081CFDF0", "links": { "Github": "https://github.com/GenesisVision", "Homepage": "https://genesis.vision" }, - "marketcap_usd": 1547046, + "marketcap_usd": 846158, "name": "Genesis Vision", "network": "eth", "shortcut": "GVT", @@ -11196,7 +11360,7 @@ "links": { "Homepage": "https://www.showhand.io" }, - "marketcap_usd": 42696, + "marketcap_usd": 39004, "name": "ShowHand", "network": "eth", "shortcut": "HAND", @@ -11272,7 +11436,7 @@ "links": { "Homepage": "https://heartbout.com" }, - "marketcap_usd": 51218, + "marketcap_usd": 6507, "name": "HeartBout", "network": "eth", "shortcut": "HB", @@ -11408,7 +11572,7 @@ "Github": "https://github.com/bitcoinHEX", "Homepage": "https://hex.win" }, - "marketcap_usd": 26171009572, + "marketcap_usd": 8203214843, "name": "HEX", "network": "eth", "shortcut": "HEX", @@ -11602,7 +11766,7 @@ "links": { "Homepage": "https://humaniq.com" }, - "marketcap_usd": 1504065, + "marketcap_usd": 880646, "name": "Humaniq", "network": "eth", "shortcut": "HMQ", @@ -11700,7 +11864,7 @@ "Github": "https://github.com/Holo-Host", "Homepage": "https://holo.host/" }, - "marketcap_usd": 1119184330, + "marketcap_usd": 387484357, "name": "Holo Token", "network": "eth", "shortcut": "HOT (Holo)", @@ -11719,7 +11883,7 @@ "links": { "Homepage": "https://thehydrofoundation.com/" }, - "marketcap_usd": 3978384, + "marketcap_usd": 1598618, "name": "Hydro Protocol", "network": "eth", "shortcut": "HOT (Hydro)", @@ -11757,7 +11921,7 @@ "links": { "Homepage": "https://www.hbg.com" }, - "marketcap_usd": 1468925558, + "marketcap_usd": 670891161, "name": "Huobi Token", "network": "eth", "shortcut": "HT", @@ -11876,7 +12040,7 @@ "Github": "https://github.com/HiveProjectLTD", "Homepage": "https://www.hiveterminal.com" }, - "marketcap_usd": 6365807, + "marketcap_usd": 1066273, "name": "Hiveterminal Token", "network": "eth", "shortcut": "HVN", @@ -12031,7 +12195,7 @@ "links": { "Homepage": "https://www.everest.org" }, - "marketcap_usd": 27529736, + "marketcap_usd": 7623489, "name": "Everest (ID)", "network": "eth", "shortcut": "ID", @@ -12089,7 +12253,7 @@ "Github": "https://github.com/rupiah-token/", "Homepage": "https://www.rupiahtoken.com" }, - "marketcap_usd": 15045987, + "marketcap_usd": 14466872, "name": "Rupiah Token", "network": "eth", "shortcut": "IDRT", @@ -12108,7 +12272,7 @@ "links": { "Homepage": "https://investfeed.com" }, - "marketcap_usd": 91618, + "marketcap_usd": 130645, "name": "InvestFeed", "network": "eth", "shortcut": "IFT", @@ -12127,7 +12291,7 @@ "links": { "Homepage": "http://igtoken.net" }, - "marketcap_usd": 17747, + "marketcap_usd": 8781, "name": "IGToken", "network": "eth", "shortcut": "IG", @@ -12166,7 +12330,7 @@ "links": { "Homepage": "https://ihtcoin.com" }, - "marketcap_usd": 416166, + "marketcap_usd": 211728, "name": "I HOUSE TOKEN", "network": "eth", "shortcut": "IHT", @@ -12243,7 +12407,7 @@ "links": { "Homepage": "https://indorse.io" }, - "marketcap_usd": 533585, + "marketcap_usd": 173228, "name": "Indorse", "network": "eth", "shortcut": "IND", @@ -12418,7 +12582,7 @@ "Github": "https://github.com/iotexproject/iotex-core", "Homepage": "http://iotex.io/" }, - "marketcap_usd": 0, + "marketcap_usd": 300918494, "name": "IoTeX Network", "network": "eth", "shortcut": "IOTX", @@ -12438,7 +12602,7 @@ "Github": "https://github.com/InsurePal", "Homepage": "https://insurepal.io/" }, - "marketcap_usd": 0, + "marketcap_usd": 106768, "name": "InsurePal token", "network": "eth", "shortcut": "IPL", @@ -12477,7 +12641,7 @@ "Github": "https://github.com/iqeon", "Homepage": "https://iqeon.io/" }, - "marketcap_usd": 13037074, + "marketcap_usd": 2061614, "name": "IQeon", "network": "eth", "shortcut": "IQN", @@ -12537,7 +12701,7 @@ "Github": "https://github.com/IoTChainCode", "Homepage": "https://iotchain.io/" }, - "marketcap_usd": 2366654, + "marketcap_usd": 868882, "name": "IoT Chain", "network": "eth", "shortcut": "ITC", @@ -12635,7 +12799,7 @@ "links": { "Homepage": "https://www.insurex.co" }, - "marketcap_usd": 334369, + "marketcap_usd": 182079, "name": "InsureX", "network": "eth", "shortcut": "IXT", @@ -12694,7 +12858,7 @@ "Github": "https://github.com/TokyoToken/JasmyCoin", "Homepage": "https://jasmy.co.jp" }, - "marketcap_usd": 166291719, + "marketcap_usd": 45712197, "name": "JasmyCoin", "network": "eth", "shortcut": "JASMY", @@ -12791,7 +12955,7 @@ "Github": "https://github.com/JobchainOfficial", "Homepage": "https://www.jobchain.com" }, - "marketcap_usd": 5030010, + "marketcap_usd": 2691224, "name": "Jobchain", "network": "eth", "shortcut": "JOB", @@ -12868,7 +13032,7 @@ "links": { "Homepage": "http://www.kan.land" }, - "marketcap_usd": 20025114, + "marketcap_usd": 13160325, "name": "BitKan", "network": "eth", "shortcut": "KAN", @@ -12902,6 +13066,25 @@ } ] }, + "erc20:eth:KC": { + "address": "0x0D6DD9f68d24EC1d5fE2174f3EC8DAB52B52BaF5", + "links": { + "Homepage": "https://www.kmcc.io" + }, + "marketcap_usd": 0, + "name": "KMCC", + "network": "eth", + "shortcut": "KC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:KIN": { "address": "0x818Fc6C2Ec5986bc6E2CBf00939d90556aB12ce5", "links": { @@ -12927,7 +13110,7 @@ "links": { "Homepage": "https://kindads.io" }, - "marketcap_usd": 20831, + "marketcap_usd": 10512, "name": "Kind Ads Token", "network": "eth", "shortcut": "KIND", @@ -12985,7 +13168,7 @@ "links": { "Homepage": "https://kanadecoin.com" }, - "marketcap_usd": 1403880, + "marketcap_usd": 86167, "name": "KanadeCoin", "network": "eth", "shortcut": "KNDC", @@ -13063,7 +13246,7 @@ "Github": "https://github.com/Cryptense/", "Homepage": "https://kryll.io/" }, - "marketcap_usd": 37600227, + "marketcap_usd": 17909542, "name": "Kryll", "network": "eth", "shortcut": "KRL", @@ -13141,7 +13324,7 @@ "links": { "Homepage": "https://ico.kuende.com" }, - "marketcap_usd": 134981, + "marketcap_usd": 0, "name": "Kuende Token", "network": "eth", "shortcut": "KUE", @@ -13160,7 +13343,7 @@ "links": { "Homepage": "https://4new.io" }, - "marketcap_usd": 98874, + "marketcap_usd": 17683, "name": "4NEW", "network": "eth", "shortcut": "KWATT", @@ -13218,7 +13401,7 @@ "Github": "https://github.com/latoken", "Homepage": "https://latoken.com/" }, - "marketcap_usd": 42127219, + "marketcap_usd": 29111840, "name": "LATOKEN", "network": "eth", "shortcut": "LA", @@ -13295,7 +13478,7 @@ "links": { "Homepage": "https://www.mycred.io" }, - "marketcap_usd": 3076402, + "marketcap_usd": 1205294, "name": "Cred", "network": "eth", "shortcut": "LBA", @@ -13314,7 +13497,7 @@ "links": { "Homepage": "https://www.localcoinswap.com" }, - "marketcap_usd": 914519, + "marketcap_usd": 547040, "name": "LocalCoinSwap", "network": "eth", "shortcut": "LCS", @@ -13605,7 +13788,7 @@ "links": { "Homepage": "https://link.smartcontract.com" }, - "marketcap_usd": 8099857995, + "marketcap_usd": 3331287196, "name": "Chainlink", "network": "eth", "shortcut": "LINK (Chainlink)", @@ -13663,7 +13846,7 @@ "Github": "https://github.com/GNYIO", "Homepage": "https://www.gny.io/lisk" }, - "marketcap_usd": 846477, + "marketcap_usd": 264497, "name": "Lisk Machine Learning", "network": "eth", "shortcut": "LML", @@ -13683,7 +13866,7 @@ "Github": "https://github.com/LunchMoneyToken", "Homepage": "https://www.lunchmoney.io/" }, - "marketcap_usd": 346714, + "marketcap_usd": 160017, "name": "Lunch Money", "network": "eth", "shortcut": "LMY", @@ -13703,7 +13886,7 @@ "Github": "https://github.com/lendingblock", "Homepage": "https://lendingblock.com" }, - "marketcap_usd": 2032163, + "marketcap_usd": 911743, "name": "Lendingblock", "network": "eth", "shortcut": "LND", @@ -13761,7 +13944,7 @@ "links": { "Homepage": "https://www.locuschain.com" }, - "marketcap_usd": 62574841, + "marketcap_usd": 71077061, "name": "Locus Chain", "network": "eth", "shortcut": "LOCUS", @@ -13813,13 +13996,32 @@ } ] }, + "erc20:eth:LOOKS": { + "address": "0xf4d2888d29D722226FafA5d9B24F9164c092421E", + "links": { + "Homepage": "https://looksrare.org/" + }, + "marketcap_usd": 162286426, + "name": "LooksRare", + "network": "eth", + "shortcut": "LOOKS", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:LOOM": { "address": "0x42476F744292107e34519F9c357927074Ea3F75D", "links": { "Github": "github.com/loomnetwork/", "Homepage": "https://loomx.io" }, - "marketcap_usd": 100222757, + "marketcap_usd": 62877977, "name": "LOOM", "network": "eth", "shortcut": "LOOM", @@ -13839,7 +14041,7 @@ "Github": "https://github.com/livepeer", "Homepage": "https://livepeer.org/" }, - "marketcap_usd": 639484672, + "marketcap_usd": 267115919, "name": "Livepeer Token", "network": "eth", "shortcut": "LPT", @@ -13878,7 +14080,7 @@ "Github": "https://github.com/loopring", "Homepage": "https://loopring.org" }, - "marketcap_usd": 1693460841, + "marketcap_usd": 529224386, "name": "Loopring", "network": "eth", "shortcut": "LRC", @@ -13976,7 +14178,7 @@ "Github": "https://github.com/lunyr", "Homepage": "https://lunyr.com" }, - "marketcap_usd": 127603, + "marketcap_usd": 51764, "name": "Lunyr", "network": "eth", "shortcut": "LUN", @@ -14068,6 +14270,26 @@ } ] }, + "erc20:eth:MAGIC": { + "address": "0xB0c7a3Ba49C7a6EaBa6cD4a96C55a1391070Ac9A", + "links": { + "Github": "https://github.com/TreasureProject", + "Homepage": "https://treasure.lol/" + }, + "marketcap_usd": 0, + "name": "MAGIC", + "network": "eth", + "shortcut": "MAGIC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:MAN": { "address": "0xe25bCec5D3801cE3a794079BF94adF1B8cCD802D", "links": { @@ -14094,7 +14316,7 @@ "Github": "https://github.com/decentraland", "Homepage": "https://decentraland.org" }, - "marketcap_usd": 5096245749, + "marketcap_usd": 1751483367, "name": "Decentraland MANA", "network": "eth", "shortcut": "MANA", @@ -14132,7 +14354,7 @@ "links": { "Homepage": "https://midasprotocol.io/" }, - "marketcap_usd": 132760, + "marketcap_usd": 68061, "name": "MIDAS PROTOCOL", "network": "eth", "shortcut": "MAS", @@ -14151,7 +14373,7 @@ "links": { "Homepage": "https://polygon.technology/" }, - "marketcap_usd": 13214060845, + "marketcap_usd": 6871256644, "name": "Matic Token", "network": "eth", "shortcut": "MATIC", @@ -14248,7 +14470,7 @@ "links": { "Homepage": "https://moedaseeds.com" }, - "marketcap_usd": 8679216, + "marketcap_usd": 3103244, "name": "Moeda Loyalty Points", "network": "eth", "shortcut": "MDA", @@ -14267,7 +14489,7 @@ "links": { "Homepage": "https://www.mdt.co" }, - "marketcap_usd": 40175567, + "marketcap_usd": 23270367, "name": "Measurable Data Token", "network": "eth", "shortcut": "MDT", @@ -14343,7 +14565,7 @@ "links": { "Homepage": "https://dontbuymeme.com" }, - "marketcap_usd": 9462776, + "marketcap_usd": 18, "name": "Meme", "network": "eth", "shortcut": "MEME", @@ -14402,7 +14624,7 @@ "links": { "Homepage": "https://www.metronome.io" }, - "marketcap_usd": 37337103, + "marketcap_usd": 14603708, "name": "Metronome", "network": "eth", "shortcut": "MET", @@ -14441,7 +14663,7 @@ "Github": "https://github.com/syncfab", "Homepage": "https://syncfab.com/" }, - "marketcap_usd": 11112282, + "marketcap_usd": 2597882, "name": "SyncFab Smart Manufacturing Blockchain", "network": "eth", "shortcut": "MFG", @@ -14461,7 +14683,7 @@ "Github": "https://github.com/MainframeHQ", "Homepage": "https://mainframe.com" }, - "marketcap_usd": 95539645, + "marketcap_usd": 45471512, "name": "Mainframe Token", "network": "eth", "shortcut": "MFT", @@ -14499,7 +14721,7 @@ "links": { "Homepage": "https://mobilego.io" }, - "marketcap_usd": 892801, + "marketcap_usd": 0, "name": "MobileGo", "network": "eth", "shortcut": "MGO", @@ -14595,7 +14817,7 @@ "links": { "Homepage": "https://token.morpheuslabs.io" }, - "marketcap_usd": 10583769, + "marketcap_usd": 3583191, "name": "Morpheus Infrastructure Token", "network": "eth", "shortcut": "MITX", @@ -14609,6 +14831,26 @@ } ] }, + "erc20:eth:MKR": { + "address": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", + "links": { + "Github": "https://github.com/makerdao", + "Homepage": "https://makerdao.com" + }, + "marketcap_usd": 1000598238, + "name": "MakerDAO", + "network": "eth", + "shortcut": "MKR", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:MKT": { "address": "0x7939882b54fcf0bCAe6b53dEc39Ad6e806176442", "links": { @@ -14629,6 +14871,25 @@ } ] }, + "erc20:eth:MLN (new)": { + "address": "0xec67005c4E498Ec7f55E092bd1d35cbC47C91892", + "links": { + "Homepage": "https://melonport.com" + }, + "marketcap_usd": 55177593, + "name": "Melonport", + "network": "eth", + "shortcut": "MLN (new)", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:MM": { "address": "0x6B4c7A5e3f0B99FCD83e9c089BDDD6c7FCe5c611", "links": { @@ -14712,7 +14973,7 @@ "Github": "https://github.com/Goldmint", "Homepage": "https://goldmint.io" }, - "marketcap_usd": 469338, + "marketcap_usd": 244522, "name": "Goldmint MNT Prelaunch Token", "network": "eth", "shortcut": "MNTP", @@ -14905,7 +15166,7 @@ "Github": "https://github.com/mstable", "Homepage": "http://mstable.org" }, - "marketcap_usd": 7750748, + "marketcap_usd": 7745724, "name": "mStable Meta", "network": "eth", "shortcut": "MTA", @@ -14924,7 +15185,7 @@ "links": { "Homepage": "http://www.monetha.io" }, - "marketcap_usd": 3562686, + "marketcap_usd": 2913406, "name": "Monetha", "network": "eth", "shortcut": "MTH", @@ -14943,7 +15204,7 @@ "links": { "Homepage": "https://www.metalpay.com" }, - "marketcap_usd": 132978179, + "marketcap_usd": 89716429, "name": "Metal", "network": "eth", "shortcut": "MTL", @@ -14962,7 +15223,7 @@ "links": { "Homepage": "https://medicalchain.com" }, - "marketcap_usd": 2053867, + "marketcap_usd": 676611, "name": "MedToken", "network": "eth", "shortcut": "MTN", @@ -15019,7 +15280,7 @@ "links": { "Homepage": "https://www.matryx.ai" }, - "marketcap_usd": 104299, + "marketcap_usd": 104534, "name": "Matryx", "network": "eth", "shortcut": "MTX", @@ -15096,7 +15357,7 @@ "links": { "Homepage": "http://mvlchain.io" }, - "marketcap_usd": 244393776, + "marketcap_usd": 113988507, "name": "Mass Vehicle Ledger Token", "network": "eth", "shortcut": "MVL", @@ -15116,7 +15377,7 @@ "Github": "https://github.com/Merculet", "Homepage": "https://www.merculet.io" }, - "marketcap_usd": 1367938, + "marketcap_usd": 277985, "name": "Merculet", "network": "eth", "shortcut": "MVP", @@ -15154,7 +15415,7 @@ "links": { "Homepage": "https://mysterium.network/" }, - "marketcap_usd": 7138959, + "marketcap_usd": 7454003, "name": "Mysterium", "network": "eth", "shortcut": "MYST", @@ -15193,7 +15454,7 @@ "Github": "https://github.com/NANJ-COIN", "Homepage": "https://nanjcoin.com/" }, - "marketcap_usd": 4968286, + "marketcap_usd": 304943, "name": "NANJCOIN", "network": "eth", "shortcut": "NANJ", @@ -15290,7 +15551,7 @@ "links": { "Homepage": "https://niobiumcoin.io" }, - "marketcap_usd": 258384, + "marketcap_usd": 125735, "name": "Niobium Coin", "network": "eth", "shortcut": "NBC", @@ -15309,7 +15570,7 @@ "links": { "Homepage": "https://nucleus.vision" }, - "marketcap_usd": 3880536, + "marketcap_usd": 0, "name": "Nucleus Vision", "network": "eth", "shortcut": "NCASH", @@ -15349,7 +15610,7 @@ "Github": "https://github.com/polyswarm", "Homepage": "https://polyswarm.io" }, - "marketcap_usd": 65697461, + "marketcap_usd": 27218993, "name": "Nectar", "network": "eth", "shortcut": "NCT", @@ -15485,7 +15746,7 @@ "links": { "Homepage": "http://nexo.io" }, - "marketcap_usd": 1391545393, + "marketcap_usd": 389141824, "name": "Nexo", "network": "eth", "shortcut": "NEXO", @@ -15499,6 +15760,25 @@ } ] }, + "erc20:eth:NFTL": { + "address": "0x3c8D2FCE49906e11e71cB16Fa0fFeB2B16C29638", + "links": { + "Homepage": "https://niftyleague.com/" + }, + "marketcap_usd": 0, + "name": "Nifty League", + "network": "eth", + "shortcut": "NFTL", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:NGC": { "address": "0x72dD4b6bd852A3AA172Be4d6C5a6dbEc588cf131", "links": { @@ -15544,7 +15824,7 @@ "Github": "https://github.com/nknorg", "Homepage": "https://nkn.org" }, - "marketcap_usd": 188931285, + "marketcap_usd": 71928965, "name": "NKN", "network": "eth", "shortcut": "NKN", @@ -15584,7 +15864,7 @@ "Github": "https://github.com/numerai", "Homepage": "https://numer.ai" }, - "marketcap_usd": 185495978, + "marketcap_usd": 137072291, "name": "Numerai", "network": "eth", "shortcut": "NMR", @@ -15682,7 +15962,7 @@ "links": { "Homepage": "https://napoleonx.ai" }, - "marketcap_usd": 4561338, + "marketcap_usd": 0, "name": "NaPoleonX", "network": "eth", "shortcut": "NPX", @@ -15702,7 +15982,7 @@ "Github": "https://github.com/pundix", "Homepage": "https://pundix.com" }, - "marketcap_usd": 243108467, + "marketcap_usd": 169403527, "name": "Pundi X Token", "network": "eth", "shortcut": "NPXS", @@ -15761,7 +16041,7 @@ "Github": "https://github.com/nucypher", "Homepage": "https://nucypher.com" }, - "marketcap_usd": 328672132, + "marketcap_usd": 134773752, "name": "NuCypher Network", "network": "eth", "shortcut": "NU", @@ -15934,7 +16214,7 @@ "links": { "Homepage": "https://www.openanx.org/en" }, - "marketcap_usd": 9558667, + "marketcap_usd": 4148821, "name": "OAX", "network": "eth", "shortcut": "OAX", @@ -15994,7 +16274,7 @@ "Github": "https://github.com/oceanprotocol", "Homepage": "https://oceanprotocol.com" }, - "marketcap_usd": 395147271, + "marketcap_usd": 113980902, "name": "Ocean Token", "network": "eth", "shortcut": "OCEAN", @@ -16013,7 +16293,7 @@ "links": { "Homepage": "http://www.ocnex.net" }, - "marketcap_usd": 2008999, + "marketcap_usd": 693366, "name": "Odyssey", "network": "eth", "shortcut": "OCN", @@ -16033,7 +16313,7 @@ "Github": "https://github.com/octofi", "Homepage": "https://octo.fi" }, - "marketcap_usd": 3189495, + "marketcap_usd": 1415542, "name": "OctoFi", "network": "eth", "shortcut": "OCTO", @@ -16093,7 +16373,7 @@ "Github": "https://github.com/originprotocol", "Homepage": "https://www.originprotocol.com" }, - "marketcap_usd": 235815344, + "marketcap_usd": 81273723, "name": "OriginToken", "network": "eth", "shortcut": "OGN", @@ -16153,7 +16433,7 @@ "Github": "https://github.com/okex/okberc20token", "Homepage": "https://www.okex.com/" }, - "marketcap_usd": 1326672049, + "marketcap_usd": 1048340141, "name": "OKB", "network": "eth", "shortcut": "OKB", @@ -16232,7 +16512,7 @@ "Github": "https://github.com/omisego", "Homepage": "https://omg.omise.co" }, - "marketcap_usd": 804123169, + "marketcap_usd": 295651643, "name": "OmiseGO", "network": "eth", "shortcut": "OMG", @@ -16310,7 +16590,7 @@ "Github": "https://github.com/onGsocial", "Homepage": "https://somee.social" }, - "marketcap_usd": 1414313, + "marketcap_usd": 336410, "name": "SoMee.Social", "network": "eth", "shortcut": "ONG", @@ -16387,7 +16667,7 @@ "links": { "Homepage": "https://opus-foundation.org" }, - "marketcap_usd": 54988, + "marketcap_usd": 15937, "name": "Opus Foundation", "network": "eth", "shortcut": "OPT", @@ -16445,7 +16725,7 @@ "Github": "https://github.com/orbs-network", "Homepage": "https://orbs.com" }, - "marketcap_usd": 255924523, + "marketcap_usd": 127021639, "name": "Orbs", "network": "eth", "shortcut": "ORBS", @@ -16523,7 +16803,7 @@ "links": { "Homepage": "https://www.originsport.io" }, - "marketcap_usd": 1399715, + "marketcap_usd": 1440340, "name": "Origin Sport", "network": "eth", "shortcut": "ORS", @@ -16582,7 +16862,7 @@ "Github": "https://github.com/OpenSTFoundation", "Homepage": "https://simpletoken.org" }, - "marketcap_usd": 1257589, + "marketcap_usd": 398079, "name": "Simple Token 'OST'", "network": "eth", "shortcut": "OST", @@ -16641,7 +16921,7 @@ "Github": "https://github.com/originprotocol", "Homepage": "https://ousd.com" }, - "marketcap_usd": 141726972, + "marketcap_usd": 49547527, "name": "Origin Dollar", "network": "eth", "shortcut": "OUSD", @@ -16661,7 +16941,7 @@ "Github": "https://github.com/owndata", "Homepage": "https://owndata.network" }, - "marketcap_usd": 291943, + "marketcap_usd": 73902, "name": "OWNDATA", "network": "eth", "shortcut": "OWN", @@ -16701,7 +16981,7 @@ "Github": "https://github.com/orchidtechnologies/orchid", "Homepage": "https://www.orchid.com" }, - "marketcap_usd": 195981661, + "marketcap_usd": 80362252, "name": "Orchid", "network": "eth", "shortcut": "OXT", @@ -16819,7 +17099,7 @@ "links": { "Homepage": "https://patron-influencers.com" }, - "marketcap_usd": 2503059, + "marketcap_usd": 1211806, "name": "Patron", "network": "eth", "shortcut": "PAT", @@ -16898,7 +17178,7 @@ "Github": "https://github.com/paxosglobal", "Homepage": "https://www.paxos.com/standard" }, - "marketcap_usd": 946539127, + "marketcap_usd": 945057992, "name": "Paxos Standard (PAX)", "network": "eth", "shortcut": "PAX", @@ -16918,7 +17198,7 @@ "Github": "https://github.com/paxosglobal/paxos-gold-contract", "Homepage": "https://www.paxos.com/paxgold" }, - "marketcap_usd": 606745775, + "marketcap_usd": 601750745, "name": "Paxos Gold", "network": "eth", "shortcut": "PAXG", @@ -16937,7 +17217,7 @@ "links": { "Homepage": "http://www.tenx.tech" }, - "marketcap_usd": 8944099, + "marketcap_usd": 3663052, "name": "TenX", "network": "eth", "shortcut": "PAY", @@ -16995,7 +17275,7 @@ "Github": "https://github.com/Peculium-Dev/", "Homepage": "https://peculium.io" }, - "marketcap_usd": 68585099, + "marketcap_usd": 0, "name": "Peculium", "network": "eth", "shortcut": "PCL", @@ -17190,7 +17470,7 @@ "links": { "Homepage": "https://www.phitoken.io" }, - "marketcap_usd": 644023, + "marketcap_usd": 416865, "name": "PHI Token", "network": "eth", "shortcut": "PHI", @@ -17209,7 +17489,7 @@ "links": { "Homepage": "https://pickle.finance/" }, - "marketcap_usd": 8900970, + "marketcap_usd": 2454553, "name": "Pickle Finance", "network": "eth", "shortcut": "PICKLE", @@ -17228,7 +17508,7 @@ "links": { "Homepage": "https://piplcoin.com" }, - "marketcap_usd": 165193, + "marketcap_usd": 39260, "name": "PIPL Coin", "network": "eth", "shortcut": "PIPL", @@ -17304,7 +17584,7 @@ "links": { "Homepage": "http://pkgtoken.io" }, - "marketcap_usd": 129895, + "marketcap_usd": 49441, "name": "PKG Token", "network": "eth", "shortcut": "PKG", @@ -17323,7 +17603,7 @@ "links": { "Homepage": "https://playkey.io" }, - "marketcap_usd": 203016, + "marketcap_usd": 78992, "name": "Playkey", "network": "eth", "shortcut": "PKT", @@ -17381,7 +17661,7 @@ "Github": "https://github.com/twentythirty/PillarToken", "Homepage": "https://www.pillarproject.io" }, - "marketcap_usd": 3951260, + "marketcap_usd": 1381819, "name": "Pillar Project", "network": "eth", "shortcut": "PLR", @@ -17420,7 +17700,7 @@ "links": { "Homepage": "https://plutus.it" }, - "marketcap_usd": 17016123, + "marketcap_usd": 13783375, "name": "Pluton", "network": "eth", "shortcut": "PLU", @@ -17439,7 +17719,7 @@ "links": { "Homepage": "https://pumapay.io" }, - "marketcap_usd": 1787063, + "marketcap_usd": 909804, "name": "PumaPay", "network": "eth", "shortcut": "PMA", @@ -17478,7 +17758,7 @@ "Github": "https://github.com/kleros", "Homepage": "https://kleros.io" }, - "marketcap_usd": 62954096, + "marketcap_usd": 20322698, "name": "Pinakion", "network": "eth", "shortcut": "PNK", @@ -17497,7 +17777,7 @@ "links": { "Homepage": "https://po.et" }, - "marketcap_usd": 180473, + "marketcap_usd": 78635, "name": "Po.et Tokens", "network": "eth", "shortcut": "POE", @@ -17554,7 +17834,7 @@ "links": { "Homepage": "https://polymath.network" }, - "marketcap_usd": 458983692, + "marketcap_usd": 200761358, "name": "Polymath Network", "network": "eth", "shortcut": "POLY", @@ -17632,7 +17912,7 @@ "links": { "Homepage": "https://powerledger.io" }, - "marketcap_usd": 288897148, + "marketcap_usd": 119016732, "name": "PowerLedger", "network": "eth", "shortcut": "POWR", @@ -17651,7 +17931,7 @@ "links": { "Homepage": "https://www.paypie.com" }, - "marketcap_usd": 1974724, + "marketcap_usd": 563182, "name": "PayPie", "network": "eth", "shortcut": "PPP", @@ -17671,7 +17951,7 @@ "Github": "https://github.com/Bitpopulous", "Homepage": "https://populous.co" }, - "marketcap_usd": 20363678, + "marketcap_usd": 6142426, "name": "Populous", "network": "eth", "shortcut": "PPT", @@ -17729,7 +18009,7 @@ "links": { "Homepage": "https://privatix.io" }, - "marketcap_usd": 115837, + "marketcap_usd": 44944, "name": "Privatix", "network": "eth", "shortcut": "PRIX", @@ -17788,7 +18068,7 @@ "Github": "https://github.com/propsproject", "Homepage": "https://propsproject.com" }, - "marketcap_usd": 2190442, + "marketcap_usd": 699809, "name": "Props", "network": "eth", "shortcut": "PROPS", @@ -17885,7 +18165,7 @@ "links": { "Homepage": "https://primas.io" }, - "marketcap_usd": 1160692, + "marketcap_usd": 524000, "name": "Primas", "network": "eth", "shortcut": "PST", @@ -17944,7 +18224,7 @@ "links": { "Homepage": "https://patientory.com" }, - "marketcap_usd": 470691, + "marketcap_usd": 0, "name": "Patientory", "network": "eth", "shortcut": "PTOY", @@ -18063,7 +18343,7 @@ "Github": "https://github.com/playgame-global", "Homepage": "https://its.playgame.com" }, - "marketcap_usd": 617150, + "marketcap_usd": 287032, "name": "PlayGame", "network": "eth", "shortcut": "PXG", @@ -18140,7 +18420,7 @@ "links": { "Homepage": "https://liquid.plus" }, - "marketcap_usd": 26689401, + "marketcap_usd": 15562824, "name": "QASH", "network": "eth", "shortcut": "QASH", @@ -18193,12 +18473,32 @@ } ] }, + "erc20:eth:QDT": { + "address": "0x9Adc7710E9d1b29d8a78c04d52D32532297C2Ef3", + "links": { + "Github": "https://github.com/quadrans", + "Homepage": "https://quadrans.io" + }, + "marketcap_usd": 0, + "name": "Quadrans Token", + "network": "eth", + "shortcut": "QDT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:QKC": { "address": "0xEA26c4aC16D4a5A106820BC8AEE85fd0b7b2b664", "links": { "Homepage": "https://quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "network": "eth", "shortcut": "QKC", @@ -18218,7 +18518,7 @@ "Github": "https://github.com/quantnetwork", "Homepage": "https://www.quant.network/" }, - "marketcap_usd": 1791590480, + "marketcap_usd": 1201311181, "name": "Quant", "network": "eth", "shortcut": "QNT", @@ -18277,7 +18577,7 @@ "Github": "https://github.com/quantstamp", "Homepage": "https://quantstamp.com/" }, - "marketcap_usd": 50445800, + "marketcap_usd": 18133673, "name": "Quantstamp Token", "network": "eth", "shortcut": "QSP", @@ -18375,7 +18675,7 @@ "Github": "https://github.com/rokfin/eth-contracts", "Homepage": "https://www.raetoken.org" }, - "marketcap_usd": 9218068, + "marketcap_usd": 6611706, "name": "RAE Token", "network": "eth", "shortcut": "RAE", @@ -18395,7 +18695,7 @@ "Github": "https://github.com/reflexer-labs/", "Homepage": "https://reflexer.finance/" }, - "marketcap_usd": 66860938, + "marketcap_usd": 13631806, "name": "Rai Reflex Index", "network": "eth", "shortcut": "RAI", @@ -18434,7 +18734,7 @@ "links": { "Homepage": "http://token.dprating.com" }, - "marketcap_usd": 396386, + "marketcap_usd": 327240, "name": "DPRating", "network": "eth", "shortcut": "RATING", @@ -18454,7 +18754,7 @@ "Github": "https://github.com/rublixdev", "Homepage": "https://rublix.io/" }, - "marketcap_usd": 1007242, + "marketcap_usd": 574907, "name": "Rublix", "network": "eth", "shortcut": "RBLX", @@ -18493,7 +18793,7 @@ "Github": "https://github.com/ripio/rcn-token", "Homepage": "https://ripiocredit.network" }, - "marketcap_usd": 4634281, + "marketcap_usd": 1956711, "name": "Ripio Credit Network", "network": "eth", "shortcut": "RCN", @@ -18507,6 +18807,26 @@ } ] }, + "erc20:eth:RDN": { + "address": "0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6", + "links": { + "Github": "https://github.com/raiden-network/raiden/", + "Homepage": "https://raiden.network" + }, + "marketcap_usd": 4407004, + "name": "Raiden Network", + "network": "eth", + "shortcut": "RDN", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:RDV": { "address": "0xd967d9F941CD316Ab238d3EE761F80b7cAec7819", "links": { @@ -18590,7 +18910,7 @@ "Github": "https://github.com/red", "Homepage": "https://ico.red-lang.org" }, - "marketcap_usd": 614338, + "marketcap_usd": 267445, "name": "Red Community Token", "network": "eth", "shortcut": "RED", @@ -18630,7 +18950,7 @@ "Github": "http://github.com/reef-defi", "Homepage": "http://reef.finance" }, - "marketcap_usd": 210968242, + "marketcap_usd": 79192470, "name": "Reef Finance", "network": "eth", "shortcut": "REEF", @@ -18668,7 +18988,7 @@ "links": { "Homepage": "https://remme.io" }, - "marketcap_usd": 447620, + "marketcap_usd": 257764, "name": "Remme", "network": "eth", "shortcut": "REM", @@ -18708,7 +19028,7 @@ "Github": "https://github.com/renproject", "Homepage": "https://renproject.io/" }, - "marketcap_usd": 460980088, + "marketcap_usd": 134908215, "name": "Republic Token", "network": "eth", "shortcut": "REN", @@ -18722,6 +19042,25 @@ } ] }, + "erc20:eth:REP": { + "address": "0x1985365e9f78359a9B6AD760e32412f4a445E862", + "links": { + "Homepage": "https://augur.net" + }, + "marketcap_usd": 92697544, + "name": "Augur", + "network": "eth", + "shortcut": "REP", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:REPv2": { "address": "0x221657776846890989a759BA2973e427DfF5C9bB", "links": { @@ -18746,7 +19085,7 @@ "links": { "Homepage": "https://request.network" }, - "marketcap_usd": 266594085, + "marketcap_usd": 129387761, "name": "Request Network", "network": "eth", "shortcut": "REQ", @@ -18766,7 +19105,7 @@ "Github": "https://github.com/Revain", "Homepage": "https://revain.org" }, - "marketcap_usd": 493760966, + "marketcap_usd": 95183974, "name": "Revain", "network": "eth", "shortcut": "REV", @@ -18805,7 +19144,7 @@ "links": { "Homepage": "https://refereum.com" }, - "marketcap_usd": 63223097, + "marketcap_usd": 32611515, "name": "Refereum", "network": "eth", "shortcut": "RFR", @@ -18819,26 +19158,6 @@ } ] }, - "erc20:eth:RFX": { - "address": "0xf4c571fb6DD704E58561Cdd275fa4B80cFe82f76", - "links": { - "Github": "https://github.com/ROTHFX", - "Homepage": "https://roth-fx.com" - }, - "marketcap_usd": 0, - "name": "ROTH", - "network": "eth", - "shortcut": "RFX", - "t1_enabled": "yes", - "t2_enabled": "yes", - "type": "erc20", - "wallet": [ - { - "name": "Trezor Suite", - "url": "https://suite.trezor.io" - } - ] - }, "erc20:eth:RHOC": { "address": "0x168296bb09e24A88805CB9c33356536B980D3fC5", "links": { @@ -18897,6 +19216,25 @@ } ] }, + "erc20:eth:RLC": { + "address": "0x607F4C5BB672230e8672085532f7e901544a7375", + "links": { + "Homepage": "http://iex.ec/" + }, + "marketcap_usd": 79004770, + "name": "IEx.ec", + "network": "eth", + "shortcut": "RLC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:RLT": { "address": "0xcCeD5B8288086BE8c38E23567e684C3740be4D48", "links": { @@ -18999,7 +19337,7 @@ "links": { "Homepage": "https://www.oneroot.io/en" }, - "marketcap_usd": 698568, + "marketcap_usd": 446953, "name": "OneRoot Network", "network": "eth", "shortcut": "RNT", @@ -19057,7 +19395,7 @@ "links": { "Homepage": "https://icerockmining.io" }, - "marketcap_usd": 33616, + "marketcap_usd": 47796, "name": "ICE ROCK MINING", "network": "eth", "shortcut": "ROCK2", @@ -19114,7 +19452,7 @@ "links": { "Homepage": "https://roobee.io/" }, - "marketcap_usd": 9053524, + "marketcap_usd": 3165816, "name": "ROOBEE", "network": "eth", "shortcut": "ROOBEE", @@ -19173,7 +19511,7 @@ "Github": "https://github.com/reserve-protocol/rsr-mainnet", "Homepage": "https://reserve.org" }, - "marketcap_usd": 260058132, + "marketcap_usd": 120649413, "name": "Reserve Rights", "network": "eth", "shortcut": "RSR", @@ -19231,7 +19569,7 @@ "links": { "Homepage": "https://www.rotharium.io" }, - "marketcap_usd": 4143524, + "marketcap_usd": 2328072, "name": "Rotharium", "network": "eth", "shortcut": "RTH", @@ -19270,7 +19608,7 @@ "links": { "Homepage": "http://ruffchain.com" }, - "marketcap_usd": 2409512, + "marketcap_usd": 1188164, "name": "Ruff", "network": "eth", "shortcut": "RUFF", @@ -19328,7 +19666,7 @@ "links": { "Homepage": "https://rivetzintl.com" }, - "marketcap_usd": 188377, + "marketcap_usd": 17680, "name": "Rivetz", "network": "eth", "shortcut": "RVT", @@ -19444,7 +19782,7 @@ "links": { "Homepage": "https://saltlending.com" }, - "marketcap_usd": 6421765, + "marketcap_usd": 2984416, "name": "Salt Lending Token", "network": "eth", "shortcut": "SALT", @@ -19463,7 +19801,7 @@ "links": { "Homepage": "https://santiment.net" }, - "marketcap_usd": 15706905, + "marketcap_usd": 9687158, "name": "Santiment", "network": "eth", "shortcut": "SAN", @@ -19501,7 +19839,7 @@ "links": { "Homepage": "https://ico.nexus.social" }, - "marketcap_usd": 53369, + "marketcap_usd": 37652, "name": "SocialCoin", "network": "eth", "shortcut": "SCL", @@ -19578,7 +19916,7 @@ "links": { "Homepage": "https://www.sentinel-chain.org" }, - "marketcap_usd": 141076, + "marketcap_usd": 94004, "name": "Sentinel Chain", "network": "eth", "shortcut": "SENC", @@ -19790,7 +20128,7 @@ "links": { "Homepage": "https://shibatoken.com" }, - "marketcap_usd": 15351337749, + "marketcap_usd": 6407433195, "name": "SHIBA INU", "network": "eth", "shortcut": "SHIB", @@ -19809,7 +20147,7 @@ "links": { "Homepage": "https://www.shipchain.io" }, - "marketcap_usd": 1130487, + "marketcap_usd": 197116, "name": "ShipChain", "network": "eth", "shortcut": "SHIP", @@ -19964,7 +20302,7 @@ "links": { "Homepage": "https://www.skb-coin.jp/en" }, - "marketcap_usd": 52453, + "marketcap_usd": 334555, "name": "Sakura Bloom", "network": "eth", "shortcut": "SKB", @@ -20003,7 +20341,7 @@ "Github": "https://github.com/Steamtradenet/smart-contract", "Homepage": "https://skincoin.org" }, - "marketcap_usd": 158116, + "marketcap_usd": 55554, "name": "SKIN", "network": "eth", "shortcut": "SKIN", @@ -20099,7 +20437,7 @@ "links": { "Homepage": "https://youengine.io" }, - "marketcap_usd": 118155598, + "marketcap_usd": 181167294, "name": "Smooth Love Potion", "network": "eth", "shortcut": "SLP", @@ -20176,7 +20514,7 @@ "links": { "Homepage": "https://suncontract.org" }, - "marketcap_usd": 3455530, + "marketcap_usd": 2806206, "name": "SunContract", "network": "eth", "shortcut": "SNC", @@ -20312,7 +20650,7 @@ "Github": "https://github.com/status-im", "Homepage": "https://status.im" }, - "marketcap_usd": 263276393, + "marketcap_usd": 109393410, "name": "Status Network Token", "network": "eth", "shortcut": "SNT", @@ -20351,7 +20689,7 @@ "Github": "https://github.com/havven/havven", "Homepage": "https://synthetix.io" }, - "marketcap_usd": 672289697, + "marketcap_usd": 391548448, "name": "Synthetix Network Token", "network": "eth", "shortcut": "SNX", @@ -20389,7 +20727,7 @@ "links": { "Homepage": "https://www.allsportschain.com" }, - "marketcap_usd": 3643795, + "marketcap_usd": 11488514, "name": "All Sports", "network": "eth", "shortcut": "SOC", @@ -20447,7 +20785,7 @@ "Github": "https://github.com/cryptosoulgame", "Homepage": "https://cryptosoul.io/" }, - "marketcap_usd": 438773, + "marketcap_usd": 453252, "name": "CryptoSoul", "network": "eth", "shortcut": "SOUL", @@ -20583,7 +20921,7 @@ "links": { "Homepage": "https://spindle.zone" }, - "marketcap_usd": 497859, + "marketcap_usd": 115224, "name": "SPINDLE", "network": "eth", "shortcut": "SPD", @@ -20680,7 +21018,7 @@ "Github": "https://github.com/sirin-labs/crowdsale-smart-contract", "Homepage": "https://sirinlabs.com" }, - "marketcap_usd": 1680626, + "marketcap_usd": 1947090, "name": "Sirin Labs", "network": "eth", "shortcut": "SRN", @@ -20738,7 +21076,7 @@ "links": { "Homepage": "https://smartshare.vip/#" }, - "marketcap_usd": 278497, + "marketcap_usd": 120666, "name": "Smartshare", "network": "eth", "shortcut": "SSP", @@ -20776,7 +21114,7 @@ "links": { "Homepage": "https://coinstarter.com" }, - "marketcap_usd": 47504, + "marketcap_usd": 10171, "name": "Starter Coin", "network": "eth", "shortcut": "STAC", @@ -20814,7 +21152,7 @@ "links": { "Homepage": "http://starbase.co" }, - "marketcap_usd": 625730, + "marketcap_usd": 271189, "name": "Star Token", "network": "eth", "shortcut": "STAR", @@ -20970,7 +21308,7 @@ "Github": "https://github.com/Storj", "Homepage": "https://storj.io" }, - "marketcap_usd": 529652219, + "marketcap_usd": 244726302, "name": "STORJ", "network": "eth", "shortcut": "STORJ", @@ -21048,7 +21386,7 @@ "links": { "Homepage": "https://staker.network" }, - "marketcap_usd": 2438, + "marketcap_usd": 386, "name": "Staker", "network": "eth", "shortcut": "STR", @@ -21107,7 +21445,7 @@ "Github": "https://github.com/stx-technologies/stox-token", "Homepage": "https://www.stox.com" }, - "marketcap_usd": 452229, + "marketcap_usd": 144820, "name": "StoxToken", "network": "eth", "shortcut": "STX", @@ -21127,7 +21465,7 @@ "Github": "https://github.com/SubstratumNetwork", "Homepage": "https://substratum.net" }, - "marketcap_usd": 857059, + "marketcap_usd": 389669, "name": "Substratum", "network": "eth", "shortcut": "SUB", @@ -21166,7 +21504,7 @@ "Github": "https://github.com/sushiswap", "Homepage": "https://sushiswapclassic.org/" }, - "marketcap_usd": 535858382, + "marketcap_usd": 170487114, "name": "SushiToken", "network": "eth", "shortcut": "SUSHI", @@ -21225,7 +21563,7 @@ "Github": "https://github.com/swashapp/", "Homepage": "https://swashapp.io/" }, - "marketcap_usd": 7649197, + "marketcap_usd": 5119665, "name": "Swash Token", "network": "eth", "shortcut": "SWASH", @@ -21244,7 +21582,7 @@ "links": { "Homepage": "http://www.swftcoin.com" }, - "marketcap_usd": 10424842, + "marketcap_usd": 9310615, "name": "SwftCoin", "network": "eth", "shortcut": "SWFTC", @@ -21283,7 +21621,7 @@ "links": { "Homepage": "http://swarm.city" }, - "marketcap_usd": 298307, + "marketcap_usd": 606019, "name": "Swarm City Token", "network": "eth", "shortcut": "SWT", @@ -21341,7 +21679,7 @@ "links": { "Homepage": "http://www.spectre.ai" }, - "marketcap_usd": 1150795, + "marketcap_usd": 44653, "name": "Spectre.ai U-Token", "network": "eth", "shortcut": "SXUT", @@ -21456,7 +21794,7 @@ "links": { "Homepage": "https://taklimakan.io" }, - "marketcap_usd": 86817, + "marketcap_usd": 28961, "name": "Taklimakan Network", "network": "eth", "shortcut": "TAN", @@ -21614,7 +21952,7 @@ "links": { "Homepage": "https://tokenbox.io" }, - "marketcap_usd": 154105, + "marketcap_usd": 56762, "name": "Tokenbox", "network": "eth", "shortcut": "TBX", @@ -21673,7 +22011,7 @@ "links": { "Homepage": "https://www.thorecash.com" }, - "marketcap_usd": 13288, + "marketcap_usd": 8431, "name": "Thore Cash", "network": "eth", "shortcut": "TCH", @@ -21807,7 +22145,7 @@ "links": { "Homepage": "https://www.tokenomy.com" }, - "marketcap_usd": 9148623, + "marketcap_usd": 5605312, "name": "Tokenomy", "network": "eth", "shortcut": "TEN", @@ -21866,7 +22204,7 @@ "Github": "https://github.com/TrueFlip", "Homepage": "https://trueflip.io" }, - "marketcap_usd": 5396506, + "marketcap_usd": 1087281, "name": "TrueFlip", "network": "eth", "shortcut": "TFL", @@ -21885,7 +22223,7 @@ "links": { "Homepage": "https://ico.truegame.io" }, - "marketcap_usd": 82088, + "marketcap_usd": 21068, "name": "Truegame", "network": "eth", "shortcut": "TGAME", @@ -22040,7 +22378,7 @@ "links": { "Homepage": "https://chronobase.eu/" }, - "marketcap_usd": 341566, + "marketcap_usd": 218587, "name": "ChronoBase", "network": "eth", "shortcut": "TIK", @@ -22097,7 +22435,7 @@ "links": { "Homepage": "https://www.blocktix.io" }, - "marketcap_usd": 268083, + "marketcap_usd": 27305, "name": "Blocktix", "network": "eth", "shortcut": "TIX", @@ -22154,7 +22492,7 @@ "links": { "Homepage": "https://etherscan.io/token/TokenCard" }, - "marketcap_usd": 6796528, + "marketcap_usd": 2869975, "name": "TokenCard", "network": "eth", "shortcut": "TKN", @@ -22174,7 +22512,7 @@ "Github": "https://github.com/Tokpie/tokpie-contract", "Homepage": "https://tokpie.io/" }, - "marketcap_usd": 1699496, + "marketcap_usd": 3549737, "name": "TOKPIE", "network": "eth", "shortcut": "TKP", @@ -22271,7 +22609,7 @@ "links": { "Homepage": "https://transcodium.com" }, - "marketcap_usd": 152171, + "marketcap_usd": 34689, "name": "Transcodium", "network": "eth", "shortcut": "TNS", @@ -22349,7 +22687,7 @@ "links": { "Homepage": "https://origintrail.io" }, - "marketcap_usd": 270587047, + "marketcap_usd": 83149796, "name": "OriginTrail", "network": "eth", "shortcut": "TRAC", @@ -22445,7 +22783,7 @@ "Github": "https://github.com/WeTrustPlatform", "Homepage": "https://www.wetrust.io" }, - "marketcap_usd": 616019, + "marketcap_usd": 209480, "name": "WeTrust", "network": "eth", "shortcut": "TRST", @@ -22562,7 +22900,7 @@ "Github": "https://github.com/trusttoken", "Homepage": "https://www.trusttoken.com" }, - "marketcap_usd": 1350841107, + "marketcap_usd": 1190204542, "name": "TrueUSD", "network": "eth", "shortcut": "TUSD", @@ -22659,7 +22997,7 @@ "Github": "https://github.com/ubex-ai", "Homepage": "https://www.ubex.com/" }, - "marketcap_usd": 798055, + "marketcap_usd": 220144, "name": "UBEX Token", "network": "eth", "shortcut": "UBEX", @@ -22678,7 +23016,7 @@ "links": { "Homepage": "https://unibright.io" }, - "marketcap_usd": 219113013, + "marketcap_usd": 32860304, "name": "Unibright", "network": "eth", "shortcut": "UBT", @@ -22736,7 +23074,7 @@ "links": { "Homepage": "https://uchain.world" }, - "marketcap_usd": 13582, + "marketcap_usd": 13994, "name": "UChain", "network": "eth", "shortcut": "UCN", @@ -22755,7 +23093,7 @@ "links": { "Homepage": "https://www.upfiring.com" }, - "marketcap_usd": 1092016, + "marketcap_usd": 786408, "name": "Upfiring", "network": "eth", "shortcut": "UFR", @@ -22795,7 +23133,7 @@ "Github": "https://github.com/umbrella-network", "Homepage": "https://umb.network/" }, - "marketcap_usd": 9822192, + "marketcap_usd": 1159844, "name": "Umbrella", "network": "eth", "shortcut": "UMB", @@ -22814,7 +23152,7 @@ "links": { "Homepage": "https://uniswap.org/" }, - "marketcap_usd": 7974869944, + "marketcap_usd": 5872723054, "name": "Uniswap", "network": "eth", "shortcut": "UNI", @@ -22833,7 +23171,7 @@ "links": { "Homepage": "https://uptoken.org" }, - "marketcap_usd": 209693, + "marketcap_usd": 41681, "name": "UpToken", "network": "eth", "shortcut": "UP", @@ -22852,7 +23190,7 @@ "links": { "Homepage": "https://sentinelprotocol.io" }, - "marketcap_usd": 65723092, + "marketcap_usd": 34568530, "name": "Sentinel Protocol", "network": "eth", "shortcut": "UPP", @@ -22951,7 +23289,7 @@ "Github": "https://github.com/centrehq/centre-tokens", "Homepage": "https://www.centre.io" }, - "marketcap_usd": 51902050847, + "marketcap_usd": 54488264711, "name": "USD//Coin", "network": "eth", "shortcut": "USDC", @@ -22970,7 +23308,7 @@ "links": { "Homepage": "https://stably.io" }, - "marketcap_usd": 481233, + "marketcap_usd": 463142, "name": "StableUSD", "network": "eth", "shortcut": "USDS", @@ -22989,7 +23327,7 @@ "links": { "Homepage": "https://tether.to" }, - "marketcap_usd": 81569830177, + "marketcap_usd": 66323337069, "name": "USD Tether (erc20)", "network": "eth", "shortcut": "USDT", @@ -23029,7 +23367,7 @@ "Github": "https://github.com/utrustdev/", "Homepage": "https://utrust.com" }, - "marketcap_usd": 127724730, + "marketcap_usd": 64132578, "name": "Utrust", "network": "eth", "shortcut": "UTK", @@ -23087,7 +23425,7 @@ "links": { "Homepage": "https://u.network/" }, - "marketcap_usd": 640008, + "marketcap_usd": 412174, "name": "U Networks", "network": "eth", "shortcut": "UUU", @@ -23107,7 +23445,7 @@ "Github": "https://github.com/smartvalor/ValorToken", "Homepage": "https://smartvalor.com" }, - "marketcap_usd": 11256128, + "marketcap_usd": 6149044, "name": "ValorToken", "network": "eth", "shortcut": "VALOR", @@ -23147,7 +23485,7 @@ "Github": "https://github.com/VeriDocGlobal", "Homepage": "https://www.veridocglobal.com/" }, - "marketcap_usd": 3930760, + "marketcap_usd": 2247641, "name": "VeriDocGlobal", "network": "eth", "shortcut": "VDG", @@ -23187,7 +23525,7 @@ "Github": "https://github.com/blockv", "Homepage": "https://blockv.io" }, - "marketcap_usd": 15003926, + "marketcap_usd": 5900690, "name": "BLOCKv", "network": "eth", "shortcut": "VEE", @@ -23207,7 +23545,7 @@ "Github": "https://github.com/vegaprotocol", "Homepage": "https://vega.xyz" }, - "marketcap_usd": 70086808, + "marketcap_usd": 41779940, "name": "Vega", "network": "eth", "shortcut": "VEGA", @@ -23264,7 +23602,7 @@ "links": { "Homepage": "https://veritas.veritaseum.com" }, - "marketcap_usd": 151881716, + "marketcap_usd": 62598013, "name": "Veritaseum", "network": "eth", "shortcut": "VERI", @@ -23283,7 +23621,7 @@ "links": { "Homepage": "https://www.viberate.com" }, - "marketcap_usd": 6182475, + "marketcap_usd": 3016756, "name": "Viberate", "network": "eth", "shortcut": "VIB", @@ -23302,7 +23640,7 @@ "links": { "Homepage": "https://www.vibehub.io" }, - "marketcap_usd": 3813392, + "marketcap_usd": 1016546, "name": "VIBE Coin", "network": "eth", "shortcut": "VIBE", @@ -23342,7 +23680,7 @@ "Github": "https://github.com/videocoin", "Homepage": "https://www.videocoin.io" }, - "marketcap_usd": 25122648, + "marketcap_usd": 9396123, "name": "VideoCoin", "network": "eth", "shortcut": "VID", @@ -23401,7 +23739,7 @@ "links": { "Homepage": "https://ico.vikky.io" }, - "marketcap_usd": 650434, + "marketcap_usd": 58700, "name": "VikkyToken", "network": "eth", "shortcut": "VIKKY", @@ -23480,7 +23818,7 @@ "Github": "https://github.com/vetri-global/", "Homepage": "https://vetri.global/" }, - "marketcap_usd": 5185539, + "marketcap_usd": 3358892, "name": "VETRI", "network": "eth", "shortcut": "VLD", @@ -23557,7 +23895,7 @@ "links": { "Homepage": "https://vnx.io/" }, - "marketcap_usd": 2031600, + "marketcap_usd": 729051, "name": "VNX Exchange", "network": "eth", "shortcut": "VNXLU", @@ -23610,6 +23948,25 @@ } ] }, + "erc20:eth:VR": { + "address": "0x7d5121505149065b562C789A0145eD750e6E8cdD", + "links": { + "Homepage": "https://victoriavr.com/" + }, + "marketcap_usd": 17332994, + "name": "Victoria VR", + "network": "eth", + "shortcut": "VR", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:VRE": { "address": "0xF722B01910F93B84EDa9CA128b9F05821A41EAe1", "links": { @@ -23731,7 +24088,7 @@ "links": { "Homepage": "https://wab.network" }, - "marketcap_usd": 81356, + "marketcap_usd": 153164, "name": "WABnetwork", "network": "eth", "shortcut": "WAB", @@ -23750,7 +24107,7 @@ "links": { "Homepage": "https://taelpay.com" }, - "marketcap_usd": 12338009, + "marketcap_usd": 4524619, "name": "Tael", "network": "eth", "shortcut": "WABI", @@ -23869,7 +24226,7 @@ "Github": "https://github.com/WrappedBTC", "Homepage": "https://wbtc.network" }, - "marketcap_usd": 13121816934, + "marketcap_usd": 5382346911, "name": "Wrapped Bitcoin", "network": "eth", "shortcut": "WBTC", @@ -24064,7 +24421,7 @@ "links": { "Homepage": "https://wings.ai" }, - "marketcap_usd": 1820189, + "marketcap_usd": 415712, "name": "WINGS", "network": "eth", "shortcut": "WINGS", @@ -24220,7 +24577,7 @@ "links": { "Homepage": "https://wepower.network" }, - "marketcap_usd": 1631975, + "marketcap_usd": 613438, "name": "WePower Token", "network": "eth", "shortcut": "WPR", @@ -24239,7 +24596,7 @@ "links": { "Homepage": "https://worldcore.eu" }, - "marketcap_usd": 85261, + "marketcap_usd": 45509, "name": "Worldcore", "network": "eth", "shortcut": "WRC", @@ -24358,7 +24715,7 @@ "links": { "Homepage": "https://x8currency.com" }, - "marketcap_usd": 1139878, + "marketcap_usd": 655264, "name": "X8X", "network": "eth", "shortcut": "X8X", @@ -24377,7 +24734,7 @@ "links": { "Homepage": "https://www.antiample.org/" }, - "marketcap_usd": 1557503, + "marketcap_usd": 687085, "name": "Antiample", "network": "eth", "shortcut": "XAMP", @@ -24396,7 +24753,7 @@ "links": { "Homepage": "http://www.xaurum.org" }, - "marketcap_usd": 2794419, + "marketcap_usd": 1312062, "name": "Xaurum", "network": "eth", "shortcut": "XAUR", @@ -24435,7 +24792,7 @@ "Github": "https://github.com/blitzpredict", "Homepage": "https://www.blitzpredict.io" }, - "marketcap_usd": 510985, + "marketcap_usd": 93743, "name": "BlitzPredict", "network": "eth", "shortcut": "XBP", @@ -24474,7 +24831,7 @@ "links": { "Homepage": "https://www.swisscryptotokens.ch/" }, - "marketcap_usd": 2161695, + "marketcap_usd": 3072576, "name": "CryptoFranc", "network": "eth", "shortcut": "XCHF", @@ -24706,7 +25063,7 @@ "links": { "Homepage": "https://xio.network/" }, - "marketcap_usd": 3178836, + "marketcap_usd": 880117, "name": "XIO Network", "network": "eth", "shortcut": "XIO", @@ -24765,7 +25122,7 @@ "Github": "https://github.com/XMaxPlatform", "Homepage": "https://www.xmx.com" }, - "marketcap_usd": 966633, + "marketcap_usd": 661817, "name": "XMax", "network": "eth", "shortcut": "XMX", @@ -24785,7 +25142,7 @@ "Github": "https://github.com/InkProtocol/", "Homepage": "https://paywithink.com" }, - "marketcap_usd": 393512, + "marketcap_usd": 0, "name": "Ink Protocol", "network": "eth", "shortcut": "XNK", @@ -24842,7 +25199,7 @@ "links": { "Homepage": "http://www.xov.io" }, - "marketcap_usd": 38818, + "marketcap_usd": 6697, "name": "XOVBank", "network": "eth", "shortcut": "XOV", @@ -24861,7 +25218,7 @@ "links": { "Homepage": "https://xpa.io" }, - "marketcap_usd": 69005, + "marketcap_usd": 31518, "name": "XPA", "network": "eth", "shortcut": "XPA", @@ -24921,7 +25278,7 @@ "Github": "https://github.com/ProtonProtocol", "Homepage": "https://www.protonchain.com/" }, - "marketcap_usd": 139013722, + "marketcap_usd": 43908891, "name": "Proton", "network": "eth", "shortcut": "XPR", @@ -24940,7 +25297,7 @@ "links": { "Homepage": "https://cryptobuyer.io" }, - "marketcap_usd": 26604, + "marketcap_usd": 21056, "name": "Cryptobuyer Token", "network": "eth", "shortcut": "XPT", @@ -24998,7 +25355,7 @@ "Github": "https://github.com/Xfers/StraitsX-tokens", "Homepage": "https://xfers.com/sg/stablecoin" }, - "marketcap_usd": 163441614, + "marketcap_usd": 63409101, "name": "Singapore-Dollar Backed Stablecoin", "network": "eth", "shortcut": "XSGD", @@ -25017,7 +25374,7 @@ "links": { "Homepage": "https://xyo.network" }, - "marketcap_usd": 265550405, + "marketcap_usd": 113534904, "name": "XYO", "network": "eth", "shortcut": "XYO", @@ -25076,7 +25433,7 @@ "links": { "Homepage": "http://www.yeefoundation.com" }, - "marketcap_usd": 671181, + "marketcap_usd": 182076, "name": "Yee Token", "network": "eth", "shortcut": "YEE", @@ -25096,7 +25453,7 @@ "Github": "https://github.com/iearn-finance", "Homepage": "https://yearn.finance/" }, - "marketcap_usd": 841765380, + "marketcap_usd": 402844034, "name": "yearn.finance", "network": "eth", "shortcut": "YFI", @@ -25116,7 +25473,7 @@ "Github": "https://github.com/yfii/vault", "Homepage": "https://dfi.money/" }, - "marketcap_usd": 90907718, + "marketcap_usd": 70199110, "name": "YFII.finance", "network": "eth", "shortcut": "YFII", @@ -25156,7 +25513,7 @@ "Github": "https://github.com/YOUengine", "Homepage": "https://youengine.io" }, - "marketcap_usd": 614008199, + "marketcap_usd": 4406429895, "name": "yOUcash", "network": "eth", "shortcut": "YOUC", @@ -25196,7 +25553,7 @@ "Github": "https://github.com/zapproject", "Homepage": "https://zap.store" }, - "marketcap_usd": 1316743, + "marketcap_usd": 935365, "name": "ZAP", "network": "eth", "shortcut": "ZAP", @@ -25215,7 +25572,7 @@ "links": { "Homepage": "https://0chain.net" }, - "marketcap_usd": 24915664, + "marketcap_usd": 7910084, "name": "0chain", "network": "eth", "shortcut": "ZCN", @@ -25253,7 +25610,7 @@ "links": { "Homepage": "https://zsc.io/" }, - "marketcap_usd": 175499, + "marketcap_usd": 130868, "name": "Zeusshield", "network": "eth", "shortcut": "ZCS", @@ -25286,6 +25643,25 @@ } ] }, + "erc20:eth:ZENI": { + "address": "0x2E59D147962E2bB3fBdc52dc18CfBa2653C06Ccc", + "links": { + "Homepage": "https://thesevensofficial.com/" + }, + "marketcap_usd": 0, + "name": "Zeni Token", + "network": "eth", + "shortcut": "ZENI", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:ZERA": { "address": "0x8188e51Bc678F0070531f0e782718Df0027452De", "links": { @@ -25312,7 +25688,7 @@ "Github": "https://github.com/ZEUS-coin", "Homepage": "https://zeusfundme.com/" }, - "marketcap_usd": 33510, + "marketcap_usd": 15928, "name": "ZeusNetwork", "network": "eth", "shortcut": "ZEUS", @@ -25331,7 +25707,7 @@ "links": { "Homepage": "https://zinc.work" }, - "marketcap_usd": 26290, + "marketcap_usd": 3372, "name": "ZINC", "network": "eth", "shortcut": "ZINC", @@ -25408,7 +25784,7 @@ "links": { "Homepage": "https://zla.io" }, - "marketcap_usd": 142467, + "marketcap_usd": 0, "name": "Zilla", "network": "eth", "shortcut": "ZLA", @@ -25466,7 +25842,7 @@ "links": { "Homepage": "https://zper.io" }, - "marketcap_usd": 53365, + "marketcap_usd": 23384, "name": "ZPER", "network": "eth", "shortcut": "ZPR", @@ -25480,6 +25856,26 @@ } ] }, + "erc20:eth:ZRX": { + "address": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", + "links": { + "Github": "https://github.com/0xProject", + "Homepage": "https://0xproject.com" + }, + "marketcap_usd": 283896539, + "name": "0x Project", + "network": "eth", + "shortcut": "ZRX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:eth:ZST": { "address": "0xe386B139Ed3715Ca4B18Fd52671bDcea1cdFE4b1", "links": { @@ -25504,7 +25900,7 @@ "links": { "Homepage": "https://0xcert.org" }, - "marketcap_usd": 316094, + "marketcap_usd": 71736, "name": "0xcert Protocol Token", "network": "eth", "shortcut": "ZXC", @@ -26582,7 +26978,7 @@ "Github": "https://github.com/eosdac", "Homepage": "https://eosdac.io/" }, - "marketcap_usd": 705091, + "marketcap_usd": 330882, "name": "eosDAC", "network": "eth", "shortcut": "eosDAC", @@ -32376,6 +32772,239 @@ } ] }, + "erc20:kov:DAI": { + "address": "0xC4375B7De8af5a38a93548eb8453a498222C4fF2", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test Dai Stablecoin v1.0", + "network": "kov", + "shortcut": "DAI", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:DGD": { + "address": "0xeeE3870657E4716670f185dF08652dd848fe8f7e", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test Digix DAO Token", + "network": "kov", + "shortcut": "DGD", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:GNT": { + "address": "0xeF7FfF64389B814A946f3E92105513705CA6B990", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test Golem Network Token", + "network": "kov", + "shortcut": "GNT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:MKR:1dad": { + "address": "0x1Dad4783cf3fe3085C1426157aB175A6119A04bA", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test MakerDAO", + "network": "kov", + "shortcut": "MKR", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:MKR:aaf6": { + "address": "0xAaF64BFCC32d0F15873a02163e7E500671a4ffcD", + "links": { + "Github": "https://github.com/makerdao", + "Homepage": "https://makerdao.com" + }, + "marketcap_usd": 0, + "name": "MakerDAO", + "network": "kov", + "shortcut": "MKR", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:MLN": { + "address": "0x323B5d4C32345ced77393B3530b1EeD0f346429D", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test Melon Tokens", + "network": "kov", + "shortcut": "MLN", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:REP": { + "address": "0xB18845c260F680d5B9D84649638813E342E4F8C9", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test Augur Reputation Token", + "network": "kov", + "shortcut": "REP", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:RLC": { + "address": "0xc57538846Ec405Ea25Deb00e0f9B29a432D53507", + "links": { + "Github": "https://github.com/iExecBlockchainComputing/", + "Homepage": "https://iex.ec" + }, + "marketcap_usd": 0, + "name": "iExec RLC", + "network": "kov", + "shortcut": "RLC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:kov:ZRX": { + "address": "0x6Ff6C0Ff1d68b964901F986d4C9FA3ac68346570", + "links": { + "Homepage": "https://faucet.kovan.radarrelay.com" + }, + "marketcap_usd": 0, + "name": "RadarRelay test 0x Protocol Token", + "network": "kov", + "shortcut": "ZRX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:rin:AETH": { + "address": "0x398A7A69f3c59181A1ffe34bed11DCb5DF863A8a", + "links": { + "Github": "https://github.com/akashaProject", + "Homepage": "http://akasha.world" + }, + "marketcap_usd": 0, + "name": "AKASHA Tokens", + "network": "rin", + "shortcut": "AETH", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "erc20:rin:BHNT": { "address": "0xe27826eE778B6F78a49a686dA7D64f6E7b084a4f", "links": { @@ -32423,6 +33052,76 @@ } ] }, + "erc20:rin:KC": { + "address": "0x275A5B346599b56917e7B1C9de019DCf9EaD861a", + "links": { + "Homepage": "https://baseblock.io/" + }, + "marketcap_usd": 0, + "name": "Karma Token", + "network": "rin", + "shortcut": "KC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:rin:RDN": { + "address": "0x3615757011112560521536258c1E7325Ae3b48AE", + "links": { + "Homepage": "https://github.com/gnosis/dx-examples-liquidity-bots" + }, + "marketcap_usd": 0, + "name": "Raiden", + "network": "rin", + "shortcut": "RDN", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "erc20:rin:RLC": { + "address": "0xf1e6Ad3a7eF0c86c915F0feDF80eD851809bEA90", + "links": { + "Github": "https://github.com/iExecBlockchainComputing/", + "Homepage": "https://iex.ec" + }, + "marketcap_usd": 0, + "name": "iExec RLC", + "network": "rin", + "shortcut": "RLC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "erc20:rin:WALL": { "address": "0x0A057a87CE9C56D7e336B417c79cf30E8d27860B", "links": { @@ -32447,6 +33146,26 @@ } ] }, + "erc20:rop:RLC": { + "address": "0x7314Dc4d7794b5E7894212CA1556ae8e3De58621", + "links": { + "Github": "https://github.com/iExecBlockchainComputing/", + "Homepage": "https://iex.ec" + }, + "marketcap_usd": 0, + "name": "iExec RLC", + "network": "rop", + "shortcut": "RLC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "erc20", + "wallet": [ + { + "name": "Trezor Suite", + "url": "https://suite.trezor.io" + } + ] + }, "erc20:rop:dqr30": { "address": "0xa1bAccA0e12D4091Ec1f92e7CaE3394CC9854D3D", "links": { @@ -32899,11 +33618,53 @@ } ] }, + "eth:AIOZ": { + "links": { + "Homepage": "https://aioz.network" + }, + "marketcap_usd": 41085232, + "name": "AIOZ Network", + "shortcut": "AIOZ", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:AITD": { + "links": { + "Homepage": "https://www.aitd.io/" + }, + "marketcap_usd": 0, + "name": "Aitd", + "shortcut": "AITD", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:AKA": { "links": { "Homepage": "https://akroma.io" }, - "marketcap_usd": 18361, + "marketcap_usd": 4363, "name": "Akroma", "shortcut": "AKA", "t1_enabled": "yes", @@ -32920,13 +33681,34 @@ } ] }, - "eth:AMBR": { + "eth:AMBROS": { "links": { - "Homepage": "https://bcmhunt.com/" + "Homepage": "https://ambros.network" }, "marketcap_usd": 0, "name": "Ambros Chain", - "shortcut": "AMBR", + "shortcut": "AMBROS", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:AME": { + "links": { + "Homepage": "https://amechain.io/" + }, + "marketcap_usd": 0, + "name": "AME Chain", + "shortcut": "AME", "t1_enabled": "yes", "t2_enabled": "yes", "type": "coin", @@ -32983,6 +33765,27 @@ } ] }, + "eth:ASTR": { + "links": { + "Homepage": "https://astar.network/" + }, + "marketcap_usd": 167986159, + "name": "Astar", + "shortcut": "ASTR", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:ATS": { "links": { "Homepage": "https://artis.eco" @@ -33064,11 +33867,32 @@ } ] }, + "eth:BELLY": { + "links": { + "Homepage": "https://cryptopiece.online" + }, + "marketcap_usd": 0, + "name": "Openpiece", + "shortcut": "BELLY", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:BNB": { "links": { "Homepage": "https://www.binance.org" }, - "marketcap_usd": 72574315643, + "marketcap_usd": 44690398276, "name": "Binance Smart Chain", "shortcut": "BNB", "t1_enabled": "yes", @@ -33085,6 +33909,27 @@ } ] }, + "eth:BOBA": { + "links": { + "Homepage": "https://boba.network" + }, + "marketcap_usd": 0, + "name": "Boba Network Bobabase", + "shortcut": "BOBA", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:BOY": { "links": { "Homepage": "https://boyanet.org" @@ -33106,6 +33951,27 @@ } ] }, + "eth:BRB": { + "links": { + "Homepage": "https://www.beryl-bit.com" + }, + "marketcap_usd": 0, + "name": "BerylBit", + "shortcut": "BRB", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:BRO": { "links": { "Homepage": "https://brochain.org" @@ -33211,6 +34077,27 @@ } ] }, + "eth:Brise": { + "links": { + "Homepage": "https://bitgert.com/" + }, + "marketcap_usd": 0, + "name": "Bitgert", + "shortcut": "Brise", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:CATE": { "links": { "Homepage": "https://catechain.com" @@ -33257,7 +34144,7 @@ "links": { "Homepage": "https://docs.celo.org/" }, - "marketcap_usd": 1500894021, + "marketcap_usd": 453103476, "name": "Celo", "shortcut": "CELO", "t1_enabled": "yes", @@ -33274,6 +34161,27 @@ } ] }, + "eth:CEM": { + "links": { + "Homepage": "https://cemblockchain.com/" + }, + "marketcap_usd": 0, + "name": "Crypto Emergency", + "shortcut": "CEM", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:CFX": { "links": { "Homepage": "https://confluxnetwork.org" @@ -33321,7 +34229,7 @@ "links": { "Homepage": "https://callisto.network" }, - "marketcap_usd": 23638622, + "marketcap_usd": 7915500, "name": "Callisto", "shortcut": "CLO", "t1_enabled": "yes", @@ -33340,10 +34248,10 @@ }, "eth:CLV": { "links": { - "Homepage": "https://clover.finance" + "Homepage": "https://clv.org" }, - "marketcap_usd": 108647118, - "name": "Clover", + "marketcap_usd": 0, + "name": "CLV Parachain", "shortcut": "CLV", "t1_enabled": "yes", "t2_enabled": "yes", @@ -33359,6 +34267,90 @@ } ] }, + "eth:CNDL": { + "links": { + "Homepage": "https://candlelabs.org/" + }, + "marketcap_usd": 0, + "name": "Candle", + "shortcut": "CNDL", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:CPAY:21337": { + "links": { + "Homepage": "https://cennz.net" + }, + "marketcap_usd": 0, + "name": "CENNZnet Azalea", + "shortcut": "CPAY", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:CPAY:3000": { + "links": { + "Homepage": "https://cennz.net" + }, + "marketcap_usd": 0, + "name": "CENNZnet Rata", + "shortcut": "CPAY", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:CPAY:3001": { + "links": { + "Homepage": "https://cennz.net" + }, + "marketcap_usd": 0, + "name": "CENNZnet Nikau", + "shortcut": "CPAY", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:CRAB": { "links": { "Homepage": "https://crab.network/" @@ -33384,7 +34376,7 @@ "links": { "Homepage": "https://cronos.org/" }, - "marketcap_usd": 12473343561, + "marketcap_usd": 3699264619, "name": "Cronos", "shortcut": "CRO", "t1_enabled": "yes", @@ -33401,6 +34393,69 @@ } ] }, + "eth:CSB": { + "links": { + "Homepage": "https://crossbell.io" + }, + "marketcap_usd": 0, + "name": "Crossbell", + "shortcut": "CSB", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:CUBE": { + "links": { + "Homepage": "https://www.cube.network" + }, + "marketcap_usd": 0, + "name": "Cube Chain", + "shortcut": "CUBE", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:CWN": { + "links": { + "Homepage": "https://cloudwalk.io" + }, + "marketcap_usd": 0, + "name": "CloudWalk", + "shortcut": "CWN", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:DAX": { "links": { "Homepage": "https://prodax.io/" @@ -33443,6 +34498,27 @@ } ] }, + "eth:DGCC": { + "links": { + "Homepage": "https://digestgroup.ltd" + }, + "marketcap_usd": 0, + "name": "Digest Swarm Chain", + "shortcut": "DGCC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:DIODE": { "links": { "Homepage": "https://diode.io/prenet" @@ -33506,6 +34582,27 @@ } ] }, + "eth:DX": { + "links": { + "Homepage": "https://www.dxchain.com/" + }, + "marketcap_usd": 0, + "name": "Dxchain", + "shortcut": "DX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:DYNO": { "links": { "Homepage": "https://dynoprotocol.com" @@ -33573,7 +34670,7 @@ "links": { "Homepage": "http://edgewa.re" }, - "marketcap_usd": 36805742, + "marketcap_usd": 9311411, "name": "Edgeware", "shortcut": "EDG", "t1_enabled": "yes", @@ -33594,7 +34691,7 @@ "links": { "Homepage": "https://egem.io" }, - "marketcap_usd": 274529, + "marketcap_usd": 84946, "name": "EtherGem", "shortcut": "EGEM", "t1_enabled": "yes", @@ -33653,27 +34750,6 @@ } ] }, - "eth:ELLA": { - "links": { - "Homepage": "https://ellaism.org" - }, - "marketcap_usd": 0, - "name": "Ellaism", - "shortcut": "ELLA", - "t1_enabled": "yes", - "t2_enabled": "yes", - "type": "coin", - "wallet": [ - { - "name": "MyCrypto", - "url": "https://mycrypto.com" - }, - { - "name": "MyEtherWallet", - "url": "https://www.myetherwallet.com" - } - ] - }, "eth:ELV": { "links": { "Homepage": "https://eluv.io" @@ -33763,7 +34839,7 @@ "links": { "Homepage": "https://ethereumclassic.org" }, - "marketcap_usd": 6700838273, + "marketcap_usd": 4593639300, "name": "Ethereum Classic", "shortcut": "ETC", "t1_enabled": "yes", @@ -33780,7 +34856,7 @@ "links": { "Homepage": "https://ethereum.org" }, - "marketcap_usd": 414331189791, + "marketcap_usd": 191826182799, "name": "Ethereum", "shortcut": "ETH", "t1_enabled": "yes", @@ -33797,7 +34873,7 @@ "links": { "Homepage": "https://ethoprotocol.com" }, - "marketcap_usd": 0, + "marketcap_usd": 161490, "name": "Etho Protocol", "shortcut": "ETHO", "t1_enabled": "yes", @@ -33818,7 +34894,7 @@ "links": { "Homepage": "https://einc.io" }, - "marketcap_usd": 202770, + "marketcap_usd": 0, "name": "EtherInc", "shortcut": "ETI", "t1_enabled": "yes", @@ -33856,6 +34932,48 @@ } ] }, + "eth:ETND": { + "links": { + "Homepage": "https://www.etnd.pro" + }, + "marketcap_usd": 0, + "name": "ETND Chain", + "shortcut": "ETND", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:EUN": { + "links": { + "Homepage": "https://eurus.network" + }, + "marketcap_usd": 0, + "name": "Eurus", + "shortcut": "EUN", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:EVA": { "links": { "Homepage": "https://evanesco.org/" @@ -33961,6 +35079,27 @@ } ] }, + "eth:EZC": { + "links": { + "Homepage": "https://ezchain.com" + }, + "marketcap_usd": 0, + "name": "EZChain C-Chain", + "shortcut": "EZC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:FETH": { "links": { "Homepage": "https://www.factory127.com" @@ -34024,11 +35163,32 @@ } ] }, + "eth:FRA": { + "links": { + "Homepage": "https://findora.org/" + }, + "marketcap_usd": 0, + "name": "Findora", + "shortcut": "FRA", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:FSN": { "links": { "Homepage": "https://www.fusion.org/" }, - "marketcap_usd": 37044301, + "marketcap_usd": 17449663, "name": "Fusion", "shortcut": "FSN", "t1_enabled": "yes", @@ -34087,6 +35247,27 @@ } ] }, + "eth:FX": { + "links": { + "Homepage": "https://functionx.io/" + }, + "marketcap_usd": 0, + "name": "F(x)Core", + "shortcut": "FX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:GAR:90": { "links": { "Homepage": "https://garizon.com" @@ -34108,6 +35289,27 @@ } ] }, + "eth:GCD": { + "links": { + "Homepage": "https://gton.capital" + }, + "marketcap_usd": 0, + "name": "GTON", + "shortcut": "GCD", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:GEN": { "links": { "Homepage": "https://www.xixoio.com/" @@ -34133,7 +35335,7 @@ "links": { "Homepage": "https://moonbeam.network/networks/moonbeam/" }, - "marketcap_usd": 698883148, + "marketcap_usd": 222514714, "name": "Moonbeam", "shortcut": "GLMR", "t1_enabled": "yes", @@ -34175,7 +35377,7 @@ "links": { "Homepage": "https://gochain.io" }, - "marketcap_usd": 31006162, + "marketcap_usd": 11358330, "name": "GoChain", "shortcut": "GO", "t1_enabled": "yes", @@ -34276,6 +35478,27 @@ } ] }, + "eth:HOO": { + "links": { + "Homepage": "https://www.hoosmartchain.com" + }, + "marketcap_usd": 0, + "name": "Hoo Smart Chain", + "shortcut": "HOO", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:HOP": { "links": { "Homepage": "https://www.DataHopper.com" @@ -34301,7 +35524,7 @@ "links": { "Homepage": "https://hpb.io" }, - "marketcap_usd": 2747057, + "marketcap_usd": 1400795, "name": "High Performance Blockchain", "shortcut": "HPB", "t1_enabled": "yes", @@ -34423,6 +35646,27 @@ } ] }, + "eth:IVAR": { + "links": { + "Homepage": "https://ivarex.com" + }, + "marketcap_usd": 0, + "name": "IVAR Chain", + "shortcut": "IVAR", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:JEWEL:53935": { "links": { "Homepage": "https://defikingdoms.com" @@ -34486,6 +35730,27 @@ } ] }, + "eth:KAVA": { + "links": { + "Homepage": "https://www.kava.io" + }, + "marketcap_usd": 486846769, + "name": "Kava EVM", + "shortcut": "KAVA", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:KCS": { "links": { "Homepage": "https://kcc.io" @@ -34511,7 +35776,7 @@ "links": { "Homepage": "https://www.klaytn.com/" }, - "marketcap_usd": 3437934158, + "marketcap_usd": 862049881, "name": "Klaytn", "shortcut": "KLAY", "t1_enabled": "yes", @@ -34528,6 +35793,27 @@ } ] }, + "eth:KSX": { + "links": { + "Homepage": "https://sherpax.io/" + }, + "marketcap_usd": 0, + "name": "Sherpax", + "shortcut": "KSX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:KTO:2559": { "links": { "Homepage": "https://www.kortho.io/" @@ -34612,13 +35898,34 @@ } ] }, - "eth:LISINSKI": { + "eth:LISINS": { "links": { "Homepage": "https://lisinski.online" }, "marketcap_usd": 0, "name": "Lisinski", - "shortcut": "LISINSKI", + "shortcut": "LISINS", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:LUDAN": { + "links": { + "Homepage": "https://www.ludan.org/" + }, + "marketcap_usd": 0, + "name": "LUDAN", + "shortcut": "LUDAN", "t1_enabled": "yes", "t2_enabled": "yes", "type": "coin", @@ -34637,7 +35944,7 @@ "links": { "Homepage": "https://mathchain.org" }, - "marketcap_usd": 27558250, + "marketcap_usd": 20217903, "name": "MathChain", "shortcut": "MATH", "t1_enabled": "yes", @@ -34658,7 +35965,7 @@ "links": { "Homepage": "https://polygon.technology/" }, - "marketcap_usd": 13214060845, + "marketcap_usd": 6871256644, "name": "Polygon", "shortcut": "MATIC", "t1_enabled": "yes", @@ -34679,7 +35986,7 @@ "links": { "Homepage": "https://metadium.com" }, - "marketcap_usd": 151047691, + "marketcap_usd": 71228929, "name": "Metadium", "shortcut": "META", "t1_enabled": "yes", @@ -34759,6 +36066,27 @@ } ] }, + "eth:MMT": { + "links": { + "Homepage": "https://mmtchain.io/" + }, + "marketcap_usd": 0, + "name": "Mammoth", + "shortcut": "MMT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:MOLE": { "links": { "Homepage": "https://github.com/Jdubedition/molereum" @@ -34784,7 +36112,7 @@ "links": { "Homepage": "https://moonbeam.network/networks/moonriver/" }, - "marketcap_usd": 276099908, + "marketcap_usd": 71197718, "name": "Moonriver", "shortcut": "MOVR", "t1_enabled": "yes", @@ -34843,6 +36171,27 @@ } ] }, + "eth:MTV": { + "links": { + "Homepage": "https://mtv.ac" + }, + "marketcap_usd": 4401735, + "name": "MultiVAC", + "shortcut": "MTV", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:MUSIC": { "links": { "Homepage": "https://musicoin.tw" @@ -34866,7 +36215,7 @@ }, "eth:NEON:245022934": { "links": { - "Homepage": "https://neon-labs.org/" + "Homepage": "https://neon-labs.org" }, "marketcap_usd": 0, "name": "Neon EVM", @@ -34889,7 +36238,7 @@ "links": { "Homepage": "https://www.newtonproject.org/" }, - "marketcap_usd": 18214812, + "marketcap_usd": 5973693, "name": "Newton", "shortcut": "NEW", "t1_enabled": "yes", @@ -34931,7 +36280,7 @@ "links": { "Homepage": "https://www.energi.world/" }, - "marketcap_usd": 36022511, + "marketcap_usd": 24570145, "name": "Energi", "shortcut": "NRG", "t1_enabled": "yes", @@ -34969,9 +36318,30 @@ } ] }, + "eth:OAC": { + "links": { + "Homepage": "https://scan.oasischain.io" + }, + "marketcap_usd": 0, + "name": "OasisChain", + "shortcut": "OAC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:OKT": { "links": { - "Homepage": "https://www.okex.com/okexchain" + "Homepage": "https://www.okex.com/okc" }, "marketcap_usd": 0, "name": "OKXChain", @@ -35015,7 +36385,7 @@ "links": { "Homepage": "https://oneledger.io" }, - "marketcap_usd": 10546673, + "marketcap_usd": 3759517, "name": "OneLedger", "shortcut": "OLT", "t1_enabled": "yes", @@ -35032,13 +36402,34 @@ } ] }, - "eth:OML": { + "eth:OM": { "links": { - "Homepage": "https://omlira.com" + "Homepage": "https://omplatform.com/" + }, + "marketcap_usd": 0, + "name": "OM Chain", + "shortcut": "OM", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:OMC": { + "links": { + "Homepage": "https://omchain.io" }, "marketcap_usd": 0, "name": "omChain", - "shortcut": "OML", + "shortcut": "OMC", "t1_enabled": "yes", "t2_enabled": "yes", "type": "coin", @@ -35057,7 +36448,7 @@ "links": { "Homepage": "https://www.harmony.one/" }, - "marketcap_usd": 1964167063, + "marketcap_usd": 268076721, "name": "Harmony", "shortcut": "ONE", "t1_enabled": "yes", @@ -35078,7 +36469,7 @@ "links": { "Homepage": "https://www.harmony.one/" }, - "marketcap_usd": 1964167063, + "marketcap_usd": 268076721, "name": "Harmony", "shortcut": "ONE", "t1_enabled": "yes", @@ -35099,7 +36490,7 @@ "links": { "Homepage": "https://www.harmony.one/" }, - "marketcap_usd": 1964167063, + "marketcap_usd": 268076721, "name": "Harmony", "shortcut": "ONE", "t1_enabled": "yes", @@ -35120,7 +36511,7 @@ "links": { "Homepage": "https://www.harmony.one/" }, - "marketcap_usd": 1964167063, + "marketcap_usd": 268076721, "name": "Harmony", "shortcut": "ONE", "t1_enabled": "yes", @@ -35141,7 +36532,7 @@ "links": { "Homepage": "https://ont.io/" }, - "marketcap_usd": 569997705, + "marketcap_usd": 230463857, "name": "Ontology", "shortcut": "ONG", "t1_enabled": "yes", @@ -35158,6 +36549,27 @@ } ] }, + "eth:OPC": { + "links": { + "Homepage": "https://www.openchain.live" + }, + "marketcap_usd": 0, + "name": "OpenChain", + "shortcut": "OPC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:OY": { "links": { "Homepage": "https://www.oychain.io" @@ -35221,11 +36633,32 @@ } ] }, + "eth:PFT:909": { + "links": { + "Homepage": "https://portalfantasy.io" + }, + "marketcap_usd": 0, + "name": "Portal Fantasy Chain", + "shortcut": "PFT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:PHT": { "links": { "Homepage": "https://explorer.lightstreams.io" }, - "marketcap_usd": 627796, + "marketcap_usd": 206692, "name": "Lightstreams", "shortcut": "PHT", "t1_enabled": "yes", @@ -35330,7 +36763,7 @@ "links": { "Homepage": "https://poa.network" }, - "marketcap_usd": 31041684, + "marketcap_usd": 6008406, "name": "POA Network Core", "shortcut": "POA", "t1_enabled": "yes", @@ -35351,7 +36784,7 @@ "links": { "Homepage": "https://polis.tech" }, - "marketcap_usd": 1569555, + "marketcap_usd": 359044, "name": "Polis", "shortcut": "POLIS", "t1_enabled": "yes", @@ -35410,11 +36843,32 @@ } ] }, + "eth:QDC": { + "links": { + "Homepage": "https://quadrans.io" + }, + "marketcap_usd": 0, + "name": "Quadrans Blockchain", + "shortcut": "QDC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:QKC:100000": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35433,9 +36887,9 @@ }, "eth:QKC:100001": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35454,9 +36908,9 @@ }, "eth:QKC:100002": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35475,9 +36929,9 @@ }, "eth:QKC:100003": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35496,9 +36950,9 @@ }, "eth:QKC:100004": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35517,9 +36971,9 @@ }, "eth:QKC:100005": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35538,9 +36992,9 @@ }, "eth:QKC:100006": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35559,9 +37013,9 @@ }, "eth:QKC:100007": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35580,9 +37034,9 @@ }, "eth:QKC:100008": { "links": { - "Homepage": "https://www.quarkchain.io/" + "Homepage": "https://www.quarkchain.io" }, - "marketcap_usd": 148630106, + "marketcap_usd": 72187447, "name": "QuarkChain", "shortcut": "QKC", "t1_enabled": "yes", @@ -35666,7 +37120,7 @@ "links": { "Homepage": "https://rei.network/" }, - "marketcap_usd": 0, + "marketcap_usd": 40315608, "name": "REI Network", "shortcut": "REI", "t1_enabled": "yes", @@ -35683,6 +37137,27 @@ } ] }, + "eth:RING": { + "links": { + "Homepage": "https://darwinia.network/" + }, + "marketcap_usd": 4488462, + "name": "Darwinia Network", + "shortcut": "RING", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:RNA": { "links": { "Homepage": "https://scan.genechain.io/" @@ -35704,7 +37179,7 @@ } ] }, - "eth:ROC": { + "eth:ROC:1288": { "links": { "Homepage": "https://docs.moonbeam.network/learn/platform/networks/overview/" }, @@ -35750,7 +37225,7 @@ "links": { "Homepage": "https://rangersprotocol.com" }, - "marketcap_usd": 6660496, + "marketcap_usd": 1824951, "name": "Rangers Protocol", "shortcut": "RPG", "t1_enabled": "yes", @@ -35830,6 +37305,27 @@ } ] }, + "eth:SFL": { + "links": { + "Homepage": "https://hupayx.io" + }, + "marketcap_usd": 0, + "name": "Taycan", + "shortcut": "SFL", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:SGB": { "links": { "Homepage": "https://flare.xyz" @@ -35876,7 +37372,7 @@ "links": { "Homepage": "https://clover.finance/sakura" }, - "marketcap_usd": 3417233, + "marketcap_usd": 1307156, "name": "Sakura", "shortcut": "SKU", "t1_enabled": "yes", @@ -35893,6 +37389,27 @@ } ] }, + "eth:SMT": { + "links": { + "Homepage": "https://smartmesh.io" + }, + "marketcap_usd": 2556470, + "name": "SmartMesh", + "shortcut": "SMT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:SNT": { "links": { "Homepage": "https://novanetwork.io" @@ -35914,7 +37431,7 @@ } ] }, - "eth:SOTER": { + "eth:SOTER:68": { "links": { "Homepage": "https://www.soterone.com" }, @@ -35998,11 +37515,32 @@ } ] }, + "eth:SX": { + "links": { + "Homepage": "https://www.sx.technology" + }, + "marketcap_usd": 0, + "name": "SX Network", + "shortcut": "SX", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:Seele": { "links": { "Homepage": "https://seelen.pro/" }, - "marketcap_usd": 4647879, + "marketcap_usd": 6284505, "name": "Seele", "shortcut": "Seele", "t1_enabled": "yes", @@ -36124,6 +37662,27 @@ } ] }, + "eth:TLC": { + "links": { + "Homepage": "https://tlchain.network/" + }, + "marketcap_usd": 0, + "name": "TLChain Network", + "shortcut": "TLC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:TLOS:40": { "links": { "Homepage": "https://telos.net" @@ -36145,11 +37704,32 @@ } ] }, + "eth:TOMB": { + "links": { + "Homepage": "https://tombchain.com/" + }, + "marketcap_usd": 0, + "name": "Tomb Chain", + "shortcut": "TOMB", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:TOMO:88": { "links": { "Homepage": "https://tomochain.com" }, - "marketcap_usd": 133836594, + "marketcap_usd": 52151865, "name": "TomoChain", "shortcut": "TOMO", "t1_enabled": "yes", @@ -36187,6 +37767,27 @@ } ] }, + "eth:TPC": { + "links": { + "Homepage": "https://techpay.io/" + }, + "marketcap_usd": 0, + "name": "TechPay", + "shortcut": "TPC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:TPEP": { "links": { "Homepage": "https://pepchain.io" @@ -36233,7 +37834,7 @@ "links": { "Homepage": "https://thundercore.com" }, - "marketcap_usd": 86352456, + "marketcap_usd": 54386509, "name": "ThunderCore", "shortcut": "TT", "t1_enabled": "yes", @@ -36250,6 +37851,27 @@ } ] }, + "eth:TXL": { + "links": { + "Homepage": "https://autobahn.network" + }, + "marketcap_usd": 0, + "name": "Autobahn Network", + "shortcut": "TXL", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:U+25B3": { "links": { "Homepage": "https://bloxberg.org" @@ -36296,7 +37918,7 @@ "links": { "Homepage": "https://ubiqsmart.com" }, - "marketcap_usd": 3779184, + "marketcap_usd": 1636533, "name": "Ubiq", "shortcut": "UBQ", "t1_enabled": "yes", @@ -36376,6 +37998,27 @@ } ] }, + "eth:VNDT": { + "links": { + "Homepage": "https://bo.vcex.xyz/" + }, + "marketcap_usd": 0, + "name": "VChain", + "shortcut": "VNDT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:VS:888888": { "links": { "Homepage": "https://www.v.network" @@ -36443,7 +38086,7 @@ "links": { "Homepage": "https://www.wanscan.org" }, - "marketcap_usd": 105653679, + "marketcap_usd": 45365590, "name": "Wanchain", "shortcut": "WAN", "t1_enabled": "yes", @@ -36565,6 +38208,90 @@ } ] }, + "eth:XIN": { + "links": { + "Homepage": "https://mvm.dev" + }, + "marketcap_usd": 0, + "name": "Mixin Virtual Machine", + "shortcut": "XIN", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:XT": { + "links": { + "Homepage": "https://xsc.pub/" + }, + "marketcap_usd": 0, + "name": "XT Smart Chain", + "shortcut": "XT", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:XVM": { + "links": { + "Homepage": "https://venidium.io" + }, + "marketcap_usd": 0, + "name": "Venidium", + "shortcut": "XVM", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:YCC": { + "links": { + "Homepage": "https://www.yuan.org" + }, + "marketcap_usd": 0, + "name": "YuanChain", + "shortcut": "YCC", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:YETI": { "links": { "Homepage": "https://nepalblockchain.network" @@ -36586,11 +38313,32 @@ } ] }, + "eth:ZENITH": { + "links": { + "Homepage": "https://www.zenithchain.co/" + }, + "marketcap_usd": 0, + "name": "Zenith", + "shortcut": "ZENITH", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:ZERO": { "links": { "Homepage": "https://www.singularity.gold" }, - "marketcap_usd": 279637, + "marketcap_usd": 85348, "name": "Singularity ZERO", "shortcut": "ZERO", "t1_enabled": "yes", @@ -36691,11 +38439,32 @@ } ] }, + "eth:jfin": { + "links": { + "Homepage": "https://jfinchain.com" + }, + "marketcap_usd": 0, + "name": "JFIN Chain", + "shortcut": "jfin", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:lat": { "links": { "Homepage": "https://www.platon.network" }, - "marketcap_usd": 141608249, + "marketcap_usd": 37149107, "name": "PlatON", "shortcut": "lat", "t1_enabled": "yes", @@ -36712,6 +38481,48 @@ } ] }, + "eth:mADA": { + "links": { + "Homepage": "https://milkomeda.com" + }, + "marketcap_usd": 0, + "name": "Milkomeda C1", + "shortcut": "mADA", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:pCKB": { + "links": { + "Homepage": "https://www.nervos.org" + }, + "marketcap_usd": 0, + "name": "Godwoken", + "shortcut": "pCKB", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "eth:peggle": { "links": { "Homepage": "https://teampeggle.com" @@ -36733,7 +38544,7 @@ } ] }, - "eth:tGOR:5": { + "eth:tGOR": { "links": { "Homepage": "https://goerli.net/#about" }, @@ -36878,10 +38689,31 @@ }, "eth:xDAI:100": { "links": { - "Homepage": "https://www.xdaichain.com/" + "Homepage": "https://developers.gnosischain.com" + }, + "marketcap_usd": 34301274, + "name": "Gnosis Chain", + "shortcut": "xDAI", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:xDAI:300": { + "links": { + "Homepage": "https://www.xdaichain.com/for-developers/optimism-optimistic-rollups-on-gc" }, - "marketcap_usd": 137755196, - "name": "Gnosis Chain (formerly xDai)", + "marketcap_usd": 34301274, + "name": "Optimism on Gnosis Chain", "shortcut": "xDAI", "t1_enabled": "yes", "t2_enabled": "yes", @@ -36897,12 +38729,54 @@ } ] }, + "eth:\u03a6": { + "links": { + "Homepage": "https://phi.network" + }, + "marketcap_usd": 0, + "name": "PHI Network", + "shortcut": "\u03a6", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, + "eth:\u25c8": { + "links": { + "Homepage": "https://crystaleum.org" + }, + "marketcap_usd": 0, + "name": "Crystaleum", + "shortcut": "\u25c8", + "t1_enabled": "yes", + "t2_enabled": "yes", + "type": "coin", + "wallet": [ + { + "name": "MyCrypto", + "url": "https://mycrypto.com" + }, + { + "name": "MyEtherWallet", + "url": "https://www.myetherwallet.com" + } + ] + }, "misc:ADA": { "links": { "Github": "https://github.com/input-output-hk/cardano-node", "Homepage": "https://www.cardano.org" }, - "marketcap_usd": 41113378035, + "marketcap_usd": 16691439800, "name": "Cardano", "shortcut": "ADA", "t1_enabled": "no", @@ -36919,7 +38793,7 @@ "links": { "Homepage": "https://binance.org" }, - "marketcap_usd": 72574315643, + "marketcap_usd": 44690398276, "name": "Binance Chain", "shortcut": "BNB", "t1_enabled": "no", @@ -36937,7 +38811,7 @@ "Github": "https://github.com/EOSIO/eos", "Homepage": "https://eos.io" }, - "marketcap_usd": 2866062223, + "marketcap_usd": 1164397047, "name": "EOS", "shortcut": "EOS", "t1_enabled": "no", @@ -36955,7 +38829,7 @@ "Github": "https://github.com/maidsafe", "Homepage": "https://maidsafe.net" }, - "marketcap_usd": 170536952, + "marketcap_usd": 135295506, "name": "MaidSafeCoin", "shortcut": "MAID", "t1_enabled": "yes", @@ -36968,7 +38842,7 @@ "Github": "https://github.com/OmniLayer", "Homepage": "https://www.omnilayer.org" }, - "marketcap_usd": 1861833, + "marketcap_usd": 1126092, "name": "Omni", "shortcut": "OMNI", "t1_enabled": "yes", @@ -36980,7 +38854,7 @@ "links": { "Homepage": "https://tether.to" }, - "marketcap_usd": 81569830177, + "marketcap_usd": 66323337069, "name": "Tether", "shortcut": "USDT", "t1_enabled": "yes", @@ -36993,7 +38867,7 @@ "Github": "https://github.com/stellar/stellar-core", "Homepage": "https://www.stellar.org" }, - "marketcap_usd": 5859115983, + "marketcap_usd": 2872329195, "name": "Stellar", "shortcut": "XLM", "t1_enabled": "yes", @@ -37019,7 +38893,7 @@ "Github": "https://github.com/monero-project/monero", "Homepage": "https://getmonero.org" }, - "marketcap_usd": 4055386351, + "marketcap_usd": 2867147174, "name": "Monero", "shortcut": "XMR", "t1_enabled": "no", @@ -37037,7 +38911,7 @@ "Github": "https://github.com/ripple/rippled", "Homepage": "https://ripple.com" }, - "marketcap_usd": 42166029829, + "marketcap_usd": 17840748825, "name": "Ripple", "shortcut": "XRP", "t1_enabled": "no", @@ -37059,7 +38933,7 @@ "Github": "https://github.com/tezos/tezos", "Homepage": "https://tezos.com" }, - "marketcap_usd": 3458159408, + "marketcap_usd": 1529816930, "name": "Tezos", "shortcut": "XTZ", "t1_enabled": "no", @@ -37162,7 +39036,7 @@ "links": { "Homepage": "https://nemplatform.com" }, - "marketcap_usd": 1096201929, + "marketcap_usd": 434936910, "name": "NEM", "shortcut": "XEM", "t1_enabled": "yes", @@ -37177,12 +39051,12 @@ } }, "info": { - "marketcap_supported": "97.62 %", - "marketcap_usd": 2108186706857, - "t1_coins": 1878, - "t2_coins": 1884, - "total_marketcap_usd": 2159495066042, - "updated_at": 1648568699, - "updated_at_readable": "Tue Mar 29 17:44:59 2022" + "marketcap_supported": "107.08 %", + "marketcap_usd": 1121654537156, + "t1_coins": 1967, + "t2_coins": 1973, + "total_marketcap_usd": 1047500554957, + "updated_at": 1659434933, + "updated_at_readable": "Tue Aug 2 12:08:53 2022" } } diff --git a/common/defs/duplicity_overrides.json b/common/defs/duplicity_overrides.json index c3b689ca9d6..51c0cedb447 100644 --- a/common/defs/duplicity_overrides.json +++ b/common/defs/duplicity_overrides.json @@ -29,5 +29,10 @@ "eth:QKC:100007": false, "eth:QKC:100008": false, "eth:xDAI:100": false, - "eth:xDAI:200": false + "eth:xDAI:200": false, + "eth:CPAY:3000": false, + "eth:CPAY:3001": false, + "eth:CPAY:21337": false, + "erc20:eth:USDT": false, + "erc20:avax:USDT": false } diff --git a/common/defs/ethereum/chains b/common/defs/ethereum/chains index 427b0628145..39ac26299b8 160000 --- a/common/defs/ethereum/chains +++ b/common/defs/ethereum/chains @@ -1 +1 @@ -Subproject commit 427b0628145b86911ffe571bb1ced0ca883c48f5 +Subproject commit 39ac26299b83d94a4661d2d85234022ff12aeaff diff --git a/common/defs/ethereum/tokens b/common/defs/ethereum/tokens index 9045282fce6..055f22d3b76 160000 --- a/common/defs/ethereum/tokens +++ b/common/defs/ethereum/tokens @@ -1 +1 @@ -Subproject commit 9045282fce6e3b40f6bbed29ce9bf8a86d415cf3 +Subproject commit 055f22d3b76f743788f94be13fe242e90f451045 diff --git a/common/defs/support.json b/common/defs/support.json index e6a21daaacf..97333ff79e8 100644 --- a/common/defs/support.json +++ b/common/defs/support.json @@ -48,7 +48,6 @@ "eth:AKA": true, "eth:CLO": true, "eth:EGEM": true, - "eth:ELLA": true, "eth:ESN": true, "eth:ETC": true, "eth:ETH:1": true, @@ -160,7 +159,9 @@ "bitcoin:tQTUM": "1.8.1", "bitcoin:tRVN": "1.10.0", "bitcoin:tSMART": "1.7.1", - "erc20:ella:MINING": "1.6.2", + "erc20:avax:AVAX": "1.11.2", + "erc20:avax:USDT": "1.11.2", + "erc20:ella:MINING": "1.11.2", "erc20:esn:DGT": "1.7.1", "erc20:esn:TOPM": "1.7.1", "erc20:etc:BEC": "1.6.2", @@ -339,6 +340,7 @@ "erc20:eth:BOU": "1.6.2", "erc20:eth:BOUTS": "1.8.0", "erc20:eth:BOXX": "1.8.0", + "erc20:eth:BPF": "1.11.2", "erc20:eth:BPT": "1.6.2", "erc20:eth:BQX": "1.6.2", "erc20:eth:BRAT": "1.6.2", @@ -426,7 +428,6 @@ "erc20:eth:CMERGE": "1.10.5", "erc20:eth:CNB": "1.6.2", "erc20:eth:CND": "1.6.2", - "erc20:eth:CNDL": "1.10.6", "erc20:eth:CNN": "1.8.0", "erc20:eth:CO2": "1.6.2", "erc20:eth:CO2Bit": "1.6.2", @@ -483,6 +484,7 @@ "erc20:eth:DACS": "1.8.0", "erc20:eth:DADI": "1.6.2", "erc20:eth:DAF": "1.10.6", + "erc20:eth:DAI": "1.11.2", "erc20:eth:DALC": "1.6.2", "erc20:eth:DAN": "1.6.2", "erc20:eth:DAT": "1.6.2", @@ -507,6 +509,7 @@ "erc20:eth:DEW": "1.8.0", "erc20:eth:DEX": "1.8.0", "erc20:eth:DF": "1.9.0", + "erc20:eth:DGD": "1.11.2", "erc20:eth:DGPT": "1.6.2", "erc20:eth:DGS": "1.6.3", "erc20:eth:DGX": "1.6.2", @@ -699,7 +702,9 @@ "erc20:eth:GIRL": "1.8.4", "erc20:eth:GL": "1.9.1", "erc20:eth:GLA": "1.8.0", + "erc20:eth:GMB": "1.11.2", "erc20:eth:GNO": "1.6.2", + "erc20:eth:GNT": "1.11.2", "erc20:eth:GNX": "1.8.0", "erc20:eth:GNY": "1.8.0", "erc20:eth:GOLDX": "1.6.2", @@ -716,10 +721,12 @@ "erc20:eth:GSE": "1.6.3", "erc20:eth:GST2": "1.9.0", "erc20:eth:GTC": "1.6.2", + "erc20:eth:GTH": "1.11.2", "erc20:eth:GTKT": "1.6.2", "erc20:eth:GTO": "1.6.2", "erc20:eth:GUESS": "1.8.0", "erc20:eth:GULD": "1.6.3", + "erc20:eth:GUP": "1.11.2", "erc20:eth:GUSD": "1.8.0", "erc20:eth:GVT": "1.6.2", "erc20:eth:GXC": "1.6.2", @@ -826,6 +833,7 @@ "erc20:eth:JSE": "1.9.0", "erc20:eth:KAN": "1.8.0", "erc20:eth:KAPA": "1.8.4", + "erc20:eth:KC": "1.11.2", "erc20:eth:KCS": "1.9.0", "erc20:eth:KEE": "1.6.2", "erc20:eth:KIN": "1.6.2", @@ -878,6 +886,7 @@ "erc20:eth:LOCUS": "1.6.2", "erc20:eth:LOK": "1.6.2", "erc20:eth:LOOK": "1.6.3", + "erc20:eth:LOOKS": "1.11.2", "erc20:eth:LOOM": "1.6.2", "erc20:eth:LOOMOLD": "1.10.3", "erc20:eth:LOVE": "1.6.3", @@ -895,6 +904,7 @@ "erc20:eth:LYS": "1.6.2", "erc20:eth:M-ETH": "1.6.2", "erc20:eth:MAD": "1.6.2", + "erc20:eth:MAGIC": "1.11.2", "erc20:eth:MAN": "1.6.2", "erc20:eth:MANA": "1.6.2", "erc20:eth:MART": "1.6.2", @@ -926,7 +936,10 @@ "erc20:eth:MINDS": "1.10.3", "erc20:eth:MITH": "1.9.0", "erc20:eth:MITX": "1.8.0", + "erc20:eth:MKR": "1.11.2", "erc20:eth:MKT": "1.6.2", + "erc20:eth:MLN (new)": "1.11.2", + "erc20:eth:MLN (old):deprecated": "1.11.2", "erc20:eth:MM": "1.10.4", "erc20:eth:MNE": "1.6.2", "erc20:eth:MNL": "1.9.5", @@ -978,6 +991,7 @@ "erc20:eth:NEU": "1.6.2", "erc20:eth:NEWB": "1.8.0", "erc20:eth:NEXO": "1.8.0", + "erc20:eth:NFTL": "1.11.2", "erc20:eth:NGC": "1.6.2", "erc20:eth:NIMFA": "1.6.2", "erc20:eth:NKN": "1.9.0", @@ -985,6 +999,7 @@ "erc20:eth:NMR": "1.6.2", "erc20:eth:NOAH": "1.8.0", "erc20:eth:NOBS": "1.8.0", + "erc20:eth:NONE": "1.11.2", "erc20:eth:NOT": "1.9.0", "erc20:eth:NOX": "1.6.2", "erc20:eth:NPER": "1.6.2", @@ -1128,6 +1143,7 @@ "erc20:eth:QAU": "1.6.2", "erc20:eth:QBX": "1.6.2", "erc20:eth:QCH": "1.9.0", + "erc20:eth:QDT": "1.11.2", "erc20:eth:QKC": "1.8.0", "erc20:eth:QNT": "1.6.3", "erc20:eth:QRG": "1.6.2", @@ -1146,6 +1162,7 @@ "erc20:eth:RBT": "1.9.3", "erc20:eth:RBX": "1.10.5", "erc20:eth:RCN": "1.6.2", + "erc20:eth:RDN": "1.11.2", "erc20:eth:RDV": "1.9.0", "erc20:eth:REA": "1.6.2", "erc20:eth:REAL": "1.8.0", @@ -1157,18 +1174,20 @@ "erc20:eth:REM": "1.8.0", "erc20:eth:REMI": "1.8.0", "erc20:eth:REN": "1.6.2", + "erc20:eth:REP": "1.11.2", + "erc20:eth:REP:deprecated": "1.11.2", "erc20:eth:REPv2": "1.9.4", "erc20:eth:REQ": "1.6.2", "erc20:eth:RET": "1.9.0", "erc20:eth:REV": "1.9.1", "erc20:eth:REX": "1.6.2", "erc20:eth:RFR": "1.6.2", - "erc20:eth:RFX": "1.8.4", "erc20:eth:RGS": "1.8.0", "erc20:eth:RHOC": "1.8.0", "erc20:eth:RIPT": "1.6.2", "erc20:eth:RIYA": "1.8.0", "erc20:eth:RKT": "1.8.0", + "erc20:eth:RLC": "1.11.2", "erc20:eth:RLT": "1.6.2", "erc20:eth:RLTY": "1.6.2", "erc20:eth:RLX": "1.6.2", @@ -1439,6 +1458,7 @@ "erc20:eth:VNXLU": "1.9.0", "erc20:eth:VOC": "1.6.2", "erc20:eth:VOISE": "1.6.2", + "erc20:eth:VR": "1.11.2", "erc20:eth:VRE": "1.9.0", "erc20:eth:VRO": "1.9.3", "erc20:eth:VSF": "1.9.0", @@ -1532,6 +1552,7 @@ "erc20:eth:ZCO": "1.8.0", "erc20:eth:ZCS": "1.6.2", "erc20:eth:ZDC": "1.9.0", + "erc20:eth:ZENI": "1.11.2", "erc20:eth:ZERA": "1.8.4", "erc20:eth:ZEUS": "1.8.0", "erc20:eth:ZINC": "1.8.0", @@ -1542,10 +1563,12 @@ "erc20:eth:ZMAN": "1.8.4", "erc20:eth:ZMN": "1.6.2", "erc20:eth:ZPR": "1.8.0", + "erc20:eth:ZRX": "1.11.2", "erc20:eth:ZST": "1.6.2", "erc20:eth:ZTX": "1.8.0", "erc20:eth:ZXC": "1.8.0", "erc20:eth:aBAT": "1.9.0", + "erc20:eth:aETH": "1.11.2", "erc20:eth:aKNC": "1.9.0", "erc20:eth:aLEND": "1.9.0", "erc20:eth:aLINK": "1.9.0", @@ -1941,17 +1964,34 @@ "erc20:eth:xOXT": "1.9.0", "erc20:eth:xSOL": "1.9.0", "erc20:kov:Aeternity": "1.6.2", + "erc20:kov:DAI": "1.11.2", + "erc20:kov:DGD": "1.11.2", "erc20:kov:GAV": "1.9.0", + "erc20:kov:GNT": "1.11.2", + "erc20:kov:GUP": "1.11.2", + "erc20:kov:MKR:1dad": "1.11.2", + "erc20:kov:MKR:aaf6": "1.11.2", + "erc20:kov:MLN": "1.11.2", + "erc20:kov:REP": "1.11.2", + "erc20:kov:RLC": "1.11.2", "erc20:kov:TIB": "1.9.0", + "erc20:kov:ZRX": "1.11.2", + "erc20:rin:AETH": "1.11.2", "erc20:rin:BHNT": "1.6.2", "erc20:rin:CTGA": "1.6.2", + "erc20:rin:KC": "1.11.2", + "erc20:rin:NONE": "1.11.2", "erc20:rin:PPD": "1.6.2", + "erc20:rin:RDN": "1.11.2", + "erc20:rin:RLC": "1.11.2", "erc20:rin:WALL": "1.6.2", "erc20:rin:qwe": "1.9.0", "erc20:rop:*PLASMA": "1.6.3", "erc20:rop:ILSC": "1.6.2", "erc20:rop:MEWV5": "1.9.0", + "erc20:rop:NONE": "1.11.2", "erc20:rop:RCL": "1.10.6", + "erc20:rop:RLC": "1.11.2", "erc20:rop:dqr30": "1.8.0", "erc20:rsk:ARSCB": "1.10.4", "erc20:rsk:BOBCB": "1.10.4", @@ -2009,35 +2049,53 @@ "eth:420": "1.9.5", "eth:AAC": "1.10.6", "eth:ACA": "1.9.5", + "eth:AIOZ": "1.11.2", + "eth:AITD": "1.11.2", "eth:AKA": "1.6.3", - "eth:AMBR": "1.10.4", + "eth:AMBROS": "1.11.2", + "eth:AME": "1.11.2", "eth:AQUA": "1.8.2", "eth:ASK": "1.10.4", + "eth:ASTR": "1.11.2", "eth:ATS": "1.8.0", "eth:AUX": "1.8.4", "eth:AVAX": "1.9.5", "eth:BCS": "1.10.6", + "eth:BELLY": "1.11.2", "eth:BNB": "1.9.4", + "eth:BOBA": "1.11.2", "eth:BOY": "1.10.6", + "eth:BRB": "1.11.2", "eth:BRO": "1.10.6", "eth:BTA": "1.10.4", "eth:BTCIX": "1.10.5", "eth:BTM": "1.10.5", "eth:BTT": "1.10.4", + "eth:Brise": "1.11.2", "eth:CATE": "1.10.3", "eth:CCP": "1.10.6", "eth:CELO": "1.9.5", + "eth:CEM": "1.11.2", "eth:CFX": "1.10.6", "eth:CLASS": "1.10.6", "eth:CLO": "1.6.2", "eth:CLV": "1.10.3", + "eth:CNDL": "1.11.2", + "eth:CPAY:21337": "1.11.2", + "eth:CPAY:3000": "1.11.2", + "eth:CPAY:3001": "1.11.2", "eth:CRAB": "1.10.5", "eth:CRO": "1.10.5", + "eth:CSB": "1.11.2", + "eth:CUBE": "1.11.2", + "eth:CWN": "1.11.2", "eth:DAX": "1.10.3", "eth:DEV": "1.10.4", + "eth:DGCC": "1.11.2", "eth:DIODE": "1.9.5", "eth:DTH": "1.10.6", "eth:DWU": "1.10.3", + "eth:DX": "1.11.2", "eth:DYNO": "1.10.6", "eth:ECO": "1.10.4", "eth:ECS": "1.10.6", @@ -2045,7 +2103,6 @@ "eth:EGEM": "1.6.2", "eth:EIDI": "1.10.6", "eth:ELA:20": "1.10.3", - "eth:ELLA": "1.6.2", "eth:ELV": "1.10.4", "eth:ENTER": "1.10.6", "eth:ES": "1.10.3", @@ -2055,18 +2112,24 @@ "eth:ETHO": "1.6.3", "eth:ETI": "1.8.2", "eth:ETL": "1.10.3", + "eth:ETND": "1.11.2", + "eth:EUN": "1.11.2", "eth:EVA": "1.10.6", "eth:EVC": "1.10.3", "eth:EVMOS": "1.10.6", "eth:EWT": "1.9.4", "eth:EXP": "1.6.2", + "eth:EZC": "1.11.2", "eth:FETH": "1.10.3", "eth:FIN": "1.9.4", "eth:FLR": "1.9.5", + "eth:FRA": "1.11.2", "eth:FSN": "1.10.3", "eth:FTM": "1.9.4", "eth:FUSE": "1.9.4", + "eth:FX": "1.11.2", "eth:GAR:90": "1.10.6", + "eth:GCD": "1.11.2", "eth:GEN": "1.10.3", "eth:GLMR": "1.10.3", "eth:GNC": "1.10.6", @@ -2075,6 +2138,7 @@ "eth:GooD": "1.10.3", "eth:HAIC": "1.10.3", "eth:HO": "1.10.5", + "eth:HOO": "1.11.2", "eth:HOP": "1.10.5", "eth:HPB": "1.8.2", "eth:HT": "1.9.5", @@ -2082,44 +2146,54 @@ "eth:IORA": "1.10.6", "eth:IOTX": "1.10.3", "eth:IPOS": "1.9.4", + "eth:IVAR": "1.11.2", "eth:JEWEL:53935": "1.10.6", "eth:JOYS": "1.9.5", "eth:KAR": "1.9.5", + "eth:KAVA": "1.11.2", "eth:KCS": "1.10.3", "eth:KLAY": "1.9.5", + "eth:KSX": "1.11.2", "eth:KTO:2559": "1.10.3", "eth:L1": "1.10.5", "eth:L99": "1.10.4", "eth:LA": "1.10.6", - "eth:LISINSKI": "1.9.4", + "eth:LISINS": "1.11.2", + "eth:LUDAN": "1.11.2", "eth:MATH": "1.9.5", "eth:MATIC": "1.9.4", "eth:META": "1.8.2", "eth:METIS": "1.10.5", "eth:MINTME": "1.10.3", "eth:MIX": "1.7.2", + "eth:MMT": "1.11.2", "eth:MOLE": "1.10.5", "eth:MOVR": "1.10.3", "eth:MTR": "1.9.5", "eth:MTT": "1.10.3", + "eth:MTV": "1.11.2", "eth:MUSIC": "1.6.3", "eth:NEON:245022934": "1.10.4", "eth:NEW": "1.9.5", "eth:NEXT": "1.10.5", "eth:NRG": "1.9.4", "eth:NTT": "1.10.5", + "eth:OAC": "1.11.2", "eth:OKT": "1.9.5", "eth:OLO": "1.10.3", "eth:OLT": "1.10.4", - "eth:OML": "1.10.6", + "eth:OM": "1.11.2", + "eth:OMC": "1.11.2", "eth:ONE:1666600000": "1.9.5", "eth:ONE:1666600001": "1.9.5", "eth:ONE:1666600002": "1.9.5", "eth:ONE:1666600003": "1.9.5", "eth:ONG": "1.10.3", + "eth:OPC": "1.11.2", "eth:OY": "1.10.6", "eth:PALM": "1.9.5", "eth:PETH": "1.10.3", + "eth:PFT:909": "1.11.2", "eth:PHT": "1.9.4", "eth:PHX": "1.10.6", "eth:PIRL": "1.6.3", @@ -2129,6 +2203,7 @@ "eth:POLIS": "1.10.6", "eth:POP": "1.10.4", "eth:PRB": "1.10.6", + "eth:QDC": "1.11.2", "eth:QKC:100000": "1.10.3", "eth:QKC:100001": "1.10.3", "eth:QKC:100002": "1.10.3", @@ -2142,21 +2217,25 @@ "eth:RBD": "1.9.4", "eth:RBTC": "1.6.2", "eth:REI:47805": "1.10.6", + "eth:RING": "1.11.2", "eth:RNA": "1.10.3", - "eth:ROC": "1.10.3", + "eth:ROC:1288": "1.11.2", "eth:ROSE": "1.10.5", "eth:RPG": "1.10.5", "eth:RUPX": "1.9.5", "eth:SDN": "1.10.4", "eth:SETM": "1.10.6", + "eth:SFL": "1.11.2", "eth:SGB": "1.10.3", "eth:SHIB": "1.10.5", "eth:SKU": "1.10.3", + "eth:SMT": "1.11.2", "eth:SNT": "1.10.6", - "eth:SOTER": "1.9.5", + "eth:SOTER:68": "1.11.2", "eth:SPARK": "1.10.5", "eth:SPOA": "1.10.5", "eth:SRN": "1.10.4", + "eth:SX": "1.11.2", "eth:Seele": "1.10.5", "eth:TAO": "1.9.4", "eth:TBG": "1.9.5", @@ -2165,21 +2244,26 @@ "eth:TELE:8000": "1.10.6", "eth:TETC": "1.9.4", "eth:TFI": "1.9.5", + "eth:TLC": "1.11.2", "eth:TLOS:40": "1.10.3", + "eth:TOMB": "1.11.2", "eth:TOMO:88": "1.10.6", "eth:TOYS": "1.9.5", + "eth:TPC": "1.11.2", "eth:TPEP": "1.9.4", "eth:TSF": "1.9.4", "eth:TST": "1.9.4", "eth:TT": "1.9.4", "eth:TUBQ": "1.9.4", "eth:TXDC": "1.9.5", + "eth:TXL": "1.11.2", "eth:U+25B3": "1.9.4", "eth:UBC": "1.10.6", "eth:UBQ": "1.6.2", "eth:UZMI": "1.10.5", "eth:VAL": "1.9.4", "eth:VLX": "1.10.4", + "eth:VNDT": "1.11.2", "eth:VS:888888": "1.10.6", "eth:W3G": "1.10.6", "eth:W3Q:333": "1.10.6", @@ -2189,13 +2273,21 @@ "eth:WTT": "1.10.5", "eth:XDC": "1.9.5", "eth:XERO": "1.9.4", + "eth:XIN": "1.11.2", + "eth:XT": "1.11.2", + "eth:XVM": "1.11.2", + "eth:YCC": "1.11.2", "eth:YETI": "1.9.4", + "eth:ZENITH": "1.11.2", "eth:ZERO": "1.10.5", "eth:ZYX": "1.10.4", "eth:atp": "1.10.5", "eth:cTH": "1.10.3", "eth:cet": "1.10.3", + "eth:jfin": "1.11.2", "eth:lat": "1.10.6", + "eth:mADA": "1.11.2", + "eth:pCKB": "1.11.2", "eth:peggle": "1.9.5", "eth:tATS": "1.8.0", "eth:tAVAX": "1.9.5", @@ -2204,8 +2296,7 @@ "eth:tCELO:62320": "1.9.5", "eth:tCFLR": "1.9.5", "eth:tDBM": "1.9.4", - "eth:tGOR:420": "1.9.5", - "eth:tGOR:5": "1.9.5", + "eth:tGOR": "1.11.2", "eth:tKAL": "1.9.4", "eth:tKLAY": "1.9.5", "eth:tKOR": "1.9.5", @@ -2226,6 +2317,9 @@ "eth:tmACA": "1.9.5", "eth:tsDIODE": "1.9.5", "eth:xDAI:100": "1.9.4", + "eth:xDAI:300": "1.11.2", + "eth:\u03a6": "1.11.2", + "eth:\u25c8": "1.11.2", "misc:MAID": "1.7.2", "misc:OMNI": "1.7.2", "misc:USDT": "1.7.2", @@ -2287,6 +2381,8 @@ "erc20:eth:CIG:0038": "(AUTO) duplicate key", "erc20:eth:CIG:cb56": "(AUTO) duplicate key", "erc20:eth:CMT": "Migrated to mainnet", + "erc20:eth:CNDL:3d97": "(AUTO) duplicate key", + "erc20:eth:CNDL:bc13": "(AUTO) duplicate key", "erc20:eth:COIN:5e8f": "(AUTO) duplicate key", "erc20:eth:COIN:eb54": "(AUTO) duplicate key", "erc20:eth:COSS:6529": "(AUTO) duplicate key", @@ -2297,14 +2393,12 @@ "erc20:eth:CRPT:80a7": "(AUTO) duplicate key", "erc20:eth:CTT:1a47": "(AUTO) duplicate key", "erc20:eth:CTT:e3fa": "(AUTO) duplicate key", - "erc20:eth:DAI": "(AUTO) duplicate key", "erc20:eth:DAO:0f51": "(AUTO) duplicate key", "erc20:eth:DAO:bb9b": "(AUTO) duplicate key", "erc20:eth:DATA:0cf0": "(AUTO) duplicate key", "erc20:eth:DATA:8f69": "(AUTO) duplicate key", "erc20:eth:DEPO": "(AUTO) duplicate key", "erc20:eth:DEPO (Depository Network)": "(AUTO) duplicate key", - "erc20:eth:DGD": "(AUTO) duplicate key", "erc20:eth:DGTX:1c83": "(AUTO) duplicate key", "erc20:eth:DGTX:c666": "(AUTO) duplicate key", "erc20:eth:DOW:7697": "(AUTO) duplicate key", @@ -2343,8 +2437,6 @@ "erc20:eth:GANA:c0ea": "(AUTO) duplicate key", "erc20:eth:GMT:7ddc": "(AUTO) duplicate key", "erc20:eth:GMT:b3bd": "(AUTO) duplicate key", - "erc20:eth:GNT": "(AUTO) duplicate key", - "erc20:eth:GUP": "(AUTO) duplicate key", "erc20:eth:HEX:9600": "(AUTO) duplicate key", "erc20:eth:Hdp": "(AUTO) duplicate key", "erc20:eth:Hdp.\u0444": "(AUTO) duplicate key", @@ -2356,7 +2448,6 @@ "erc20:eth:JET:7734": "(AUTO) duplicate key", "erc20:eth:JET:8727": "(AUTO) duplicate key", "erc20:eth:JOB:1728": "(AUTO) duplicate key", - "erc20:eth:KC": "(AUTO) duplicate key", "erc20:eth:KEY:4cc1": "(AUTO) duplicate key", "erc20:eth:KEY:4cd9": "(AUTO) duplicate key", "erc20:eth:KICK:2769": "(AUTO) duplicate key", @@ -2383,9 +2474,6 @@ "erc20:eth:MESH:f030": "(AUTO) duplicate key", "erc20:eth:MIT": "(AUTO) duplicate key", "erc20:eth:MIT (Mychatcoin)": "(AUTO) duplicate key", - "erc20:eth:MKR": "(AUTO) duplicate key", - "erc20:eth:MLN (new)": "(AUTO) duplicate key", - "erc20:eth:MLN (old)": "(AUTO) duplicate key", "erc20:eth:MOC": "(AUTO) duplicate key", "erc20:eth:MTC:195f": "(AUTO) duplicate key", "erc20:eth:MTC:905e": "(AUTO) duplicate key", @@ -2395,7 +2483,6 @@ "erc20:eth:NCC:9344": "(AUTO) duplicate key", "erc20:eth:NIO:5554": "(AUTO) duplicate key", "erc20:eth:NIO:cc2a": "(AUTO) duplicate key", - "erc20:eth:NONE": "(AUTO) duplicate key", "erc20:eth:NTK:5d4d": "(AUTO) duplicate key", "erc20:eth:NTK:69be": "(AUTO) duplicate key", "erc20:eth:NXX OLD": "(AUTO) duplicate key", @@ -2420,12 +2507,10 @@ "erc20:eth:QBIT (Old)": "(AUTO) duplicate key", "erc20:eth:RCT:13f2": "(AUTO) duplicate key", "erc20:eth:RCT:2a3a": "(AUTO) duplicate key", - "erc20:eth:RDN": "(AUTO) duplicate key", - "erc20:eth:REP:1985": "(AUTO) duplicate key", - "erc20:eth:REP:e943": "(AUTO) duplicate key", + "erc20:eth:RFX:159a": "(AUTO) duplicate key", + "erc20:eth:RFX:f4c5": "(AUTO) duplicate key", "erc20:eth:RING:86e5": "(AUTO) duplicate key", "erc20:eth:RING:9469": "(AUTO) duplicate key", - "erc20:eth:RLC": "(AUTO) duplicate key", "erc20:eth:SGT:3742": "(AUTO) duplicate key", "erc20:eth:SGT:616c": "(AUTO) duplicate key", "erc20:eth:SGT:d248": "(AUTO) duplicate key", @@ -2473,11 +2558,9 @@ "erc20:eth:YUP:0f33": "(AUTO) duplicate key", "erc20:eth:YUP:d9a1": "(AUTO) duplicate key", "erc20:eth:ZIL": "Migrated to mainnet", - "erc20:eth:ZRX": "(AUTO) duplicate key", "erc20:eth:aDAI:363e": "(AUTO) duplicate key", "erc20:eth:aDAI:5dc2": "(AUTO) duplicate key", "erc20:eth:aDAI:fc1e": "(AUTO) duplicate key", - "erc20:eth:aETH": "(AUTO) duplicate key", "erc20:eth:dLETH2x:4ef5": "(AUTO) duplicate key", "erc20:eth:dLETH2x:8129": "(AUTO) duplicate key", "erc20:eth:dLETH3x:00a8": "(AUTO) duplicate key", @@ -2505,45 +2588,36 @@ "erc20:eth:univ2FARMUSDC:0d0d": "(AUTO) duplicate key", "erc20:eth:univ2FARMUSDC:5149": "(AUTO) duplicate key", "erc20:gor:TST": "(AUTO) duplicate key", - "erc20:kov:DAI": "(AUTO) duplicate key", - "erc20:kov:DGD": "(AUTO) duplicate key", - "erc20:kov:GNT": "(AUTO) duplicate key", - "erc20:kov:GUP": "(AUTO) duplicate key", - "erc20:kov:MKR:1dad": "(AUTO) duplicate key", - "erc20:kov:MKR:aaf6": "(AUTO) duplicate key", - "erc20:kov:MLN": "(AUTO) duplicate key", - "erc20:kov:REP": "(AUTO) duplicate key", - "erc20:kov:RLC": "(AUTO) duplicate key", - "erc20:kov:ZRX": "(AUTO) duplicate key", - "erc20:rin:AETH": "(AUTO) duplicate key", - "erc20:rin:KC": "(AUTO) duplicate key", - "erc20:rin:NONE": "(AUTO) duplicate key", - "erc20:rin:RDN": "(AUTO) duplicate key", - "erc20:rin:RLC": "(AUTO) duplicate key", - "erc20:rop:NONE": "(AUTO) duplicate key", - "erc20:rop:RLC": "(AUTO) duplicate key", "erc20:rsk:INV": "(AUTO) duplicate key", "erc20:rsk:MOC": "(AUTO) duplicate key", "eth:ATH:1620": "duplicate key", "eth:ATH:43110": "duplicate key", "eth:BCH": "duplicate of bitcoin:BCH", "eth:BTX": "duplicate key", + "eth:CPAY:1337": "deprecated", "eth:ELA:22": "duplicate of ELA-ETH-sidechain", + "eth:ELLA:64": "duplicate symbol", + "eth:ELLA:7027": "duplicate symbol", "eth:EOS": "mainnet exists", "eth:ETH:10": "duplicate key", "eth:ETH:1313161554": "duplicate key", "eth:ETH:1313161556": "duplicate key", + "eth:ETH:1337802": "eth collision", "eth:ETH:288": "duplicate key", "eth:ETH:42161": "duplicate key", + "eth:ETH:42170": "eth collision", + "eth:ETH:5551": "eth collision", + "eth:ETH:980": "eth collision", "eth:GAR:91": "duplicate key", "eth:GAR:92": "duplicate key", "eth:GAR:93": "duplicate key", "eth:GTH:192837465": "duplicate key", - "eth:GTH:356256156": "exclude testnet", "eth:GTH:486217935": "exclude testnet", "eth:JEWEL:335": "exclude testnet", "eth:KTO:8285": "exclude testnet", "eth:NEON:245022926": "duplicate key", + "eth:PFT:808": "testnet", + "eth:Q": "causing problems in altcoin detection", "eth:QKC:110000": "exclude testnet", "eth:QKC:110001": "exclude testnet", "eth:QKC:110002": "exclude testnet", @@ -2554,14 +2628,18 @@ "eth:QKC:110007": "exclude testnet", "eth:QKC:110008": "exclude testnet", "eth:REI:55555": "duplicate key", + "eth:ROC:1286": "deprecated", "eth:SHYFT": "slip44 out of range", + "eth:SOTER:218": "deprecated", "eth:SYS": "duplicate key", + "eth:TAero": "(AUTO) exclude testnet", "eth:TCRO": "(AUTO) exclude testnet", "eth:TELE:8001": "(AUTO) exclude testnet", "eth:TFUEL:361": "incompatible", "eth:TFUEL:363": "(AUTO) exclude testnet", "eth:TFUEL:364": "(AUTO) exclude testnet", "eth:TFUEL:365": "(AUTO) exclude testnet", + "eth:TKAVA": "(AUTO) exclude testnet", "eth:TKM:60000": "(AUTO) exclude testnet", "eth:TKM:60001": "(AUTO) exclude testnet", "eth:TKM:60002": "(AUTO) exclude testnet", @@ -2573,23 +2651,38 @@ "eth:TLA": "(AUTO) exclude testnet", "eth:TLOS:41": "(AUTO) exclude testnet", "eth:TOMO:89": "(AUTO) exclude testnet", + "eth:TOP": "causing problems in altcoin detection", + "eth:TOPC": "(AUTO) exclude testnet", "eth:TSCAS": "(AUTO) exclude testnet", "eth:VS:666666": "exclude testnet", "eth:W3Q:3334": "duplicate key", "eth:tAAC": "(AUTO) exclude testnet", - "eth:tAMBR": "(AUTO) exclude testnet", + "eth:tACA": "(AUTO) exclude testnet", + "eth:tAGOR": "testnet", + "eth:tAIOZ": "(AUTO) exclude testnet", + "eth:tAITD": "(AUTO) exclude testnet", + "eth:tALOT": "(AUTO) exclude testnet", + "eth:tAMBROS": "(AUTO) exclude testnet", "eth:tARETH": "(AUTO) exclude testnet", "eth:tAVIS": "(AUTO) exclude testnet", "eth:tBCHT": "(AUTO) exclude testnet", "eth:tBCS": "(AUTO) exclude testnet", + "eth:tBELLY": "(AUTO) exclude testnet", + "eth:tBOBA": "(AUTO) exclude testnet", "eth:tBTM": "(AUTO) exclude testnet", "eth:tBTT": "(AUTO) exclude testnet", "eth:tCFX": "(AUTO) exclude testnet", "eth:tCKB:71393": "(AUTO) exclude testnet", "eth:tCKB:868455272153094": "(AUTO) exclude testnet", "eth:tCLV": "(AUTO) exclude testnet", + "eth:tCMP": "(AUTO) exclude testnet", + "eth:tCTE": "testnet", + "eth:tCUBET": "(AUTO) exclude testnet", + "eth:tCWN": "(AUTO) exclude testnet", "eth:tDTH": "(AUTO) exclude testnet", + "eth:tDX": "(AUTO) exclude testnet", "eth:tDYNO": "(AUTO) exclude testnet", + "eth:tECE": "(AUTO) exclude testnet", "eth:tECO": "(AUTO) exclude testnet", "eth:tECS": "(AUTO) exclude testnet", "eth:tEDG": "(AUTO) exclude testnet", @@ -2598,29 +2691,41 @@ "eth:tEOS": "(AUTO) exclude testnet", "eth:tETH:1313161555": "(AUTO) exclude testnet", "eth:tETH:28": "(AUTO) exclude testnet", + "eth:tETH:420": "(AUTO) exclude testnet", + "eth:tETH:5553": "(AUTO) exclude testnet", + "eth:tEUN": "(AUTO) exclude testnet", "eth:tEVMOS": "(AUTO) exclude testnet", + "eth:tEZC": "(AUTO) exclude testnet", "eth:tFETH": "(AUTO) exclude testnet", + "eth:tFRA": "(AUTO) exclude testnet", "eth:tFTM": "(AUTO) exclude testnet", "eth:tGAR:900": "(AUTO) exclude testnet", "eth:tGAR:901": "(AUTO) exclude testnet", "eth:tGAR:902": "(AUTO) exclude testnet", "eth:tGAR:903": "(AUTO) exclude testnet", + "eth:tGCD": "(AUTO) exclude testnet", "eth:tGO": "(AUTO) exclude testnet", "eth:tGT": "(AUTO) exclude testnet", + "eth:tGTH": "(AUTO) exclude testnet", "eth:tGooD": "(AUTO) exclude testnet", "eth:tHOO": "(AUTO) exclude testnet", "eth:tHYM": "(AUTO) exclude testnet", "eth:tIOTX": "(AUTO) exclude testnet", + "eth:tIVAR": "(AUTO) exclude testnet", + "eth:tKAIBA": "(AUTO) exclude testnet", + "eth:tKAR": "(AUTO) exclude testnet", "eth:tKCS": "(AUTO) exclude testnet", + "eth:tKSX": "(AUTO) exclude testnet", "eth:tL1test": "(AUTO) exclude testnet", "eth:tMDGLT": "(AUTO) exclude testnet", "eth:tMESHT": "(AUTO) exclude testnet", "eth:tMETIS": "(AUTO) exclude testnet", "eth:tMTR": "(AUTO) exclude testnet", - "eth:tMTT-test": "(AUTO) exclude testnet", + "eth:tMTTest": "(AUTO) exclude testnet", "eth:tMYN": "(AUTO) exclude testnet", "eth:tNBX": "(AUTO) exclude testnet", "eth:tNEON": "(AUTO) exclude testnet", + "eth:tNMAC": "(AUTO) exclude testnet", "eth:tNTTH": "(AUTO) exclude testnet", "eth:tOKT": "(AUTO) exclude testnet", "eth:tOLO": "(AUTO) exclude testnet", @@ -2640,13 +2745,19 @@ "eth:tPOLIS": "(AUTO) exclude testnet", "eth:tPRB": "(AUTO) exclude testnet", "eth:tPRING": "(AUTO) exclude testnet", + "eth:tQ": "causing problems in altcoin detection", + "eth:tQDC": "(AUTO) exclude testnet", "eth:tREI": "(AUTO) exclude testnet", "eth:tRNA": "(AUTO) exclude testnet", "eth:tROSE": "(AUTO) exclude testnet", "eth:tRPG": "(AUTO) exclude testnet", + "eth:tSFL": "(AUTO) exclude testnet", "eth:tSHYFTT": "(AUTO) exclude testnet", + "eth:tSNS": "(AUTO) exclude testnet", + "eth:tSX": "(AUTO) exclude testnet", "eth:tSYS": "(AUTO) exclude testnet", "eth:tUBC": "(AUTO) exclude testnet", + "eth:tVIL": "(AUTO) exclude testnet", "eth:tW3G": "(AUTO) exclude testnet", "eth:tW3Q": "(AUTO) exclude testnet", "eth:tWAN": "(AUTO) exclude testnet", @@ -2658,7 +2769,10 @@ "eth:tatp": "(AUTO) exclude testnet", "eth:tcett": "(AUTO) exclude testnet", "eth:tkiETH": "(AUTO) exclude testnet", - "eth:tlat": "(AUTO) exclude testnet", + "eth:tlat:2203181": "(AUTO) exclude testnet", + "eth:tlat:2206132": "(AUTO) exclude testnet", + "eth:tmTAda": "(AUTO) exclude testnet", + "eth:tpCKB": "(AUTO) exclude testnet", "eth:tusd": "(AUTO) exclude testnet", "eth:xDAI:200": "duplicate key", "misc:ADA": "not implemented", @@ -2729,6 +2843,8 @@ "bitcoin:tQTUM": "2.1.1", "bitcoin:tRVN": "2.4.0", "bitcoin:tSMART": "2.0.8", + "erc20:avax:AVAX": "2.5.2", + "erc20:avax:USDT": "2.5.2", "erc20:ella:MINING": "2.0.7", "erc20:esn:DGT": "2.0.8", "erc20:esn:TOPM": "2.0.8", @@ -2908,6 +3024,7 @@ "erc20:eth:BOU": "2.0.7", "erc20:eth:BOUTS": "2.0.10", "erc20:eth:BOXX": "2.0.10", + "erc20:eth:BPF": "2.5.2", "erc20:eth:BPT": "2.0.7", "erc20:eth:BQX": "2.0.7", "erc20:eth:BRAT": "2.0.7", @@ -2995,7 +3112,6 @@ "erc20:eth:CMERGE": "2.4.4", "erc20:eth:CNB": "2.0.7", "erc20:eth:CND": "2.0.7", - "erc20:eth:CNDL": "2.4.4", "erc20:eth:CNN": "2.0.10", "erc20:eth:CO2": "2.0.7", "erc20:eth:CO2Bit": "2.0.7", @@ -3052,6 +3168,7 @@ "erc20:eth:DACS": "2.0.10", "erc20:eth:DADI": "2.0.7", "erc20:eth:DAF": "2.4.4", + "erc20:eth:DAI": "2.5.2", "erc20:eth:DALC": "2.0.7", "erc20:eth:DAN": "2.0.7", "erc20:eth:DAT": "2.0.7", @@ -3076,6 +3193,7 @@ "erc20:eth:DEW": "2.0.10", "erc20:eth:DEX": "2.0.10", "erc20:eth:DF": "2.3.0", + "erc20:eth:DGD": "2.5.2", "erc20:eth:DGPT": "2.0.7", "erc20:eth:DGS": "2.0.8", "erc20:eth:DGX": "2.0.7", @@ -3268,7 +3386,9 @@ "erc20:eth:GIRL": "2.1.8", "erc20:eth:GL": "2.3.1", "erc20:eth:GLA": "2.0.10", + "erc20:eth:GMB": "2.5.2", "erc20:eth:GNO": "2.0.7", + "erc20:eth:GNT": "2.5.2", "erc20:eth:GNX": "2.0.10", "erc20:eth:GNY": "2.0.10", "erc20:eth:GOLDX": "2.0.7", @@ -3285,10 +3405,12 @@ "erc20:eth:GSE": "2.0.8", "erc20:eth:GST2": "2.3.0", "erc20:eth:GTC": "2.0.7", + "erc20:eth:GTH": "2.5.2", "erc20:eth:GTKT": "2.0.7", "erc20:eth:GTO": "2.0.7", "erc20:eth:GUESS": "2.0.10", "erc20:eth:GULD": "2.0.8", + "erc20:eth:GUP": "2.5.2", "erc20:eth:GUSD": "2.0.11", "erc20:eth:GVT": "2.0.7", "erc20:eth:GXC": "2.0.7", @@ -3395,6 +3517,7 @@ "erc20:eth:JSE": "2.3.0", "erc20:eth:KAN": "2.0.10", "erc20:eth:KAPA": "2.1.8", + "erc20:eth:KC": "2.5.2", "erc20:eth:KCS": "2.3.0", "erc20:eth:KEE": "2.0.7", "erc20:eth:KIN": "2.0.7", @@ -3447,6 +3570,7 @@ "erc20:eth:LOCUS": "2.0.7", "erc20:eth:LOK": "2.0.7", "erc20:eth:LOOK": "2.0.8", + "erc20:eth:LOOKS": "2.5.2", "erc20:eth:LOOM": "2.0.7", "erc20:eth:LOOMOLD": "2.4.2", "erc20:eth:LOVE": "2.0.8", @@ -3464,6 +3588,7 @@ "erc20:eth:LYS": "2.0.7", "erc20:eth:M-ETH": "2.0.7", "erc20:eth:MAD": "2.0.7", + "erc20:eth:MAGIC": "2.5.2", "erc20:eth:MAN": "2.0.7", "erc20:eth:MANA": "2.0.7", "erc20:eth:MART": "2.0.7", @@ -3495,7 +3620,10 @@ "erc20:eth:MINDS": "2.4.2", "erc20:eth:MITH": "2.3.0", "erc20:eth:MITX": "2.0.11", + "erc20:eth:MKR": "2.5.2", "erc20:eth:MKT": "2.0.7", + "erc20:eth:MLN (new)": "2.5.2", + "erc20:eth:MLN (old):deprecated": "2.5.2", "erc20:eth:MM": "2.4.3", "erc20:eth:MNE": "2.0.7", "erc20:eth:MNL": "2.3.7", @@ -3547,6 +3675,7 @@ "erc20:eth:NEU": "2.0.7", "erc20:eth:NEWB": "2.0.10", "erc20:eth:NEXO": "2.0.10", + "erc20:eth:NFTL": "2.5.2", "erc20:eth:NGC": "2.0.7", "erc20:eth:NIMFA": "2.0.7", "erc20:eth:NKN": "2.3.0", @@ -3554,6 +3683,7 @@ "erc20:eth:NMR": "2.0.7", "erc20:eth:NOAH": "2.0.10", "erc20:eth:NOBS": "2.0.10", + "erc20:eth:NONE": "2.5.2", "erc20:eth:NOT": "2.3.0", "erc20:eth:NOX": "2.0.7", "erc20:eth:NPER": "2.0.7", @@ -3697,6 +3827,7 @@ "erc20:eth:QAU": "2.0.7", "erc20:eth:QBX": "2.0.7", "erc20:eth:QCH": "2.3.0", + "erc20:eth:QDT": "2.5.2", "erc20:eth:QKC": "2.0.10", "erc20:eth:QNT": "2.0.8", "erc20:eth:QRG": "2.0.7", @@ -3715,6 +3846,7 @@ "erc20:eth:RBT": "2.3.3", "erc20:eth:RBX": "2.4.4", "erc20:eth:RCN": "2.0.7", + "erc20:eth:RDN": "2.5.2", "erc20:eth:RDV": "2.3.0", "erc20:eth:REA": "2.0.7", "erc20:eth:REAL": "2.0.10", @@ -3726,18 +3858,20 @@ "erc20:eth:REM": "2.0.10", "erc20:eth:REMI": "2.0.11", "erc20:eth:REN": "2.0.7", + "erc20:eth:REP": "2.5.2", + "erc20:eth:REP:deprecated": "2.5.2", "erc20:eth:REPv2": "2.3.5", "erc20:eth:REQ": "2.0.7", "erc20:eth:RET": "2.3.0", "erc20:eth:REV": "2.3.1", "erc20:eth:REX": "2.0.7", "erc20:eth:RFR": "2.0.7", - "erc20:eth:RFX": "2.1.8", "erc20:eth:RGS": "2.0.10", "erc20:eth:RHOC": "2.0.10", "erc20:eth:RIPT": "2.0.7", "erc20:eth:RIYA": "2.0.10", "erc20:eth:RKT": "2.0.10", + "erc20:eth:RLC": "2.5.2", "erc20:eth:RLT": "2.0.7", "erc20:eth:RLTY": "2.0.7", "erc20:eth:RLX": "2.0.7", @@ -4008,6 +4142,7 @@ "erc20:eth:VNXLU": "2.3.0", "erc20:eth:VOC": "2.0.7", "erc20:eth:VOISE": "2.0.7", + "erc20:eth:VR": "2.5.2", "erc20:eth:VRE": "2.3.0", "erc20:eth:VRO": "2.3.3", "erc20:eth:VSF": "2.3.0", @@ -4101,6 +4236,7 @@ "erc20:eth:ZCO": "2.0.10", "erc20:eth:ZCS": "2.0.7", "erc20:eth:ZDC": "2.3.0", + "erc20:eth:ZENI": "2.5.2", "erc20:eth:ZERA": "2.1.8", "erc20:eth:ZEUS": "2.0.11", "erc20:eth:ZINC": "2.0.10", @@ -4111,10 +4247,12 @@ "erc20:eth:ZMAN": "2.1.8", "erc20:eth:ZMN": "2.0.7", "erc20:eth:ZPR": "2.0.10", + "erc20:eth:ZRX": "2.5.2", "erc20:eth:ZST": "2.0.7", "erc20:eth:ZTX": "2.0.10", "erc20:eth:ZXC": "2.0.10", "erc20:eth:aBAT": "2.3.0", + "erc20:eth:aETH": "2.5.2", "erc20:eth:aKNC": "2.3.0", "erc20:eth:aLEND": "2.3.0", "erc20:eth:aLINK": "2.3.0", @@ -4510,17 +4648,34 @@ "erc20:eth:xOXT": "2.3.0", "erc20:eth:xSOL": "2.3.0", "erc20:kov:Aeternity": "2.0.7", + "erc20:kov:DAI": "2.5.2", + "erc20:kov:DGD": "2.5.2", "erc20:kov:GAV": "2.3.0", + "erc20:kov:GNT": "2.5.2", + "erc20:kov:GUP": "2.5.2", + "erc20:kov:MKR:1dad": "2.5.2", + "erc20:kov:MKR:aaf6": "2.5.2", + "erc20:kov:MLN": "2.5.2", + "erc20:kov:REP": "2.5.2", + "erc20:kov:RLC": "2.5.2", "erc20:kov:TIB": "2.3.0", + "erc20:kov:ZRX": "2.5.2", + "erc20:rin:AETH": "2.5.2", "erc20:rin:BHNT": "2.0.7", "erc20:rin:CTGA": "2.0.7", + "erc20:rin:KC": "2.5.2", + "erc20:rin:NONE": "2.5.2", "erc20:rin:PPD": "2.0.7", + "erc20:rin:RDN": "2.5.2", + "erc20:rin:RLC": "2.5.2", "erc20:rin:WALL": "2.0.7", "erc20:rin:qwe": "2.3.0", "erc20:rop:*PLASMA": "2.0.8", "erc20:rop:ILSC": "2.0.7", "erc20:rop:MEWV5": "2.3.0", + "erc20:rop:NONE": "2.5.2", "erc20:rop:RCL": "2.4.4", + "erc20:rop:RLC": "2.5.2", "erc20:rop:dqr30": "2.0.10", "erc20:rsk:ARSCB": "2.4.3", "erc20:rsk:BOBCB": "2.4.3", @@ -4578,35 +4733,53 @@ "eth:420": "2.3.7", "eth:AAC": "2.4.4", "eth:ACA": "2.3.7", + "eth:AIOZ": "2.5.2", + "eth:AITD": "2.5.2", "eth:AKA": "2.0.8", - "eth:AMBR": "2.4.3", + "eth:AMBROS": "2.5.2", + "eth:AME": "2.5.2", "eth:AQUA": "2.1.1", "eth:ASK": "2.4.3", + "eth:ASTR": "2.5.2", "eth:ATS": "2.0.11", "eth:AUX": "2.1.6", "eth:AVAX": "2.3.7", "eth:BCS": "2.4.4", + "eth:BELLY": "2.5.2", "eth:BNB": "2.3.5", + "eth:BOBA": "2.5.2", "eth:BOY": "2.4.4", + "eth:BRB": "2.5.2", "eth:BRO": "2.4.4", "eth:BTA": "2.4.3", "eth:BTCIX": "2.4.4", "eth:BTM": "2.4.4", "eth:BTT": "2.4.3", + "eth:Brise": "2.5.2", "eth:CATE": "2.4.2", "eth:CCP": "2.4.4", "eth:CELO": "2.3.7", + "eth:CEM": "2.5.2", "eth:CFX": "2.4.4", "eth:CLASS": "2.4.4", "eth:CLO": "2.0.7", "eth:CLV": "2.4.2", + "eth:CNDL": "2.5.2", + "eth:CPAY:21337": "2.5.2", + "eth:CPAY:3000": "2.5.2", + "eth:CPAY:3001": "2.5.2", "eth:CRAB": "2.4.4", "eth:CRO": "2.4.4", + "eth:CSB": "2.5.2", + "eth:CUBE": "2.5.2", + "eth:CWN": "2.5.2", "eth:DAX": "2.4.2", "eth:DEV": "2.4.3", + "eth:DGCC": "2.5.2", "eth:DIODE": "2.3.7", "eth:DTH": "2.4.4", "eth:DWU": "2.4.2", + "eth:DX": "2.5.2", "eth:DYNO": "2.4.4", "eth:ECO": "2.4.3", "eth:ECS": "2.4.4", @@ -4614,7 +4787,6 @@ "eth:EGEM": "2.0.7", "eth:EIDI": "2.4.4", "eth:ELA:20": "2.4.2", - "eth:ELLA": "2.0.7", "eth:ELV": "2.4.3", "eth:ENTER": "2.4.4", "eth:ES": "2.4.2", @@ -4624,18 +4796,24 @@ "eth:ETHO": "2.0.8", "eth:ETI": "2.1.1", "eth:ETL": "2.4.2", + "eth:ETND": "2.5.2", + "eth:EUN": "2.5.2", "eth:EVA": "2.4.4", "eth:EVC": "2.4.2", "eth:EVMOS": "2.4.4", "eth:EWT": "2.3.5", "eth:EXP": "2.0.7", + "eth:EZC": "2.5.2", "eth:FETH": "2.4.2", "eth:FIN": "2.3.5", "eth:FLR": "2.3.7", + "eth:FRA": "2.5.2", "eth:FSN": "2.4.2", "eth:FTM": "2.3.5", "eth:FUSE": "2.3.5", + "eth:FX": "2.5.2", "eth:GAR:90": "2.4.4", + "eth:GCD": "2.5.2", "eth:GEN": "2.4.2", "eth:GLMR": "2.4.2", "eth:GNC": "2.4.4", @@ -4644,6 +4822,7 @@ "eth:GooD": "2.4.2", "eth:HAIC": "2.4.2", "eth:HO": "2.4.4", + "eth:HOO": "2.5.2", "eth:HOP": "2.4.4", "eth:HPB": "2.1.1", "eth:HT": "2.3.7", @@ -4651,44 +4830,54 @@ "eth:IORA": "2.4.4", "eth:IOTX": "2.4.2", "eth:IPOS": "2.3.5", + "eth:IVAR": "2.5.2", "eth:JEWEL:53935": "2.4.4", "eth:JOYS": "2.3.7", "eth:KAR": "2.3.7", + "eth:KAVA": "2.5.2", "eth:KCS": "2.4.2", "eth:KLAY": "2.3.7", + "eth:KSX": "2.5.2", "eth:KTO:2559": "2.4.2", "eth:L1": "2.4.4", "eth:L99": "2.4.3", "eth:LA": "2.4.4", - "eth:LISINSKI": "2.3.5", + "eth:LISINS": "2.5.2", + "eth:LUDAN": "2.5.2", "eth:MATH": "2.3.7", "eth:MATIC": "2.3.5", "eth:META": "2.1.1", "eth:METIS": "2.4.4", "eth:MINTME": "2.4.2", "eth:MIX": "2.0.10", + "eth:MMT": "2.5.2", "eth:MOLE": "2.4.4", "eth:MOVR": "2.4.2", "eth:MTR": "2.3.7", "eth:MTT": "2.4.2", + "eth:MTV": "2.5.2", "eth:MUSIC": "2.0.8", "eth:NEON:245022934": "2.4.3", "eth:NEW": "2.3.7", "eth:NEXT": "2.4.4", "eth:NRG": "2.3.5", "eth:NTT": "2.4.4", + "eth:OAC": "2.5.2", "eth:OKT": "2.3.7", "eth:OLO": "2.4.2", "eth:OLT": "2.4.3", - "eth:OML": "2.4.4", + "eth:OM": "2.5.2", + "eth:OMC": "2.5.2", "eth:ONE:1666600000": "2.3.7", "eth:ONE:1666600001": "2.3.7", "eth:ONE:1666600002": "2.3.7", "eth:ONE:1666600003": "2.3.7", "eth:ONG": "2.4.2", + "eth:OPC": "2.5.2", "eth:OY": "2.4.4", "eth:PALM": "2.4.3", "eth:PETH": "2.4.2", + "eth:PFT:909": "2.5.2", "eth:PHT": "2.3.5", "eth:PHX": "2.4.4", "eth:PIRL": "2.0.8", @@ -4698,6 +4887,7 @@ "eth:POLIS": "2.4.4", "eth:POP": "2.4.3", "eth:PRB": "2.4.4", + "eth:QDC": "2.5.2", "eth:QKC:100000": "2.4.2", "eth:QKC:100001": "2.4.2", "eth:QKC:100002": "2.4.2", @@ -4711,21 +4901,25 @@ "eth:RBD": "2.3.5", "eth:RBTC": "2.0.7", "eth:REI:47805": "2.4.4", + "eth:RING": "2.5.2", "eth:RNA": "2.4.2", - "eth:ROC": "2.4.2", + "eth:ROC:1288": "2.5.2", "eth:ROSE": "2.4.4", "eth:RPG": "2.4.4", "eth:RUPX": "2.3.7", "eth:SDN": "2.4.3", "eth:SETM": "2.4.4", + "eth:SFL": "2.5.2", "eth:SGB": "2.4.2", "eth:SHIB": "2.4.4", "eth:SKU": "2.4.2", + "eth:SMT": "2.5.2", "eth:SNT": "2.4.4", - "eth:SOTER": "2.3.7", + "eth:SOTER:68": "2.5.2", "eth:SPARK": "2.4.4", "eth:SPOA": "2.4.4", "eth:SRN": "2.4.3", + "eth:SX": "2.5.2", "eth:Seele": "2.4.4", "eth:TAO": "2.3.5", "eth:TBG": "2.3.7", @@ -4734,21 +4928,26 @@ "eth:TELE:8000": "2.4.4", "eth:TETC": "2.3.5", "eth:TFI": "2.3.7", + "eth:TLC": "2.5.2", "eth:TLOS:40": "2.4.2", + "eth:TOMB": "2.5.2", "eth:TOMO:88": "2.4.4", "eth:TOYS": "2.3.7", + "eth:TPC": "2.5.2", "eth:TPEP": "2.3.5", "eth:TSF": "2.3.5", "eth:TST": "2.3.5", "eth:TT": "2.3.5", "eth:TUBQ": "2.3.5", "eth:TXDC": "2.3.7", + "eth:TXL": "2.5.2", "eth:U+25B3": "2.3.5", "eth:UBC": "2.4.4", "eth:UBQ": "2.0.7", "eth:UZMI": "2.4.4", "eth:VAL": "2.3.5", "eth:VLX": "2.4.3", + "eth:VNDT": "2.5.2", "eth:VS:888888": "2.4.4", "eth:W3G": "2.4.4", "eth:W3Q:333": "2.4.4", @@ -4758,13 +4957,21 @@ "eth:WTT": "2.4.4", "eth:XDC": "2.3.7", "eth:XERO": "2.3.5", + "eth:XIN": "2.5.2", + "eth:XT": "2.5.2", + "eth:XVM": "2.5.2", + "eth:YCC": "2.5.2", "eth:YETI": "2.3.5", + "eth:ZENITH": "2.5.2", "eth:ZERO": "2.4.4", "eth:ZYX": "2.4.3", "eth:atp": "2.4.4", "eth:cTH": "2.4.2", "eth:cet": "2.4.2", + "eth:jfin": "2.5.2", "eth:lat": "2.4.4", + "eth:mADA": "2.5.2", + "eth:pCKB": "2.5.2", "eth:peggle": "2.3.7", "eth:tATS": "2.0.11", "eth:tAVAX": "2.3.7", @@ -4773,8 +4980,7 @@ "eth:tCELO:62320": "2.3.7", "eth:tCFLR": "2.3.7", "eth:tDBM": "2.3.5", - "eth:tGOR:420": "2.3.7", - "eth:tGOR:5": "2.3.7", + "eth:tGOR": "2.5.2", "eth:tKAL": "2.3.5", "eth:tKLAY": "2.3.7", "eth:tKOR": "2.3.7", @@ -4795,6 +5001,9 @@ "eth:tmACA": "2.3.7", "eth:tsDIODE": "2.3.7", "eth:xDAI:100": "2.3.5", + "eth:xDAI:300": "2.5.2", + "eth:\u03a6": "2.5.2", + "eth:\u25c8": "2.5.2", "misc:ADA": "2.0.8", "misc:BNB": "2.1.5", "misc:EOS": "2.1.1", @@ -4864,6 +5073,8 @@ "erc20:eth:CIG:0038": "(AUTO) duplicate key", "erc20:eth:CIG:cb56": "(AUTO) duplicate key", "erc20:eth:CMT": "Migrated to mainnet", + "erc20:eth:CNDL:3d97": "(AUTO) duplicate key", + "erc20:eth:CNDL:bc13": "(AUTO) duplicate key", "erc20:eth:COIN:5e8f": "(AUTO) duplicate key", "erc20:eth:COIN:eb54": "(AUTO) duplicate key", "erc20:eth:COSS:6529": "(AUTO) duplicate key", @@ -4874,14 +5085,12 @@ "erc20:eth:CRPT:80a7": "(AUTO) duplicate key", "erc20:eth:CTT:1a47": "(AUTO) duplicate key", "erc20:eth:CTT:e3fa": "(AUTO) duplicate key", - "erc20:eth:DAI": "(AUTO) duplicate key", "erc20:eth:DAO:0f51": "(AUTO) duplicate key", "erc20:eth:DAO:bb9b": "(AUTO) duplicate key", "erc20:eth:DATA:0cf0": "(AUTO) duplicate key", "erc20:eth:DATA:8f69": "(AUTO) duplicate key", "erc20:eth:DEPO": "(AUTO) duplicate key", "erc20:eth:DEPO (Depository Network)": "(AUTO) duplicate key", - "erc20:eth:DGD": "(AUTO) duplicate key", "erc20:eth:DGTX:1c83": "(AUTO) duplicate key", "erc20:eth:DGTX:c666": "(AUTO) duplicate key", "erc20:eth:DOW:7697": "(AUTO) duplicate key", @@ -4920,8 +5129,6 @@ "erc20:eth:GANA:c0ea": "(AUTO) duplicate key", "erc20:eth:GMT:7ddc": "(AUTO) duplicate key", "erc20:eth:GMT:b3bd": "(AUTO) duplicate key", - "erc20:eth:GNT": "(AUTO) duplicate key", - "erc20:eth:GUP": "(AUTO) duplicate key", "erc20:eth:HEX:9600": "(AUTO) duplicate key", "erc20:eth:Hdp": "(AUTO) duplicate key", "erc20:eth:Hdp.\u0444": "(AUTO) duplicate key", @@ -4933,7 +5140,6 @@ "erc20:eth:JET:7734": "(AUTO) duplicate key", "erc20:eth:JET:8727": "(AUTO) duplicate key", "erc20:eth:JOB:1728": "(AUTO) duplicate key", - "erc20:eth:KC": "(AUTO) duplicate key", "erc20:eth:KEY:4cc1": "(AUTO) duplicate key", "erc20:eth:KEY:4cd9": "(AUTO) duplicate key", "erc20:eth:KICK:2769": "(AUTO) duplicate key", @@ -4960,9 +5166,6 @@ "erc20:eth:MESH:f030": "(AUTO) duplicate key", "erc20:eth:MIT": "(AUTO) duplicate key", "erc20:eth:MIT (Mychatcoin)": "(AUTO) duplicate key", - "erc20:eth:MKR": "(AUTO) duplicate key", - "erc20:eth:MLN (new)": "(AUTO) duplicate key", - "erc20:eth:MLN (old)": "(AUTO) duplicate key", "erc20:eth:MOC": "(AUTO) duplicate key", "erc20:eth:MTC:195f": "(AUTO) duplicate key", "erc20:eth:MTC:905e": "(AUTO) duplicate key", @@ -4972,7 +5175,6 @@ "erc20:eth:NCC:9344": "(AUTO) duplicate key", "erc20:eth:NIO:5554": "(AUTO) duplicate key", "erc20:eth:NIO:cc2a": "(AUTO) duplicate key", - "erc20:eth:NONE": "(AUTO) duplicate key", "erc20:eth:NTK:5d4d": "(AUTO) duplicate key", "erc20:eth:NTK:69be": "(AUTO) duplicate key", "erc20:eth:NXX OLD": "(AUTO) duplicate key", @@ -4997,12 +5199,10 @@ "erc20:eth:QBIT (Old)": "(AUTO) duplicate key", "erc20:eth:RCT:13f2": "(AUTO) duplicate key", "erc20:eth:RCT:2a3a": "(AUTO) duplicate key", - "erc20:eth:RDN": "(AUTO) duplicate key", - "erc20:eth:REP:1985": "(AUTO) duplicate key", - "erc20:eth:REP:e943": "(AUTO) duplicate key", + "erc20:eth:RFX:159a": "(AUTO) duplicate key", + "erc20:eth:RFX:f4c5": "(AUTO) duplicate key", "erc20:eth:RING:86e5": "(AUTO) duplicate key", "erc20:eth:RING:9469": "(AUTO) duplicate key", - "erc20:eth:RLC": "(AUTO) duplicate key", "erc20:eth:SGT:3742": "(AUTO) duplicate key", "erc20:eth:SGT:616c": "(AUTO) duplicate key", "erc20:eth:SGT:d248": "(AUTO) duplicate key", @@ -5050,11 +5250,9 @@ "erc20:eth:YUP:0f33": "(AUTO) duplicate key", "erc20:eth:YUP:d9a1": "(AUTO) duplicate key", "erc20:eth:ZIL": "Migrated to mainnet", - "erc20:eth:ZRX": "(AUTO) duplicate key", "erc20:eth:aDAI:363e": "(AUTO) duplicate key", "erc20:eth:aDAI:5dc2": "(AUTO) duplicate key", "erc20:eth:aDAI:fc1e": "(AUTO) duplicate key", - "erc20:eth:aETH": "(AUTO) duplicate key", "erc20:eth:dLETH2x:4ef5": "(AUTO) duplicate key", "erc20:eth:dLETH2x:8129": "(AUTO) duplicate key", "erc20:eth:dLETH3x:00a8": "(AUTO) duplicate key", @@ -5082,45 +5280,36 @@ "erc20:eth:univ2FARMUSDC:0d0d": "(AUTO) duplicate key", "erc20:eth:univ2FARMUSDC:5149": "(AUTO) duplicate key", "erc20:gor:TST": "(AUTO) duplicate key", - "erc20:kov:DAI": "(AUTO) duplicate key", - "erc20:kov:DGD": "(AUTO) duplicate key", - "erc20:kov:GNT": "(AUTO) duplicate key", - "erc20:kov:GUP": "(AUTO) duplicate key", - "erc20:kov:MKR:1dad": "(AUTO) duplicate key", - "erc20:kov:MKR:aaf6": "(AUTO) duplicate key", - "erc20:kov:MLN": "(AUTO) duplicate key", - "erc20:kov:REP": "(AUTO) duplicate key", - "erc20:kov:RLC": "(AUTO) duplicate key", - "erc20:kov:ZRX": "(AUTO) duplicate key", - "erc20:rin:AETH": "(AUTO) duplicate key", - "erc20:rin:KC": "(AUTO) duplicate key", - "erc20:rin:NONE": "(AUTO) duplicate key", - "erc20:rin:RDN": "(AUTO) duplicate key", - "erc20:rin:RLC": "(AUTO) duplicate key", - "erc20:rop:NONE": "(AUTO) duplicate key", - "erc20:rop:RLC": "(AUTO) duplicate key", "erc20:rsk:INV": "(AUTO) duplicate key", "erc20:rsk:MOC": "(AUTO) duplicate key", "eth:ATH:1620": "duplicate key", "eth:ATH:43110": "duplicate key", "eth:BCH": "duplicate of bitcoin:BCH", "eth:BTX": "duplicate key", + "eth:CPAY:1337": "deprecated", "eth:ELA:22": "duplicate of ELA-ETH-sidechain", + "eth:ELLA:64": "duplicate symbol", + "eth:ELLA:7027": "duplicate symbol", "eth:EOS": "mainnet exists", "eth:ETH:10": "duplicate key", "eth:ETH:1313161554": "duplicate key", "eth:ETH:1313161556": "duplicate key", + "eth:ETH:1337802": "eth collision", "eth:ETH:288": "duplicate key", "eth:ETH:42161": "duplicate key", + "eth:ETH:42170": "eth collision", + "eth:ETH:5551": "eth collision", + "eth:ETH:980": "eth collision", "eth:GAR:91": "duplicate key", "eth:GAR:92": "duplicate key", "eth:GAR:93": "duplicate key", "eth:GTH:192837465": "duplicate key", - "eth:GTH:356256156": "exclude testnet", "eth:GTH:486217935": "exclude testnet", "eth:JEWEL:335": "exclude testnet", "eth:KTO:8285": "exclude testnet", "eth:NEON:245022926": "duplicate key", + "eth:PFT:808": "testnet", + "eth:Q": "causing problems in altcoin detection", "eth:QKC:110000": "exclude testnet", "eth:QKC:110001": "exclude testnet", "eth:QKC:110002": "exclude testnet", @@ -5131,14 +5320,18 @@ "eth:QKC:110007": "exclude testnet", "eth:QKC:110008": "exclude testnet", "eth:REI:55555": "duplicate key", + "eth:ROC:1286": "deprecated", "eth:SHYFT": "slip44 out of range", + "eth:SOTER:218": "deprecated", "eth:SYS": "duplicate key", + "eth:TAero": "(AUTO) exclude testnet", "eth:TCRO": "(AUTO) exclude testnet", "eth:TELE:8001": "(AUTO) exclude testnet", "eth:TFUEL:361": "incompatible", "eth:TFUEL:363": "(AUTO) exclude testnet", "eth:TFUEL:364": "(AUTO) exclude testnet", "eth:TFUEL:365": "(AUTO) exclude testnet", + "eth:TKAVA": "(AUTO) exclude testnet", "eth:TKM:60000": "(AUTO) exclude testnet", "eth:TKM:60001": "(AUTO) exclude testnet", "eth:TKM:60002": "(AUTO) exclude testnet", @@ -5150,23 +5343,38 @@ "eth:TLA": "(AUTO) exclude testnet", "eth:TLOS:41": "(AUTO) exclude testnet", "eth:TOMO:89": "(AUTO) exclude testnet", + "eth:TOP": "causing problems in altcoin detection", + "eth:TOPC": "(AUTO) exclude testnet", "eth:TSCAS": "(AUTO) exclude testnet", "eth:VS:666666": "exclude testnet", "eth:W3Q:3334": "duplicate key", "eth:tAAC": "(AUTO) exclude testnet", - "eth:tAMBR": "(AUTO) exclude testnet", + "eth:tACA": "(AUTO) exclude testnet", + "eth:tAGOR": "testnet", + "eth:tAIOZ": "(AUTO) exclude testnet", + "eth:tAITD": "(AUTO) exclude testnet", + "eth:tALOT": "(AUTO) exclude testnet", + "eth:tAMBROS": "(AUTO) exclude testnet", "eth:tARETH": "(AUTO) exclude testnet", "eth:tAVIS": "(AUTO) exclude testnet", "eth:tBCHT": "(AUTO) exclude testnet", "eth:tBCS": "(AUTO) exclude testnet", + "eth:tBELLY": "(AUTO) exclude testnet", + "eth:tBOBA": "(AUTO) exclude testnet", "eth:tBTM": "(AUTO) exclude testnet", "eth:tBTT": "(AUTO) exclude testnet", "eth:tCFX": "(AUTO) exclude testnet", "eth:tCKB:71393": "(AUTO) exclude testnet", "eth:tCKB:868455272153094": "(AUTO) exclude testnet", "eth:tCLV": "(AUTO) exclude testnet", + "eth:tCMP": "(AUTO) exclude testnet", + "eth:tCTE": "testnet", + "eth:tCUBET": "(AUTO) exclude testnet", + "eth:tCWN": "(AUTO) exclude testnet", "eth:tDTH": "(AUTO) exclude testnet", + "eth:tDX": "(AUTO) exclude testnet", "eth:tDYNO": "(AUTO) exclude testnet", + "eth:tECE": "(AUTO) exclude testnet", "eth:tECO": "(AUTO) exclude testnet", "eth:tECS": "(AUTO) exclude testnet", "eth:tEDG": "(AUTO) exclude testnet", @@ -5175,29 +5383,41 @@ "eth:tEOS": "(AUTO) exclude testnet", "eth:tETH:1313161555": "(AUTO) exclude testnet", "eth:tETH:28": "(AUTO) exclude testnet", + "eth:tETH:420": "(AUTO) exclude testnet", + "eth:tETH:5553": "(AUTO) exclude testnet", + "eth:tEUN": "(AUTO) exclude testnet", "eth:tEVMOS": "(AUTO) exclude testnet", + "eth:tEZC": "(AUTO) exclude testnet", "eth:tFETH": "(AUTO) exclude testnet", + "eth:tFRA": "(AUTO) exclude testnet", "eth:tFTM": "(AUTO) exclude testnet", "eth:tGAR:900": "(AUTO) exclude testnet", "eth:tGAR:901": "(AUTO) exclude testnet", "eth:tGAR:902": "(AUTO) exclude testnet", "eth:tGAR:903": "(AUTO) exclude testnet", + "eth:tGCD": "(AUTO) exclude testnet", "eth:tGO": "(AUTO) exclude testnet", "eth:tGT": "(AUTO) exclude testnet", + "eth:tGTH": "(AUTO) exclude testnet", "eth:tGooD": "(AUTO) exclude testnet", "eth:tHOO": "(AUTO) exclude testnet", "eth:tHYM": "(AUTO) exclude testnet", "eth:tIOTX": "(AUTO) exclude testnet", + "eth:tIVAR": "(AUTO) exclude testnet", + "eth:tKAIBA": "(AUTO) exclude testnet", + "eth:tKAR": "(AUTO) exclude testnet", "eth:tKCS": "(AUTO) exclude testnet", + "eth:tKSX": "(AUTO) exclude testnet", "eth:tL1test": "(AUTO) exclude testnet", "eth:tMDGLT": "(AUTO) exclude testnet", "eth:tMESHT": "(AUTO) exclude testnet", "eth:tMETIS": "(AUTO) exclude testnet", "eth:tMTR": "(AUTO) exclude testnet", - "eth:tMTT-test": "(AUTO) exclude testnet", + "eth:tMTTest": "(AUTO) exclude testnet", "eth:tMYN": "(AUTO) exclude testnet", "eth:tNBX": "(AUTO) exclude testnet", "eth:tNEON": "(AUTO) exclude testnet", + "eth:tNMAC": "(AUTO) exclude testnet", "eth:tNTTH": "(AUTO) exclude testnet", "eth:tOKT": "(AUTO) exclude testnet", "eth:tOLO": "(AUTO) exclude testnet", @@ -5217,13 +5437,19 @@ "eth:tPOLIS": "(AUTO) exclude testnet", "eth:tPRB": "(AUTO) exclude testnet", "eth:tPRING": "(AUTO) exclude testnet", + "eth:tQ": "causing problems in altcoin detection", + "eth:tQDC": "(AUTO) exclude testnet", "eth:tREI": "(AUTO) exclude testnet", "eth:tRNA": "(AUTO) exclude testnet", "eth:tROSE": "(AUTO) exclude testnet", "eth:tRPG": "(AUTO) exclude testnet", + "eth:tSFL": "(AUTO) exclude testnet", "eth:tSHYFTT": "(AUTO) exclude testnet", + "eth:tSNS": "(AUTO) exclude testnet", + "eth:tSX": "(AUTO) exclude testnet", "eth:tSYS": "(AUTO) exclude testnet", "eth:tUBC": "(AUTO) exclude testnet", + "eth:tVIL": "(AUTO) exclude testnet", "eth:tW3G": "(AUTO) exclude testnet", "eth:tW3Q": "(AUTO) exclude testnet", "eth:tWAN": "(AUTO) exclude testnet", @@ -5235,7 +5461,10 @@ "eth:tatp": "(AUTO) exclude testnet", "eth:tcett": "(AUTO) exclude testnet", "eth:tkiETH": "(AUTO) exclude testnet", - "eth:tlat": "(AUTO) exclude testnet", + "eth:tlat:2203181": "(AUTO) exclude testnet", + "eth:tlat:2206132": "(AUTO) exclude testnet", + "eth:tmTAda": "(AUTO) exclude testnet", + "eth:tpCKB": "(AUTO) exclude testnet", "eth:tusd": "(AUTO) exclude testnet", "eth:xDAI:200": "duplicate key", "misc:LSK": "Incompatible mainnet hard-fork" diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto index 8cab05d266a..ae19c4c6719 100644 --- a/common/protob/messages-management.proto +++ b/common/protob/messages-management.proto @@ -252,28 +252,6 @@ message FirmwareHash { required bytes hash = 1; } -/** - * Request: get firmware image. The firmware will send all chunks in sequence. - * @start - * @next FirmwareChunk - */ -message GetFirmware {} - -/** - * Response: firmware chunk. - * @next FirmwareChunkAck - */ -message FirmwareChunk { - required bytes chunk = 1; -} - -/** - * Request: acknowledge firmware chunk. - * @next FirmwareChunk - * @next Success - */ -message FirmwareChunkAck {} - /** * Request: Request device to wipe all sensitive data and settings * @start diff --git a/common/protob/messages.proto b/common/protob/messages.proto index b74dec49450..60468bdd795 100644 --- a/common/protob/messages.proto +++ b/common/protob/messages.proto @@ -116,9 +116,7 @@ enum MessageType { MessageType_RebootToBootloader = 87 [(bitcoin_only) = true, (wire_in) = true]; MessageType_GetFirmwareHash = 88 [(bitcoin_only) = true, (wire_in) = true]; MessageType_FirmwareHash = 89 [(bitcoin_only) = true, (wire_out) = true]; - MessageType_GetFirmware = 90 [(bitcoin_only) = true, (wire_in) = true]; - MessageType_FirmwareChunk = 91 [(bitcoin_only) = true, (wire_out) = true]; - MessageType_FirmwareChunkAck = 92 [(bitcoin_only) = true, (wire_in) = true]; + reserved 90 to 92; MessageType_SetU2FCounter = 63 [(wire_in) = true]; MessageType_GetNextU2FCounter = 80 [(wire_in) = true]; diff --git a/common/tools/coin_info.py b/common/tools/coin_info.py index 0d7a6c98fc7..19625c13416 100755 --- a/common/tools/coin_info.py +++ b/common/tools/coin_info.py @@ -738,7 +738,7 @@ def deduplicate_erc20(buckets: CoinBuckets, networks: Coins) -> None: as deprecated, with a deprecation pointing to the "main" token. """ - testnet_networks = {n["chain"] for n in networks if "Testnet" in n["name"]} + testnet_networks = {n["chain"] for n in networks if n["slip44"] == 1} def clear_bucket(bucket: Coins) -> None: # allow all coins, except those that are explicitly marked through overrides diff --git a/core/.changelog.d/2130.changed b/core/.changelog.d/2130.changed new file mode 100644 index 00000000000..16dd999c381 --- /dev/null +++ b/core/.changelog.d/2130.changed @@ -0,0 +1 @@ +Remove power-down power-up cycle from touch controller initialization in firmware diff --git a/core/.changelog.d/2130.removed b/core/.changelog.d/2130.removed deleted file mode 100644 index b63ef51b3a9..00000000000 --- a/core/.changelog.d/2130.removed +++ /dev/null @@ -1 +0,0 @@ -Don't initialize touch controller in firmware diff --git a/core/.changelog.d/2380.added b/core/.changelog.d/2380.added new file mode 100644 index 00000000000..e646a026f75 --- /dev/null +++ b/core/.changelog.d/2380.added @@ -0,0 +1 @@ +Documentation for embedded C+Rust debugging diff --git a/core/.changelog.d/2394.added b/core/.changelog.d/2394.added new file mode 100644 index 00000000000..49b9573040a --- /dev/null +++ b/core/.changelog.d/2394.added @@ -0,0 +1 @@ +Show thousands separator when displaying large amounts. diff --git a/core/.changelog.d/2415.fixed b/core/.changelog.d/2415.fixed new file mode 100644 index 00000000000..a724ef5c1fc --- /dev/null +++ b/core/.changelog.d/2415.fixed @@ -0,0 +1 @@ +Ensure correct order when verifying external inputs in Bitcoin signing. diff --git a/core/.changelog.d/2422.fixed b/core/.changelog.d/2422.fixed new file mode 100644 index 00000000000..1fc900a63c4 --- /dev/null +++ b/core/.changelog.d/2422.fixed @@ -0,0 +1 @@ +Fix Decred transaction weight calculation. diff --git a/core/.changelog.d/2433.removed b/core/.changelog.d/2433.removed new file mode 100644 index 00000000000..6daff5d0a22 --- /dev/null +++ b/core/.changelog.d/2433.removed @@ -0,0 +1 @@ +Remove firmware dumping capability. diff --git a/core/.changelog.d/262.added b/core/.changelog.d/262.added new file mode 100644 index 00000000000..410f0283ab8 --- /dev/null +++ b/core/.changelog.d/262.added @@ -0,0 +1 @@ +Optimize touch controller communication diff --git a/core/embed/bootloader/.changelog.d/262.added b/core/embed/bootloader/.changelog.d/262.added new file mode 100644 index 00000000000..410f0283ab8 --- /dev/null +++ b/core/embed/bootloader/.changelog.d/262.added @@ -0,0 +1 @@ +Optimize touch controller communication diff --git a/core/embed/bootloader/main.c b/core/embed/bootloader/main.c index 3d1c5a61dd9..1c915695932 100644 --- a/core/embed/bootloader/main.c +++ b/core/embed/bootloader/main.c @@ -250,8 +250,8 @@ int main(void) { random_delays_init(); // display_init_seq(); #if defined TREZOR_MODEL_T - touch_init(); touch_power_on(); + touch_init(); #endif #if defined TREZOR_MODEL_R diff --git a/core/embed/extmod/modtrezorutils/modtrezorutils.c b/core/embed/extmod/modtrezorutils/modtrezorutils.c index 0768ccf1145..13e4ea4ea62 100644 --- a/core/embed/extmod/modtrezorutils/modtrezorutils.c +++ b/core/embed/extmod/modtrezorutils/modtrezorutils.c @@ -208,46 +208,6 @@ STATIC mp_obj_t mod_trezorutils_firmware_vendor(void) { STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_firmware_vendor_obj, mod_trezorutils_firmware_vendor); -/// def firmware_sector_size(sector: int) -> int: -/// """ -/// Returns the size of the firmware sector. -/// """ -STATIC mp_obj_t mod_trezorutils_firmware_sector_size(mp_obj_t sector) { - mp_uint_t sector_id = trezor_obj_get_uint(sector); - if (sector_id >= FIRMWARE_SECTORS_COUNT) { - mp_raise_msg(&mp_type_ValueError, "Invalid sector."); - } - return mp_obj_new_int(flash_sector_size(FIRMWARE_SECTORS[sector_id])); -} -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_firmware_sector_size_obj, - mod_trezorutils_firmware_sector_size); - -/// def get_firmware_chunk(index: int, offset: int, buffer: bytearray) -> None: -/// """ -/// Reads a chunk of the firmware into `buffer`. -/// """ -STATIC mp_obj_t mod_trezorutils_get_firmware_chunk(const mp_obj_t index_obj, - const mp_obj_t offset_obj, - const mp_obj_t buffer) { - mp_uint_t index = trezor_obj_get_uint(index_obj); - if (index >= FIRMWARE_SECTORS_COUNT) { - mp_raise_msg(&mp_type_ValueError, "Invalid sector."); - } - int sector = FIRMWARE_SECTORS[index]; - mp_uint_t offset = trezor_obj_get_uint(offset_obj); - mp_buffer_info_t buf = {0}; - mp_get_buffer_raise(buffer, &buf, MP_BUFFER_WRITE); - const void *data = flash_get_address(sector, offset, buf.len); - if (data == NULL) { - mp_raise_msg(&mp_type_ValueError, "Invalid read."); - } - memcpy(buf.buf, data, buf.len); - - return mp_const_none; -} -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorutils_get_firmware_chunk_obj, - mod_trezorutils_get_firmware_chunk); - /// def reboot_to_bootloader() -> None: /// """ /// Reboots to bootloader. @@ -271,7 +231,6 @@ STATIC mp_obj_str_t mod_trezorutils_revision_obj = { /// MODEL: str /// EMULATOR: bool /// BITCOIN_ONLY: bool -/// FIRMWARE_SECTORS_COUNT: int STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorutils)}, @@ -282,12 +241,6 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { MP_ROM_PTR(&mod_trezorutils_firmware_hash_obj)}, {MP_ROM_QSTR(MP_QSTR_firmware_vendor), MP_ROM_PTR(&mod_trezorutils_firmware_vendor_obj)}, - {MP_ROM_QSTR(MP_QSTR_get_firmware_chunk), - MP_ROM_PTR(&mod_trezorutils_get_firmware_chunk_obj)}, - {MP_ROM_QSTR(MP_QSTR_firmware_sector_size), - MP_ROM_PTR(&mod_trezorutils_firmware_sector_size_obj)}, - {MP_ROM_QSTR(MP_QSTR_FIRMWARE_SECTORS_COUNT), - MP_ROM_INT(FIRMWARE_SECTORS_COUNT)}, {MP_ROM_QSTR(MP_QSTR_reboot_to_bootloader), MP_ROM_PTR(&mod_trezorutils_reboot_to_bootloader_obj)}, // various built-in constants diff --git a/core/embed/firmware/main.c b/core/embed/firmware/main.c index 210e90fb113..d3069837fd5 100644 --- a/core/embed/firmware/main.c +++ b/core/embed/firmware/main.c @@ -73,7 +73,7 @@ int main(void) { #endif // reinitialize HAL for Trezor One -#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R +#if defined TREZOR_MODEL_1 HAL_Init(); #endif @@ -85,9 +85,7 @@ int main(void) { #if !defined TREZOR_MODEL_1 parse_boardloader_capabilities(); -#endif -#if defined TREZOR_MODEL_T #if PRODUCTION check_and_replace_bootloader(); #endif @@ -98,7 +96,7 @@ int main(void) { // Init peripherals pendsv_init(); -#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R +#if defined TREZOR_MODEL_1 display_init(); button_init(); #endif @@ -110,15 +108,17 @@ int main(void) { #endif #if defined TREZOR_MODEL_T + touch_init(); // display_init_seq(); sdcard_init(); + display_clear(); +#endif +#if !defined TREZOR_MODEL_1 // jump to unprivileged mode // http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/CHDBIBGJ.html __asm__ volatile("msr control, %0" ::"r"(0x1)); __asm__ volatile("isb"); - - display_clear(); #endif #ifdef USE_SECP256K1_ZKP diff --git a/core/embed/firmware/version.h b/core/embed/firmware/version.h index 0c49ee6c120..8d92fa7ab46 100644 --- a/core/embed/firmware/version.h +++ b/core/embed/firmware/version.h @@ -1,6 +1,6 @@ #define VERSION_MAJOR 2 #define VERSION_MINOR 5 -#define VERSION_PATCH 2 +#define VERSION_PATCH 3 #define VERSION_BUILD 0 #define FIX_VERSION_MAJOR 2 diff --git a/core/embed/rust/Cargo.toml b/core/embed/rust/Cargo.toml index f7e1318d58f..1f6cdd4b572 100644 --- a/core/embed/rust/Cargo.toml +++ b/core/embed/rust/Cargo.toml @@ -26,16 +26,19 @@ crate-type = ["staticlib"] [profile.dev] panic = "abort" -split-debuginfo = "unpacked" +split-debuginfo = "off" +debug = 2 [profile.release] panic = "abort" opt-level = "z" lto = true codegen-units = 1 +split-debuginfo = "off" +debug = 2 [profile.test] -split-debuginfo = "unpacked" +split-debuginfo = "off" # Runtime dependencies diff --git a/core/embed/trezorhal/touch.c b/core/embed/trezorhal/touch.c index 8da53294414..f6e03fa878d 100644 --- a/core/embed/trezorhal/touch.c +++ b/core/embed/trezorhal/touch.c @@ -39,6 +39,9 @@ #define Y_POS_MSB (touch_data[5] & 0x0FU) #define Y_POS_LSB (touch_data[6]) +#define EVENT_OLD_TIMEOUT_MS 50 +#define EVENT_MISSING_TIMEOUT_MS 50 + static I2C_HandleTypeDef i2c_handle; static void touch_default_pin_state(void) { @@ -91,19 +94,18 @@ static void touch_active_pin_state(void) { HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); // PC4 capacitive touch panel module (CTPM) interrupt (INT) input - GPIO_InitStructure.Mode = GPIO_MODE_INPUT; + GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; GPIO_InitStructure.Pull = GPIO_PULLUP; GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStructure.Pin = GPIO_PIN_4; HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); + __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_4); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET); // release CTPM reset HAL_Delay(310); // "Time of starting to report point after resetting" min is // 300ms, giving an extra 10ms } -void touch_init(void) { touch_default_pin_state(); } - void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) { // enable I2C clock __HAL_RCC_I2C1_CLK_ENABLE(); @@ -200,28 +202,27 @@ static void _i2c_cycle(void) { HAL_Delay(10); } +void touch_set_mode(void) { + // set register 0xA4 G_MODE to interrupt trigger mode (0x01). basically, CTPM + // generates a pulse when new data is available + uint8_t touch_panel_config[] = {0xA4, 0x01}; + ensure( + sectrue * (HAL_OK == HAL_I2C_Master_Transmit( + &i2c_handle, TOUCH_ADDRESS, touch_panel_config, + sizeof(touch_panel_config), 10)), + NULL); +} + void touch_power_on(void) { if (i2c_handle.Instance) { return; } + touch_default_pin_state(); + // turn on CTP circuitry touch_active_pin_state(); HAL_Delay(50); - - // I2C device interface configuration - _i2c_init(); - - // set register 0xA4 G_MODE to interrupt polling mode (0x00). basically, CTPM - // keeps this input line (to PC4) low while a finger is on the screen. - uint8_t touch_panel_config[] = {0xA4, 0x00}; - ensure( - sectrue * (HAL_OK == HAL_I2C_Master_Transmit( - &i2c_handle, TOUCH_ADDRESS, touch_panel_config, - sizeof(touch_panel_config), 10)), - NULL); - - touch_sensitivity(0x06); } void touch_power_off(void) { @@ -231,6 +232,24 @@ void touch_power_off(void) { touch_default_pin_state(); } +void touch_init(void) { + GPIO_InitTypeDef GPIO_InitStructure; + + // I2C device interface configuration + _i2c_init(); + + // PC4 capacitive touch panel module (CTPM) interrupt (INT) input + GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStructure.Pull = GPIO_PULLUP; + GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStructure.Pin = GPIO_PIN_4; + HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); + __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_4); + + touch_set_mode(); + touch_sensitivity(0x06); +} + void touch_sensitivity(uint8_t value) { // set panel threshold (TH_GROUP) - default value is 0x12 uint8_t touch_panel_threshold[] = {0x80, value}; @@ -243,30 +262,62 @@ void touch_sensitivity(uint8_t value) { uint32_t touch_is_detected(void) { // check the interrupt line coming in from the CTPM. - // the line goes low when a touch event is actively detected. - // reference section 1.2 of "Application Note for FT6x06 CTPM". - // we configure the touch controller to use "interrupt polling mode". - return GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); + // the line make a short pulse, which sets an interrupt flag when new data is + // available. + // Reference section 1.2 of "Application Note for FT6x06 CTPM". we + // configure the touch controller to use "interrupt trigger mode". + + uint32_t event = __HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_4); + if (event != 0) { + __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_4); + } + + return event; +} + +uint32_t check_timeout(uint32_t prev, uint32_t timeout) { + uint32_t current = hal_ticks_ms(); + uint32_t diff = current - prev; + + if (diff >= timeout) { + return 1; + } + + return 0; } uint32_t touch_read(void) { - static uint8_t touch_data[TOUCH_PACKET_SIZE], - previous_touch_data[TOUCH_PACKET_SIZE]; + static uint8_t touch_data[TOUCH_PACKET_SIZE]; static uint32_t xy; - static int touching; - - int last_packet = 0; - if (!touch_is_detected()) { - // only poll when the touch interrupt is active. - // when it's inactive, we might need to read one last data packet to get to - // the TOUCH_END event, which clears the `touching` flag. - if (touching) { - last_packet = 1; - } else { - return 0; + static uint32_t last_check_time = 0; + static uint32_t last_event_time = 0; + static int touching = 0; + + uint32_t detected = touch_is_detected(); + + if (detected == 0) { + last_check_time = hal_ticks_ms(); + + if (touching && check_timeout(last_event_time, EVENT_MISSING_TIMEOUT_MS)) { + // we didn't detect an event for a long time, but there was an active + // touch: send END event, as we probably missed the END event + touching = 0; + return TOUCH_END | xy; } + + return 0; } + if ((touching == 0) && + (check_timeout(last_check_time, EVENT_OLD_TIMEOUT_MS))) { + // we have detected an event, but it might be too old, rather drop it + // (only dropping old events if there was no touch active) + last_check_time = hal_ticks_ms(); + return 0; + } + + last_check_time = hal_ticks_ms(); + uint8_t outgoing[] = {0x00}; // start reading from address 0x00 int result = HAL_I2C_Master_Transmit(&i2c_handle, TOUCH_ADDRESS, outgoing, sizeof(outgoing), 1); @@ -280,11 +331,7 @@ uint32_t touch_read(void) { return 0; // read failure } - if (0 == memcmp(previous_touch_data, touch_data, TOUCH_PACKET_SIZE)) { - return 0; // polled and got the same event again - } else { - memcpy(previous_touch_data, touch_data, TOUCH_PACKET_SIZE); - } + last_event_time = hal_ticks_ms(); const uint32_t number_of_touch_points = touch_data[2] & 0x0F; // valid values are 0, 1, 2 (invalid 0xF before @@ -304,13 +351,6 @@ uint32_t touch_read(void) { } } - if (last_packet) { - // interrupt line is inactive, we didn't read valid touch data, and as far - // as we know, we never sent a TOUCH_END event. - touching = 0; - return TOUCH_END | xy; - } - return 0; } diff --git a/core/mocks/generated/trezorutils.pyi b/core/mocks/generated/trezorutils.pyi index 50396a0b0ae..671eced5713 100644 --- a/core/mocks/generated/trezorutils.pyi +++ b/core/mocks/generated/trezorutils.pyi @@ -60,20 +60,6 @@ def firmware_vendor() -> str: """ -# extmod/modtrezorutils/modtrezorutils.c -def firmware_sector_size(sector: int) -> int: - """ - Returns the size of the firmware sector. - """ - - -# extmod/modtrezorutils/modtrezorutils.c -def get_firmware_chunk(index: int, offset: int, buffer: bytearray) -> None: - """ - Reads a chunk of the firmware into `buffer`. - """ - - # extmod/modtrezorutils/modtrezorutils.c def reboot_to_bootloader() -> None: """ @@ -86,4 +72,3 @@ VERSION_PATCH: int MODEL: str EMULATOR: bool BITCOIN_ONLY: bool -FIRMWARE_SECTORS_COUNT: int diff --git a/core/src/all_modules.py b/core/src/all_modules.py index 7db7ef75cc6..7adcc876a7d 100644 --- a/core/src/all_modules.py +++ b/core/src/all_modules.py @@ -401,8 +401,6 @@ import apps.misc.get_ecdh_session_key apps.misc.get_entropy import apps.misc.get_entropy -apps.misc.get_firmware -import apps.misc.get_firmware apps.misc.get_firmware_hash import apps.misc.get_firmware_hash apps.misc.sign_identity diff --git a/core/src/apps/bitcoin/sign_tx/approvers.py b/core/src/apps/bitcoin/sign_tx/approvers.py index 604fab4926b..0d0286539b2 100644 --- a/core/src/apps/bitcoin/sign_tx/approvers.py +++ b/core/src/apps/bitcoin/sign_tx/approvers.py @@ -248,7 +248,7 @@ async def approve_tx(self, tx_info: TxInfo, orig_txs: list[OriginalTxInfo]) -> N total = self.total_in - self.change_out spending = total - self.external_in - tx_size_vB = self.weight.get_total() / 4 + tx_size_vB = self.weight.get_virtual_size() # fee_threshold = (coin.maxfee per byte * tx size) fee_threshold = (self.coin.maxfee_kb / 1000) * tx_size_vB @@ -402,11 +402,11 @@ async def approve_tx(self, tx_info: TxInfo, orig_txs: list[OriginalTxInfo]) -> N # The mining fee of the transaction as a whole. mining_fee = self.total_in - self.total_out - if mining_fee > max_fee_per_vbyte * self.weight.get_total() / 4: + if mining_fee > max_fee_per_vbyte * self.weight.get_virtual_size(): raise wire.ProcessError("Mining fee over threshold") # The maximum mining fee that the user should be paying. - our_max_mining_fee = max_fee_per_vbyte * self.our_weight.get_total() / 4 + our_max_mining_fee = max_fee_per_vbyte * self.our_weight.get_virtual_size() # The maximum coordination fee for the user's inputs. our_max_coordinator_fee = max_coordinator_fee_rate * ( @@ -420,7 +420,7 @@ async def approve_tx(self, tx_info: TxInfo, orig_txs: list[OriginalTxInfo]) -> N # coordinator. The coordinator does not include the base weight of the transaction when # computing the mining fee, so we take this into account. max_fee_per_weight_unit = mining_fee / ( - self.weight.get_total() - self.weight.get_base_weight() + self.weight.get_weight() - self.weight.get_base_weight() ) # Calculate the minimum registrable output amount in a CoinJoin plus the mining fee that it diff --git a/core/src/apps/bitcoin/sign_tx/bitcoin.py b/core/src/apps/bitcoin/sign_tx/bitcoin.py index 2acdefefcbb..805e984661d 100644 --- a/core/src/apps/bitcoin/sign_tx/bitcoin.py +++ b/core/src/apps/bitcoin/sign_tx/bitcoin.py @@ -203,15 +203,15 @@ async def step3_verify_inputs(self) -> None: # the amounts and scriptPubKeys, because if an invalid value is provided then all # issued signatures will be invalid. expected_digest = self.h_external_inputs - for i in self.external: + for i in range(self.tx_info.tx.inputs_count): progress.advance() - txi = await helpers.request_tx_input(self.tx_req, i, self.coin) - writers.write_tx_input_check(h_check, txi) - if not input_is_external_unverified(txi): - assert txi.script_pubkey is not None # checked in sanitize_tx_input - await self.verify_external_input(i, txi, txi.script_pubkey) - - progress.advance(self.tx_info.tx.inputs_count - len(self.external)) + if i in self.external: + txi = await helpers.request_tx_input(self.tx_req, i, self.coin) + writers.write_tx_input_check(h_check, txi) + if not input_is_external_unverified(txi): + # txi.script_pubkey checked in sanitize_tx_input + assert txi.script_pubkey is not None + await self.verify_external_input(i, txi, txi.script_pubkey) else: # There are internal non-Taproot inputs. We need to verify all inputs, because we can't # trust any amounts or scriptPubKeys. If we did, then an attacker who provides invalid diff --git a/core/src/apps/bitcoin/sign_tx/decred.py b/core/src/apps/bitcoin/sign_tx/decred.py index e9db36b2ba2..25e87b029e0 100644 --- a/core/src/apps/bitcoin/sign_tx/decred.py +++ b/core/src/apps/bitcoin/sign_tx/decred.py @@ -7,6 +7,7 @@ from trezor.messages import PrevOutput from trezor.utils import HashWriter, ensure +from apps.bitcoin.sign_tx.tx_weight import TxWeightCalculator from apps.common.writers import write_compact_size from .. import multisig, scripts_decred, writers @@ -40,7 +41,53 @@ from .sig_hasher import SigHasher +# Decred input size (without script): 32 prevhash, 4 idx, 1 Decred tree, 4 sequence +_TXSIZE_DECRED_INPUT = const(41) + +# Decred script version: 2 bytes +_TXSIZE_DECRED_SCRIPT_VERSION = const(2) + +# Decred expiry size: 4 bytes in footer +_TXSIZE_DECRED_EXPIRY = const(4) + +# Decred witness size (without script): 8 byte amount, 4 byte block height, 4 byte block index +_TXSIZE_DECRED_WITNESS = 16 + + +class DecredTxWeightCalculator(TxWeightCalculator): + def get_base_weight(self) -> int: + base_weight = super().get_base_weight() + base_weight += 4 * _TXSIZE_DECRED_EXPIRY + # Add witness input count. + base_weight += 4 * self.compact_size_len(self.inputs_count) + return base_weight + + def add_input(self, i: TxInput) -> None: + self.inputs_count += 1 + + # Input. + self.counter += 4 * _TXSIZE_DECRED_INPUT + + # Input witness. + input_script_size = self.input_script_size(i) + if i.script_type == InputScriptType.SPENDMULTISIG: + # Decred fixed the the OP_FALSE bug in multisig. + input_script_size -= 1 # Subtract one OP_FALSE byte. + + self.counter += 4 * _TXSIZE_DECRED_WITNESS + self.counter += 4 * self.compact_size_len(input_script_size) + self.counter += 4 * input_script_size + + def add_output(self, script: bytes) -> None: + super().add_output(script) + self.counter += 4 * _TXSIZE_DECRED_SCRIPT_VERSION + + class DecredApprover(BasicApprover): + def __init__(self, tx: SignTx, coin: CoinInfo) -> None: + super().__init__(tx, coin) + self.weight = DecredTxWeightCalculator() + async def add_decred_sstx_submission( self, txo: TxOutput, script_pubkey: bytes ) -> None: diff --git a/core/src/apps/bitcoin/sign_tx/layout.py b/core/src/apps/bitcoin/sign_tx/layout.py index ed82ff07a58..904413a331a 100644 --- a/core/src/apps/bitcoin/sign_tx/layout.py +++ b/core/src/apps/bitcoin/sign_tx/layout.py @@ -190,7 +190,12 @@ async def confirm_total( fee_rate_str: str | None = None if fee_rate >= 0: - fee_rate_str = f"({fee_rate:.1f} sat/{'v' if coin.segwit else ''}B)" + # Use format_amount to get correct thousands separator -- micropython's built-in + # formatting doesn't add thousands sep to floating point numbers. + # We multiply by 10 to get a fixed-point integer with one decimal place, + # and add 0.5 to round to the nearest integer. + fee_rate_formatted = format_amount(int(fee_rate * 10 + 0.5), 1) + fee_rate_str = f"({fee_rate_formatted} sat/{'v' if coin.segwit else ''}B)" await layouts.confirm_total( ctx, diff --git a/core/src/apps/bitcoin/sign_tx/tx_weight.py b/core/src/apps/bitcoin/sign_tx/tx_weight.py index 99b87619e62..bd4df97f828 100644 --- a/core/src/apps/bitcoin/sign_tx/tx_weight.py +++ b/core/src/apps/bitcoin/sign_tx/tx_weight.py @@ -48,9 +48,8 @@ def __init__(self) -> None: self.counter = 0 self.segwit_inputs_count = 0 - def add_input(self, i: TxInput) -> None: - self.inputs_count += 1 - + @classmethod + def input_script_size(cls, i: TxInput) -> int: script_type = i.script_type if common.input_is_external_unverified(i): assert i.script_pubkey is not None # checked in sanitize_tx_input @@ -75,28 +74,31 @@ def add_input(self, i: TxInput) -> None: n = len(i.multisig.nodes) if i.multisig.nodes else len(i.multisig.pubkeys) multisig_script_size = _TXSIZE_MULTISIGSCRIPT + n * (1 + _TXSIZE_PUBKEY) if script_type in common.SEGWIT_INPUT_SCRIPT_TYPES: - multisig_script_size += self.compact_size_len(multisig_script_size) + multisig_script_size += cls.compact_size_len(multisig_script_size) else: - multisig_script_size += self.op_push_len(multisig_script_size) + multisig_script_size += cls.op_push_len(multisig_script_size) - input_script_size = ( + return ( 1 # the OP_FALSE bug in multisig + i.multisig.m * (1 + _TXSIZE_DER_SIGNATURE) + multisig_script_size ) elif script_type == InputScriptType.SPENDTAPROOT: - input_script_size = 1 + _TXSIZE_SCHNORR_SIGNATURE + return 1 + _TXSIZE_SCHNORR_SIGNATURE else: - input_script_size = 1 + _TXSIZE_DER_SIGNATURE + 1 + _TXSIZE_PUBKEY + return 1 + _TXSIZE_DER_SIGNATURE + 1 + _TXSIZE_PUBKEY + def add_input(self, i: TxInput) -> None: + self.inputs_count += 1 self.counter += 4 * _TXSIZE_INPUT + input_script_size = self.input_script_size(i) - if script_type in common.NONSEGWIT_INPUT_SCRIPT_TYPES: + if i.script_type in common.NONSEGWIT_INPUT_SCRIPT_TYPES: input_script_size += self.compact_size_len(input_script_size) self.counter += 4 * input_script_size - elif script_type in common.SEGWIT_INPUT_SCRIPT_TYPES: + elif i.script_type in common.SEGWIT_INPUT_SCRIPT_TYPES: self.segwit_inputs_count += 1 - if script_type == InputScriptType.SPENDP2SHWITNESS: + if i.script_type == InputScriptType.SPENDP2SHWITNESS: # add script_sig size if i.multisig: self.counter += 4 * (2 + _TXSIZE_WITNESSSCRIPT) @@ -105,7 +107,7 @@ def add_input(self, i: TxInput) -> None: else: self.counter += 4 # empty script_sig (1 byte) self.counter += 1 + input_script_size # discounted witness - elif script_type == InputScriptType.EXTERNAL: + elif i.script_type == InputScriptType.EXTERNAL: if i.ownership_proof: script_sig, witness = ownership.read_scriptsig_witness( i.ownership_proof @@ -140,7 +142,7 @@ def get_base_weight(self) -> int: return base_weight - def get_total(self) -> int: + def get_weight(self) -> int: total = self.counter total += self.get_base_weight() if self.segwit_inputs_count: @@ -149,6 +151,12 @@ def get_total(self) -> int: return total + def get_virtual_size(self) -> int: + # Convert transaction weight to virtual transaction size, which is is defined + # as weight / 4 rounded up to the next integer. + # https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#transaction-size-calculations + return (self.get_weight() + 3) // 4 + @staticmethod def compact_size_len(length: int) -> int: if length < 253: diff --git a/core/src/apps/ethereum/networks.py b/core/src/apps/ethereum/networks.py index 89ebe06b37b..b262eb41894 100644 --- a/core/src/apps/ethereum/networks.py +++ b/core/src/apps/ethereum/networks.py @@ -232,6 +232,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="TBWG Chain", rskip60=False, ) + yield NetworkInfo( + chain_id=36, + slip44=60, + shortcut="DX", + name="Dxchain", + rskip60=False, + ) yield NetworkInfo( chain_id=38, slip44=538, @@ -260,6 +267,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Darwinia Crab Network", rskip60=False, ) + yield NetworkInfo( + chain_id=46, + slip44=60, + shortcut="RING", + name="Darwinia Network", + rskip60=False, + ) yield NetworkInfo( chain_id=50, slip44=60, @@ -281,6 +295,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="CoinEx Smart Chain", rskip60=False, ) + yield NetworkInfo( + chain_id=54, + slip44=60, + shortcut="BELLY", + name="Openpiece", + rskip60=False, + ) yield NetworkInfo( chain_id=55, slip44=60, @@ -330,13 +351,6 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Ethereum Classic Testnet Mordor", rskip60=False, ) - yield NetworkInfo( - chain_id=64, - slip44=163, - shortcut="ELLA", - name="Ellaism", - rskip60=False, - ) yield NetworkInfo( chain_id=66, slip44=60, @@ -365,6 +379,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Optimism Kovan", rskip60=False, ) + yield NetworkInfo( + chain_id=70, + slip44=1170, + shortcut="HOO", + name="Hoo Smart Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=74, slip44=60, @@ -393,6 +414,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="PrimusChain", rskip60=False, ) + yield NetworkInfo( + chain_id=79, + slip44=60, + shortcut="ZENITH", + name="Zenith", + rskip60=False, + ) yield NetworkInfo( chain_id=80, slip44=60, @@ -460,7 +488,7 @@ def _networks_iterator() -> Iterator[NetworkInfo]: chain_id=100, slip44=700, shortcut="xDAI", - name="Gnosis Chain (formerly xDai)", + name="Gnosis Chain", rskip60=False, ) yield NetworkInfo( @@ -568,6 +596,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Lightstreams", rskip60=False, ) + yield NetworkInfo( + chain_id=168, + slip44=60, + shortcut="AIOZ", + name="AIOZ Network", + rskip60=False, + ) + yield NetworkInfo( + chain_id=180, + slip44=60, + shortcut="AME", + name="AME Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=186, slip44=60, @@ -582,6 +624,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="BMC", rskip60=False, ) + yield NetworkInfo( + chain_id=193, + slip44=60, + shortcut="CEM", + name="Crypto Emergency", + rskip60=False, + ) yield NetworkInfo( chain_id=199, slip44=60, @@ -652,6 +701,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="High Performance Blockchain", rskip60=False, ) + yield NetworkInfo( + chain_id=300, + slip44=60, + shortcut="xDAI", + name="Optimism on Gnosis Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=321, slip44=60, @@ -683,15 +739,15 @@ def _networks_iterator() -> Iterator[NetworkInfo]: yield NetworkInfo( chain_id=385, slip44=60, - shortcut="LISINSKI", + shortcut="LISINS", name="Lisinski", rskip60=False, ) yield NetworkInfo( - chain_id=420, - slip44=1, - shortcut="tGOR", - name="Optimistic Ethereum Testnet Goerli", + chain_id=416, + slip44=60, + shortcut="SX", + name="SX Network", rskip60=False, ) yield NetworkInfo( @@ -708,6 +764,27 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Double-A Chain", rskip60=False, ) + yield NetworkInfo( + chain_id=520, + slip44=60, + shortcut="XT", + name="XT Smart Chain", + rskip60=False, + ) + yield NetworkInfo( + chain_id=530, + slip44=60, + shortcut="FX", + name="F(x)Core", + rskip60=False, + ) + yield NetworkInfo( + chain_id=534, + slip44=674, + shortcut="CNDL", + name="Candle", + rskip60=False, + ) yield NetworkInfo( chain_id=555, slip44=60, @@ -722,6 +799,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Tao Network", rskip60=False, ) + yield NetworkInfo( + chain_id=592, + slip44=60, + shortcut="ASTR", + name="Astar", + rskip60=False, + ) yield NetworkInfo( chain_id=595, slip44=1, @@ -781,7 +865,7 @@ def _networks_iterator() -> Iterator[NetworkInfo]: yield NetworkInfo( chain_id=880, slip44=60, - shortcut="AMBR", + shortcut="AMBROS", name="Ambros Chain", rskip60=False, ) @@ -792,6 +876,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Wanchain", rskip60=False, ) + yield NetworkInfo( + chain_id=909, + slip44=60, + shortcut="PFT", + name="Portal Fantasy Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=977, slip44=60, @@ -806,6 +897,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Lucky Network", rskip60=False, ) + yield NetworkInfo( + chain_id=1000, + slip44=60, + shortcut="GCD", + name="GTON", + rskip60=False, + ) yield NetworkInfo( chain_id=1001, slip44=1, @@ -820,6 +918,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Newton Testnet", rskip60=False, ) + yield NetworkInfo( + chain_id=1008, + slip44=60, + shortcut="EUN", + name="Eurus", + rskip60=False, + ) yield NetworkInfo( chain_id=1010, slip44=1020, @@ -845,7 +950,7 @@ def _networks_iterator() -> Iterator[NetworkInfo]: chain_id=1024, slip44=60, shortcut="CLV", - name="Clover", + name="CLV Parachain", rskip60=False, ) yield NetworkInfo( @@ -904,6 +1009,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="EnterChain", rskip60=False, ) + yield NetworkInfo( + chain_id=1246, + slip44=60, + shortcut="OM", + name="OM Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=1280, slip44=60, @@ -939,6 +1051,27 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Moonrock", rskip60=False, ) + yield NetworkInfo( + chain_id=1297, + slip44=60, + shortcut="BOBA", + name="Boba Network Bobabase", + rskip60=False, + ) + yield NetworkInfo( + chain_id=1319, + slip44=60, + shortcut="AITD", + name="Aitd", + rskip60=False, + ) + yield NetworkInfo( + chain_id=1506, + slip44=60, + shortcut="KSX", + name="Sherpax", + rskip60=False, + ) yield NetworkInfo( chain_id=1618, slip44=60, @@ -953,6 +1086,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Btachain", rskip60=False, ) + yield NetworkInfo( + chain_id=1688, + slip44=60, + shortcut="LUDAN", + name="LUDAN", + rskip60=False, + ) + yield NetworkInfo( + chain_id=1818, + slip44=1818, + shortcut="CUBE", + name="Cube Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=1856, slip44=60, @@ -974,6 +1121,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="EtherGem", rskip60=False, ) + yield NetworkInfo( + chain_id=2001, + slip44=60, + shortcut="mADA", + name="Milkomeda C1", + rskip60=False, + ) + yield NetworkInfo( + chain_id=2009, + slip44=60, + shortcut="CWN", + name="CloudWalk", + rskip60=False, + ) yield NetworkInfo( chain_id=2020, slip44=60, @@ -1002,6 +1163,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Ecoball", rskip60=False, ) + yield NetworkInfo( + chain_id=2152, + slip44=60, + shortcut="FRA", + name="Findora", + rskip60=False, + ) yield NetworkInfo( chain_id=2213, slip44=60, @@ -1009,6 +1177,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Evanesco", rskip60=False, ) + yield NetworkInfo( + chain_id=2222, + slip44=60, + shortcut="KAVA", + name="Kava EVM", + rskip60=False, + ) + yield NetworkInfo( + chain_id=2223, + slip44=60, + shortcut="VNDT", + name="VChain", + rskip60=False, + ) yield NetworkInfo( chain_id=2559, slip44=60, @@ -1016,6 +1198,34 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Kortho", rskip60=False, ) + yield NetworkInfo( + chain_id=2569, + slip44=60, + shortcut="TPC", + name="TechPay", + rskip60=False, + ) + yield NetworkInfo( + chain_id=2612, + slip44=60, + shortcut="EZC", + name="EZChain C-Chain", + rskip60=False, + ) + yield NetworkInfo( + chain_id=3000, + slip44=60, + shortcut="CPAY", + name="CENNZnet Rata", + rskip60=False, + ) + yield NetworkInfo( + chain_id=3001, + slip44=60, + shortcut="CPAY", + name="CENNZnet Nikau", + rskip60=False, + ) yield NetworkInfo( chain_id=3400, slip44=60, @@ -1023,6 +1233,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Paribu Net", rskip60=False, ) + yield NetworkInfo( + chain_id=3501, + slip44=60, + shortcut="jfin", + name="JFIN Chain", + rskip60=False, + ) + yield NetworkInfo( + chain_id=3737, + slip44=60, + shortcut="CSB", + name="Crossbell", + rskip60=False, + ) yield NetworkInfo( chain_id=3966, slip44=60, @@ -1030,6 +1254,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="DYNO", rskip60=False, ) + yield NetworkInfo( + chain_id=3999, + slip44=60, + shortcut="YCC", + name="YuanChain", + rskip60=False, + ) + yield NetworkInfo( + chain_id=4181, + slip44=60, + shortcut="Φ", + name="PHI Network", + rskip60=False, + ) yield NetworkInfo( chain_id=4689, slip44=60, @@ -1037,6 +1275,20 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="IoTeX Network", rskip60=False, ) + yield NetworkInfo( + chain_id=4919, + slip44=60, + shortcut="XVM", + name="Venidium", + rskip60=False, + ) + yield NetworkInfo( + chain_id=5177, + slip44=60, + shortcut="TLC", + name="TLChain Network", + rskip60=False, + ) yield NetworkInfo( chain_id=5197, slip44=60, @@ -1051,6 +1303,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Uzmi Network", rskip60=False, ) + yield NetworkInfo( + chain_id=5777, + slip44=60, + shortcut="DGCC", + name="Digest Swarm Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=5869, slip44=60, @@ -1065,6 +1324,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Pixie Chain", rskip60=False, ) + yield NetworkInfo( + chain_id=6969, + slip44=60, + shortcut="TOMB", + name="Tomb Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=8000, slip44=60, @@ -1086,6 +1352,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="TOOL Global", rskip60=False, ) + yield NetworkInfo( + chain_id=8898, + slip44=60, + shortcut="MMT", + name="Mammoth", + rskip60=False, + ) yield NetworkInfo( chain_id=8995, slip44=60, @@ -1100,6 +1373,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Evmos", rskip60=False, ) + yield NetworkInfo( + chain_id=9012, + slip44=60, + shortcut="BRB", + name="BerylBit", + rskip60=False, + ) yield NetworkInfo( chain_id=9100, slip44=60, @@ -1121,6 +1401,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="CryptoCoinPay", rskip60=False, ) + yield NetworkInfo( + chain_id=10946, + slip44=60, + shortcut="QDC", + name="Quadrans Blockchain", + rskip60=False, + ) yield NetworkInfo( chain_id=11111, slip44=60, @@ -1156,13 +1443,27 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="BTCIX Network", rskip60=False, ) + yield NetworkInfo( + chain_id=21337, + slip44=60, + shortcut="CPAY", + name="CENNZnet Azalea", + rskip60=False, + ) yield NetworkInfo( chain_id=21816, slip44=60, - shortcut="OML", + shortcut="OMC", name="omChain", rskip60=False, ) + yield NetworkInfo( + chain_id=22023, + slip44=60, + shortcut="SFL", + name="Taycan", + rskip60=False, + ) yield NetworkInfo( chain_id=24484, slip44=227, @@ -1177,6 +1478,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="MintMe.com Coin", rskip60=False, ) + yield NetworkInfo( + chain_id=26863, + slip44=60, + shortcut="OAC", + name="OasisChain", + rskip60=False, + ) yield NetworkInfo( chain_id=31102, slip44=31102, @@ -1184,6 +1492,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Ethersocial Network", rskip60=False, ) + yield NetworkInfo( + chain_id=32520, + slip44=60, + shortcut="Brise", + name="Bitgert", + rskip60=False, + ) yield NetworkInfo( chain_id=32659, slip44=60, @@ -1240,6 +1555,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Celo Alfajores Testnet", rskip60=False, ) + yield NetworkInfo( + chain_id=45000, + slip44=60, + shortcut="TXL", + name="Autobahn Network", + rskip60=False, + ) yield NetworkInfo( chain_id=47805, slip44=60, @@ -1268,6 +1590,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Celo Baklava Testnet", rskip60=False, ) + yield NetworkInfo( + chain_id=62621, + slip44=60, + shortcut="MTV", + name="MultiVAC", + rskip60=False, + ) yield NetworkInfo( chain_id=63000, slip44=60, @@ -1275,6 +1604,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="eCredits", rskip60=False, ) + yield NetworkInfo( + chain_id=71402, + slip44=60, + shortcut="pCKB", + name="Godwoken", + rskip60=False, + ) yield NetworkInfo( chain_id=73799, slip44=1, @@ -1282,6 +1618,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Energy Web Volta Testnet", rskip60=False, ) + yield NetworkInfo( + chain_id=73927, + slip44=60, + shortcut="XIN", + name="Mixin Virtual Machine", + rskip60=False, + ) yield NetworkInfo( chain_id=78110, slip44=60, @@ -1296,6 +1639,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Mumbai", rskip60=False, ) + yield NetworkInfo( + chain_id=88888, + slip44=60, + shortcut="IVAR", + name="IVAR Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=99999, slip44=60, @@ -1366,6 +1716,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="QuarkChain", rskip60=False, ) + yield NetworkInfo( + chain_id=103090, + slip44=60, + shortcut="◈", + name="Crystaleum", + rskip60=False, + ) yield NetworkInfo( chain_id=108801, slip44=60, @@ -1373,6 +1730,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="BROChain", rskip60=False, ) + yield NetworkInfo( + chain_id=131419, + slip44=60, + shortcut="ETND", + name="ETND Chain", + rskip60=False, + ) yield NetworkInfo( chain_id=200625, slip44=200625, @@ -1422,6 +1786,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="Polis", rskip60=False, ) + yield NetworkInfo( + chain_id=474142, + slip44=60, + shortcut="OPC", + name="OpenChain", + rskip60=False, + ) yield NetworkInfo( chain_id=888888, slip44=60, @@ -1478,6 +1849,13 @@ def _networks_iterator() -> Iterator[NetworkInfo]: name="IOLite", rskip60=False, ) + yield NetworkInfo( + chain_id=20180430, + slip44=60, + shortcut="SMT", + name="SmartMesh", + rskip60=False, + ) yield NetworkInfo( chain_id=20181205, slip44=60, diff --git a/core/src/apps/ethereum/tokens.py b/core/src/apps/ethereum/tokens.py index 67f9878eb1f..74e332643db 100644 --- a/core/src/apps/ethereum/tokens.py +++ b/core/src/apps/ethereum/tokens.py @@ -80,6 +80,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("ADXL", 4) # eth / AdEx Network (legacy) if address == b"\x5c\xa9\xa7\x1b\x1d\x01\x84\x9c\x0a\x95\x49\x0c\xc0\x05\x59\x71\x7f\xcf\x0d\x1d": return TokenInfo("AE", 18) # eth / aeternity + if address == b"\x25\x12\x65\x80\x92\xe5\x58\x91\x0a\xef\x76\xb4\xdb\x7e\xbb\xa7\x01\x62\x6a\x15": + return TokenInfo("aETH", 18) # eth / Aave Interest bearing ETH if address == b"\xc9\x94\xa2\xde\xb0\x25\x43\xdb\x1f\x48\x68\x84\x38\xb9\x90\x3c\x4b\x30\x5c\xe3": return TokenInfo("AEUR", 2) # eth / Augmint Euro if address == b"\xfb\x48\xe0\xde\xa8\x37\xf9\x43\x83\x09\xa7\xe9\xf0\xcf\xe7\xee\x33\x53\xa8\x4e": @@ -380,6 +382,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("BOUTS", 18) # eth / BoutsPro if address == b"\x78\x01\x16\xd9\x1e\x55\x92\xe5\x8a\x3b\x3c\x76\xa3\x51\x57\x1b\x39\xab\xce\xc6": return TokenInfo("BOXX", 15) # eth / BOXX Token [Blockparty] + if address == b"\x51\x97\xfb\xe1\xa8\x66\x79\xff\x13\x60\xe2\x78\x62\xbf\x88\xb0\xc5\x11\x9b\xd8": + return TokenInfo("BPF", 18) # eth / BITPIF if address == b"\x32\x76\x82\x77\x9b\xab\x2b\xf4\xd1\x33\x7e\x89\x74\xab\x9d\xe8\x27\x5a\x7c\xa8": return TokenInfo("BPT", 18) # eth / Blockport Token if address == b"\x5a\xf2\xbe\x19\x3a\x6a\xbc\xa9\xc8\x81\x70\x01\xf4\x57\x44\x77\x7d\xb3\x07\x56": @@ -558,8 +562,6 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("CNB", 8) # eth / Canabio if address == b"\xd4\xc4\x35\xf5\xb0\x9f\x85\x5c\x33\x17\xc8\x52\x4c\xb1\xf5\x86\xe4\x27\x95\xfa": return TokenInfo("CND", 18) # eth / Cindicator - if address == b"\xbc\x13\x8b\xd2\x0c\x98\x18\x6c\xc0\x34\x2c\x8e\x38\x09\x53\xaf\x0c\xb4\x8b\xa8": - return TokenInfo("CNDL", 18) # eth / Candle if address == b"\x87\x13\xd2\x66\x37\xcf\x49\xe1\xb6\xb4\xa7\xce\x57\x10\x6a\xab\xc9\x32\x53\x43": return TokenInfo("CNN", 18) # eth / Content Neutrality Network if address == b"\xb4\xb1\xd2\xc2\x17\xec\x07\x76\x58\x4c\xe0\x8d\x3d\xd9\x8f\x90\xed\xed\xa4\x4b": @@ -684,6 +686,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("DADI", 18) # eth / DADI if address == b"\x1d\x01\x98\x82\x9c\xba\x76\x8e\x4e\xf2\xf7\x62\xcd\x82\x84\x2b\xba\x3e\x34\x58": return TokenInfo("DAF", 6) # eth / Diamonds are Forever + if address == b"\x6b\x17\x54\x74\xe8\x90\x94\xc4\x4d\xa9\x8b\x95\x4e\xed\xea\xc4\x95\x27\x1d\x0f": + return TokenInfo("DAI", 18) # eth / Dai Stablecoin v2.0 if address == b"\x07\xd9\xe4\x9e\xa4\x02\x19\x4b\xf4\x8a\x82\x76\xda\xfb\x16\xe4\xed\x63\x33\x17": return TokenInfo("DALC", 8) # eth / DaleCoin if address == b"\x9b\x70\x74\x0e\x70\x8a\x08\x3c\x6f\xf3\x8d\xf5\x22\x97\x02\x0f\x5d\xfa\xa5\xee": @@ -736,6 +740,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("DEX", 18) # eth / DEX if address == b"\x43\x1a\xd2\xff\x6a\x9c\x36\x58\x05\xeb\xad\x47\xee\x02\x11\x48\xd6\xf7\xdb\xe0": return TokenInfo("DF", 18) # eth / dForce Platform Token + if address == b"\xe0\xb7\x92\x7c\x4a\xf2\x37\x65\xcb\x51\x31\x4a\x0e\x05\x21\xa9\x64\x5f\x0e\x2a": + return TokenInfo("DGD", 9) # eth / Digix DAO if address == b"\xf6\xcf\xe5\x3d\x6f\xeb\xae\xea\x05\x1f\x40\x0f\xf5\xfc\x14\xf0\xcb\xbd\xac\xa1": return TokenInfo("DGPT", 18) # eth / DigiPulse if address == b"\x6a\xed\xbf\x8d\xff\x31\x43\x72\x20\xdf\x35\x19\x50\xba\x2a\x33\x62\x16\x8d\x1b": @@ -1214,8 +1220,12 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("GL", 18) # eth / GLOSMATIN if address == b"\x71\xd0\x1d\xb8\xd6\xa2\xfb\xea\x7f\x8d\x43\x45\x99\xc2\x37\x98\x0c\x23\x4e\x4c": return TokenInfo("GLA", 8) # eth / Gladius + if address == b"\xa0\x00\x8f\x51\x0f\xe9\xee\x69\x6e\x7e\x32\x0c\x9e\x5c\xbf\x61\xe2\x77\x91\xee": + return TokenInfo("GMB", 18) # eth / GAMB if address == b"\x68\x10\xe7\x76\x88\x0c\x02\x93\x3d\x47\xdb\x1b\x9f\xc0\x59\x08\xe5\x38\x6b\x96": return TokenInfo("GNO", 18) # eth / Gnosis + if address == b"\xa7\x44\x76\x44\x31\x19\xa9\x42\xde\x49\x85\x90\xfe\x1f\x24\x54\xd7\xd4\xac\x0d": + return TokenInfo("GNT", 18) # eth / Golem if address == b"\x6e\xc8\xa2\x4c\xab\xdc\x33\x9a\x06\xa1\x72\xf8\x22\x3e\xa5\x57\x05\x5a\xda\xa5": return TokenInfo("GNX", 9) # eth / Genaro Network if address == b"\x24\x75\x51\xf2\xeb\x33\x62\xe2\x22\xc7\x42\xe9\xc7\x88\xb8\x95\x7d\x9b\xc8\x7e": @@ -1248,6 +1258,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("GST2", 2) # eth / Gastoken.io if address == b"\xb7\x08\x35\xd7\x82\x2e\xbb\x94\x26\xb5\x65\x43\xe3\x91\x84\x6c\x10\x7b\xd3\x2c": return TokenInfo("GTC", 18) # eth / GTC Token + if address == b"\xeb\x98\x6d\xa9\x94\xe4\xa1\x18\xd5\x95\x6b\x02\xd8\xb7\xc3\xc7\xce\x37\x36\x74": + return TokenInfo("GTH", 18) # eth / GTH if address == b"\x02\x5a\xba\xd9\xe5\x18\x51\x6f\xda\xaf\xbd\xcd\xb9\x70\x1b\x37\xfb\x7e\xf0\xfa": return TokenInfo("GTKT", 0) # eth / GTKT if address == b"\xc5\xbb\xae\x50\x78\x1b\xe1\x66\x93\x06\xb9\xe0\x01\xef\xf5\x7a\x29\x57\xb0\x9d": @@ -1256,6 +1268,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("GUESS", 2) # eth / Peerguess if address == b"\x98\x47\x34\x5d\xe8\xb6\x14\xc9\x56\x14\x6b\xbe\xa5\x49\x33\x6d\x9c\x8d\x26\xb6": return TokenInfo("GULD", 8) # eth / GULD ERC20 + if address == b"\xf7\xb0\x98\x29\x8f\x7c\x69\xfc\x14\x61\x0b\xf7\x1d\x5e\x02\xc6\x07\x92\x89\x4c": + return TokenInfo("GUP", 3) # eth / Matchpool if address == b"\x05\x6f\xd4\x09\xe1\xd7\xa1\x24\xbd\x70\x17\x45\x9d\xfe\xa2\xf3\x87\xb6\xd5\xcd": return TokenInfo("GUSD", 2) # eth / Gemini dollar if address == b"\x10\x3c\x3a\x20\x9d\xa5\x9d\x3e\x7c\x4a\x89\x30\x7e\x66\x52\x1e\x08\x1c\xfd\xf0": @@ -1502,6 +1516,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("KAN", 18) # eth / BitKan if address == b"\xe1\x52\x54\xa1\x3d\x34\xf9\x70\x03\x20\x33\x0a\xbc\xb7\xc7\xf8\x57\xaf\x2f\xb7": return TokenInfo("KAPA", 2) # eth / KAPA COIN + if address == b"\x0d\x6d\xd9\xf6\x8d\x24\xec\x1d\x5f\xe2\x17\x4f\x3e\xc8\xda\xb5\x2b\x52\xba\xf5": + return TokenInfo("KC", 18) # eth / KMCC if address == b"\x03\x9b\x56\x49\xa5\x99\x67\xe3\xe9\x36\xd7\x47\x1f\x9c\x37\x00\x10\x0e\xe1\xab": return TokenInfo("KCS", 6) # eth / KuCoin if address == b"\x72\xd3\x2a\xc1\xc5\xe6\x6b\xfc\x5b\x08\x80\x62\x71\xf8\xee\xf9\x15\x54\x51\x64": @@ -1606,6 +1622,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("LOK", 18) # eth / LOK if address == b"\x25\x3c\x7d\xd0\x74\xf4\xba\xcb\x30\x53\x87\xf9\x22\x22\x5a\x4f\x73\x7c\x08\xbd": return TokenInfo("LOOK", 18) # eth / LookRev + if address == b"\xf4\xd2\x88\x8d\x29\xd7\x22\x22\x6f\xaf\xa5\xd9\xb2\x4f\x91\x64\xc0\x92\x42\x1e": + return TokenInfo("LOOKS", 18) # eth / LooksRare if address == b"\x42\x47\x6f\x74\x42\x92\x10\x7e\x34\x51\x9f\x9c\x35\x79\x27\x07\x4e\xa3\xf7\x5d": return TokenInfo("LOOM", 18) # eth / LOOM if address == b"\xa4\xe8\xc3\xec\x45\x61\x07\xea\x67\xd3\x07\x5b\xf9\xe3\xdf\x3a\x75\x82\x3d\xb0": @@ -1640,6 +1658,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("M-ETH", 18) # eth / M-ETH if address == b"\x5b\x09\xa0\x37\x1c\x1d\xa4\x4a\x8e\x24\xd3\x6b\xf5\xde\xb1\x14\x1a\x84\xd8\x75": return TokenInfo("MAD", 18) # eth / MAD + if address == b"\xb0\xc7\xa3\xba\x49\xc7\xa6\xea\xba\x6c\xd4\xa9\x6c\x55\xa1\x39\x10\x70\xac\x9a": + return TokenInfo("MAGIC", 18) # eth / MAGIC if address == b"\xe2\x5b\xce\xc5\xd3\x80\x1c\xe3\xa7\x94\x07\x9b\xf9\x4a\xdf\x1b\x8c\xcd\x80\x2d": return TokenInfo("MAN", 18) # eth / Matrix AI Network if address == b"\x0f\x5d\x2f\xb2\x9f\xb7\xd3\xcf\xee\x44\x4a\x20\x02\x98\xf4\x68\x90\x8c\xc9\x42": @@ -1702,8 +1722,14 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("MITH", 18) # eth / Mithril if address == b"\x4a\x52\x7d\x8f\xc1\x3c\x52\x03\xab\x24\xba\x09\x44\xf4\xcb\x14\x65\x8d\x1d\xb6": return TokenInfo("MITX", 18) # eth / Morpheus Infrastructure Token + if address == b"\x9f\x8f\x72\xaa\x93\x04\xc8\xb5\x93\xd5\x55\xf1\x2e\xf6\x58\x9c\xc3\xa5\x79\xa2": + return TokenInfo("MKR", 18) # eth / MakerDAO if address == b"\x79\x39\x88\x2b\x54\xfc\xf0\xbc\xae\x6b\x53\xde\xc3\x9a\xd6\xe8\x06\x17\x64\x42": return TokenInfo("MKT", 8) # eth / Mikado + if address == b"\xec\x67\x00\x5c\x4e\x49\x8e\xc7\xf5\x5e\x09\x2b\xd1\xd3\x5c\xbc\x47\xc9\x18\x92": + return TokenInfo("MLN (new)", 18) # eth / Melonport + if address == b"\xbe\xb9\xef\x51\x4a\x37\x9b\x99\x7e\x07\x98\xfd\xcc\x90\x1e\xe4\x74\xb6\xd9\xa1": + return TokenInfo("[deprecated] MLN (old)", 18) # eth / Melonport if address == b"\x6b\x4c\x7a\x5e\x3f\x0b\x99\xfc\xd8\x3e\x9c\x08\x9b\xdd\xd6\xc7\xfc\xe5\xc6\x11": return TokenInfo("MM", 18) # eth / Million if address == b"\x1a\x95\xb2\x71\xb0\x53\x5d\x15\xfa\x49\x93\x2d\xab\xa3\x1b\xa6\x12\xb5\x29\x46": @@ -1806,6 +1832,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("NEWB", 0) # eth / Newbium if address == b"\xb6\x21\x32\xe3\x5a\x6c\x13\xee\x1e\xe0\xf8\x4d\xc5\xd4\x0b\xad\x8d\x81\x52\x06": return TokenInfo("NEXO", 18) # eth / Nexo + if address == b"\x3c\x8d\x2f\xce\x49\x90\x6e\x11\xe7\x1c\xb1\x6f\xa0\xff\xeb\x2b\x16\xc2\x96\x38": + return TokenInfo("NFTL", 18) # eth / Nifty League if address == b"\x72\xdd\x4b\x6b\xd8\x52\xa3\xaa\x17\x2b\xe4\xd6\xc5\xa6\xdb\xec\x58\x8c\xf1\x31": return TokenInfo("NGC", 18) # eth / NAGA Coin if address == b"\xe2\x65\x17\xa9\x96\x72\x99\x45\x3d\x3f\x1b\x48\xaa\x00\x5e\x61\x27\xe6\x72\x10": @@ -1820,6 +1848,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("NOAH", 18) # eth / Noah Coin if address == b"\xf4\xfa\xea\x45\x55\x75\x35\x4d\x26\x99\xbc\x20\x9b\x0a\x65\xca\x99\xf6\x99\x82": return TokenInfo("NOBS", 18) # eth / No BS Crypto + if address == b"\x64\x3b\x68\x70\xbe\xab\xee\x94\x1b\x92\x60\xa0\xa8\x78\xbc\xf4\xa6\x1f\xb0\xf1": + return TokenInfo("NONE", 0) # eth / None if address == b"\x00\x27\x44\x9b\xf0\x88\x7c\xa3\xe4\x31\xd2\x63\xff\xde\xfb\x24\x4d\x95\xb5\x55": return TokenInfo("NOT", 18) # eth / Token Not if address == b"\xec\x46\xf8\x20\x7d\x76\x60\x12\x45\x4c\x40\x8d\xe2\x10\xbc\xbc\x22\x43\xe7\x1c": @@ -2110,6 +2140,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("QBX", 18) # eth / qiibeeToken if address == b"\x68\x7b\xfc\x3e\x73\xf6\xaf\x55\xf0\xcc\xca\x84\x50\x11\x4d\x10\x7e\x78\x1a\x0e": return TokenInfo("QCH", 18) # eth / QChi + if address == b"\x9a\xdc\x77\x10\xe9\xd1\xb2\x9d\x8a\x78\xc0\x4d\x52\xd3\x25\x32\x29\x7c\x2e\xf3": + return TokenInfo("QDT", 18) # eth / Quadrans Token if address == b"\xea\x26\xc4\xac\x16\xd4\xa5\xa1\x06\x82\x0b\xc8\xae\xe8\x5f\xd0\xb7\xb2\xb6\x64": return TokenInfo("QKC", 18) # eth / QuarkChain if address == b"\x4a\x22\x0e\x60\x96\xb2\x5e\xad\xb8\x83\x58\xcb\x44\x06\x8a\x32\x48\x25\x46\x75": @@ -2146,6 +2178,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("RBX", 18) # eth / RBX if address == b"\xf9\x70\xb8\xe3\x6e\x23\xf7\xfc\x3f\xd7\x52\xee\xa8\x6f\x8b\xe8\xd8\x33\x75\xa6": return TokenInfo("RCN", 18) # eth / Ripio Credit Network + if address == b"\x25\x5a\xa6\xdf\x07\x54\x0c\xb5\xd3\xd2\x97\xf0\xd0\xd4\xd8\x4c\xb5\x2b\xc8\xe6": + return TokenInfo("RDN", 18) # eth / Raiden Network if address == b"\xd9\x67\xd9\xf9\x41\xcd\x31\x6a\xb2\x38\xd3\xee\x76\x1f\x80\xb7\xca\xec\x78\x19": return TokenInfo("RDV", 18) # eth / Rendezvous if address == b"\x76\x7b\xa2\x91\x5e\xc3\x44\x01\x5a\x79\x38\xe3\xee\xdf\xec\x27\x85\x19\x5d\x05": @@ -2168,6 +2202,10 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("REMI", 18) # eth / REMI if address == b"\x40\x8e\x41\x87\x6c\xcc\xdc\x0f\x92\x21\x06\x00\xef\x50\x37\x26\x56\x05\x2a\x38": return TokenInfo("REN", 18) # eth / Republic Token + if address == b"\x19\x85\x36\x5e\x9f\x78\x35\x9a\x9b\x6a\xd7\x60\xe3\x24\x12\xf4\xa4\x45\xe8\x62": + return TokenInfo("REP", 18) # eth / Augur + if address == b"\xe9\x43\x27\xd0\x7f\xc1\x79\x07\xb4\xdb\x78\x8e\x5a\xdf\x2e\xd4\x24\xad\xdf\xf6": + return TokenInfo("[deprecated] REP", 18) # eth / Augur if address == b"\x22\x16\x57\x77\x68\x46\x89\x09\x89\xa7\x59\xba\x29\x73\xe4\x27\xdf\xf5\xc9\xbb": return TokenInfo("REPv2", 18) # eth / Reputation if address == b"\x8f\x82\x21\xaf\xbb\x33\x99\x8d\x85\x84\xa2\xb0\x57\x49\xba\x73\xc3\x7a\x93\x8a": @@ -2180,8 +2218,6 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("REX", 18) # eth / imbrex if address == b"\xd0\x92\x9d\x41\x19\x54\xc4\x74\x38\xdc\x1d\x87\x1d\xd6\x08\x1f\x5c\x5e\x14\x9c": return TokenInfo("RFR", 4) # eth / Refereum - if address == b"\xf4\xc5\x71\xfb\x6d\xd7\x04\xe5\x85\x61\xcd\xd2\x75\xfa\x4b\x80\xcf\xe8\x2f\x76": - return TokenInfo("RFX", 8) # eth / ROTH if address == b"\x4c\x38\x3b\xdc\xae\x52\xa6\xe1\xcb\x81\x0c\x76\xc7\x0d\x6f\x31\xa2\x49\xec\x9b": return TokenInfo("RGS", 8) # eth / Rusgas if address == b"\x16\x82\x96\xbb\x09\xe2\x4a\x88\x80\x5c\xb9\xc3\x33\x56\x53\x6b\x98\x0d\x3f\xc5": @@ -2192,6 +2228,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("RIYA", 8) # eth / Etheriya if address == b"\x10\x6a\xa4\x92\x95\xb5\x25\xfc\xf9\x59\xaa\x75\xec\x3f\x7d\xcb\xf5\x35\x2f\x1c": return TokenInfo("RKT", 18) # eth / Rock + if address == b"\x60\x7f\x4c\x5b\xb6\x72\x23\x0e\x86\x72\x08\x55\x32\xf7\xe9\x01\x54\x4a\x73\x75": + return TokenInfo("RLC", 9) # eth / IEx.ec if address == b"\xcc\xed\x5b\x82\x88\x08\x6b\xe8\xc3\x8e\x23\x56\x7e\x68\x4c\x37\x40\xbe\x4d\x48": return TokenInfo("RLT", 10) # eth / RouletteToken if address == b"\xbe\x99\xb0\x97\x09\xfc\x75\x3b\x09\xbc\xf5\x57\xa9\x92\xf6\x60\x5d\x59\x97\xb0": @@ -3332,6 +3370,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("VOC", 18) # eth / VORMACOIN if address == b"\x83\xee\xa0\x0d\x83\x8f\x92\xde\xc4\xd1\x47\x56\x97\xb9\xf4\xd3\x53\x7b\x56\xe3": return TokenInfo("VOISE", 8) # eth / Voise + if address == b"\x7d\x51\x21\x50\x51\x49\x06\x5b\x56\x2c\x78\x9a\x01\x45\xed\x75\x0e\x6e\x8c\xdd": + return TokenInfo("VR", 18) # eth / Victoria VR if address == b"\xf7\x22\xb0\x19\x10\xf9\x3b\x84\xed\xa9\xca\x12\x8b\x9f\x05\x82\x1a\x41\xea\xe1": return TokenInfo("VRE", 18) # eth / Vrenelium if address == b"\x10\xbc\x51\x8c\x32\xfb\xae\x5e\x38\xec\xb5\x0a\x61\x21\x60\x57\x1b\xd8\x1e\x44": @@ -3536,6 +3576,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("ZCS", 18) # eth / Zeusshield if address == b"\x7a\x28\x10\xd3\xd8\x59\xed\x03\xed\xe5\x23\xeb\x80\x1a\x3b\x43\xb5\xe8\x97\x9c": return TokenInfo("ZDC", 18) # eth / Zodcoin + if address == b"\x2e\x59\xd1\x47\x96\x2e\x2b\xb3\xfb\xdc\x52\xdc\x18\xcf\xba\x26\x53\xc0\x6c\xcc": + return TokenInfo("ZENI", 18) # eth / Zeni Token if address == b"\x81\x88\xe5\x1b\xc6\x78\xf0\x07\x05\x31\xf0\xe7\x82\x71\x8d\xf0\x02\x74\x52\xde": return TokenInfo("ZERA", 8) # eth / ZERACOIN if address == b"\xe7\xe4\x27\x9b\x80\xd3\x19\xed\xe2\x88\x98\x55\x13\x5a\x22\x02\x1b\xaf\x09\x07": @@ -3556,6 +3598,8 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("ZMN", 18) # eth / ZMINE if address == b"\xb5\xb8\xf5\x61\x6f\xe4\x2d\x5c\xec\xa3\xe8\x7f\x3f\xdd\xbd\xd8\xf4\x96\xd7\x60": return TokenInfo("ZPR", 18) # eth / ZPER + if address == b"\xe4\x1d\x24\x89\x57\x1d\x32\x21\x89\x24\x6d\xaf\xa5\xeb\xde\x1f\x46\x99\xf4\x98": + return TokenInfo("ZRX", 18) # eth / 0x Project if address == b"\xe3\x86\xb1\x39\xed\x37\x15\xca\x4b\x18\xfd\x52\x67\x1b\xdc\xea\x1c\xdf\xe4\xb1": return TokenInfo("ZST", 8) # eth / Zeus Exchange if address == b"\xe8\xf9\xfa\x97\x7e\xa5\x85\x59\x1d\x9f\x39\x46\x81\x31\x8c\x16\x55\x25\x77\xfb": @@ -3571,17 +3615,31 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("ILSC", 2) # rop / IsraCoin if address == b"\x4c\x57\x2f\xbc\x03\xd4\xa2\xb6\x83\xcf\x4f\x10\xff\xdc\xaf\xd0\x08\x85\xe1\x08": return TokenInfo("MEWV5", 9) # rop / MEW V5 Test Token + if address == b"\xfd\x5a\x69\xa1\x30\x95\x95\xff\x51\x21\x55\x3f\x52\xc8\xa5\xb2\xb1\xb3\x10\x31": + return TokenInfo("NONE", 0) # rop / None if address == b"\xaa\x1d\x9d\x07\x88\xda\xca\x9a\x30\x11\x1d\x12\xaa\x0d\x98\x09\x0f\x02\xea\x30": return TokenInfo("RCL", 18) # rop / RascalCoin + if address == b"\x73\x14\xdc\x4d\x77\x94\xb5\xe7\x89\x42\x12\xca\x15\x56\xae\x8e\x3d\xe5\x86\x21": + return TokenInfo("RLC", 9) # rop / iExec RLC if chain_id == 4: + if address == b"\x39\x8a\x7a\x69\xf3\xc5\x91\x81\xa1\xff\xe3\x4b\xed\x11\xdc\xb5\xdf\x86\x3a\x8a": + return TokenInfo("AETH", 18) # rin / AKASHA Tokens if address == b"\xe2\x78\x26\xee\x77\x8b\x6f\x78\xa4\x9a\x68\x6d\xa7\xd6\x4f\x6e\x7b\x08\x4a\x4f": return TokenInfo("BHNT", 0) # rin / Berlin Hack&Tell winner token if address == b"\x8b\x65\xd4\xb7\xee\x3f\xff\xa9\x86\xc5\x77\xf0\xf4\xb7\x0a\x21\xba\xe3\xdd\x54": return TokenInfo("CTGA", 18) # rin / Convenient To Go + if address == b"\x27\x5a\x5b\x34\x65\x99\xb5\x69\x17\xe7\xb1\xc9\xde\x01\x9d\xcf\x9e\xad\x86\x1a": + return TokenInfo("KC", 18) # rin / Karma Token + if address == b"\x64\x75\xa7\xfa\x6e\xd2\xd5\x18\x0f\x0e\x0a\x07\xc2\xd9\x51\xd1\x2c\x0e\xdb\x91": + return TokenInfo("NONE", 0) # rin / None if address == b"\x12\xfe\x17\x4c\x09\x7f\x6b\x3e\x87\x6b\x3b\x06\x0c\x90\x61\xf4\xb9\xde\xbb\x80": return TokenInfo("PPD", 18) # rin / PP Donation if address == b"\x2d\x42\x7d\x9e\x53\x5e\x43\x82\x60\x6b\x93\x29\x0d\xcc\x13\xa5\xe9\xa6\x94\xbe": return TokenInfo("qwe", 18) # rin / qweToken + if address == b"\x36\x15\x75\x70\x11\x11\x25\x60\x52\x15\x36\x25\x8c\x1e\x73\x25\xae\x3b\x48\xae": + return TokenInfo("RDN", 18) # rin / Raiden + if address == b"\xf1\xe6\xad\x3a\x7e\xf0\xc8\x6c\x91\x5f\x0f\xed\xf8\x0e\xd8\x51\x80\x9b\xea\x90": + return TokenInfo("RLC", 9) # rin / iExec RLC if address == b"\x0a\x05\x7a\x87\xce\x9c\x56\xd7\xe3\x36\xb4\x17\xc7\x9c\xf3\x0e\x8d\x27\x86\x0b": return TokenInfo("WALL", 15) # rin / WALLETH Community-Token if chain_id == 8: @@ -3691,10 +3749,30 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: if chain_id == 42: if address == b"\x86\x67\x55\x92\x54\x24\x1d\xde\xd4\xd1\x13\x92\xf8\x68\xd7\x20\x92\x76\x53\x67": return TokenInfo("Aeternity", 18) # kov / Aeternity + if address == b"\xc4\x37\x5b\x7d\xe8\xaf\x5a\x38\xa9\x35\x48\xeb\x84\x53\xa4\x98\x22\x2c\x4f\xf2": + return TokenInfo("DAI", 18) # kov / RadarRelay test Dai Stablecoin v1.0 + if address == b"\xee\xe3\x87\x06\x57\xe4\x71\x66\x70\xf1\x85\xdf\x08\x65\x2d\xd8\x48\xfe\x8f\x7e": + return TokenInfo("DGD", 18) # kov / RadarRelay test Digix DAO Token if address == b"\x47\x33\x65\x9a\x5c\xb7\x89\x6a\x65\xc9\x18\xad\xd6\xf5\x9c\x51\x48\xfb\x5f\xfa": return TokenInfo("GAV", 6) # kov / GavCoin + if address == b"\xef\x7f\xff\x64\x38\x9b\x81\x4a\x94\x6f\x3e\x92\x10\x55\x13\x70\x5c\xa6\xb9\x90": + return TokenInfo("GNT", 18) # kov / RadarRelay test Golem Network Token + if address == b"\x3c\x67\xf7\xd4\xde\xcf\x77\x95\x22\x5f\x51\xb5\x41\x34\xf8\x11\x37\x38\x5f\x83": + return TokenInfo("GUP", 3) # kov / GUP + if address == b"\x1d\xad\x47\x83\xcf\x3f\xe3\x08\x5c\x14\x26\x15\x7a\xb1\x75\xa6\x11\x9a\x04\xba": + return TokenInfo("MKR", 18) # kov / RadarRelay test MakerDAO + if address == b"\xaa\xf6\x4b\xfc\xc3\x2d\x0f\x15\x87\x3a\x02\x16\x3e\x7e\x50\x06\x71\xa4\xff\xcd": + return TokenInfo("MKR", 18) # kov / MakerDAO + if address == b"\x32\x3b\x5d\x4c\x32\x34\x5c\xed\x77\x39\x3b\x35\x30\xb1\xee\xd0\xf3\x46\x42\x9d": + return TokenInfo("MLN", 18) # kov / RadarRelay test Melon Tokens + if address == b"\xb1\x88\x45\xc2\x60\xf6\x80\xd5\xb9\xd8\x46\x49\x63\x88\x13\xe3\x42\xe4\xf8\xc9": + return TokenInfo("REP", 18) # kov / RadarRelay test Augur Reputation Token + if address == b"\xc5\x75\x38\x84\x6e\xc4\x05\xea\x25\xde\xb0\x0e\x0f\x9b\x29\xa4\x32\xd5\x35\x07": + return TokenInfo("RLC", 9) # kov / iExec RLC if address == b"\x4a\x6e\x6c\x38\x68\xa2\x79\xe1\xd9\x04\x7b\x42\xc3\xfb\x35\x6f\xf4\x68\x00\x03": return TokenInfo("TIB", 18) # kov / ThibCoin + if address == b"\x6f\xf6\xc0\xff\x1d\x68\xb9\x64\x90\x1f\x98\x6d\x4c\x9f\xa3\xac\x68\x34\x65\x70": + return TokenInfo("ZRX", 18) # kov / RadarRelay test 0x Protocol Token if chain_id == 61: if address == b"\x08\x5f\xb4\xf2\x40\x31\xea\xed\xbc\x2b\x61\x1a\xa5\x28\xf2\x23\x43\xeb\x52\xdb": return TokenInfo("BEC", 8) # etc / BEC @@ -3712,4 +3790,9 @@ def token_by_chain_address(chain_id: int, address: bytes) -> TokenInfo: return TokenInfo("DGT", 0) # esn / DGT if address == b"\x01\x46\xb9\xdc\xd9\xfb\x2a\xbc\x1b\x5b\x13\x6c\x28\xd2\x0d\x00\x37\x52\x69\x61": return TokenInfo("TOPM", 18) # esn / TOPM + if chain_id == 43114: + if address == b"\xb3\x1f\x66\xaa\x3c\x1e\x78\x53\x63\xf0\x87\x5a\x1b\x74\xe2\x7b\x85\xfd\x66\xc7": + return TokenInfo("AVAX", 18) # avax / Avalanche + if address == b"\xde\x3a\x24\x02\x85\x80\x88\x44\x48\xa5\x39\x78\x72\x04\x6a\x01\x96\x49\xb0\x84": + return TokenInfo("USDT", 6) # avax / Tether return UNKNOWN_TOKEN diff --git a/core/src/apps/misc/get_firmware.py b/core/src/apps/misc/get_firmware.py deleted file mode 100644 index eabcb6822bc..00000000000 --- a/core/src/apps/misc/get_firmware.py +++ /dev/null @@ -1,47 +0,0 @@ -from micropython import const -from typing import TYPE_CHECKING - -from trezor import utils, wire, workflow -from trezor.messages import FirmwareChunk, FirmwareChunkAck, GetFirmware, Success -from trezor.ui.layouts import confirm_action, draw_simple_text - -from .get_firmware_hash import _render_progress - -if TYPE_CHECKING: - from trezor.wire import Context - -CHUNK_SIZE = const(1024 * 4) -# assuming that all sectors are of size 128 kB -PROGRESS_TOTAL = utils.FIRMWARE_SECTORS_COUNT * 128 * 1024 - - -async def get_firmware(ctx: Context, _msg: GetFirmware) -> Success: - await confirm_action( - ctx, - "dump_firmware", - title="Extract firmware", - action="Do you want to extract device firmware?", - description="Your seed will not be revealed.", - ) - sector_buffer = bytearray(CHUNK_SIZE) - packet = FirmwareChunk(chunk=sector_buffer) - - workflow.close_others() - draw_simple_text("Please wait") - - progress = 0 - _render_progress(progress, PROGRESS_TOTAL) - for i in range(utils.FIRMWARE_SECTORS_COUNT): - size = utils.firmware_sector_size(i) - try: - for ofs in range(0, size, CHUNK_SIZE): - utils.get_firmware_chunk(i, ofs, sector_buffer) - await ctx.call(packet, FirmwareChunkAck) - progress += CHUNK_SIZE - _render_progress(progress, PROGRESS_TOTAL) - # reset progress to known point, in case some sectors are not 128 kB - progress = (i + 1) * 128 * 1024 - _render_progress(progress, PROGRESS_TOTAL) - except ValueError: - raise wire.DataError("Failed to dump firmware.") - return Success(message="Firmware dumped.") diff --git a/core/src/apps/workflow_handlers.py b/core/src/apps/workflow_handlers.py index 22aa4a13904..564c4cb1cb6 100644 --- a/core/src/apps/workflow_handlers.py +++ b/core/src/apps/workflow_handlers.py @@ -84,8 +84,6 @@ def find_message_handler_module(msg_type: int) -> str: return "apps.misc.cipher_key_value" if msg_type == MessageType.GetFirmwareHash: return "apps.misc.get_firmware_hash" - if msg_type == MessageType.GetFirmware: - return "apps.misc.get_firmware" if not utils.BITCOIN_ONLY: if msg_type == MessageType.SetU2FCounter: diff --git a/core/src/trezor/enums/MessageType.py b/core/src/trezor/enums/MessageType.py index 68d48bfb450..d0cece478ca 100644 --- a/core/src/trezor/enums/MessageType.py +++ b/core/src/trezor/enums/MessageType.py @@ -43,9 +43,6 @@ RebootToBootloader = 87 GetFirmwareHash = 88 FirmwareHash = 89 -GetFirmware = 90 -FirmwareChunk = 91 -FirmwareChunkAck = 92 FirmwareErase = 6 FirmwareUpload = 7 FirmwareRequest = 8 diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py index 9b0045bb0e2..626c6d93792 100644 --- a/core/src/trezor/enums/__init__.py +++ b/core/src/trezor/enums/__init__.py @@ -60,9 +60,6 @@ class MessageType(IntEnum): RebootToBootloader = 87 GetFirmwareHash = 88 FirmwareHash = 89 - GetFirmware = 90 - FirmwareChunk = 91 - FirmwareChunkAck = 92 SetU2FCounter = 63 GetNextU2FCounter = 80 NextU2FCounter = 81 diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py index 295d82e3af5..17b6e8f04f1 100644 --- a/core/src/trezor/messages.py +++ b/core/src/trezor/messages.py @@ -2276,32 +2276,6 @@ def __init__( def is_type_of(cls, msg: protobuf.MessageType) -> TypeGuard["FirmwareHash"]: return isinstance(msg, cls) - class GetFirmware(protobuf.MessageType): - - @classmethod - def is_type_of(cls, msg: protobuf.MessageType) -> TypeGuard["GetFirmware"]: - return isinstance(msg, cls) - - class FirmwareChunk(protobuf.MessageType): - chunk: "bytes" - - def __init__( - self, - *, - chunk: "bytes", - ) -> None: - pass - - @classmethod - def is_type_of(cls, msg: protobuf.MessageType) -> TypeGuard["FirmwareChunk"]: - return isinstance(msg, cls) - - class FirmwareChunkAck(protobuf.MessageType): - - @classmethod - def is_type_of(cls, msg: protobuf.MessageType) -> TypeGuard["FirmwareChunkAck"]: - return isinstance(msg, cls) - class WipeDevice(protobuf.MessageType): @classmethod diff --git a/core/src/trezor/strings.py b/core/src/trezor/strings.py index fa1fc783976..c26414c5ba7 100644 --- a/core/src/trezor/strings.py +++ b/core/src/trezor/strings.py @@ -10,8 +10,14 @@ def format_amount(amount: int, decimals: int) -> str: sign = "-" else: sign = "" - d = pow(10, decimals) - s = f"{sign}{amount // d}.{amount % d:0{decimals}}".rstrip("0").rstrip(".") + d = 10**decimals + integer = amount // d + decimal = amount % d + + # TODO: bug in mpz: https://github.com/micropython/micropython/issues/8984 + grouped_integer = f"{integer:,}".lstrip(",") + + s = f"{sign}{grouped_integer}.{decimal:0{decimals}}".rstrip("0").rstrip(".") return s diff --git a/core/src/trezor/utils.py b/core/src/trezor/utils.py index ecd67208aed..f96d792f428 100644 --- a/core/src/trezor/utils.py +++ b/core/src/trezor/utils.py @@ -3,7 +3,6 @@ from trezorutils import ( # noqa: F401 BITCOIN_ONLY, EMULATOR, - FIRMWARE_SECTORS_COUNT, MODEL, SCM_REVISION, VERSION_MAJOR, @@ -11,9 +10,7 @@ VERSION_PATCH, consteq, firmware_hash, - firmware_sector_size, firmware_vendor, - get_firmware_chunk, halt, memcpy, reboot_to_bootloader, diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py index d082e3807af..41c71d8fa27 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py @@ -79,8 +79,8 @@ def test_send_native_p2wpkh(self): ) tx = SignTx(coin_name='Testnet', version=1, lock_time=0, inputs_count=1, outputs_count=2) - # precomputed tx weight is 566 - fee_rate = 11000 / (566 / 4) + # precomputed tx weight is 142 = ceil(566 / 4) + fee_rate = 11000 / 142 messages = [ None, @@ -213,8 +213,8 @@ def test_send_native_p2wpkh_change(self): ) tx = SignTx(coin_name='Testnet', version=1, lock_time=0, inputs_count=1, outputs_count=2) - # precomputed tx weight is 566 - fee_rate = 11000 / (566 / 4) + # precomputed tx weight is 142 = ceil(566 / 4) + fee_rate = 11000 / 142 messages = [ None, diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py index f1210a5de34..3c034c94284 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py @@ -80,8 +80,8 @@ def test_send_native_p2wpkh(self): ) tx = SignTx(coin_name='Groestlcoin Testnet', version=1, lock_time=650713, inputs_count=1, outputs_count=2) - # precomputed tx weight is 566 - fee_rate = 11000 / (566 / 4) + # precomputed tx weight is 142 = ceil(566 / 4) + fee_rate = 11000 / 142 messages = [ None, @@ -214,8 +214,8 @@ def test_send_native_p2wpkh_change(self): ) tx = SignTx(coin_name='Groestlcoin Testnet', version=1, lock_time=650713, inputs_count=1, outputs_count=2) - # precomputed tx weight is 566 - fee_rate = 11000 / (566 / 4) + # precomputed tx weight is 142 = ceil(566 / 4) + fee_rate = 11000 / 142 messages = [ None, diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py index c6c5c003b1a..cb190265989 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py @@ -79,8 +79,8 @@ def test_send_p2wpkh_in_p2sh(self): ) tx = SignTx(coin_name='Testnet', version=1, lock_time=0, inputs_count=1, outputs_count=2) - # precomputed tx weight is 670 - fee_rate = 11000 / (670 / 4) + # precomputed tx weight is 168 = ceil(670 / 4) + fee_rate = 11000 / 168 messages = [ None, @@ -209,8 +209,8 @@ def test_send_p2wpkh_in_p2sh_change(self): ) tx = SignTx(coin_name='Testnet', version=1, lock_time=0, inputs_count=1, outputs_count=2) - # precomputed tx weight is 670 - fee_rate = 11000 / (670 / 4) + # precomputed tx weight is 168 = ceil(670 / 4) + fee_rate = 11000 / 168 messages = [ None, @@ -358,8 +358,8 @@ def test_send_p2wpkh_in_p2sh_attack_amount(self): ) tx = SignTx(coin_name='Testnet', version=1, lock_time=0, inputs_count=1, outputs_count=2) - # precomputed tx weight is 670 - fee_rate = (9 - 8 - 1) / (670 / 4) + # precomputed tx weight is 168 = ceil(670 / 4) + fee_rate = (9 - 8 - 1) / 168 messages = [ None, diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py index 961f58402a7..1e4e6971247 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py @@ -80,8 +80,8 @@ def test_send_p2wpkh_in_p2sh(self): ) tx = SignTx(coin_name='Groestlcoin Testnet', version=1, lock_time=650756, inputs_count=1, outputs_count=2) - # precomputed tx weight is 670 - fee_rate = 11000 / (670 / 4) + # precomputed tx weight is 168 = ceil(670 / 4) + fee_rate = 11000 / 168 messages = [ None, @@ -213,8 +213,8 @@ def test_send_p2wpkh_in_p2sh_change(self): ) tx = SignTx(coin_name='Groestlcoin Testnet', version=1, lock_time=650756, inputs_count=1, outputs_count=2) - # precomputed tx weight is 670 - fee_rate = 11000 / (670 / 4) + # precomputed tx weight is 168 = ceil(670 / 4) + fee_rate = 11000 / 168 messages = [ None, diff --git a/core/tests/test_apps.bitcoin.signtx.omni.py b/core/tests/test_apps.bitcoin.signtx.omni.py index 3f02d6de7a5..e566c408daf 100644 --- a/core/tests/test_apps.bitcoin.signtx.omni.py +++ b/core/tests/test_apps.bitcoin.signtx.omni.py @@ -22,8 +22,8 @@ def test_parse(self): VECTORS = { "6f6d6e69000000000000001f000000002b752ee0": "Simple send of 7.291 USDT", "6f6d6e69000000000000001f0000000020c85580": "Simple send of 5.5 USDT", - "6f6d6e690000000000000003000000002b752ee0": "Simple send of 729100000 MAID", - "6f6d6e690000000000000000000000002b752ee0": "Simple send of 729100000 UNKN", + "6f6d6e690000000000000003000000002b752ee0": "Simple send of 729,100,000 MAID", + "6f6d6e690000000000000000000000002b752ee0": "Simple send of 729,100,000 UNKN", "6f6d6e6901000000": "Unknown transaction", } for k, v in VECTORS.items(): diff --git a/core/tests/test_apps.bitcoin.signtx_decred.py b/core/tests/test_apps.bitcoin.signtx_decred.py index 4c5f7a3f7ab..80e613d3de8 100644 --- a/core/tests/test_apps.bitcoin.signtx_decred.py +++ b/core/tests/test_apps.bitcoin.signtx_decred.py @@ -86,8 +86,8 @@ def test_one_one_fee(self): outputs_count=1, ) - # precomputed tx weight is 768 - fee_rate = 100_000 / (768 / 4) + # precomputed tx weight is 864 + fee_rate = 100_000 / (864 / 4) messages = [ None, @@ -246,8 +246,8 @@ def test_purchase_ticket(self): decred_staking_ticket=True, ) - # precomputed tx weight is 1076 - fee_rate = 100_000 / (1076 / 4) + # precomputed tx weight is 1188 + fee_rate = 100_000 / (1188 / 4) messages = [ None, diff --git a/core/tests/test_apps.bitcoin.txweight.py b/core/tests/test_apps.bitcoin.txweight.py index 62bc040313f..6bb76f3449f 100644 --- a/core/tests/test_apps.bitcoin.txweight.py +++ b/core/tests/test_apps.bitcoin.txweight.py @@ -42,7 +42,7 @@ def test_p2pkh_txweight(self): serialized_tx = '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0160cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000' tx_weight = len(serialized_tx) / 2 * 4 # non-segwit tx's weight is simple length*4 - self.assertEqual(calculator.get_total(), tx_weight) + self.assertEqual(calculator.get_weight(), tx_weight) def test_p2wpkh_in_p2sh_txweight(self): @@ -78,7 +78,7 @@ def test_p2wpkh_in_p2sh_txweight(self): calculator.add_output(output_derive_script(out1.address, coin)) calculator.add_output(output_derive_script(out2.address, coin)) - self.assertEqual(calculator.get_total(), 670) + self.assertEqual(calculator.get_weight(), 670) # non-segwit: header, inputs, outputs, locktime 4*(4+65+67+4) = 560 # segwit: segwit header, witness stack item count, witness 1*(2+1+107) = 110 # total 670 @@ -117,7 +117,7 @@ def test_native_p2wpkh_txweight(self): calculator.add_output(output_derive_script(out1.address, coin)) calculator.add_output(output_derive_script(out2.address, coin)) - self.assertEqual(calculator.get_total(), 566) + self.assertEqual(calculator.get_weight(), 566) # non-segwit: header, inputs, outputs, locktime 4*(4+42+64+4) = 456 # segwit: segwit header, witness stack item count, witness 1*(2+1+107) = 110 # total 566 @@ -144,7 +144,7 @@ def test_taproot_txweight(self): calculator.add_output(output_derive_script(out1.address, coin)) # 010000000001017b350e3faca092f39883d7086cdd502c82b6f0314ab61541b062733edef156790100000000ffffffff016211000000000000225120e9af2fc69e20b0be2629cd0e9c34da9f3ef56af7beac4fb4298262bc5a45ec5d0140493145b992dacbd7ea579a415efc2cba20c3bf0f7827d1bcf999109c0d11783fe96f91ddb04a889faa17ad21ecc5c81a578009744e95c7e721aff2a5c442916600000000 - self.assertEqual(calculator.get_total(), 4*94 + 68) + self.assertEqual(calculator.get_weight(), 4*94 + 68) def test_legacy_multisig_txweight(self): coin = coins.by_name('Bitcoin') @@ -186,7 +186,7 @@ def test_legacy_multisig_txweight(self): calculator.add_output(output_derive_script(out1.address, coin)) # 010000000152ba4dfcde9c4bed88f55479cdea03e711ae586e9a89352a98230c4cdf1a09c601000000fdfe00004830450221009276eea820aa54a24bd9f1a056cb09a15f50c0816570a7c7878bd1c5ee7248540220677d200aec5e2f25bcf4000bdfab3faa9e1746d7f80c4ae4bfa1f5892eb5dcbf01483045022100c2a9fbfbff1be87036d8a6a22745512b158154f7f3d8f4cad4ba7ed130b37b83022058f5299b4c26222588dcc669399bd88b6f2bc6e04b48276373683853187a4fd6014c69522103dc0ff15b9c85c0d2c87099758bf47d36229c2514aeefcf8dea123f0f93c679762102bfe426e8671601ad46d54d09ee15aa035610d36d411961c87474908d403fbc122102a5d57129c6c96df663ad29492aa18605dad97231e043be8a92f9406073815c5d53aeffffffff01a0860100000000001976a91412e8391ad256dcdc023365978418d658dfecba1c88ac00000000 - self.assertEqual(calculator.get_total(), 4*341) + self.assertEqual(calculator.get_weight(), 4*341) def test_segwit_multisig_txweight(self): coin = coins.by_name('Testnet') @@ -228,7 +228,7 @@ def test_segwit_multisig_txweight(self): calculator.add_output(output_derive_script(out1.address, coin)) # 01000000000101be0210025c5be68a473f6a38bf53b53bc88d5c46567616026dc056e72b92319c01000000232200208d398cfb58a1d9cdb59ccbce81559c095e8c6f4a3e64966ca385078d9879f95effffffff01887d180000000000220020c5f4a0a4ea7c0392efe0a9670a73264cffa90b19107cd8a8e9750ff93c77fdfb0400483045022100dd6342c65197af27d7894d8b8b88b16b568ee3b5ebfdc55fdfb7caa9650e3b4c02200c7074a5bcb0068f63d9014c7cd2b0490aba75822d315d41aad444e9b86adf5201483045022100e7e6c2d21109512ba0609e93903e84bfb7731ac3962ee2c1cad54a7a30ff99a20220421497930226c39fc3834e8d6da3fc876516239518b0e82e2dc1e3c46271a17c01695221021630971f20fa349ba940a6ba3706884c41579cd760c89901374358db5dd545b92102f2ff4b353702d2bb03d4c494be19d77d0ab53d16161b53fbcaf1afeef4ad0cb52103e9b6b1c691a12ce448f1aedbbd588e064869c79fbd760eae3b8cd8a5f1a224db53ae00000000 - self.assertEqual(calculator.get_total(), 4*129 + 256) + self.assertEqual(calculator.get_weight(), 4*129 + 256) def test_mixed_txweight(self): coin = coins.by_name('Testnet') @@ -302,7 +302,7 @@ def test_mixed_txweight(self): # 010000000001045d77b6e482d770031ad3ce3423727cc1707bc2c82e729b1189d2b60aa1a73e8c0000000017160014a33c6e24c99e108b97bc411e7e9ef31e9d5d6164ffffffff7b350e3faca092f39883d7086cdd502c82b6f0314ab61541b062733edef156790000000000ffffffff852e125137abca2dd7a42837dccfc34edc358c72eefd62978d6747d3be9315900000000000ffffffff9b117a776a9aaf70d4c3ffe89f009dcd23210a03d649ee5e38791d83902ec33a020000006b483045022100f6bd64136839b49822cf7e2050bc5c91346fc18b5cf97a945d4fd6c502f712d002207d1859e66d218f705b704f3cfca0c75410349bb1f50623f4fc2d09d5d8df0a3f012103bae960983f83e28fcb8f0e5f3dc1f1297b9f9636612fd0835b768e1b7275fb9dffffffff05a861000000000000160014d1a739f628f7eca55e8b99e7f32b22dcdbf672d4581b0000000000001976a91402e9b094fd98e2a26e805894eb78f7ff3fef199b88acf41a00000000000017a9141ff816cbeb74817050de585ceb2c772ebf71147a870000000000000000186a1674657374206f66206f705f72657475726e206461746110270000000000002251205a02573f7b39770ac53f73d161dc86f5104c6812bac297cb6ba418f6f1219c070247304402205fae7fa2b5141548593d5623ce5bd82ee18dfc751c243526039c91848efd603702200febfbe3467a68c599245ff89055514f26e146c79b58d932ced2325e6dad1b1a0121021630971f20fa349ba940a6ba3706884c41579cd760c89901374358db5dd545b90247304402201b21212100c84207697cebb852374669c382ed97cbd08afbbdfe1b302802161602206b32b2140d094cf5b7e758135961c95478c8e82fea0df30f56ccee284b79eaea012103f6b2377d52960a6094ec158cf19dcf9e33b3da4798c2302aa5806483ed4187ae01404a81e4b7f55d6d4a26923c5e2daf3cc86ed6030f83ea6e7bb16d7b81b988b34585be21a64ab45ddcc2fb9f17be2dfeff6b22cf943bc3fc8f125a7f463af428ed0000000000 # The witness data is 283 bytes, but two of the DER signatures are one byte below the # average length, so the caculator should estimate 285 bytes of witness data. - self.assertEqual(calculator.get_total(), 4*477 + 285) + self.assertEqual(calculator.get_weight(), 4*477 + 285) def test_external_txweight(self): coin = coins.by_name('Testnet') @@ -352,7 +352,7 @@ def test_external_txweight(self): calculator.add_input(inp3) calculator.add_output(output_derive_script(out1.address, coin)) - self.assertEqual(calculator.get_total(), 4*164 + 325) + self.assertEqual(calculator.get_weight(), 4*164 + 325) # non-segwit: header, inputs, outputs, locktime 4*(4+1+3*41+1+31+4) = 4*164 # segwit: segwit header, 2x estimated witness (including stack item count) # and 1x exact witness (including stack item count) 1*(2+108+108+107) = 325 diff --git a/core/tests/test_apps.ethereum.layout.py b/core/tests/test_apps.ethereum.layout.py index 8ba20f72399..e811056e177 100644 --- a/core/tests/test_apps.ethereum.layout.py +++ b/core/tests/test_apps.ethereum.layout.py @@ -12,13 +12,13 @@ def test_format(self): text = format_ethereum_amount(1, None, 1) self.assertEqual(text, '1 Wei ETH') text = format_ethereum_amount(1000, None, 1) - self.assertEqual(text, '1000 Wei ETH') + self.assertEqual(text, '1,000 Wei ETH') text = format_ethereum_amount(1000000, None, 1) - self.assertEqual(text, '1000000 Wei ETH') + self.assertEqual(text, '1,000,000 Wei ETH') text = format_ethereum_amount(10000000, None, 1) - self.assertEqual(text, '10000000 Wei ETH') + self.assertEqual(text, '10,000,000 Wei ETH') text = format_ethereum_amount(100000000, None, 1) - self.assertEqual(text, '100000000 Wei ETH') + self.assertEqual(text, '100,000,000 Wei ETH') text = format_ethereum_amount(1000000000, None, 1) self.assertEqual(text, '0.000000001 ETH') text = format_ethereum_amount(10000000000, None, 1) @@ -44,7 +44,7 @@ def test_format(self): text = format_ethereum_amount(100000000000000000000, None, 1) self.assertEqual(text, '100 ETH') text = format_ethereum_amount(1000000000000000000000, None, 1) - self.assertEqual(text, '1000 ETH') + self.assertEqual(text, '1,000 ETH') text = format_ethereum_amount(1000000000000000000, None, 61) self.assertEqual(text, '1 ETC') @@ -97,7 +97,7 @@ def test_unknown_token(self): self.assertEqual(text, '0 Wei UNKN') # unknown token has 0 decimals so is always wei text = format_ethereum_amount(1000000000000000000, unknown_token, 1) - self.assertEqual(text, '1000000000000000000 Wei UNKN') + self.assertEqual(text, '1,000,000,000,000,000,000 Wei UNKN') if __name__ == '__main__': diff --git a/core/tests/test_trezor.strings.py b/core/tests/test_trezor.strings.py index 266b4b37bd4..3346098f90b 100644 --- a/core/tests/test_trezor.strings.py +++ b/core/tests/test_trezor.strings.py @@ -4,13 +4,20 @@ class TestStrings(unittest.TestCase): - def test_format_amount(self): VECTORS = [ (123456, 3, "123.456"), (4242, 7, "0.0004242"), (-123456, 3, "-123.456"), (-4242, 7, "-0.0004242"), + (123, 5, "0.00123"), + (100, 5, "0.001"), + (123456789, 0, "123,456,789"), + (100000000, 5, "1,000"), + (100000001, 5, "1,000.00001"), + (100001000, 5, "1,000.01"), + (-100001000, 5, "-1,000.01"), + (123_456_789_123_456_789_123_456_789, 18, "123,456,789.123456789123456789"), ] for v in VECTORS: self.assertEqual(strings.format_amount(v[0], v[1]), v[2]) @@ -151,5 +158,5 @@ def test_format_timestamp(self): strings.format_timestamp(1616057224) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/crypto/Makefile b/crypto/Makefile index e86d5160092..461332b28e0 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -86,7 +86,6 @@ endif CFLAGS += -I. CFLAGS += -I.. CFLAGS += -DUSE_ETHEREUM=1 -CFLAGS += -DUSE_GRAPHENE=1 CFLAGS += -DUSE_KECCAK=1 CFLAGS += -DUSE_MONERO=1 CFLAGS += -DUSE_NEM=1 diff --git a/crypto/address.c b/crypto/address.c index f639b1db9c3..598a49f7134 100644 --- a/crypto/address.c +++ b/crypto/address.c @@ -73,7 +73,7 @@ void ethereum_address_checksum(const uint8_t *addr, char *address, bool rskip60, keccak_256_Init(&ctx); if (rskip60) { char prefix[16] = {0}; - int prefix_size = bn_format_uint64(chain_id, NULL, "0x", 0, 0, false, + int prefix_size = bn_format_uint64(chain_id, NULL, "0x", 0, 0, false, 0, prefix, sizeof(prefix)); keccak_Update(&ctx, (const uint8_t *)prefix, prefix_size); } diff --git a/crypto/base58.c b/crypto/base58.c index faa76350182..ef687f027b9 100644 --- a/crypto/base58.c +++ b/crypto/base58.c @@ -219,56 +219,3 @@ int base58_decode_check(const char *str, HasherType hasher_type, uint8_t *data, memcpy(data, nd, res - 4); return res - 4; } - -#if USE_GRAPHENE -int b58gphcheck(const void *bin, size_t binsz, const char *base58str) { - unsigned char buf[32] = {0}; - const uint8_t *binc = bin; - unsigned i = 0; - if (binsz < 4) return -4; - ripemd160(bin, binsz - 4, buf); // No double SHA256, but a single RIPEMD160 - if (memcmp(&binc[binsz - 4], buf, 4)) return -1; - - // Check number of zeros is correct AFTER verifying checksum (to avoid - // possibility of accessing base58str beyond the end) - for (i = 0; binc[i] == '\0' && base58str[i] == '1'; ++i) { - } // Just finding the end of zeros, nothing to do in loop - if (binc[i] == '\0' || base58str[i] == '1') return -3; - - return binc[0]; -} - -int base58gph_encode_check(const uint8_t *data, int datalen, char *str, - int strsize) { - if (datalen > 128) { - return 0; - } - uint8_t buf[datalen + 32]; - memset(buf, 0, sizeof(buf)); - uint8_t *hash = buf + datalen; - memcpy(buf, data, datalen); - ripemd160(data, datalen, hash); // No double SHA256, but a single RIPEMD160 - size_t res = strsize; - bool success = b58enc(str, &res, buf, datalen + 4); - memzero(buf, sizeof(buf)); - return success ? res : 0; -} - -int base58gph_decode_check(const char *str, uint8_t *data, int datalen) { - if (datalen > 128) { - return 0; - } - uint8_t d[datalen + 4]; - memset(d, 0, sizeof(d)); - size_t res = datalen + 4; - if (b58tobin(d, &res, str) != true) { - return 0; - } - uint8_t *nd = d + datalen + 4 - res; - if (b58gphcheck(nd, res, str) < 0) { - return 0; - } - memcpy(data, nd, res - 4); - return res - 4; -} -#endif diff --git a/crypto/base58.h b/crypto/base58.h index 97cb54e6031..9b7762f8efb 100644 --- a/crypto/base58.h +++ b/crypto/base58.h @@ -43,11 +43,4 @@ int b58check(const void *bin, size_t binsz, HasherType hasher_type, const char *base58str); bool b58enc(char *b58, size_t *b58sz, const void *data, size_t binsz); -#if USE_GRAPHENE -int base58gph_encode_check(const uint8_t *data, int datalen, char *str, - int strsize); -int base58gph_decode_check(const char *str, uint8_t *data, int datalen); -int b58gphcheck(const void *bin, size_t binsz, const char *base58str); -#endif - #endif diff --git a/crypto/bignum.c b/crypto/bignum.c index e2bb9a129ae..b23adf7a831 100644 --- a/crypto/bignum.c +++ b/crypto/bignum.c @@ -1670,27 +1670,31 @@ void bn_divmod10(bignum256 *x, uint32_t *r) { bn_long_division(x, 10, x, r); } // Assumes output is an array of length output_length // The function doesn't have neither constant control flow nor constant memory // access flow with regard to any its argument -size_t bn_format(const bignum256 *amount, const char *prefix, const char *suffix, unsigned int decimals, int exponent, bool trailing, char *output, size_t output_length) { +size_t bn_format(const bignum256 *amount, const char *prefix, const char *suffix, unsigned int decimals, int exponent, bool trailing, char thousands, char *output, size_t output_length) { /* Python prototype of the function: - def format(amount, prefix, suffix, decimals, exponent, trailing): + def format(amount, prefix, suffix, decimals, exponent, trailing, thousands): if exponent >= 0: - amount *= 10 ** exponent + amount *= 10**exponent else: amount //= 10 ** (-exponent) d = pow(10, decimals) + integer_part = amount // d + integer_str = f"{integer_part:,}".replace(",", thousands or "") + if decimals: - output = "%d.%0*d" % (amount // d, decimals, amount % d) + decimal_part = amount % d + decimal_str = f".{decimal_part:0{decimals}d}" if not trailing: - output = output.rstrip("0").rstrip(".") + decimal_str = decimal_str.rstrip("0").rstrip(".") else: - output = "%d" % (amount // d) + decimal_str = "" - return prefix + output + suffix + return prefix + integer_str + decimal_str + suffix */ // Auxiliary macro for bn_format @@ -1773,18 +1777,29 @@ size_t bn_format(const bignum256 *amount, const char *prefix, const char *suffix { // Add integer-part digits of amount // Add trailing zeroes + int digits = 0; if (!bn_is_zero(&temp)) { for (; exponent > 0; --exponent) { + ++digits; BN_FORMAT_ADD_OUTPUT_CHAR('0') + if (thousands != 0 && digits % 3 == 0) { + BN_FORMAT_ADD_OUTPUT_CHAR(thousands) + } } } // decimals == 0 && exponent == 0 // Add significant digits + bool is_zero = false; do { + ++digits; bn_divmod10(&temp, &digit); + is_zero = bn_is_zero(&temp); BN_FORMAT_ADD_OUTPUT_CHAR('0' + digit) - } while (!bn_is_zero(&temp)); + if (thousands != 0 && !is_zero && digits % 3 == 0) { + BN_FORMAT_ADD_OUTPUT_CHAR(thousands) + } + } while (!is_zero); } // Add prefix diff --git a/crypto/bignum.h b/crypto/bignum.h index fcae2f773da..f9213fbe76e 100644 --- a/crypto/bignum.h +++ b/crypto/bignum.h @@ -114,7 +114,8 @@ void bn_divmod1000(bignum256 *x, uint32_t *r); void bn_inverse(bignum256 *x, const bignum256 *prime); size_t bn_format(const bignum256 *amount, const char *prefix, const char *suffix, unsigned int decimals, int exponent, - bool trailing, char *output, size_t output_length); + bool trailing, char thousands, char *output, + size_t output_length); // Returns (uint32_t) in_number // Assumes in_number < 2**32 @@ -149,13 +150,21 @@ static inline int bn_is_odd(const bignum256 *x) { return (x->val[0] & 1) == 1; } static inline size_t bn_format_uint64(uint64_t amount, const char *prefix, const char *suffix, unsigned int decimals, - int exponent, bool trailing, char *output, + int exponent, bool trailing, + char thousands, char *output, size_t output_length) { bignum256 bn_amount; bn_read_uint64(amount, &bn_amount); return bn_format(&bn_amount, prefix, suffix, decimals, exponent, trailing, - output, output_length); + thousands, output, output_length); +} + +static inline size_t bn_format_amount(uint64_t amount, const char *prefix, + const char *suffix, unsigned int decimals, + char *output, size_t output_length) { + return bn_format_uint64(amount, prefix, suffix, decimals, 0, false, ',', + output, output_length); } #if USE_BN_PRINT diff --git a/crypto/fuzzer/fuzzer.c b/crypto/fuzzer/fuzzer.c index 767eea4f9d1..584d3705960 100644 --- a/crypto/fuzzer/fuzzer.c +++ b/crypto/fuzzer/fuzzer.c @@ -165,7 +165,7 @@ int fuzz_bn_format(void) { } ret = bn_format(&target_bignum, prefix, suffix, decimals, exponent, trailing, - buf, FUZZ_BN_FORMAT_OUTPUT_BUFFER_SIZE); + 0, buf, FUZZ_BN_FORMAT_OUTPUT_BUFFER_SIZE); // basic sanity checks for r if (ret > FUZZ_BN_FORMAT_OUTPUT_BUFFER_SIZE) { @@ -815,61 +815,6 @@ int fuzz_aes(void) { return 0; } -int fuzz_b58gph_encode_decode(void) { - // note: encode and decode functions have an internal limit of 128 -#define BASE58_GPH_MAX_INPUT_LEN 130 - - if (fuzzer_length < 1 + 1 + BASE58_GPH_MAX_INPUT_LEN) { - return 0; - } - - // use a flexible output buffer target size - uint8_t chosen_outlen = 0; - memcpy(&chosen_outlen, fuzzer_input(1), 1); - if (chosen_outlen > BASE58_GPH_MAX_INPUT_LEN) { - return 0; - } - // use a flexible input buffer target size - uint8_t chosen_inlen = 0; - memcpy(&chosen_inlen, fuzzer_input(1), 1); - if (chosen_inlen > BASE58_GPH_MAX_INPUT_LEN) { - return 0; - } - - // TODO idea: switch to malloc()'ed buffers for better out of bounds access - // detection? - - uint8_t encode_in_buffer[BASE58_GPH_MAX_INPUT_LEN] = {0}; - // with null termination - char decode_in_buffer[BASE58_GPH_MAX_INPUT_LEN + 1] = {0}; - char out_buffer[BASE58_GPH_MAX_INPUT_LEN] = {0}; - - memcpy(&encode_in_buffer, fuzzer_input(chosen_inlen), chosen_inlen); - memcpy(&decode_in_buffer, &encode_in_buffer, chosen_inlen); - - int ret = 0; - ret = base58gph_encode_check(encode_in_buffer, chosen_inlen, out_buffer, - chosen_outlen); - - if (ret != 0) { - // successful encode, try decode - uint8_t dummy_buffer[BASE58_GPH_MAX_INPUT_LEN] = {0}; - ret = base58gph_decode_check(out_buffer, (uint8_t *)&dummy_buffer, - chosen_outlen); - if (ret == 0) { - // mark as exception - // TODO POTENTIAL BUG - followup - // crash(); - } - } - - // do a second operation with the same input, without relationship to the - // previously computed output - base58gph_decode_check(decode_in_buffer, (uint8_t *)&out_buffer, - chosen_outlen); - return 0; -} - int fuzz_chacha_drbg(void) { #define CHACHA_DRBG_ENTROPY_LENGTH 32 #define CHACHA_DRBG_RESEED_LENGTH 32 @@ -1233,9 +1178,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { fuzz_aes(); #endif break; - case 19: - fuzz_b58gph_encode_decode(); - break; case 22: fuzz_chacha_drbg(); break; diff --git a/crypto/nem.c b/crypto/nem.c index dd77241ceb0..57e18557d5d 100644 --- a/crypto/nem.c +++ b/crypto/nem.c @@ -118,7 +118,7 @@ static inline bool nem_write_mosaic_u64(nem_transaction_ctx *ctx, const char *name, uint64_t value) { char buffer[21] = {0}; - if (bn_format_uint64(value, NULL, NULL, 0, 0, false, buffer, + if (bn_format_uint64(value, NULL, NULL, 0, 0, false, 0, buffer, sizeof(buffer)) == 0) { return false; } diff --git a/crypto/options.h b/crypto/options.h index d3a9c2edf53..aacd9e72815 100644 --- a/crypto/options.h +++ b/crypto/options.h @@ -66,11 +66,6 @@ #define USE_ETHEREUM 0 #endif -// support Graphene operations (STEEM, BitShares) -#ifndef USE_GRAPHENE -#define USE_GRAPHENE 0 -#endif - // support NEM operations #ifndef USE_NEM #define USE_NEM 0 diff --git a/crypto/tests/test_bignum.py b/crypto/tests/test_bignum.py index 1aab86a2d46..99ad8c86ef1 100755 --- a/crypto/tests/test_bignum.py +++ b/crypto/tests/test_bignum.py @@ -5,6 +5,7 @@ import random from ctypes import ( c_bool, + c_char, c_int, c_size_t, c_uint, @@ -607,8 +608,8 @@ def assert_bn_divmod10(x_old): assert r == x_old % 10 -def assert_bn_format(x, prefix, suffix, decimals, exponent, trailing): - def format(amount, prefix, suffix, decimals, exponent, trailing): +def assert_bn_format(x, prefix, suffix, decimals, exponent, trailing, thousands): + def format(amount, prefix, suffix, decimals, exponent, trailing, thousands): if exponent >= 0: amount *= 10**exponent else: @@ -616,14 +617,18 @@ def format(amount, prefix, suffix, decimals, exponent, trailing): d = pow(10, decimals) + integer_part = amount // d + integer_str = f"{integer_part:,}".replace(",", thousands or "") + if decimals: - output = "%d.%0*d" % (amount // d, decimals, amount % d) + decimal_part = amount % d + decimal_str = f".{decimal_part:0{decimals}d}" if not trailing: - output = output.rstrip("0").rstrip(".") + decimal_str = decimal_str.rstrip("0").rstrip(".") else: - output = "%d" % (amount // d) + decimal_str = "" - return prefix + output + suffix + return prefix + integer_str + decimal_str + suffix def string_to_char_p(string): return ctypes.create_string_buffer(string.encode("ascii")) @@ -641,11 +646,12 @@ def char_p_to_string(pointer): c_uint(decimals), c_int(exponent), c_bool(trailing), + c_char(0), output, c_size_t(output_length), ) - correct_output = format(x, prefix, suffix, decimals, exponent, trailing) + correct_output = format(x, prefix, suffix, decimals, exponent, trailing, "") correct_return_value = len(correct_output) if len(correct_output) >= output_length: correct_output = "" @@ -1018,15 +1024,16 @@ def test_bn_divmod10(r): @pytest.mark.parametrize( - "decimals,exponent,trailing,prefix,suffix,value", + "decimals,exponent,trailing,prefix,suffix,thousands,value", itertools.product( range(0, 5), range(-5, 5), [True, False], ["", "prefix"], ["", "suffix"], - [123, 120], + ["", ",", " "], + [123, 120, 123_456, 12_345, 100001, 10001000], ), ) -def test_bn_format(decimals, exponent, trailing, prefix, suffix, value): - assert_bn_format(value, prefix, suffix, decimals, exponent, trailing) +def test_bn_format(decimals, exponent, trailing, prefix, suffix, thousands, value): + assert_bn_format(value, prefix, suffix, decimals, exponent, trailing, thousands) diff --git a/crypto/tests/test_check.c b/crypto/tests/test_check.c index a95c35b667c..9a417f493e7 100644 --- a/crypto/tests/test_check.c +++ b/crypto/tests/test_check.c @@ -563,13 +563,13 @@ START_TEST(test_bignum_format_uint64) { uint64_t m = 1; for (int i = 0; i <= 19; i++, m *= 10) { sprintf(str, "%" PRIu64, m); - r = bn_format_uint64(m, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format_uint64(m, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, strlen(str)); ck_assert_str_eq(buf, str); uint64_t n = m - 1; sprintf(str, "%" PRIu64, n); - r = bn_format_uint64(n, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format_uint64(n, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, strlen(str)); ck_assert_str_eq(buf, str); } @@ -585,7 +585,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "0"); @@ -593,7 +593,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, NULL, NULL, 20, 0, true, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 20, 0, true, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 22); ck_assert_str_eq(buf, "0.00000000000000000000"); @@ -601,7 +601,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, NULL, NULL, 0, 5, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 5, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "0"); @@ -609,7 +609,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, NULL, NULL, 0, -5, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, -5, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "0"); @@ -617,7 +617,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, "", "", 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, "", "", 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "0"); @@ -625,7 +625,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, NULL, "SFFX", 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, "SFFX", 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1 + 4); ck_assert_str_eq(buf, "0SFFX"); @@ -633,7 +633,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, "PRFX", NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, "PRFX", NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 4 + 1); ck_assert_str_eq(buf, "PRFX0"); @@ -641,7 +641,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, "PRFX", "SFFX", 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, "PRFX", "SFFX", 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 4 + 1 + 4); ck_assert_str_eq(buf, "PRFX0SFFX"); @@ -649,7 +649,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000000"), &a); - r = bn_format(&a, NULL, NULL, 18, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 18, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "0"); @@ -657,7 +657,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000001"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "1"); @@ -665,15 +665,55 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000001"), &a); - r = bn_format(&a, NULL, NULL, 6, 6, true, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 6, 6, true, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 8); ck_assert_str_eq(buf, "1.000000"); + bn_read_be( + fromhex( + "0000000000000000000000000000000000000000000000000000000000000001"), + &a); + r = bn_format(&a, NULL, NULL, 1, 5, true, 0, buf, sizeof(buf)); + ck_assert_uint_eq(r, 7); + ck_assert_str_eq(buf, "10000.0"); + + bn_read_be( + fromhex( + "0000000000000000000000000000000000000000000000000000000000000001"), + &a); + r = bn_format(&a, NULL, NULL, 1, 5, true, ',', buf, sizeof(buf)); + ck_assert_uint_eq(r, 8); + ck_assert_str_eq(buf, "10,000.0"); + + bn_read_be( + fromhex( + "000000000000000000000000000000000000000000000000000000000001e240"), + &a); + r = bn_format(&a, NULL, NULL, 0, 0, true, ',', buf, sizeof(buf)); + ck_assert_uint_eq(r, 7); + ck_assert_str_eq(buf, "123,456"); + + bn_read_be( + fromhex( + "000000000000000000000000000000000000000000000000000000000001e240"), + &a); + r = bn_format(&a, NULL, NULL, 0, 1, true, ',', buf, sizeof(buf)); + ck_assert_uint_eq(r, 9); + ck_assert_str_eq(buf, "1,234,560"); + + bn_read_be( + fromhex( + "000000000000000000000000000000000000000000000000000000000001e240"), + &a); + r = bn_format(&a, NULL, NULL, 0, 5, true, ',', buf, sizeof(buf)); + ck_assert_uint_eq(r, 14); + ck_assert_str_eq(buf, "12,345,600,000"); + bn_read_be( fromhex( "0000000000000000000000000000000000000000000000000000000000000002"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "2"); @@ -681,7 +721,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000005"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "5"); @@ -689,7 +729,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000009"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "9"); @@ -697,7 +737,7 @@ START_TEST(test_bignum_format) { fromhex( "000000000000000000000000000000000000000000000000000000000000000a"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 2); ck_assert_str_eq(buf, "10"); @@ -705,7 +745,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000014"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 2); ck_assert_str_eq(buf, "20"); @@ -713,7 +753,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000032"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 2); ck_assert_str_eq(buf, "50"); @@ -721,7 +761,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000063"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 2); ck_assert_str_eq(buf, "99"); @@ -729,7 +769,7 @@ START_TEST(test_bignum_format) { fromhex( "0000000000000000000000000000000000000000000000000000000000000064"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 3); ck_assert_str_eq(buf, "100"); @@ -737,7 +777,7 @@ START_TEST(test_bignum_format) { fromhex( "00000000000000000000000000000000000000000000000000000000000000c8"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 3); ck_assert_str_eq(buf, "200"); @@ -745,7 +785,7 @@ START_TEST(test_bignum_format) { fromhex( "00000000000000000000000000000000000000000000000000000000000001f4"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 3); ck_assert_str_eq(buf, "500"); @@ -753,7 +793,7 @@ START_TEST(test_bignum_format) { fromhex( "00000000000000000000000000000000000000000000000000000000000003e7"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 3); ck_assert_str_eq(buf, "999"); @@ -761,15 +801,23 @@ START_TEST(test_bignum_format) { fromhex( "00000000000000000000000000000000000000000000000000000000000003e8"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 4); ck_assert_str_eq(buf, "1000"); + bn_read_be( + fromhex( + "00000000000000000000000000000000000000000000000000000000000003e8"), + &a); + r = bn_format(&a, NULL, NULL, 0, 0, false, ',', buf, sizeof(buf)); + ck_assert_uint_eq(r, 5); + ck_assert_str_eq(buf, "1,000"); + bn_read_be( fromhex( "0000000000000000000000000000000000000000000000000000000000989680"), &a); - r = bn_format(&a, NULL, NULL, 7, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 7, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 1); ck_assert_str_eq(buf, "1"); @@ -777,7 +825,7 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 0, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 78); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" @@ -787,7 +835,7 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 1, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 1, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 79); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" @@ -797,7 +845,7 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 2, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 2, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 79); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" @@ -807,17 +855,39 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 8, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 8, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 79); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" "75840079131.29639935"); + bn_read_be( + fromhex( + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + &a); + r = bn_format(&a, NULL, NULL, 9, 0, false, ',', buf, sizeof(buf)); + ck_assert_uint_eq(r, 101); + ck_assert_str_eq( + buf, + "115,792,089,237,316,195,423,570,985,008,687,907,853,269,984," + "665,640,564,039,457,584,007,913.129639935"); + + bn_read_be( + fromhex( + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + &a); + r = bn_format(&a, NULL, NULL, 9, 0, false, ' ', buf, sizeof(buf)); + ck_assert_uint_eq(r, 101); + ck_assert_str_eq( + buf, + "115 792 089 237 316 195 423 570 985 008 687 907 853 269 984 " + "665 640 564 039 457 584 007 913.129639935"); + bn_read_be( fromhex( "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3bbb00"), &a); - r = bn_format(&a, NULL, NULL, 8, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 8, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 70); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" @@ -827,7 +897,7 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 18, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 18, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 79); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" @@ -837,7 +907,7 @@ START_TEST(test_bignum_format) { fromhex( "fffffffffffffffffffffffffffffffffffffffffffffffff7e52fe5afe40000"), &a); - r = bn_format(&a, NULL, NULL, 18, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 18, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 60); ck_assert_str_eq( buf, "115792089237316195423570985008687907853269984665640564039457"); @@ -846,7 +916,7 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 78, 0, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 78, 0, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 80); ck_assert_str_eq(buf, "0." @@ -857,7 +927,7 @@ START_TEST(test_bignum_format) { fromhex( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); - r = bn_format(&a, NULL, NULL, 0, 10, false, buf, sizeof(buf)); + r = bn_format(&a, NULL, NULL, 0, 10, false, 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 88); ck_assert_str_eq(buf, "11579208923731619542357098500868790785326998466564056403945" @@ -868,7 +938,7 @@ START_TEST(test_bignum_format) { "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), &a); r = bn_format(&a, "quite a long prefix", "even longer suffix", 60, 0, false, - buf, sizeof(buf)); + 0, buf, sizeof(buf)); ck_assert_uint_eq(r, 116); ck_assert_str_eq(buf, "quite a long " @@ -881,12 +951,12 @@ START_TEST(test_bignum_format) { "0000000000000000000000000000000000000000000000000123456789abcdef"), &a); memset(buf, 'a', sizeof(buf)); - r = bn_format(&a, "prefix", "suffix", 10, 0, false, buf, 31); + r = bn_format(&a, "prefix", "suffix", 10, 0, false, 0, buf, 31); ck_assert_str_eq(buf, "prefix8198552.9216486895suffix"); ck_assert_uint_eq(r, 30); memset(buf, 'a', sizeof(buf)); - r = bn_format(&a, "prefix", "suffix", 10, 0, false, buf, 30); + r = bn_format(&a, "prefix", "suffix", 10, 0, false, 0, buf, 30); ck_assert_uint_eq(r, 0); ck_assert_str_eq(buf, ""); } @@ -1132,47 +1202,6 @@ START_TEST(test_base58) { } END_TEST -#if USE_GRAPHENE - -// Graphene Base85CheckEncoding -START_TEST(test_base58gph) { - static const char *base58_vector[] = { - "02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680", - "6dumtt9swxCqwdPZBGXh9YmHoEjFFnNfwHaTqRbQTghGAY2gRz", - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16", - "5725vivYpuFWbeyTifZ5KevnHyqXCi5hwHbNU9cYz1FHbFXCxX", - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a", - "6kZKHSuxqAwdCYsMvwTcipoTsNE2jmEUNBQufGYywpniBKXWZK", - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3", - "8b82mpnH8YX1E9RHnU2a2YgLTZ8ooevEGP9N15c1yFqhoBvJur", - 0, - 0, - }; - const char **raw = base58_vector; - const char **str = base58_vector + 1; - uint8_t rawn[34]; - char strn[53]; - int r; - while (*raw && *str) { - int len = strlen(*raw) / 2; - - memcpy(rawn, fromhex(*raw), len); - r = base58gph_encode_check(rawn, len, strn, sizeof(strn)); - ck_assert_int_eq((size_t)r, strlen(*str) + 1); - ck_assert_str_eq(strn, *str); - - r = base58gph_decode_check(strn, rawn, len); - ck_assert_int_eq(r, len); - ck_assert_mem_eq(rawn, fromhex(*raw), len); - - raw += 2; - str += 2; - } -} -END_TEST - -#endif - START_TEST(test_bignum_divmod) { uint32_t r; int i; @@ -9455,12 +9484,6 @@ Suite *test_suite(void) { tcase_add_test(tc, test_base58); suite_add_tcase(s, tc); -#if USE_GRAPHENE - tc = tcase_create("base58gph"); - tcase_add_test(tc, test_base58gph); - suite_add_tcase(s, tc); -#endif - tc = tcase_create("bignum_divmod"); tcase_add_test(tc, test_bignum_divmod); suite_add_tcase(s, tc); diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 82d3a61bcac..4c472c7ec42 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -9,6 +9,7 @@ - [Event Loop](core/src/event-loop.md) - [Apps](core/src/apps.md) - [Tests](core/tests/index.md) + - [Debugging on hardware](core/embed_debug/index.md) - [SystemView instrumentation](core/systemview/index.md) - [Miscellaneous](core/misc/index.md) - [Code style](core/misc/codestyle.md) diff --git a/docs/ci/jobs.md b/docs/ci/jobs.md index 8cf7611c954..86e16973ea7 100644 --- a/docs/ci/jobs.md +++ b/docs/ci/jobs.md @@ -110,32 +110,32 @@ it is just a single binary file that you can execute directly. ### [core unix frozen btconly debug t1 build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L307) -### [core macos frozen regular build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L322) +### [core macos frozen regular build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L323) -### [crypto build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L347) +### [crypto build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L348) Build of our cryptographic library, which is then incorporated into the other builds. -### [legacy fw regular build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L376) +### [legacy fw regular build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L377) -### [legacy fw regular debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L392) +### [legacy fw regular debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L393) -### [legacy fw btconly build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L409) +### [legacy fw btconly build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L410) -### [legacy fw btconly debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L428) +### [legacy fw btconly debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L429) -### [legacy emu regular debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L449) +### [legacy emu regular debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L450) Regular version (not only Bitcoin) of above. **Are you looking for a Trezor One emulator? This is most likely it.** -### [legacy emu regular debug asan build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L464) +### [legacy emu regular debug asan build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L465) -### [legacy emu regular debug build arm](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L482) +### [legacy emu regular debug build arm](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L483) -### [legacy emu btconly debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L508) +### [legacy emu btconly debug build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L509) Build of Legacy into UNIX emulator. Use keyboard arrows to emulate button presses. Bitcoin-only version. -### [legacy emu btconly debug asan build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L525) +### [legacy emu btconly debug asan build](https://github.com/trezor/trezor-firmware/blob/master/ci/build.yml#L526) --- ## TEST stage - [test.yml](../../ci/test.yml) diff --git a/docs/core/embed_debug/CLion_Rust_embedded_Trezor_01.png b/docs/core/embed_debug/CLion_Rust_embedded_Trezor_01.png new file mode 100644 index 00000000000..8500a19319f Binary files /dev/null and b/docs/core/embed_debug/CLion_Rust_embedded_Trezor_01.png differ diff --git a/docs/core/embed_debug/CLion_Rust_embedded_Trezor_02.png b/docs/core/embed_debug/CLion_Rust_embedded_Trezor_02.png new file mode 100644 index 00000000000..c6a53134305 Binary files /dev/null and b/docs/core/embed_debug/CLion_Rust_embedded_Trezor_02.png differ diff --git a/docs/core/embed_debug/index.md b/docs/core/embed_debug/index.md new file mode 100644 index 00000000000..b3674763b75 --- /dev/null +++ b/docs/core/embed_debug/index.md @@ -0,0 +1,211 @@ +# Embedded debug of firmware (C and Rust) + +Notes on how to get both C and Rust debugging working "nicely". + +## Building properly + +The #1 hassle in embedded debug is proper build because it is very easy to run out of flash space. +Size optimizations on the other hand go against comfort or usability of debug. + +Therefore it's usually hard to make a single profile or setting, but best way is to start with +is probably these build options: + + make PYOPT=0 BITCOIN_ONLY=1 V=1 VERBOSE=1 OPTIMIZE=-Og build_firmware + +Options mean: + + * `PYOPT=0` - enable debuglink and test + * `V=1 VERBOSE=1` - just more of a check to see it's building with options you want + * `BITCOIN_ONLY=1` - most of the time for C/Rust parts you don't need other coins and it saves + space on flash to be usable for other than `-Os` optimization + * `OPTIMIZE=-Og` - optimization of C better suited for debug, but it will be larger than default `-Os` + +Micropython has its own optimization setting, so if you need to step through its code as well, +set it separately in its build. + +Another way to save space in case build overflows flash is changing `-fstack-protector-all` to +`-fstack-protector-strong` or `-fstack-protector-explicit` temporarily for debugging in +`SConscript.firmware`. + +Debug info is enabled for C and Rust in the flags and profiles (stripped when generating the .bin +final image). + +## Putting it into debugger + +Once you have built and flashed the FW, configure debugger for remote debug. +General background into remote debug and instructions +for basic `arm-none-eabi-gdb` and VSCode are [listed here](https://docs.rust-embedded.org/debugonomicon/). + +Below are instructions for CLion with [Rust plugin](https://plugins.jetbrains.com/plugin/8182-rust/docs). + +So far CLion seems the most complete implementation for ARM embedded debug, but +these evolve quickly now. + +Though all debuggers will have some historic limitations (especially some watch expressions +and return values). + + +### Start OpenOCD/JLink GDB server in a terminal + +Depending on your SWD adapter, either (change speed up to 50000 depending on adapter) + + JLinkGDBServerCLExe -select USB -device STM32F427VI -endian little -if SWD -speed 4000 -LocalhostOnly + +or with openocd (best to use latest from git) + + openocd -f interface/stlink.cfg -f target/stm32f4x.cfg + +### Set up a debug configuration as remote debug + +Default port for "target remote" JLink GDB server is :2331, for openocd :3333 + +![Remote debug settings](CLion_Rust_embedded_Trezor_02.png) + +It should be also possible to use "Remote GDB Server" setting and let CLion execute +openocd or JLink GDB server. + +### Now you can see variables from both Rust and C, set breakpoints + +![Remote debug settings](CLion_Rust_embedded_Trezor_01.png) + +For pointers you can use memory view from variable's context menu. + +### Known limitations + +Rust support is still in progress, so expect bugs sometimes. + +Only way so far to get return value of function is to switch to GDB console and +use `finish` GDB command - unless you assign it to variable. GDB may not always show +it due to optimizations. + +Not all trait info is output into debug info, so you will have issue with watching +some expressions like [this issue](https://github.com/rust-lang/rust/issues/66482) or +[this one](https://github.com/rust-lang/rust/issues/33014). + +Try not to put breakpoints on macro calls, since they may internally expand to +too many addresses depending on inlining. This manifests when GDB will complain +suddenly you have too many HW breakpoints or when JLink starts using flash +breakpoints instead of just HW breakpoints. + +## Other ideas not thoroughly tested + +You can define custom optimization level by choosing the `-fxx` options for C compiler and +similar ones for Rust with `llvm-args` [that target LLVM passes](https://llvm.org/docs/Passes.html). +Note that these change with compiler versions, LLVM 13 has +[new pass manager](https://llvm.org/docs/NewPassManager.html#invoking-opt). + +The point would be to make a optimization level producing somewhat slower code, less inlining, +but better debug experience. + +Rust does not have equivalent of `-Og` level, this would be only way to make something similar. + +The idea is generally to take an existing optimization level and change/remove some options +that affect code size or optimize variables away, force them to stay in memory instead of +registers. To look at what is used in passes you can print them out with: + + llvm-as < /dev/null | opt -Oz -disable-output -debug-pass=Arguments + +The `-O0` level often generates too big code to fit in flash which is why this experiment +in customizing optimization level exists. + +## Additional notes on making CLion understand and parse code correctly + +**Note**: Creating a project in CLion doesn't seem necessary for running debug like described above. + +CLion remote debugger bindings will gather most information from debug info after +connecting to external debugger (JLink or openocd GDB server), but it may be handy +for general edit/completion/following definitions and so on. + +Since we don't keep a `CMakeLists.txt` for `core` because everyone is using different +editor/IDE, here is a trick for creating it so that CLion will parse code without having +to run the debugger with debug info. + +First, clone the repo and build both emulator and embedded code: + + make build_unix + make build_embed + +Now rename `Makefile` under `core` to something else, like `Makefile.orig`. Open the +`core` directory as new project in CLion. + +Open any .c file, e.g. `embed/firmware/main.c`. +At this point since CLion does not see `Makefile` or `CMakeLists.txt`, it will +[suggest creating CMakeLists for you based on existing files](https://www.jetbrains.com/help/clion/creating-new-project-from-scratch.html#example). + +Let it autogenerate one, then add following defines that are taken from build +(there are more that should be added, but this suffices for most code including micropython +stm32lib): + + add_definitions( + -DFF_FS_READONLY=0 + -DFF_FS_MINIMIZE=0 + -DFF_USE_STRFUNC=0 + -DFF_USE_FIND=0 + -DFF_USE_FASTSEEK=0 + -DFF_USE_EXPAND=0 + -DFF_USE_CHMOD=0 + -DFF_USE_LABEL=0 + -DFF_USE_FORWARD=0 + -DFF_USE_REPAIR=0 + -DFF_CODE_PAGE=437 + -DFF_USE_LFN=1 + -DFF_LFN_UNICODE=2 + -DFF_STRF_ENCODE=3 + -DFF_FS_RPATH=0 + -DFF_VOLUMES=1 + -DFF_STR_VOLUME_ID=0 + -DFF_MULTI_PARTITION=0 + -DFF_USE_TRIM=0 + -DFF_FS_NOFSINFO=0 + -DFF_FS_TINY=0 + -DFF_FS_EXFAT=0 + -DFF_FS_NORTC=1 + -DFF_FS_LOCK=0 + -DFF_FS_REENTRANT=0 + -DFF_USE_MKFS=1 + + -DSTM32_HAL_H= + + -DTREZOR_MODEL=T + -DTREZOR_MODEL_T=1 + -DSTM32F427xx + -DUSE_HAL_DRIVER + -DSTM32_HAL_H="" + -DAES_128 -DAES_192 + -DRAND_PLATFORM_INDEPENDENT + -DUSE_KECCAK=1 + -DUSE_ETHEREUM=1 + -DUSE_MONERO=1 + -DUSE_CARDANO=1 + -DUSE_NEM=1 + -DUSE_EOS=1 + -DSECP256K1_BUILD + -DUSE_ASM_ARM + -DUSE_NUM_NONE + -DUSE_FIELD_INV_BUILTIN + -DUSE_SCALAR_INV_BUILTIN + -DUSE_EXTERNAL_ASM + -DUSE_FIELD_10X26 + -DUSE_SCALAR_8X32 + -DUSE_ECMULT_STATIC_PRECOMPUTATION + -DUSE_EXTERNAL_DEFAULT_CALLBACKS + -DECMULT_WINDOW_SIZE=8 + -DENABLE_MODULE_GENERATOR + -DENABLE_MODULE_RANGEPROOF + -DENABLE_MODULE_RECOVERY + -DENABLE_MODULE_ECDH + -DTREZOR_FONT_BOLD_ENABLE + -DTREZOR_FONT_NORMAL_ENABLE + -DTREZOR_FONT_MONO_ENABLE + -DTREZOR_FONT_MONO_BOLD_ENABLE + ) + + include_directories(vendor/micropython) + include_directories(build/firmware/genhdr/) + include_directories(vendor/micropython/lib/stm32lib/STM32L4xx_HAL_Driver/Inc) + +Rename the `Makefile.orig` back to `Makefile`. This is clumsy, but AFAIK there is no +explicit option to autogenerate `CMakeLists.txt` otherwise. + +To make Rust code part of the project, right click `embed/rust/Cargo.toml` and +choose "Attach Cargo Project" diff --git a/docs/misc/monorepo.md b/docs/misc/monorepo.md index 2c76106e3d3..6c297f91971 100644 --- a/docs/misc/monorepo.md +++ b/docs/misc/monorepo.md @@ -7,7 +7,7 @@ Generating Use the [create_monorepo] script to regenerate from current master(s). -[create_monorepo]: ../../create_monorepo.py +[create_monorepo]: https://github.com/trezor/trezor-firmware/blob/master/create_monorepo.py Structure diff --git a/legacy/firmware/.changelog.d/2394.added b/legacy/firmware/.changelog.d/2394.added new file mode 100644 index 00000000000..49b9573040a --- /dev/null +++ b/legacy/firmware/.changelog.d/2394.added @@ -0,0 +1 @@ +Show thousands separator when displaying large amounts. diff --git a/legacy/firmware/.changelog.d/2422.fixed b/legacy/firmware/.changelog.d/2422.fixed new file mode 100644 index 00000000000..da81d2d1d15 --- /dev/null +++ b/legacy/firmware/.changelog.d/2422.fixed @@ -0,0 +1 @@ +Fix rounding in fee rate computation. diff --git a/legacy/firmware/.changelog.d/2433.removed b/legacy/firmware/.changelog.d/2433.removed new file mode 100644 index 00000000000..6daff5d0a22 --- /dev/null +++ b/legacy/firmware/.changelog.d/2433.removed @@ -0,0 +1 @@ +Remove firmware dumping capability. diff --git a/legacy/firmware/ethereum.c b/legacy/firmware/ethereum.c index 0804410d822..8ebe11f2d84 100644 --- a/legacy/firmware/ethereum.c +++ b/legacy/firmware/ethereum.c @@ -331,7 +331,7 @@ static void ethereumFormatAmount(const bignum256 *amnt, const TokenType *token, } else { ASSIGN_ETHEREUM_SUFFIX(suffix, chain_id); } - bn_format(amnt, NULL, suffix, decimals, 0, false, buf, buflen); + bn_format(amnt, NULL, suffix, decimals, 0, false, ',', buf, buflen); } static void layoutEthereumConfirmTx(const uint8_t *to, uint32_t to_len, diff --git a/legacy/firmware/fsm.c b/legacy/firmware/fsm.c index 122a4aadae3..b7a5e723d9f 100644 --- a/legacy/firmware/fsm.c +++ b/legacy/firmware/fsm.c @@ -30,7 +30,6 @@ #include "curves.h" #include "debug.h" #include "ecdsa.h" -#include "flash.h" #include "fsm.h" #include "fw_signatures.h" #include "gettext.h" diff --git a/legacy/firmware/fsm.h b/legacy/firmware/fsm.h index 5e9883e3458..74387b1fa1e 100644 --- a/legacy/firmware/fsm.h +++ b/legacy/firmware/fsm.h @@ -71,8 +71,6 @@ void fsm_msgWordAck(const WordAck *msg); void fsm_msgSetU2FCounter(const SetU2FCounter *msg); void fsm_msgGetNextU2FCounter(void); void fsm_msgGetFirmwareHash(const GetFirmwareHash *msg); -void fsm_msgGetFirmware(const GetFirmware *msg); -void fsm_msgFirmwareChunkAck(const FirmwareChunkAck *msg); // coin void fsm_msgGetPublicKey(const GetPublicKey *msg); diff --git a/legacy/firmware/fsm_msg_common.h b/legacy/firmware/fsm_msg_common.h index d031e91af9e..67f88561b8e 100644 --- a/legacy/firmware/fsm_msg_common.h +++ b/legacy/firmware/fsm_msg_common.h @@ -571,73 +571,3 @@ void fsm_msgGetFirmwareHash(const GetFirmwareHash *msg) { msg_write(MessageType_MessageType_FirmwareHash, resp); layoutHome(); } - -static bool in_dump_firmware = false; -static uint8_t sector = 0; -static uint32_t sector_offset = 0; -static uint32_t total_bytes_sent = 0; -#define FIRMWARE_PROGRESS_TOTAL (128 * 1024 * 7 + 64 * 1024) - -void firmware_dump_abort(void) { - in_dump_firmware = false; - sector = 0; - sector_offset = 0; - total_bytes_sent = 0; -} - -void send_next_firmware_chunk(void) { - if (!in_dump_firmware) { - return; - } - if (sector_offset >= flash_sector_size(sector)) { - sector++; - sector_offset = 0; - } - if (sector > FLASH_CODE_SECTOR_LAST) { - fsm_sendSuccess(_("Firmware extracted")); - layoutHome(); - firmware_dump_abort(); - return; - } - RESP_INIT(FirmwareChunk); - if (memory_firmware_read(resp->chunk.bytes, sector, sector_offset, - sizeof(resp->chunk.bytes)) != 0) { - fsm_sendFailure(FailureType_Failure_FirmwareError, NULL); - firmware_dump_abort(); - return; - } - sector_offset += sizeof(resp->chunk.bytes); - resp->chunk.size = sizeof(resp->chunk.bytes); - total_bytes_sent += sizeof(resp->chunk.bytes); - layoutProgress(_("Extracting..."), - 1000 * total_bytes_sent / FIRMWARE_PROGRESS_TOTAL); - msg_write(MessageType_MessageType_FirmwareChunk, resp); -} - -void fsm_msgGetFirmware(const GetFirmware *msg) { - (void)msg; - layoutDialogSwipe(&bmp_icon_question, _("Cancel"), _("Confirm"), NULL, - _("Do you want to"), _("extract firmware?"), NULL, - _("Your seed will"), _("not be revealed."), NULL); - if (!protectButton(ButtonRequestType_ButtonRequest_ProtectCall, false)) { - fsm_sendFailure(FailureType_Failure_ActionCancelled, NULL); - layoutHome(); - return; - } - - layoutProgressSwipe(_("Extracting..."), 0); - sector = FLASH_CODE_SECTOR_FIRST; - sector_offset = 0; - total_bytes_sent = 0; - in_dump_firmware = true; - send_next_firmware_chunk(); -} - -void fsm_msgFirmwareChunkAck(const FirmwareChunkAck *msg) { - (void)msg; - if (!in_dump_firmware) { - fsm_sendFailure(FailureType_Failure_UnexpectedMessage, NULL); - } else { - send_next_firmware_chunk(); - } -} diff --git a/legacy/firmware/layout2.c b/legacy/firmware/layout2.c index 05e968be9ab..48452c05696 100644 --- a/legacy/firmware/layout2.c +++ b/legacy/firmware/layout2.c @@ -405,8 +405,7 @@ static size_t format_coin_amount(uint64_t amount, const char *prefix, strlcpy(suffix + 1, coin->coin_shortcut, sizeof(suffix) - 1); break; } - return bn_format_uint64(amount, prefix, suffix, decimals, 0, false, output, - output_len); + return bn_format_amount(amount, prefix, suffix, decimals, output, output_len); } void layoutConfirmOutput(const CoinInfo *coin, AmountUnit amount_unit, @@ -455,7 +454,7 @@ void layoutConfirmOmni(const uint8_t *data, uint32_t size) { uint64_t amount_be = 0, amount = 0; memcpy(&amount_be, data + 12, sizeof(uint64_t)); REVERSE64(amount_be, amount); - bn_format_uint64(amount, NULL, suffix, divisible ? 8 : 0, 0, false, str_out, + bn_format_amount(amount, NULL, suffix, divisible ? 8 : 0, str_out, sizeof(str_out)); } else { desc = _("Unknown transaction"); @@ -503,15 +502,25 @@ static bool formatAmountDifference(const CoinInfo *coin, AmountUnit amount_unit, output_length) != 0; } +// Computes numer / denom and rounds to the nearest integer. +static uint64_t div_round(uint64_t numer, uint64_t denom) { + return numer / denom + (2 * (numer % denom) >= denom); +} + static bool formatFeeRate(uint64_t fee, uint64_t tx_weight, char *output, size_t output_length, bool segwit) { - // Compute fee rate and modify it in place for `bn_format_uint64` function - - // multiply by 10, because we only want to display 1 decimal digit - // and then get whole number by leaving it in `uint64_t`. - uint64_t fee_rate_multiplied = (fee * 10) / (tx_weight / 4); - - return bn_format_uint64(fee_rate_multiplied, "(", - segwit ? " sat/vB)" : " sat/B)", 1, 0, false, output, + // Convert transaction weight to virtual transaction size, which is is defined + // as tx_weight / 4 rounded up to the next integer. + // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#transaction-size-calculations + uint64_t tx_size = (tx_weight + 3) / 4; + + // Compute fee rate and modify it in place for the bn_format_uint64() + // function. We multiply by 10, because we want bn_format_uint64() to display + // one decimal digit. + uint64_t fee_rate_multiplied = div_round(10 * fee, tx_size); + + return bn_format_amount(fee_rate_multiplied, "(", + segwit ? " sat/vB)" : " sat/B)", 1, output, output_length) != 0; } @@ -1176,7 +1185,7 @@ void layoutNEMLevy(const NEMMosaicDefinition *definition, uint8_t network) { switch (definition->levy) { case NEMMosaicLevy_MosaicLevy_Percentile: - bn_format_uint64(definition->fee, NULL, NULL, 0, 0, false, str_out, + bn_format_amount(definition->fee, NULL, NULL, 0, str_out, sizeof(str_out)); layoutDialogSwipe( @@ -1257,8 +1266,7 @@ void layoutConfirmAutoLockDelay(uint32_t delay_ms) { strlcpy(line, _("after "), sizeof(line)); size_t off = strlen(line); - bn_format_uint64(num, NULL, NULL, 0, 0, false, &line[off], - sizeof(line) - off); + bn_format_amount(num, NULL, NULL, 0, &line[off], sizeof(line) - off); strlcat(line, " ", sizeof(line)); strlcat(line, unit, sizeof(line)); if (num > 1) { diff --git a/legacy/firmware/nem2.c b/legacy/firmware/nem2.c index f95ff2aef5c..d9c4d6f2e17 100644 --- a/legacy/firmware/nem2.c +++ b/legacy/firmware/nem2.c @@ -353,7 +353,7 @@ bool nem_askMosaicCreation(const NEMTransactionCommon *common, bn_format_uint64(mosaic_creation->definition.supply, NULL, NULL, mosaic_creation->definition.divisibility, - mosaic_creation->definition.divisibility, true, str_out, + mosaic_creation->definition.divisibility, true, ',', str_out, sizeof(str_out)); layoutDialogSwipe( @@ -430,7 +430,7 @@ bool nem_askSupplyChange(const NEMTransactionCommon *common, } char str_out[32] = {0}; - bn_format_uint64(supply_change->delta, NULL, NULL, 0, 0, false, str_out, + bn_format_uint64(supply_change->delta, NULL, NULL, 0, 0, false, ',', str_out, sizeof(str_out)); layoutDialogSwipe( @@ -496,7 +496,7 @@ bool nem_askAggregateModification( if (relative_change) { char str_out[32] = {0}; bn_format_uint64(relative_change < 0 ? -relative_change : relative_change, - NULL, NULL, 0, 0, false, str_out, sizeof(str_out)); + NULL, NULL, 0, 0, false, ',', str_out, sizeof(str_out)); layoutDialogSwipe(&bmp_icon_question, _("Cancel"), _("Next"), desc, creation ? _("Set minimum") @@ -648,7 +648,7 @@ static inline size_t format_amount(const NEMMosaicDefinition *definition, &val, NULL, definition && definition->has_ticker ? definition->ticker : NULL, definition && definition->has_divisibility ? definition->divisibility : 0, - -divisor, false, str_out, size); + -divisor, false, ',', str_out, size); } void nem_canonicalizeMosaics(NEMTransfer *transfer) { diff --git a/legacy/firmware/protob/messages-management.options b/legacy/firmware/protob/messages-management.options index bc3fb56d920..79c398de9f4 100644 --- a/legacy/firmware/protob/messages-management.options +++ b/legacy/firmware/protob/messages-management.options @@ -38,5 +38,3 @@ Nonce.nonce max_size:32 GetFirmwareHash.challenge max_size:32 FirmwareHash.hash max_size:32 - -FirmwareChunk.chunk max_size:2048 diff --git a/legacy/firmware/stellar.c b/legacy/firmware/stellar.c index e263bad3629..31145a94d80 100644 --- a/legacy/firmware/stellar.c +++ b/legacy/firmware/stellar.c @@ -1379,7 +1379,7 @@ void stellar_getSignatureForActiveTx(uint8_t *out_signature) { * "100.0" */ void stellar_format_stroops(uint64_t number, char *out, size_t outlen) { - bn_format_uint64(number, NULL, NULL, 7, 0, false, out, outlen); + bn_format_amount(number, NULL, NULL, 7, out, outlen); } /* @@ -1423,7 +1423,7 @@ void stellar_format_price(uint32_t numerator, uint32_t denominator, char *out, } // Format with bn_format_uint64 - bn_format_uint64(value, NULL, NULL, 6, 6 - scale, true, out, outlen); + bn_format_uint64(value, NULL, NULL, 6, 6 - scale, true, ',', out, outlen); } /* @@ -1432,14 +1432,14 @@ void stellar_format_price(uint32_t numerator, uint32_t denominator, char *out, void stellar_format_uint32(uint32_t number, char *out, size_t outlen) { bignum256 bn_number = {0}; bn_read_uint32(number, &bn_number); - bn_format(&bn_number, NULL, NULL, 0, 0, false, out, outlen); + bn_format(&bn_number, NULL, NULL, 0, 0, false, ',', out, outlen); } /* * Returns a uint64 formatted as a string */ void stellar_format_uint64(uint64_t number, char *out, size_t outlen) { - bn_format_uint64(number, NULL, NULL, 0, 0, false, out, outlen); + bn_format_uint64(number, NULL, NULL, 0, 0, false, ',', out, outlen); } /* diff --git a/legacy/firmware/transaction.c b/legacy/firmware/transaction.c index f60a43c60e3..aea5f8bb628 100644 --- a/legacy/firmware/transaction.c +++ b/legacy/firmware/transaction.c @@ -1132,6 +1132,10 @@ uint32_t tx_output_weight(const CoinInfo *coin, const TxOutputType *txoutput) { uint32_t tx_decred_witness_weight(const TxInputType *txinput) { uint32_t input_script_size = tx_input_script_size(txinput, txinput->script_type); + if (txinput->script_type == InputScriptType_SPENDMULTISIG) { + // Decred fixed the the OP_FALSE bug in multisig. + input_script_size -= 1; // Subtract one OP_FALSE byte. + } uint32_t size = TXSIZE_DECRED_WITNESS + ser_length_size(input_script_size) + input_script_size; diff --git a/legacy/firmware/version.h b/legacy/firmware/version.h index 6bb288b6dfb..fe5d48b3bd2 100644 --- a/legacy/firmware/version.h +++ b/legacy/firmware/version.h @@ -1,6 +1,6 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 11 -#define VERSION_PATCH 2 +#define VERSION_PATCH 3 #define FIX_VERSION_MAJOR 1 #define FIX_VERSION_MINOR 11 diff --git a/legacy/memory.c b/legacy/memory.c index 5121806fe39..39cebb3f9af 100644 --- a/legacy/memory.c +++ b/legacy/memory.c @@ -20,7 +20,6 @@ #include "memory.h" #include #include -#include #include "blake2s.h" #include "flash.h" #include "layout.h" @@ -115,16 +114,3 @@ int memory_firmware_hash(const uint8_t *challenge, uint32_t challenge_size, return blake2s_Final(&ctx, hash, BLAKE2S_DIGEST_LENGTH); } - -int memory_firmware_read(uint8_t *dest, uint8_t sector, uint32_t offset, - uint32_t size) { - if (sector < FLASH_CODE_SECTOR_FIRST || sector > FLASH_CODE_SECTOR_LAST) { - return 1; - } - const void *data = flash_get_address(sector, offset, size); - if (data == NULL) { - return 1; - } - memcpy(dest, data, size); - return 0; -} diff --git a/legacy/memory.h b/legacy/memory.h index 2654a618de7..e79267e325c 100644 --- a/legacy/memory.h +++ b/legacy/memory.h @@ -96,8 +96,6 @@ int memory_bootloader_hash(uint8_t *hash); int memory_firmware_hash(const uint8_t *challenge, uint32_t challenge_size, void (*progress_callback)(uint32_t, uint32_t), uint8_t hash[32]); -int memory_firmware_read(uint8_t *dest, uint8_t sector_idx, uint32_t offset, - uint32_t len); static inline void flash_write32(uint32_t addr, uint32_t word) { *(volatile uint32_t *)FLASH_PTR(addr) = word; diff --git a/python/.changelog.d/2433.removed b/python/.changelog.d/2433.removed new file mode 100644 index 00000000000..6daff5d0a22 --- /dev/null +++ b/python/.changelog.d/2433.removed @@ -0,0 +1 @@ +Remove firmware dumping capability. diff --git a/python/src/trezorlib/cli/firmware.py b/python/src/trezorlib/cli/firmware.py index 7c8c0e85b2a..fffbc8dbf9f 100644 --- a/python/src/trezorlib/cli/firmware.py +++ b/python/src/trezorlib/cli/firmware.py @@ -599,19 +599,3 @@ def get_hash(client: "TrezorClient", hex_challenge: Optional[str]) -> str: """Get a hash of the installed firmware combined with the optional challenge.""" challenge = bytes.fromhex(hex_challenge) if hex_challenge else None return firmware.get_hash(client, challenge).hex() - - -@cli.command() -@click.argument("file", type=click.File("wb")) -@with_client -def extract(client: "TrezorClient", file: BinaryIO) -> None: - """Extract the firmware from the device.""" - if client.features.model == "T": - firmware_size = 13 * 128 * 1024 - elif client.features.model == "1": - firmware_size = 7 * 128 * 1024 + 64 * 1024 - else: - firmware_size = None - - with click.progressbar(length=firmware_size) as bar: - file.write(firmware.get_firmware(client, bar.update)) diff --git a/python/src/trezorlib/firmware.py b/python/src/trezorlib/firmware.py index 80a9e7c6526..54408082cd8 100644 --- a/python/src/trezorlib/firmware.py +++ b/python/src/trezorlib/firmware.py @@ -22,7 +22,7 @@ import construct as c import ecdsa -from . import cosi, exceptions, messages +from . import cosi, messages from .tools import expect, session if TYPE_CHECKING: @@ -523,19 +523,3 @@ def update( @expect(messages.FirmwareHash, field="hash", ret_type=bytes) def get_hash(client: "TrezorClient", challenge: Optional[bytes]): return client.call(messages.GetFirmwareHash(challenge=challenge)) - - -@session -def get_firmware( - client: "TrezorClient", progress_update: Callable[[int], Any] = lambda _: None -) -> bytes: - resp = client.call(messages.GetFirmware()) - result = bytearray() - while isinstance(resp, messages.FirmwareChunk): - result.extend(resp.chunk) - progress_update(len(resp.chunk)) - resp = client.call(messages.FirmwareChunkAck()) - - if not isinstance(resp, messages.Success): - raise exceptions.TrezorException(f"Unexpected message {resp}") - return bytes(result) diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py index 76a8a4d38a0..b4afc81a508 100644 --- a/python/src/trezorlib/messages.py +++ b/python/src/trezorlib/messages.py @@ -68,9 +68,6 @@ class MessageType(IntEnum): RebootToBootloader = 87 GetFirmwareHash = 88 FirmwareHash = 89 - GetFirmware = 90 - FirmwareChunk = 91 - FirmwareChunkAck = 92 SetU2FCounter = 63 GetNextU2FCounter = 80 NextU2FCounter = 81 @@ -3333,28 +3330,6 @@ def __init__( self.hash = hash -class GetFirmware(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 90 - - -class FirmwareChunk(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 91 - FIELDS = { - 1: protobuf.Field("chunk", "bytes", repeated=False, required=True), - } - - def __init__( - self, - *, - chunk: "bytes", - ) -> None: - self.chunk = chunk - - -class FirmwareChunkAck(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 92 - - class WipeDevice(protobuf.MessageType): MESSAGE_WIRE_TYPE = 5 diff --git a/tests/device_tests/test_firmware_dump.py b/tests/device_tests/test_firmware_dump.py deleted file mode 100644 index 990bb7b87a6..00000000000 --- a/tests/device_tests/test_firmware_dump.py +++ /dev/null @@ -1,27 +0,0 @@ -from hashlib import blake2s - -from trezorlib import firmware -from trezorlib.debuglink import TrezorClientDebugLink as Client - -FIRMWARE_LENGTHS = { - "1": 7 * 128 * 1024 + 64 * 1024, - "T": 13 * 128 * 1024, -} - - -def test_firmware_dump_hash(client: Client) -> None: - data = firmware.get_firmware(client) - assert len(data) == FIRMWARE_LENGTHS[client.features.model] - - if client.features.fw_vendor != "EMULATOR": - # check that the dumped data is not empty - assert not all(byte == 0xFF for byte in data) - - expected_hash = blake2s(data).digest() - hash = firmware.get_hash(client, None) - assert hash == expected_hash - - challenge = b"Hello Trezor" - expected_hash = blake2s(data, key=challenge).digest() - hash = firmware.get_hash(client, challenge) - assert hash == expected_hash diff --git a/tests/device_tests/test_firmware_hash.py b/tests/device_tests/test_firmware_hash.py new file mode 100644 index 00000000000..7b6072e3dd7 --- /dev/null +++ b/tests/device_tests/test_firmware_hash.py @@ -0,0 +1,45 @@ +from hashlib import blake2s + +import pytest + +from trezorlib import firmware +from trezorlib.debuglink import TrezorClientDebugLink as Client + +FIRMWARE_LENGTHS = { + "1": 7 * 128 * 1024 + 64 * 1024, + "T": 13 * 128 * 1024, +} + + +def test_firmware_hash_emu(client: Client) -> None: + if client.features.fw_vendor != "EMULATOR": + pytest.skip("Only for emulator") + + data = b"\xff" * FIRMWARE_LENGTHS[client.features.model] + + expected_hash = blake2s(data).digest() + hash = firmware.get_hash(client, None) + assert hash == expected_hash + + challenge = b"Hello Trezor" + expected_hash = blake2s(data, key=challenge).digest() + hash = firmware.get_hash(client, challenge) + assert hash == expected_hash + + +def test_firmware_hash_hw(client: Client) -> None: + if client.features.fw_vendor == "EMULATOR": + pytest.skip("Only for hardware") + + # TODO get firmware image from outside the environment, check for actual result + challenge = b"Hello Trezor" + empty_data = b"\xff" * FIRMWARE_LENGTHS[client.features.model] + empty_hash = blake2s(empty_data).digest() + empty_hash_challenge = blake2s(empty_data, key=challenge).digest() + + hash = firmware.get_hash(client, None) + assert hash != empty_hash + + hash2 = firmware.get_hash(client, challenge) + assert hash != hash2 + assert hash2 != empty_hash_challenge diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 3172327e83d..dbe1d29e48f 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -3,21 +3,21 @@ "T1_bitcoin-test_bcash.py::test_send_bch_change": "da29f84e4474b1b14bfad02d0c9b93ff6ab24a4c232938c700d50e57907e4741", "T1_bitcoin-test_bcash.py::test_send_bch_multisig_change": "46a02696df9cbaffdc4e81eb1d19ab91130fd9d22292003ead51b033c71948c0", "T1_bitcoin-test_bcash.py::test_send_bch_multisig_wrongchange": "3bdbcf5d17d555461fbbc317e4884ec98c228af7b4638af8300f691e04a44db9", -"T1_bitcoin-test_bcash.py::test_send_bch_nochange": "b04abe4b2e2f3fde613d9cc2dfbb7bcff5c283fb4af590079ed1867785e08b3a", -"T1_bitcoin-test_bcash.py::test_send_bch_oldaddr": "6f2d985f9c607efd255763cf1b5c79436a4768026b6c89eea0b42278b8738d92", +"T1_bitcoin-test_bcash.py::test_send_bch_nochange": "7f140a31bd24e2c39a4492f812decbca8781709799f2e99a3c1d2e5916eb88c8", +"T1_bitcoin-test_bcash.py::test_send_bch_oldaddr": "d99b7455bed416b00e4464b69f63660bd15177731881b8327528229ee16f332f", "T1_bitcoin-test_bgold.py::test_attack_change_input": "d75bb96b189844e6db9ce8713e5873ec916a96583520fdaec11da1e749fae46b", "T1_bitcoin-test_bgold.py::test_send_bitcoin_gold_change": "d75bb96b189844e6db9ce8713e5873ec916a96583520fdaec11da1e749fae46b", "T1_bitcoin-test_bgold.py::test_send_bitcoin_gold_nochange": "d8ee2a79e800cea4ed53ba1347178287488b44688aedea89eff43c9196234ee5", -"T1_bitcoin-test_bgold.py::test_send_btg_multisig_change": "090f46c498d8e0cd394cd869eec3e3c7e7ec81bfe4b857b495176604fc8519f7", +"T1_bitcoin-test_bgold.py::test_send_btg_multisig_change": "b7475b47c4cb4ea2b7b74d9b47af8555e146af1252141a41eef56275bc7910b9", "T1_bitcoin-test_bgold.py::test_send_mixed_inputs": "fb75a9c9302653d1fb7cda5a5a0732e5eb3db505a37b01965a303a65a10d0057", "T1_bitcoin-test_bgold.py::test_send_multisig_1": "6e55061ba714c36b9a97db0fe02ae47ba3fdaba0dc624c0a1b05169a416cefb1", -"T1_bitcoin-test_bgold.py::test_send_p2sh": "11cda88f72be81cd99169d8bafce622c089ba3b137b840a12550ff3b932bd4a4", -"T1_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "9ac3856f95d9df08584db767094846787f7ec97bb1b1a9e2463ae02a6d74651c", +"T1_bitcoin-test_bgold.py::test_send_p2sh": "bcb19e2274ad09bfe43119765d90da37412ce905c7be7545af360910a575d0e8", +"T1_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "080cc378e988b7e25fcf094fc099a780a1ace6049e29fd0c6bd804575a93a5bf", "T1_bitcoin-test_dash.py::test_send_dash": "f82f04808cbd87e88e268e923c35c05217ecde6c1aea27d114b44262cb813cd7", -"T1_bitcoin-test_dash.py::test_send_dash_dip2_input": "c2b03d37a45a5d4afe8b16c72a96afda6c871442336f4d6628a700fbb172cb62", -"T1_bitcoin-test_decred.py::test_decred_multisig_change": "d3358aabc875e2c4db52b3d5bf1ffaedf7554494c4edf6f6676af9a64eb2fc52", -"T1_bitcoin-test_decred.py::test_send_decred": "cee0c78fe46caf998903b0d99622cff5bab6c02b638cf1d80509ed9369f7f2b8", -"T1_bitcoin-test_decred.py::test_send_decred_change": "df097b4dc59e90ecc562673d817e192edcda5de5bd4d33a0904aae41345ca2c8", +"T1_bitcoin-test_dash.py::test_send_dash_dip2_input": "e219fbf1899be32e6097ad57ea5fe204c347cc710d0659c7d4972b5253e63b25", +"T1_bitcoin-test_decred.py::test_decred_multisig_change": "e3e6bdcad7c8deee8c91c8cedff34668255bdd93bf1cfb4f4f46060a356cf494", +"T1_bitcoin-test_decred.py::test_send_decred": "50fa7dc09dbf22fc4c1e62ee2870e9047e29dd050edbdcf34341a5483d52cdac", +"T1_bitcoin-test_decred.py::test_send_decred_change": "42814de3a9199b4b683bcde8595d7987b48cfeb609bd63926dd66abc7e5611fc", "T1_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDADDRESS-pkh([5-7a80e3db": "9b30c98b35338d933fe992e4a47fb259a54f0f6f204610f63c6e6cbff427dbb9", "T1_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDP2SHWITNESS-sh-03d56ac2": "09d1f2688240677ac55f2677b62973ee7fe4ca788e9e139b9f6de5a1a66d6205", "T1_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDTAPROOT-tr([5c-22751b2f": "f71944d71edb2531faef0a177c2eda4f88bcb0ef77883db18f655d706759b5b0", @@ -35,7 +35,7 @@ "T1_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDTAPROOT-tr([5c-ddc924d3": "f24b6c201efc2efbb174a48766df03f5964ea95908abca791714e22bcf9b635d", "T1_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDWITNESS-wpkh([-996ae319": "cd384fcf3379759dd5fc3f2737ddfb9185a55e506d9d0869f8a85ba31ed1d973", "T1_bitcoin-test_firo.py::test_spend_lelantus": "4597a8d1b5311af382c9d495bbbd08ef4fb8bc61b5645d78f1411397b4d1a0a5", -"T1_bitcoin-test_fujicoin.py::test_send_p2tr": "ac7a973fbca83d8af8276be75f18ff71659d82f0527256a19f75ebc8dfc57ee3", +"T1_bitcoin-test_fujicoin.py::test_send_p2tr": "bfa5dc1a494ea17fd43d52a315a7f1abe9ad80d7fdaa8b3ec5f92c4118638d1e", "T1_bitcoin-test_getaddress.py::test_bch": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_getaddress.py::test_bch_multisig": "730fd13c57131201223dd2f5a14f287ca3b43f5d3a526ac71a9f436b123de388", "T1_bitcoin-test_getaddress.py::test_btc": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -128,16 +128,16 @@ "T1_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path1-0212f4629f4f224db0-0209bb73": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_grs.py::test_legacy": "1c49d3e4ce2ac576ce7121eda45117ad58abda8e432fec10094e4982a45ef81f", "T1_bitcoin-test_grs.py::test_legacy_change": "138bc552a4cebb01a4d1677a3be808c8bef97dfffc30815148bfdd7f97c41075", -"T1_bitcoin-test_grs.py::test_send_p2tr": "e2e574c98c1a2d138754f756708bbe39f1ea82cade10949c1d4fe5991710267a", -"T1_bitcoin-test_grs.py::test_send_segwit_native": "209b87140f122bb0b965676d28c74364d04d8738f26bd4707a5722524212d8d0", -"T1_bitcoin-test_grs.py::test_send_segwit_native_change": "a867f477323d47bd00d9940701620f5a0c027b7857a266ff6c924281393b72ac", -"T1_bitcoin-test_grs.py::test_send_segwit_p2sh": "c71ff14c25961689503d60ef6c42f867f0039eb6aa73a1351d3b99cfa60680a8", -"T1_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "98d37edf851d63b24c42011ddd9311261c144c9a6ef28fccab2ccbc2c7d336d8", -"T1_bitcoin-test_komodo.py::test_one_one_fee_sapling": "2b224701e12d57e6c1c1396fccabb41beb35ea150c42da4668dfc0a06f4ead7e", +"T1_bitcoin-test_grs.py::test_send_p2tr": "9df8a38cd6885a9c8dd5af58ec53164cd59eb0d9512be755403b10ed793d69b7", +"T1_bitcoin-test_grs.py::test_send_segwit_native": "48ee1cc2413f67b8f9bebe480d9c0547b1002cf5922753a23e06f0bf103a6896", +"T1_bitcoin-test_grs.py::test_send_segwit_native_change": "fca2eaf02e835db71701d6df45662ba963f9a16ffabc794190f7453057f94178", +"T1_bitcoin-test_grs.py::test_send_segwit_p2sh": "86b417d5732c0c1c97a310f762cb2b3cc47778fe92260eb390ca0a9670f1ec0f", +"T1_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "011e1ad7d9d54317ff3e0bdf3470980b9f486bfe916bb4a7afa365b57ae85b3d", +"T1_bitcoin-test_komodo.py::test_one_one_fee_sapling": "e597c7767dc83434e556ab551f4ff79eb9ea47d5902969dcfe82a41f1c7cd6c4", "T1_bitcoin-test_komodo.py::test_one_one_rewards_claim": "e623e85329341afa146fd5f4b93eef09eaecfcd66478b2a096c9930b5b6bede8", -"T1_bitcoin-test_multisig.py::test_15_of_15": "fca3242622660d794482f55460a3d29bf329fbfee58535c70caddcf1ffc23cf8", +"T1_bitcoin-test_multisig.py::test_15_of_15": "c3f5f1880447f879d1d1b966faf7b31510c82553eab815c2c7b150c4f2da9348", "T1_bitcoin-test_multisig.py::test_2_of_3": "31e28a5a43b745bf2206fc63268492c39cdfa39482493bc5607958c05a43177c", -"T1_bitcoin-test_multisig.py::test_attack_change_input": "ca9b453dc682e04662f1509a947ca978a5021f2aea561def8564933c1acad6d1", +"T1_bitcoin-test_multisig.py::test_attack_change_input": "b9607ae20961d384eeaf73af75c044fea71ee95855e25a25a8f097fe5ff943c0", "T1_bitcoin-test_multisig.py::test_missing_pubkey": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_multisig_change.py::test_external_external": "90db9f1e6c29dae422d81f8c891576b39b6550a613d6365c8497d350a11ead1b", "T1_bitcoin-test_multisig_change.py::test_external_internal": "c14fa123284a49effcbf30184c50d1ae7e9cd998ac7bac899ca66371046c0c8f", @@ -169,11 +169,11 @@ "T1_bitcoin-test_nonstandard_paths.py::test_signmessage[m-3h-100h-4-255-script_types1]": "bec27ce6240d3be57e2815b00f66db2f3d0da60b3de8429772aed5ce5dc0263a", "T1_bitcoin-test_nonstandard_paths.py::test_signmessage[m-4-255-script_types0]": "8501aeef2b2494e3440d4da64f2d08d24284183c1813753e653039797ffe684f", "T1_bitcoin-test_nonstandard_paths.py::test_signmessage[m-49-0-63-0-255-script_types4]": "3f99e0c68e5fb612cb48b7d170a5f36a32e1fc5d8fe7d98f391ef4900411731d", -"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "36ac4b97285fbdf35bda6c206e79bb44ca290a74515b1558c54e00e757bdfa48", -"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "36ac4b97285fbdf35bda6c206e79bb44ca290a74515b1558c54e00e757bdfa48", -"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "acfe73eb826d39066235679b741add1f4a96ecf86813d05ee96d57d0a10bc2bc", -"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "acfe73eb826d39066235679b741add1f4a96ecf86813d05ee96d57d0a10bc2bc", -"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "878e2481b8a53650b2b927434ab9efe916080b2cb50977148f5afc87d8d593e9", +"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "6405d6fd57770fab1fec6025371bb028526dbca66989741070602f0b2a4070e3", +"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "6405d6fd57770fab1fec6025371bb028526dbca66989741070602f0b2a4070e3", +"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "f84b6208e0874c7b81c8749fe1a4966d6656c5f945630cdaa00ae451372f42e3", +"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "f84b6208e0874c7b81c8749fe1a4966d6656c5f945630cdaa00ae451372f42e3", +"T1_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "b6853df41ac319320631ec4d47690c361ff1ac83f56ef6bbe2e0da0b3f6cc260", "T1_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "14661620220ec40ef5f1ebb942f8769407883cf782c80f5a26b2d2be93cd1ac0", "T1_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths1-address_index1]": "14661620220ec40ef5f1ebb942f8769407883cf782c80f5a26b2d2be93cd1ac0", "T1_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "dceba24e3580c8e6184464de082cef38556c7ebca67284599cbfddb15aaa8982", @@ -182,11 +182,11 @@ "T1_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths5-address_index5]": "14661620220ec40ef5f1ebb942f8769407883cf782c80f5a26b2d2be93cd1ac0", "T1_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths6-address_index6]": "14661620220ec40ef5f1ebb942f8769407883cf782c80f5a26b2d2be93cd1ac0", "T1_bitcoin-test_op_return.py::test_nonzero_opreturn": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_op_return.py::test_opreturn": "9219a6b801c98f130655a914bf82da75225ddc76ad9411c101cdc85c85dc8f6e", +"T1_bitcoin-test_op_return.py::test_opreturn": "9b8da17704f3d85548035b871759783880acb18d8f962ecb44dcc4d2b2b7b712", "T1_bitcoin-test_op_return.py::test_opreturn_address": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_peercoin.py::test_timestamp_included": "491f2195b4c2a51b4b0e58cc336d1b45390809f9da178689c08e6c28fb6de7df", +"T1_bitcoin-test_peercoin.py::test_timestamp_included": "532062e36e32690039675ab776d8b64fca91c336d47041b101f8f998f7ebf0b7", "T1_bitcoin-test_peercoin.py::test_timestamp_missing": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_peercoin.py::test_timestamp_missing_prevtx": "d62ab24ea226256167ca2a374b2b13c952829e7f9897fee828a7aacf38d7aba4", +"T1_bitcoin-test_peercoin.py::test_timestamp_missing_prevtx": "eb3584a713cb16fe7a97367c0873d95554fdeb0aac32231244dc5812a7fa8e60", "T1_bitcoin-test_signmessage.py::test_signmessage[NFC message]": "73ea6c228f3552bc620d0d63b416046f9f245e4035c18cf04d2444de6999e720", "T1_bitcoin-test_signmessage.py::test_signmessage[NFKD message]": "73ea6c228f3552bc620d0d63b416046f9f245e4035c18cf04d2444de6999e720", "T1_bitcoin-test_signmessage.py::test_signmessage[bcash]": "52f71cb4a4fcbd2b8cc749df7ffb538a370fde1f69edf550e54ffe4040222c0a", @@ -212,21 +212,21 @@ "T1_bitcoin-test_signtx.py::test_attack_change_outputs": "d9854895427d015a54aae20db518cb0caf2e09d6bc30015a992b351a37a4fb01", "T1_bitcoin-test_signtx.py::test_attack_modify_change_address": "d415fc90494448dd952871a3ef2d77100c4b9f7f852513137ae34a9e2126449b", "T1_bitcoin-test_signtx.py::test_change_on_main_chain_allowed": "d415fc90494448dd952871a3ef2d77100c4b9f7f852513137ae34a9e2126449b", -"T1_bitcoin-test_signtx.py::test_fee_high_warning": "861b62e5d22b1e1e4e792c90521be53190a868450e9d66eee83f2c0016f9f08b", +"T1_bitcoin-test_signtx.py::test_fee_high_warning": "a5a0ca277997d7003be6494dd5dbe28ce5278d2d04403f9d52cb7fa231d23093", "T1_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.EXTERNAL]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.SPENDADDRESS]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOADDRESS]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOSCRIPTHASH]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_signtx.py::test_lock_time[1-4294967295]": "9135dd3c5855fd1c48d6d72c9923e68dc7228b4a54a2f390c66bd213bc7fe878", -"T1_bitcoin-test_signtx.py::test_lock_time[499999999-4294967294]": "785c0b8d1ae116e20d1e00acb851320f83bf3f4ca2efad4b503ba711e246a6ee", -"T1_bitcoin-test_signtx.py::test_lock_time[500000000-4294967294]": "4b8cc6cf91e6b69e6e8d6072e98d3add2571ac6bd2accdbdb52c9457ee7ca885", -"T1_bitcoin-test_signtx.py::test_lots_of_change": "836f9bf0fca7f88f1c3e790c6e4ff63270dd4dd172468d75ae744fbbf93d65f4", +"T1_bitcoin-test_signtx.py::test_lock_time[1-4294967295]": "e5d81e30539ef010c41a2e6fc73fc9ee2f4a8b222447cdefc639a8de67fe8344", +"T1_bitcoin-test_signtx.py::test_lock_time[499999999-4294967294]": "b3355f2ef2b1e82b8723326eb47235b80ac6bebb5c350c5415271bc5b09f8a16", +"T1_bitcoin-test_signtx.py::test_lock_time[500000000-4294967294]": "7ed69ed03f56fd951e4051d02c1ea9f0f7b7416c6615d86a76fbf92a2011f3ec", +"T1_bitcoin-test_signtx.py::test_lots_of_change": "ebd3f6ef181d86e3b3bf2a1dfb3099f7c6738d7e83a634a407af25c682ea1fde", "T1_bitcoin-test_signtx.py::test_lots_of_inputs": "acffe87ecbd71750e7cca19d7fb850750f7d48363febc4446388771f2712ae49", "T1_bitcoin-test_signtx.py::test_lots_of_outputs": "7b780dec2a555b4ba2440c9119abdc3d662a2a80c40fa82de6a1de83fe2a1b2b", "T1_bitcoin-test_signtx.py::test_not_enough_funds": "8d684112b826d1902e8a1a2106618b6a6f4983ce790e939fc3db476b20e30dea", -"T1_bitcoin-test_signtx.py::test_not_enough_vouts": "186e2a21467ac2d0bb514f7c79c2ba9827414af100fd35f29affb8bbf3260a93", -"T1_bitcoin-test_signtx.py::test_one_one_fee": "ad0e7054f572fa6c10697aa61d47487de2fd89089bb1e9be9af55494fba5fc44", -"T1_bitcoin-test_signtx.py::test_one_three_fee": "67780a4a61f07ab4e3eb5ff40d21596e30257e156b66ebab1419f6c5cf112a9d", +"T1_bitcoin-test_signtx.py::test_not_enough_vouts": "ff217017236fead16edb90974382dccda7c669ac392bdfa25f00222300830363", +"T1_bitcoin-test_signtx.py::test_one_one_fee": "b6bc0dbcd374903f2e7ef4e0467714d015c1c1fe004f6a3cf68a7b19c34640f4", +"T1_bitcoin-test_signtx.py::test_one_three_fee": "36b3754a247c61fa477fbe48306099b19cef970d0f74b723000fd7980ba56a28", "T1_bitcoin-test_signtx.py::test_one_two_fee": "1e9d0e62b59fbad8292746895b3cdbdbe51cc9b61600fa2f3185fa6211045f20", "T1_bitcoin-test_signtx.py::test_p2sh": "cb907533e744fc8a37b9e47637cc2350de8d0b7b523fcb6ab3955364f2d61f3b", "T1_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[branch_id-13]": "20c49d878b51f7d20129c0f3ebefd2a0dff152d57d926dc7f539d4bd4ee44ea5", @@ -238,40 +238,40 @@ "T1_bitcoin-test_signtx.py::test_signtx_forbidden_fields[expiry-9]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx.py::test_signtx_forbidden_fields[timestamp-42]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx.py::test_signtx_forbidden_fields[version_group_id-69]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_signtx.py::test_spend_coinbase": "c03f66d6ddb7eaca4cdd74ca73b594ad0d2760a0cd963ee02f5a981cc8dccb63", +"T1_bitcoin-test_signtx.py::test_spend_coinbase": "9f908b31e01ba580b127284c241c9730f517a1d0df1f9398375f80b86068729f", "T1_bitcoin-test_signtx.py::test_testnet_big_amount": "f719fdaecbbf3abda98e3429c912bfb59079ad3df92b0d0fc8cc603d189b87cf", -"T1_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "780476b5a22bb4901ed4e9a67f7a631c5ade4b50d2813d64cc227188305a7ced", +"T1_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "169851ff1163295e6a411685c9e3c50722a332288e8e12b84e6c71ac10c4c4d4", "T1_bitcoin-test_signtx.py::test_testnet_one_two_fee": "d415fc90494448dd952871a3ef2d77100c4b9f7f852513137ae34a9e2126449b", "T1_bitcoin-test_signtx.py::test_two_changes": "61e8de6771877b747d58272920e47671d4cc6f0de0643c0932dba2d7a64aee31", "T1_bitcoin-test_signtx.py::test_two_two": "dbe1e1fea61ba401b84a89253cc6d86c80ecb80d58ec50f6b984d9c043d66686", -"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.BITCOIN]": "21f26f41f362c72621612a5ad09e94a7c0d7aa78e374317fdbec6703724c9fc6", -"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MICROBITCOIN]": "70b0a41b018830b26d1f060997255ed2f878ada498de8f20f2585b0fc44713b8", -"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MILLIBITCOIN]": "fe50faec0e32b04981b41ebda5911f1fc9a55b5ca40a91d62800ecb22647d13d", -"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.SATOSHI]": "70c63e3c8a75504d5d6cba703144667d26cdb1888a8a9b6361fbcee5eb1c7bab", -"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[None]": "21f26f41f362c72621612a5ad09e94a7c0d7aa78e374317fdbec6703724c9fc6", +"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.BITCOIN]": "469b90fc27d63c87ab5b28e5bb99b10e503273a393902f1914479f8cd1c2cfe6", +"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MICROBITCOIN]": "f551b1fef90fc48774bd2a8e30fa54162b2e2f5f8b1daa1ddfce96c553a27508", +"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MILLIBITCOIN]": "7dcfb1eb0224aa3f43e353ffcf02f63e76cb2f85600cd65d356d9a4deb078827", +"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.SATOSHI]": "820c57872989235da02e82ebabc1ac3475d9f7c746f62e61188ca94a3305d679", +"T1_bitcoin-test_signtx_amount_unit.py::test_signtx[None]": "469b90fc27d63c87ab5b28e5bb99b10e503273a393902f1914479f8cd1c2cfe6", "T1_bitcoin-test_signtx_external.py::test_p2tr_external_unverified": "19e56e826e17f0b5cb5ab26d684dd4d1ef73da2711edc8bef2a086962c1382b0", "T1_bitcoin-test_signtx_external.py::test_p2wpkh_external_unverified": "af9f164a44223a2b004ec49b7a18bf0add314b29331c4fa8fd98e845f705ebd6", "T1_bitcoin-test_signtx_invalid_path.py::test_attack_path_segwit": "8ea6ddd6d6b577ab5c7b262a0bc0393d5f9415ca3c018e18099661880ce79545", "T1_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail_asap": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "e335d7a46878543d5546557cb6e4e5603e72259b8531a8d7dc7ed61e227c3624", -"T1_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "5ed3e34779bb807089333d55ba59ddc19b5229ebadad7012ddb88819a30db70c", -"T1_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_inputs": "c2622d993617201ef0d092087111d161c130ca1bfcfcff074c55d9aaa8634e05", -"T1_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_non_segwit_inputs": "f70134672a25cd6e3b21140f7d11790321675c60af3b3517a5ad23cf79ccaac1", -"T1_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "c2622d993617201ef0d092087111d161c130ca1bfcfcff074c55d9aaa8634e05", -"T1_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_segwit_inputs": "07de3e057f55d05f59d1d457d787d3f37321a01f1c459adbbeebabdf4acfc958", +"T1_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "79ed8f7d8ce8044c6305ccccd220fbb0bfa441526fa40f651f6cb6a34d4f5d65", +"T1_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "837ff3ceb7f222ae71c05e7eb0a7aa7fcd7f54454a3cb2c79663dc015a13fd99", +"T1_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_inputs": "2dc50217e7c93eac7a4e3547bbdbcce47a9c576ea25abcdcb64d15353b066e76", +"T1_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_non_segwit_inputs": "b2e0ee4a66aab0f9b226fa99607557f1a6f40ab9c09893fdc77c2d698996f25a", +"T1_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "2dc50217e7c93eac7a4e3547bbdbcce47a9c576ea25abcdcb64d15353b066e76", +"T1_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_segwit_inputs": "4df81aa1a576ec70c9a5527450b511f2f2e8ff273a8e14140d4ad57684450f13", "T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[hello world]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[x]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "0960105d3a310c19b478ec077ed60fce8210adb436e0f16b3bc2d5b3179a6ed1", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "0960105d3a310c19b478ec077ed60fce8210adb436e0f16b3bc2d5b3179a6ed1", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "0960105d3a310c19b478ec077ed60fce8210adb436e0f16b3bc2d5b3179a6ed1", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "0960105d3a310c19b478ec077ed60fce8210adb436e0f16b3bc2d5b3179a6ed1", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "77dc4379e7d42c6e96c5c304e3f8cf1291145d317b98c9db6e3f7ab475938f57", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "77dc4379e7d42c6e96c5c304e3f8cf1291145d317b98c9db6e3f7ab475938f57", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "77dc4379e7d42c6e96c5c304e3f8cf1291145d317b98c9db6e3f7ab475938f57", -"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "77dc4379e7d42c6e96c5c304e3f8cf1291145d317b98c9db6e3f7ab475938f57", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "e03b66babbcaec324e399c407016b0805dc2463d04e3095507c6df0a42583e48", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "e03b66babbcaec324e399c407016b0805dc2463d04e3095507c6df0a42583e48", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "e03b66babbcaec324e399c407016b0805dc2463d04e3095507c6df0a42583e48", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "e03b66babbcaec324e399c407016b0805dc2463d04e3095507c6df0a42583e48", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "58c629d823771a5bd2b844ee299a85f263e716c67ca347595ade4379be4113f2", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "58c629d823771a5bd2b844ee299a85f263e716c67ca347595ade4379be4113f2", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "58c629d823771a5bd2b844ee299a85f263e716c67ca347595ade4379be4113f2", +"T1_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "58c629d823771a5bd2b844ee299a85f263e716c67ca347595ade4379be4113f2", "T1_bitcoin-test_signtx_replacement.py::test_attack_fake_int_input_amount": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_replacement.py::test_attack_steal_change": "3a79850fe95abbd2ca342fc62ba7f6404c4f437977764839a8146789ac811fce", "T1_bitcoin-test_signtx_replacement.py::test_p2pkh_fee_bump": "a386c4c61f5fe3b073db6b8725193f5bf7881d7b6fae175ff7d879f7c94eb795", @@ -282,22 +282,22 @@ "T1_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_remove_change": "14544554428651eb22515a88418c71f66de68e581ea2df5b2259843b1931e8fc", "T1_bitcoin-test_signtx_replacement.py::test_p2wpkh_invalid_signature": "7b3b6ebee78fed0e64c9689c64c5fbf73099812c5452b2fd2dbe2c23cd69b669", "T1_bitcoin-test_signtx_replacement.py::test_p2wpkh_op_return_fee_bump": "897291942225c61f9b641c7a1287960e7c21d80ada6c75414399d76edc41054c", -"T1_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "0a2de255203b89887ddb068cecd0aa3e53e23c8b66e833284dbcd6830c9187ee", -"T1_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "73e57bcb784b809bd202a360aa7a017f96e5bf3fa73e7bd5e5a91b181ff20024", +"T1_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "bacea4ba4942945a3a9cf42bfc485dd3d7fb17fb41ffdf3bbe1f1bf8eb410f9d", +"T1_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "c02fd21552be67278e7f09d6c1ab83d4e67832d9f2db52fdaccf3b0c1c13820f", "T1_bitcoin-test_signtx_segwit.py::test_send_multisig_1": "2281da53c4bd7f12625f0f43913210629909c877c770621579c3410ae0691748", -"T1_bitcoin-test_signtx_segwit.py::test_send_p2sh": "cf499aeaa4f7b12734ef704c6735bdcfe614f5018a755e57d41a9911ab7f1e5e", -"T1_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "e93dfae27b52860d05d64e6591efcfc4a175262ac208352d1a4949c20c6868f5", +"T1_bitcoin-test_signtx_segwit.py::test_send_p2sh": "348559a0d862add945abf37404b3b2578bc0bae1d4e90a99f809e6b54966b2c8", +"T1_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "276281d77d42dadf4f2238cabc2faea9efdd9bab29fac41ba78754c13f390570", "T1_bitcoin-test_signtx_segwit.py::test_testnet_segwit_big_amount": "32f4561974abff85a6569299f3fadbd88eadf1669e6159f42143553f9eaa9192", -"T1_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "2323758586e798c03e773948d053ac0b88ff1389ddc53d639510c13ba97405ac", +"T1_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "d2090fa198da39a988f8f6c6469dcc449c4763a0cde0b795117ed35efbacff79", "T1_bitcoin-test_signtx_segwit_native.py::test_send_both": "a9d068ddc9ad90b7dcfd22d13ad4e5190456f8b17611948a444a5af9f85a7f41", "T1_bitcoin-test_signtx_segwit_native.py::test_send_multisig_1": "7460676a7cb784e0c6b3475cdac2fd6e838c0202aff52bcc264369556057c284", -"T1_bitcoin-test_signtx_segwit_native.py::test_send_multisig_2": "56eb2a30fbde41fdc5eedfcc6d1368d10dc4063c473a00e79b5b9cbbb88ba537", +"T1_bitcoin-test_signtx_segwit_native.py::test_send_multisig_2": "9162134cbef737b452a8cb8a0fe958cd7549a5a1d27c3b5fc952342ca1b71eba", "T1_bitcoin-test_signtx_segwit_native.py::test_send_multisig_3_change": "af0ecb0148c685a50437ffe9a28cd7ef31b52c28390cede46fb08af504a60675", "T1_bitcoin-test_signtx_segwit_native.py::test_send_multisig_4_change": "c2a3de98946cbe686e0155d14bb93fbaacfdad33b3ee7cdb0d357808c6d9edfb", -"T1_bitcoin-test_signtx_segwit_native.py::test_send_native": "21f26f41f362c72621612a5ad09e94a7c0d7aa78e374317fdbec6703724c9fc6", -"T1_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "d57e75699ab171d8c0d63063d3ea821dd6ba4b245d2915860ccc17b0fa1bb635", -"T1_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "be88444f74522677caa3356fd860a75e45dedb4ced3ff8de29f4660b4e5460ad", -"T1_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "86e887b4c311cbbb6dcf4c37d11a41c3d1b191b1e52f77a87aab262fabddc215", +"T1_bitcoin-test_signtx_segwit_native.py::test_send_native": "469b90fc27d63c87ab5b28e5bb99b10e503273a393902f1914479f8cd1c2cfe6", +"T1_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "6bad42fb9c548803beea597999c0b776e4dca4d9288a564dda32ae9ac4d8d441", +"T1_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "066036ae9327238b31ab2fd039a1797ad007a9c38aad4ce0d03e4eb55d59a408", +"T1_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "9483a65bf6ba0f23b05c10db5a5249ee99466cf5af246c92c9492d514bd31bef", "T1_bitcoin-test_signtx_segwit_native.py::test_send_to_taproot": "3446200725a88939d53a135f9071110e6b60e77bf3f83028269ead20e700b272", "T1_bitcoin-test_signtx_taproot.py::test_attack_script_type": "63acc64409752811004b47ac23fef38804651c3b3e6b186d6c972fc6264b16ef", "T1_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1pam775nxmvam4pfpqlm5q06k0y84e3-a257be51": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -305,7 +305,7 @@ "T1_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plycg5qvjtrp3qjf5f7zl382j9x6nr-5447628e": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1zlycg5qvjtrp3qjf5f7zl382j9x6nr-880d4a6b": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_bitcoin-test_signtx_taproot.py::test_send_mixed": "3f94ff30dff867fd58667cd1f26025939856212f8cf3eefee4eafbfa5f2c6003", -"T1_bitcoin-test_signtx_taproot.py::test_send_p2tr": "41ba0add99e39307da4337a88c501df5594be2a6539f5afeb4b35d99628ae9b0", +"T1_bitcoin-test_signtx_taproot.py::test_send_p2tr": "11930405cd964b68df25872fdb17a3e56832553145e0e340022d5b98c1c3d3e2", "T1_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "6e32c316b41ad35dbc46a10713ad569b832651dc54efa935dbdc0a05f5ccf990", "T1_bitcoin-test_verifymessage.py::test_message_grs": "3a99e790a5d48dbaf76e15d314b46113f10daba5ad4cbb652d162033b0d3b02e", "T1_bitcoin-test_verifymessage.py::test_message_long": "ed4a40daa108bb66f076da8c3b30e905c54a0917d0b9fab12ea381bf6f5a2036", @@ -362,7 +362,7 @@ "T1_ethereum-test_sign_verify_message.py::test_verify[parameters6-result6]": "0f79aea15b09e207f7e2bb226421549a0446a4722dde3000c31c3c66ec2059d1", "T1_ethereum-test_sign_verify_message.py::test_verify[parameters7-result7]": "22daa96dbdd3aeeec11f1134baa29c0ccecbadf032a47aaa355f30c994897907", "T1_ethereum-test_sign_verify_message.py::test_verify_invalid": "cdec0f79f2abbd90f4346494037f7bb4dd4dccc7c6739b497873d0c5603f2a26", -"T1_ethereum-test_signtx.py::test_data_streaming": "3856c34f789b98c94462607e431899490800681a09a5e54f366a77026f87a2b3", +"T1_ethereum-test_signtx.py::test_data_streaming": "058a66e82bb733d5c5c687b5537887022acfd7401bb0b5aa4a12f6f35b209239", "T1_ethereum-test_signtx.py::test_sanity_checks": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_ethereum-test_signtx.py::test_sanity_checks_eip1559": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_ethereum-test_signtx.py::test_signtx[Auxilium]": "05d5ac917c9d3032fb4658b7f502748b412ffe435fc788c62733e00b948da5f7", @@ -375,18 +375,18 @@ "T1_ethereum-test_signtx.py::test_signtx[Unknown_chain_id_eth_path]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", "T1_ethereum-test_signtx.py::test_signtx[Unknown_chain_id_testnet_path]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", "T1_ethereum-test_signtx.py::test_signtx[data_1]": "8b432aba21bc4344814cceaf693e114b9d3e3d6ceb83c3a6af7c3ed0f9b37449", -"T1_ethereum-test_signtx.py::test_signtx[data_2_bigdata]": "8f19f49cb3ef2532ba73ebeee12e779cb06a81677248e45e0fd76b042ee107c9", +"T1_ethereum-test_signtx.py::test_signtx[data_2_bigdata]": "445286b7501ca67dd16dafd7ea09c57cc4a37a642ae50f0c812d74353c37c017", "T1_ethereum-test_signtx.py::test_signtx[known_erc20_token]": "7ef8d3bbf6e299b41522769a893f72b04571fc7176bc93e5c1701a2b5721fb20", "T1_ethereum-test_signtx.py::test_signtx[max_chain_id]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", "T1_ethereum-test_signtx.py::test_signtx[max_chain_plus_one]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", "T1_ethereum-test_signtx.py::test_signtx[max_uint64]": "a6e6d63cba839c897e80dc0b7cf5c2263be8ff64a5281a43fca992380cca872b", -"T1_ethereum-test_signtx.py::test_signtx[newcontract]": "4ac80878058533d886276f66d2aeceff9d8a1b8083345458788ce85d9ce9e44d", +"T1_ethereum-test_signtx.py::test_signtx[newcontract]": "a7efa7f690d1448dc48f642f69688e8b266417901cc014e5930c94c9087b3e08", "T1_ethereum-test_signtx.py::test_signtx[nodata_1]": "6bd90f2c98122de19159e60fd4dcf9f4b16a600407ac84ea1e447d561ea9decb", -"T1_ethereum-test_signtx.py::test_signtx[nodata_2_bigvalue]": "2a7108865158f53183b8eed55fa364ab9db508b4f62b875ba760acb520b66a8b", +"T1_ethereum-test_signtx.py::test_signtx[nodata_2_bigvalue]": "538f7be885ce6ea3a6dc842ef10797fa45184d7737f6f179c42d36fe92fadd45", "T1_ethereum-test_signtx.py::test_signtx[unknown_erc20_token]": "df41efe4c5336fc188d3f754d2fe0b830588e57eaa32c98607b0bc4057851fcc", "T1_ethereum-test_signtx.py::test_signtx[wanchain]": "37aa64fbab44b89757833df6ee78e302c97fe24c4cb74175f1843f635cb2dbec", "T1_ethereum-test_signtx.py::test_signtx_eip1559[data_1]": "171ffadf61a2520274bedf6a8543127f23a8948c2689e034f996e170289b1822", -"T1_ethereum-test_signtx.py::test_signtx_eip1559[data_2_bigdata]": "6026efba08ebb6ff161eaa83a215e337f62242d6879f536578d0c2108e78817a", +"T1_ethereum-test_signtx.py::test_signtx_eip1559[data_2_bigdata]": "28d2a0d397b4e9865ca8286cc1a3669c3a7d34bb31b430662354bf3ec69d1cc5", "T1_ethereum-test_signtx.py::test_signtx_eip1559[known_erc20]": "b8e205a40711e377f2185cec6e085fa2f6a4d5bbc6a03d9cf2758058b6c1e17b", "T1_ethereum-test_signtx.py::test_signtx_eip1559[large_chainid]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515", "T1_ethereum-test_signtx.py::test_signtx_eip1559[nodata]": "5b008a081b4ef9e7b47c9d0c1fc4bb24d729d77841193694232bd2da4a386515", @@ -435,9 +435,9 @@ "T1_nem-test_signtx_transfers.py::test_nem_signtx_encrypted_payload": "b1fd9c5250032b2decce6ef18cb1c6e06e9daea279039b58e01cc28a3f4dc765", "T1_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic": "4de1af57a9f25b81ab5d29a6c96e2cd117145aae6cba3fedd083cac7f8cff1d7", "T1_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic_with_levy": "ebc2635064a4469a98c2a4db2608ec3d006a69386d47e78bbbb8800bb0e7dc2a", -"T1_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "483194e161e010b5860086054fd1527ab79bbdfbf6fcbf556047a3e7f9d66d6d", +"T1_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "ac772c16bacef88ec59bc4e1561520ed57e8d0ac74045136f5849a665b92978f", "T1_nem-test_signtx_transfers.py::test_nem_signtx_simple": "3dac9a2abaab139be3b670d6f8e22d34db0171d09101b447c9de7011ad59b465", -"T1_nem-test_signtx_transfers.py::test_nem_signtx_unknown_mosaic": "0fd4bec396dc0850d42a43fb6bd23a751565ef143870ae21e1c1ff5faaeb1bef", +"T1_nem-test_signtx_transfers.py::test_nem_signtx_unknown_mosaic": "df352a677aa8f591effe241d0a384cea282934d5735c4bf34734616237fb96ca", "T1_nem-test_signtx_transfers.py::test_nem_signtx_xem_as_mosaic": "9cc4d7978b6296e0d107a20912e4dedcc9ed6eb3229749a7fb515827c85f18ee", "T1_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[label-test]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[language-test]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -475,14 +475,14 @@ "T1_stellar-test_stellar.py::test_sign_tx[StellarAccountMergeOp]": "3f55b35c47b3f0cf896793263006d9bc4089227f21e46e4e68f67386c1c85040", "T1_stellar-test_stellar.py::test_sign_tx[StellarAllowTrustOp-allow]": "8fd4d210bda197e57ee660e71158b295dd3f51f8df9a235e245d5a72f54c68e8", "T1_stellar-test_stellar.py::test_sign_tx[StellarAllowTrustOp-revoke]": "0834c3ffb6c8a792cfa8146de3641e3a4b95276b9583cd729350aca372528ed8", -"T1_stellar-test_stellar.py::test_sign_tx[StellarBumpSequenceOp]": "55eecce2fadcf7010dd9447cc359d6b125edfb910d2cf5c734c9987e3f667bb9", +"T1_stellar-test_stellar.py::test_sign_tx[StellarBumpSequenceOp]": "9504677a06c0da6f339a5313bdff39f7fd90c037a944cf9c3c0a4f4b40e787cf", "T1_stellar-test_stellar.py::test_sign_tx[StellarChangeTrustOp-add]": "c0dd9ef3c1635dcceca33d68af85aeb2b544c2141e021b2296b17511fb111dec", "T1_stellar-test_stellar.py::test_sign_tx[StellarChangeTrustOp-delete]": "52c9140b474f32678d2e0e3e6bffa255c14a82b7949f382da4e540f07d47383d", "T1_stellar-test_stellar.py::test_sign_tx[StellarCreateAccountOp]": "8b65a55dddbdab0724f551b95b8243467fa8aa1e24b70f11c11c948fdbc1ade8", "T1_stellar-test_stellar.py::test_sign_tx[StellarCreatePassiveSellOfferOp]": "f7663936ab2dbc3c11874a9f6e9e380c263041d38a147321da5570c3ecc3a214", -"T1_stellar-test_stellar.py::test_sign_tx[StellarManageBuyOfferOp]": "e91efb6b4802af84c881c45a6b87f104e9f3059c8eece9249d848395b644d976", +"T1_stellar-test_stellar.py::test_sign_tx[StellarManageBuyOfferOp]": "1ec10003113ac613a28c37ae8ec3ee67f793ad5edd61b2c17e1c8282e2839273", "T1_stellar-test_stellar.py::test_sign_tx[StellarManageDataOp]": "a19740a14fdb9e8f8fb2d48fbf695015d575212e5fb5feb58ce5866f56fb5e0f", -"T1_stellar-test_stellar.py::test_sign_tx[StellarManageSellOfferOp]": "6c07a09a3fb110f02bc660ae91cfd1af2a9728c3ad9e4b2b7e68737f548d48f0", +"T1_stellar-test_stellar.py::test_sign_tx[StellarManageSellOfferOp]": "cb39bbb78f12de2bdf95bc053897b3bfa41adcf3aacab61522852d358f112656", "T1_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictReceiveOp]": "713fcd90a54a10399390e649b799b33167bae37b62ab7fa1437b960c69b40cd5", "T1_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "b4683e95a636be05965b43705f953a1c02d475c8b2ca516c51b840e7aa737680", "T1_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "d16f43f49d8bd5c07b21a1ee7684d831b7a15800bf9770973399c8cd89f6dfc3", @@ -492,7 +492,7 @@ "T1_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "9dd8f325286fb29d558541586781818079b09d75d8d2cc734ccea4b80b95c876", "T1_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "2467d2ac824a5b01e1d0be8a8ddec5cc554479a66916511eec67fdcbbd18b82d", "T1_stellar-test_stellar.py::test_sign_tx[memo_hash]": "04d407ec2ac218be58e850de413cf2dbd1e6006f1fbc84792108484c4e8e9e7f", -"T1_stellar-test_stellar.py::test_sign_tx[memo_id]": "7695c2c837437767763cb2c81ad800bc28cb2582a4a1d7f513a35c8e2b1b20a5", +"T1_stellar-test_stellar.py::test_sign_tx[memo_id]": "288fd25b505a374900b0de9caed38a01bacee862a83bb043f350348e4949f1ad", "T1_stellar-test_stellar.py::test_sign_tx[memo_return]": "542f7eb47c0007810de6c43b20c9a9e3f3c64bb695e375137154e5bdda3b2f50", "T1_stellar-test_stellar.py::test_sign_tx[memo_text]": "43ec6d06d403c3d0a7f6ce3c3df48b3611094db491a8b382165d1412e4704331", "T1_stellar-test_stellar.py::test_sign_tx[multiple_operations]": "1bd531cd757b8ca295201f9dcfa9e19e56f0ba697b6200819ab06d041563247d", @@ -528,7 +528,8 @@ "T1_test_debuglink.py::test_layout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_test_debuglink.py::test_mnemonic": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_test_debuglink.py::test_pin": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", -"T1_test_firmware_dump.py::test_firmware_dump_hash": "cb42c7f21adc31e70ee62c7581245260705dd38f743bbe41161deb5471b9e5f6", +"T1_test_firmware_hash.py::test_firmware_hash_emu": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", +"T1_test_firmware_hash.py::test_firmware_hash_hw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_test_msg_applysettings.py::test_apply_homescreen": "d85a5591a0a433741fcc897fa6941bf0b8475de957375e3811fe710b3d40a053", "T1_test_msg_applysettings.py::test_apply_settings": "fb962820965916d494e44bd5aebd25c4f80095ca3d468d3ed212e04a9e0ef9e0", "T1_test_msg_applysettings.py::test_apply_settings_passphrase": "1f948e87ea82a0224190d3e552e506d5d4579503905526160c7a527c5a88b729", @@ -577,7 +578,7 @@ "T1_test_protection_levels.py::test_recovery_device": "9bcc413cf3e44af03f2dbb038c4df43bf503805447b71dd5713ab34335f9341b", "T1_test_protection_levels.py::test_reset_device": "b76ab8da407423d61c605a6c1a5851885ea0aa0fe81b23a7bdb6f9f39492aed0", "T1_test_protection_levels.py::test_sign_message": "c0ffb0307822ff7327b23e0e7db6a9396cacca93880afe8960d1b0469978a49d", -"T1_test_protection_levels.py::test_signtx": "ccace7e0450a6f6e9c8ec0dcf1abad3e5fecbb7148ff2d5c7f9777939f5b1b5d", +"T1_test_protection_levels.py::test_signtx": "4c55462654e8747799dcdfaf25dac99a568e20192a54cb898c7ca9e3bcec5701", "T1_test_protection_levels.py::test_unlocked": "4c32aa18ecc83cd6c642784ff825246e09ed8bc4b17f23a6127dac7c8b36bccf", "T1_test_protection_levels.py::test_verify_message_t1": "d4f8be1019f13604e2ceec12e65a0eccc8825ed07072479b355dd30e2ea83219", "T1_test_protection_levels.py::test_wipe_device": "71f454265675d5884e5419569ea85cc5fcb579de2dae23630fc3c9877b7e00be", @@ -600,7 +601,7 @@ "T1_zcash-test_sign_tx.py::test_refuse_replacement_tx": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "T1_zcash-test_sign_tx.py::test_send_to_multisig": "b03803a8459ef6841d797ea364c82634f999ee49fd8b8ef0b5ab22842ab97e65", "T1_zcash-test_sign_tx.py::test_spend_multisig": "940020ac5f56ef796268c94f737573e5ec16a1edb015584658710b6f743c40ad", -"T1_zcash-test_sign_tx.py::test_spend_v4_input": "826b1610f3a10af229e2d22554001c7cea4fadbe48b753586f7fbdbaa9464aa5", +"T1_zcash-test_sign_tx.py::test_spend_v4_input": "d60a5a2d805d040c15cb74e5fa6d714d36a9fea099d12d8f4e687df715f2de70", "T1_zcash-test_sign_tx.py::test_spend_v5_input": "833501623767379c7e0d1de438d3f0b6f5469634ecd7706741609b968b6e3c7f", "T1_zcash-test_sign_tx.py::test_version_group_id_missing": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "TT_binance-test_get_address.py::test_binance_get_address[m-44h-714h-0h-0-0-bnb1hgm0p7khfk85zpz-68e2cb5a": "a8acaff76064949f9b800493cb3c8a1fb56f206bda9a85a80fd008475d2a946b", @@ -627,15 +628,15 @@ "TT_bitcoin-test_bgold.py::test_send_btg_multisig_change": "e618241598a88de5f342cd1ab43d18406c11231f5d36638beeea5cc35b679174", "TT_bitcoin-test_bgold.py::test_send_mixed_inputs": "881f2eddaa614e5455f75f04be20eb80cd92ee86fdc83bd41f6d146890fdc92d", "TT_bitcoin-test_bgold.py::test_send_multisig_1": "cf206d1f6a92f4fd4d434dc4317873ab71bf56311ac7c25dbd307a9b17f066f6", -"TT_bitcoin-test_bgold.py::test_send_p2sh": "64853213ef5aa0105df3e0572174d1566f42ada0bdf3d87daf7187cebce840d6", -"TT_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "56a5f215c03ea1dde5e4766ce61b056ca908ef2aad4870f886c7c47d002d1c04", +"TT_bitcoin-test_bgold.py::test_send_p2sh": "f20668c43b0e051eff90b4daf4f43488f1e8f2242379dcfc44bd923067366e46", +"TT_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "e89c7fb26be689308311ef6009a8b73746ec6d5723d5b2eda626666d81ee5342", "TT_bitcoin-test_dash.py::test_send_dash": "84e84912d470e4bba6aa5c2190b36fcbb766bc2720e6ca4c7c890923e774545c", "TT_bitcoin-test_dash.py::test_send_dash_dip2_input": "d27291f1e3e712fdc60df170dc1a78b42f70551885b613e822430b1b9a185835", -"TT_bitcoin-test_decred.py::test_decred_multisig_change": "8fe54ce9dc6d0dc03045f4b1d16e33dde878605c7f6303f30ca21693712da5f7", -"TT_bitcoin-test_decred.py::test_purchase_ticket_decred": "194e88db477e4c9fca40d17d2e4071388237d4d0ac22ccb153f1a1c88234dc02", -"TT_bitcoin-test_decred.py::test_send_decred": "c6020c1167302ca39ed7876e3e5241dc8465ad1c9fb04ce1e684fef638511526", -"TT_bitcoin-test_decred.py::test_send_decred_change": "70f940e83c6ffb4f26fbaf940ab327ee83eb23b6a752a122af38324ed4c6e571", -"TT_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "2e280d383055c44cbcf8298d0fd31f1fe77af0c3265bb15805ffda23d627cbd4", +"TT_bitcoin-test_decred.py::test_decred_multisig_change": "4de82f12102539c4deebef75899ae6e1599ad5e96586180af317d68a98b6b56e", +"TT_bitcoin-test_decred.py::test_purchase_ticket_decred": "16b7fd6d4b88711b0932768432288df5357d16030de45c8520238322ab1d6a66", +"TT_bitcoin-test_decred.py::test_send_decred": "3e0a562192cd7bd1222ba4d54e33233684c35b02f3fc8bd238b33bbee82d4318", +"TT_bitcoin-test_decred.py::test_send_decred_change": "c003198e37dfdaaf1c6f61cb1cea1db9757adf452df77cc4f6c24b0fa6850c6d", +"TT_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "884f24d36e2ddf4637c8c6011d5a2f339614b8b3047c32a3fd6342d2b1e7577a", "TT_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDADDRESS-pkh([5-7a80e3db": "24290396b20f26b49204a5551676d6f3c831009e30582d92d5b44fcc3c12fdb7", "TT_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDP2SHWITNESS-sh-03d56ac2": "8977c539f5680a5196ad0a4c6e16c44ca1bbdb79235dbf97e33aad8d47fe5d0c", "TT_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDTAPROOT-tr([5c-22751b2f": "3c31e8f9e396a1313c22480aac32f901086df23d8edf3f808d2f46a0d063034b", @@ -653,7 +654,7 @@ "TT_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDTAPROOT-tr([5c-ddc924d3": "fe4691af27c7221ac650927a4ee64aeb17ba323f746a03763d053a8311f6633b", "TT_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDWITNESS-wpkh([-996ae319": "3181b25e844eb1047d2904abb1099029c5f5ae4ba4d333be21336d1a745aafe0", "TT_bitcoin-test_firo.py::test_spend_lelantus": "d3e199cfa46acba5a956d2c04eb020d89d076297962a4fad3165d1500b6de7c8", -"TT_bitcoin-test_fujicoin.py::test_send_p2tr": "858a93194a06ccbd0a287cbb107df13ecaa1a6afda922ac5342d35165ea78db3", +"TT_bitcoin-test_fujicoin.py::test_send_p2tr": "ab2358502425ae446202ff00b52f31d692c3c7f3a9bf77e549406991aba19d36", "TT_bitcoin-test_getaddress.py::test_address_mac": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_getaddress.py::test_altcoin_address_mac": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_getaddress.py::test_bch": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", @@ -760,22 +761,22 @@ "TT_bitcoin-test_getpublickey_curve.py::test_publickey_curve[nist256p1-path3-03b93f7e6c777143ad-2d6b178b": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path0-02f65ce170451f66f4-9c982c22": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path1-0212f4629f4f224db0-0209bb73": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"TT_bitcoin-test_grs.py::test_legacy": "9d6920a2a462f2337fd5cd7ad39ed0c982aa846ea06fddc1f610c9e2263530b9", -"TT_bitcoin-test_grs.py::test_legacy_change": "90a3957efde621651ad22c74fa35a85010546ffac98ce0bd6b5ebb4937228104", +"TT_bitcoin-test_grs.py::test_legacy": "0684f69e7dcee2df0638164fd8572a4229ebdc04f50a749b7d7f8c76be030fc3", +"TT_bitcoin-test_grs.py::test_legacy_change": "03137135974aa423ab0c108fa8b4061c13709ee98f5df839ff7cdb21e4010e5b", "TT_bitcoin-test_grs.py::test_send_p2tr": "4851eddc91dcd4ff8bdf8558e17949bb3152d5a5d2144659abe36c92c183a942", -"TT_bitcoin-test_grs.py::test_send_segwit_native": "8b69c38306a5a690c151e665d8edfa67d1cd88293c089c0b1aa832acd0dfa6bc", -"TT_bitcoin-test_grs.py::test_send_segwit_native_change": "ad78a30252e92b74b4ecbcc3f7903f99015cf600eaa48252fab12da1ce779e81", -"TT_bitcoin-test_grs.py::test_send_segwit_p2sh": "8ebb36005772b04baea870ab9f6aa36642a402b3eee20cf81ff62b49d650f77a", -"TT_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "58ba45fd292b9f44dd46c3b98f05b2885087cbdbfd0ad176e44a503e8e3a68ae", +"TT_bitcoin-test_grs.py::test_send_segwit_native": "dc549670e2abdc0a78cde4582a13e08903f97380f1acaa1515c2ff866aa79afc", +"TT_bitcoin-test_grs.py::test_send_segwit_native_change": "2a4d434501a4855568999f16a2cf0b4f0b69f08212d929d50eef838c35ca417a", +"TT_bitcoin-test_grs.py::test_send_segwit_p2sh": "98483bfa0b7bf063a472c2bc560a72f650d9f668d2cc2b08a5a05afd249e3284", +"TT_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "8e92d676461e30db9fe68d0418757e88523db8f06afaec3aff68865d6fbefcea", "TT_bitcoin-test_komodo.py::test_one_one_fee_sapling": "423cc84e5de3c8132529da5e7d78aa5a969f1c36f9fbc6ae46b379366d98fc31", "TT_bitcoin-test_komodo.py::test_one_one_rewards_claim": "b3c056df25d639927faaf16dc18c281c1a36b790ea4e77f954f681fb27d3fa1a", "TT_bitcoin-test_multisig.py::test_15_of_15": "616d7fd025485963d63ec993db335f5e06ccb0bfcafa094d164a56918796e0bf", "TT_bitcoin-test_multisig.py::test_2_of_3": "7b7ed7e08fba2bd40ad04addd3f8e95c705c9d9fbc0b03e0cabcdbdb9e6d270e", -"TT_bitcoin-test_multisig.py::test_attack_change_input": "4f3191c15d14eaec415eed2ad7127026f62a150a89381be5e6dba2e1e3596a2e", +"TT_bitcoin-test_multisig.py::test_attack_change_input": "b3a4625a34db37d389f17ff48f721604ab26775a9fca8bf94c81a90c18bc56a0", "TT_bitcoin-test_multisig.py::test_missing_pubkey": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", -"TT_bitcoin-test_multisig_change.py::test_external_external": "f14e44e6eaf76dc236b982abad1b8857087c2ff441c063223d5280414241e60a", -"TT_bitcoin-test_multisig_change.py::test_external_internal": "ed4ce5c8394f9b74d0d5dfc34eba32993805b7f910a55b4322937c837f60981a", -"TT_bitcoin-test_multisig_change.py::test_internal_external": "9252b732e3645f3640efef901b602d9a3512943048ce87f545b9cba0349d85f4", +"TT_bitcoin-test_multisig_change.py::test_external_external": "11875600f905bca2579e623a6bb53af89b5a4cc14fd1ac2f40ecd59b9b23ce9b", +"TT_bitcoin-test_multisig_change.py::test_external_internal": "9f5f44cfdf61caa01f818bf5883693ce3a3bf9798a0c977acc17c655a0cd4b03", +"TT_bitcoin-test_multisig_change.py::test_internal_external": "bb737da554fae8e4702138104c40019cbeb3af895568995204740b1c830af18c", "TT_bitcoin-test_multisig_change.py::test_multisig_change_match_first": "b26b6e6ce81c7a993a364d56e00cb82971773850f53e1689944ac7c2e4bc63d8", "TT_bitcoin-test_multisig_change.py::test_multisig_change_match_second": "9414230d0402801e45696d75c5e94583d026fd151f8c5c44bfb95d778d0f8687", "TT_bitcoin-test_multisig_change.py::test_multisig_external_external": "c5e72c7a393a1bdf0d00d5224ac428a03618065e7ee08de1abe9e030c8c17bba", @@ -803,11 +804,11 @@ "TT_bitcoin-test_nonstandard_paths.py::test_signmessage[m-3h-100h-4-255-script_types1]": "4f73135d2ec9add695e0a22d855816558b4ba9329a2828f9c9930be6245bdc2d", "TT_bitcoin-test_nonstandard_paths.py::test_signmessage[m-4-255-script_types0]": "0988cc8bdc5879744bd33190fddc5b5aa137fdd7214abb003c8000a871d98f14", "TT_bitcoin-test_nonstandard_paths.py::test_signmessage[m-49-0-63-0-255-script_types4]": "540df94c73a4eed8fe88cdb475e2b31df752dca9e47b102792c01064ee432752", -"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "8e12862d0a59e320d386876c5e7c54f10f92d8bf7b2bf4428c4bb3de9d88e78e", -"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "922304dab753de94c853518f0d8ddde9f7ee38f403247014dbaa12d766eec993", -"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "793cc526d3e814bdc8ab7912bc93a651edbfd5ecf4479c2ff3e16715ede2b558", -"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "793cc526d3e814bdc8ab7912bc93a651edbfd5ecf4479c2ff3e16715ede2b558", -"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "0113b595d4a2831af7bea1df39d5eb597047f4632ae3ebb24fed04f2fc53abbe", +"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "3056fd174592e12236d1f02d6bcd3dfcfd4eabcf8c14cc7c536d64219183e042", +"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "a1597ee74cfd76a3a4834ed7c1f6c1c660994ecb89b2dffbf6f7ef043b416e1e", +"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "eeffbc0d1526b8c45361be1dead21cd35d317a43ed033eec48e3ff2399a0c5bd", +"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "eeffbc0d1526b8c45361be1dead21cd35d317a43ed033eec48e3ff2399a0c5bd", +"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "b017917ac36f45594166efb832cade2957793976605e48d00e725e7390fcbce0", "TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "8327da4e1cfa1cb81b6219a8190c89d5617747399d053a560c4b2ad9da3e70c7", "TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths1-address_index1]": "8327da4e1cfa1cb81b6219a8190c89d5617747399d053a560c4b2ad9da3e70c7", "TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "1863c035e68db9a5f7c3b45122374002633684c913ab06d4c1042a0c5b8c6089", @@ -854,8 +855,8 @@ "TT_bitcoin-test_signtx.py::test_attack_change_outputs": "91933db014c3507d75bf76435c2489607ec13be79c8592fec66f80dce08ac3f6", "TT_bitcoin-test_signtx.py::test_attack_modify_change_address": "20aaa67271db158f34f5dce1c07649de0a26b40b3b260074f5aa002a09d3f04f", "TT_bitcoin-test_signtx.py::test_change_on_main_chain_allowed": "20aaa67271db158f34f5dce1c07649de0a26b40b3b260074f5aa002a09d3f04f", -"TT_bitcoin-test_signtx.py::test_fee_high_hardfail": "f29c99a8db8feebb5bf13504747fec139cce3f2d14cfb3d031bbf8f1342adee5", -"TT_bitcoin-test_signtx.py::test_fee_high_warning": "0924f32ac50d6c35c2cc30b089830184a2710d76d17d1c25496a1cecdf5dea31", +"TT_bitcoin-test_signtx.py::test_fee_high_hardfail": "0ea1fed8f24b3b89c85f60185b56a1f1800335a07c441e485de8a11278091410", +"TT_bitcoin-test_signtx.py::test_fee_high_warning": "25a6ec724f5546ee398aa80eed194468753a0d24f8f5abf10573d4bf1bfb63eb", "TT_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.EXTERNAL]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.SPENDADDRESS]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOADDRESS]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", @@ -867,7 +868,7 @@ "TT_bitcoin-test_signtx.py::test_lock_time_datetime[1985-11-05 00:53:20]": "0065b5cc304b1dd5d341a18f88e711b80fd6a37bbcb0d5838a7403a07a554578", "TT_bitcoin-test_signtx.py::test_lock_time_datetime[2048-08-16 22:14:00]": "a664f25807e1d04f84bf1d61356735765943aa19797bb3ad1a4e5f1767e6d272", "TT_bitcoin-test_signtx.py::test_lots_of_change": "ec231e92089a1639c4e4a0f8babd43b5507f13e42f3ff1c847388b3e6d2ad8ad", -"TT_bitcoin-test_signtx.py::test_lots_of_inputs": "4743bde5056d045cfbb2752a36ec4a1c683092c8edcb752ff08a909eabd70658", +"TT_bitcoin-test_signtx.py::test_lots_of_inputs": "289d00f71c895bf7aa3d5a8d83627e19ab05bb0c3f39d777380f4e77a4eebe19", "TT_bitcoin-test_signtx.py::test_lots_of_outputs": "9ad0f1a4f6202c95e1fc42e434c1f8542426c76f8b94a8ae016fb0f6bd18a734", "TT_bitcoin-test_signtx.py::test_not_enough_funds": "615ee88f8293754c8c58d2ce021d534045e8583628e8270baf41e7124c29c4cb", "TT_bitcoin-test_signtx.py::test_not_enough_vouts": "204ad9ea7dbba119f568e50fed75a773024645ec18efe030f2e651df36c597f8", @@ -886,21 +887,21 @@ "TT_bitcoin-test_signtx.py::test_signtx_forbidden_fields[version_group_id-69]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_signtx.py::test_spend_coinbase": "bb8bd077d0db0bc1a5650c21448d72a6de8a79ad95b6a5a80b85675e152d64ab", "TT_bitcoin-test_signtx.py::test_testnet_big_amount": "8fa6fecd81d8e0a1f5c8c5ed985eb381ab6c773d904b28ce7ef3053d1f8a6449", -"TT_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "ce56e4d93a2fdd19e5e79ff65cbbaaca8adc6137538b3fc4625ae7bb5fa9b109", +"TT_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "4a7e69a8b1d4aa14a199cc6e7be0c07e81ca71377573a83aebc19309d01fa70c", "TT_bitcoin-test_signtx.py::test_testnet_one_two_fee": "20aaa67271db158f34f5dce1c07649de0a26b40b3b260074f5aa002a09d3f04f", -"TT_bitcoin-test_signtx.py::test_two_changes": "736e1628cf9bc4e8f554fd049a07f82064e6094108f01490a5a9b24311dc3a10", +"TT_bitcoin-test_signtx.py::test_two_changes": "0b9072f425c58bb12f7eb96bf99da624fc1fb0bca4927385489fe93717c52b1b", "TT_bitcoin-test_signtx.py::test_two_two": "98a1b7b73f9cd065bdc0a1ddef0124f1d109964fda9c0b57173ba888d061fbe6", -"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.BITCOIN]": "11fae86e2e47ea2ec98d11c2bf1a1a98f1893411100075301e91236fda049aa7", -"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MICROBITCOIN]": "ebd57f4831bdc5efa993ccbc558a5fdb769088629359b7ebcd55dd7eb2674a8d", -"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MILLIBITCOIN]": "1d5c5f424b64eb92bddd23c3a101c8078c9bfe48a82b21fa3bb6e3c50ab7e118", -"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.SATOSHI]": "c04587c4f543d271bcf834a76d4b4935c9deef287722688cc88aa8a37695dc9b", -"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[None]": "11fae86e2e47ea2ec98d11c2bf1a1a98f1893411100075301e91236fda049aa7", +"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.BITCOIN]": "9b3479412158ee07f6592a637244698fc7e1a4468eba944ce4d329e3a9bcd355", +"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MICROBITCOIN]": "4b07e39773495c105dfc512bcfc1bd392187e7de541bf83205691113ae7120f3", +"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.MILLIBITCOIN]": "1afbc7be1095d12f9786a467564df062ed623305a369cefb931cb6052cb2f2e6", +"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[AmountUnit.SATOSHI]": "9353d4905d538319b71f456abf1f4d8baa6ccc646c8822654fe2439da6d19c51", +"TT_bitcoin-test_signtx_amount_unit.py::test_signtx[None]": "9b3479412158ee07f6592a637244698fc7e1a4468eba944ce4d329e3a9bcd355", "TT_bitcoin-test_signtx_external.py::test_p2pkh_presigned": "8dd8089941ceb0d82c9425c69d54240f99e3ae7932ef24acd49313d28389b683", "TT_bitcoin-test_signtx_external.py::test_p2pkh_with_proof": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_signtx_external.py::test_p2tr_external_presigned": "c714c4a4ea8b98dfbdd8185925adafbafc62570f415688972d6003a19d7b4d23", -"TT_bitcoin-test_signtx_external.py::test_p2tr_external_unverified": "c488c412a6c58788530c5acc1e0c7d072aad19b5a62cad41220dfd93e4b0ae6b", +"TT_bitcoin-test_signtx_external.py::test_p2tr_external_unverified": "d00df4d1001677c61d95b2cae7c32c4fd01c9c51995a7153d7dfe7ca103a44ba", "TT_bitcoin-test_signtx_external.py::test_p2tr_with_proof": "d6723e2243bc38231ec4eb9ed63afd39610460c0d859b4c576b12db1f7915d02", -"TT_bitcoin-test_signtx_external.py::test_p2wpkh_external_unverified": "78b720588e1450972b38083857599d843f1b5ffae68de84dedf90a868d597bca", +"TT_bitcoin-test_signtx_external.py::test_p2wpkh_external_unverified": "64d9b691b6442d44e008e1dca7ee4010820d569ff88f28ff1ce5291e79070537", "TT_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_presigned": "8313bff77e41aef142c3b25818ab58dcc7e9d658d38e2e8fc50629ebbe05869b", "TT_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_with_proof": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_bitcoin-test_signtx_external.py::test_p2wpkh_presigned": "4608478b1d61415cf0ec93a0ea4397c35d17a91d4b6d25e9c024b77330e398eb", @@ -920,26 +921,26 @@ "TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_purchase": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_refund": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_output": "887f26b4ddbb365d903b27fb9c2fab54760b2ba6f5f5252a82d8e5b4fc611fbf", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0+out1]": "c8a939b289ee8fe816bf04417d620e6d97a3b97d98dbf723588eea08ec3dffd2", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out012]": "a0535f894a6d61d257f62f1ce137c02e0acc045d44a3af449f99403745894a17", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out01]": "2e11155a7f63dd177fe1475615379261c81c07f2088bd20d6f481dde0466b8ac", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0]": "4b78bb5d8a351c4c1848e792f47db013e7e63c37e6c79f16368a42a68b196a04", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out12]": "49d4267f9a668a4678806f60b37d6d4372de736e0bd50835e1fd03e6564d417d", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out1]": "3f6392f762a2a77f0648c0b1704ffd8f1f695491c7003999060ed3d2337de06d", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out2]": "8fed64c4dada52328c7dd3bac646a11258d4bf77979e7351bb0f32c6fe0a2812", -"TT_bitcoin-test_signtx_payreq.py::test_payment_request_details": "730286c2d89c90f66d9611da96e2993ce9f2f0afea4fefa919cf20c7f4be9103", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0+out1]": "8d20ba87feb15e93dae957792e56c7e6704842d612d08d351ecca62fdf67f6fe", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out012]": "89b912e4fcf162d4e446eb5cd76f1ced382dbaac625fbcb62d2dddde04e01bf3", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out01]": "34ed35b8c2a297960ec2a4ab08969fececf919b866d139207a656d84b2385de1", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0]": "de2b47b89aa013acccf2fff29cc3a0333c180feb18ce8e0cd3ed9f306f9b594f", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out12]": "63acd5e25d6f5d9e63b2f5ae18ebf29a379497d9ae39702dfdee20a66b1ab344", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out1]": "5c621b0bd439fa1d31984bcd6e0d58797f28f2dec485e28d8a376c7aeae24a68", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out2]": "9f4c978e37e4f8d87da10041e0eba0475c8294d0ab9dac880ff4266971bb6aab", +"TT_bitcoin-test_signtx_payreq.py::test_payment_request_details": "c3df1052024e4f3be9296639a054231da35525c5101bc855bf23cfa236f4f156", "TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[hello world]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[x]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "4b1b2df96814a7dc7030f9ca8bed5c2c9a69ec24a933491f04150cadb50ca0f8", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "4b1b2df96814a7dc7030f9ca8bed5c2c9a69ec24a933491f04150cadb50ca0f8", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "4b1b2df96814a7dc7030f9ca8bed5c2c9a69ec24a933491f04150cadb50ca0f8", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "4b1b2df96814a7dc7030f9ca8bed5c2c9a69ec24a933491f04150cadb50ca0f8", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "9bde644b5c91702f3926da3d2e29ea27bb6537d07fd1b904d6f3c4c48633f3a5", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "9bde644b5c91702f3926da3d2e29ea27bb6537d07fd1b904d6f3c4c48633f3a5", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "9bde644b5c91702f3926da3d2e29ea27bb6537d07fd1b904d6f3c4c48633f3a5", -"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "9bde644b5c91702f3926da3d2e29ea27bb6537d07fd1b904d6f3c4c48633f3a5", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "71b03f0f2cdf1a3d3f330a7051a32642bd8f57387e0d8e5a5f7c123c7f3e704b", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "71b03f0f2cdf1a3d3f330a7051a32642bd8f57387e0d8e5a5f7c123c7f3e704b", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "71b03f0f2cdf1a3d3f330a7051a32642bd8f57387e0d8e5a5f7c123c7f3e704b", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "71b03f0f2cdf1a3d3f330a7051a32642bd8f57387e0d8e5a5f7c123c7f3e704b", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "8744a5ad4b15ffa76652c9d2df287f10c1909b51833405ee18fc717479e357e3", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "8744a5ad4b15ffa76652c9d2df287f10c1909b51833405ee18fc717479e357e3", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "8744a5ad4b15ffa76652c9d2df287f10c1909b51833405ee18fc717479e357e3", +"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "8744a5ad4b15ffa76652c9d2df287f10c1909b51833405ee18fc717479e357e3", "TT_bitcoin-test_signtx_replacement.py::test_attack_fake_ext_input_amount": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_replacement.py::test_attack_fake_int_input_amount": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_replacement.py::test_attack_false_internal": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", @@ -958,31 +959,31 @@ "TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89800-02483045022100af3a87-80428fad": "f5be02a50a1876ac0478e37e41bca38c5feb569613dc5b105b95c6bb4763514a", "TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89859-02483045022100eb74ab-881c7bef": "da3ec44de0435cca3828752a0ba44483b2f087d1ae02c99530be4bcd01b80e57", "TT_bitcoin-test_signtx_replacement.py::test_tx_meld": "1a5221c169069689cd038a1b493932e42f0c740efad52e3c77bb636786af594e", -"TT_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "8ecd0ac81d58aa547a4936e56d69e35c2ab12f7ba0b51b7d92404e5e30030cfe", -"TT_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "66b9411c1b1816d26a93a04c22372a57a4208d8295d71bd82f38915b2452c564", +"TT_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "f3398d5814422383b9a6fa8cce53948af05e985616c20e7f3aed649a9d3fe1a6", +"TT_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "a06e89d99c1e218fba7ceff794cb9dab98bbae666b397996e067fe9f0bd8a009", "TT_bitcoin-test_signtx_segwit.py::test_send_multisig_1": "cfd3b3e882067b1e42a36623da3523829bf579399b14f8711e09f7e89aa82d65", -"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh": "8853c733b0b7538e48639c4c04ad2cc7e07ae417e73f561f6fd9e580232c9abe", -"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "50ea94b0faabce0cad5354f357650f8b0e01800ce6eeee7ce9a2433c4484056d", -"TT_bitcoin-test_signtx_segwit.py::test_testnet_segwit_big_amount": "67e717ac09fc74745ad2d0051f3f14806db93ac6a2b25f7961818fe861ef61c7", -"TT_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "c3e42d7b9a4f675717091e64b5e9470e91282e9f0057054a20582b626f13f0f1", +"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh": "0cc9cebfc8e5f644a54abf5c548eb93ac5a7e735a335c653ca782e75c756b355", +"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "37e4f87d45933d486aafbff196c68024c128f40177974891a0f01cb2cf695d25", +"TT_bitcoin-test_signtx_segwit.py::test_testnet_segwit_big_amount": "9db6c35162b766dd828aa996473bfb07376a5d9705ac9de65d992d7a4a8108d3", +"TT_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "e0de5489dc73eeb177cc69024386a39812af9ba8fb3730384bed80f7fa76bb1c", "TT_bitcoin-test_signtx_segwit_native.py::test_send_both": "92c34d2b525768ac5f8fc60566ea7bb7ede1ced30f2ec0c0b0948fcfbb1eb4c4", "TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_1": "6f8d1747d41c156a032c141d5108f5572ceddf32fd90ab986fc21ab3f8adb094", "TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_2": "c710852ee12bc81aaf395cc4db73d928e93ecaa3a24571a6542d71e94936984a", -"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_3_change": "c9700584e560f1cf2c1fb366035d2d85b25dc0552ceded2bc14d4f3ba00af24a", +"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_3_change": "31d3a5138fbe39eef57d33fe28a31bf86c0ef3d824466b765175bb5f96a8e3c7", "TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_4_change": "f5266e21904d84ccc94a60bb6de289c301193e70bc21e246ad420b3d5c9ad18e", -"TT_bitcoin-test_signtx_segwit_native.py::test_send_native": "11fae86e2e47ea2ec98d11c2bf1a1a98f1893411100075301e91236fda049aa7", -"TT_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "daf3049d76f0a7772b188adf0505c11b520d5984b5027710920202c0844b8268", -"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "2dbfdc48046898971dcac1e0d49c99b76486eb28f14a919323edff1f72a7d8a7", -"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "1dc3e34497f9f767d7418efb5e6f63a5c30cde08bb92105734b9ac15d0858d2d", +"TT_bitcoin-test_signtx_segwit_native.py::test_send_native": "9b3479412158ee07f6592a637244698fc7e1a4468eba944ce4d329e3a9bcd355", +"TT_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "fb3ec2531cb07bcc5589034476a35473cec57f075ed36d17d89958f5991d50ae", +"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "78f6ed8edb5798c5f18c98f45dc21230e7f55eef89b6ad32c872c45d01db2a84", +"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "05d4a12fd931f86ecc40ebec476c94c5d1b9f6b5a835d928f341e0ee08739560", "TT_bitcoin-test_signtx_segwit_native.py::test_send_to_taproot": "7837294d7d4a09e2b778a7a2623b61f8671bf6b1c1ae114f548657e8ab86b7e1", "TT_bitcoin-test_signtx_taproot.py::test_attack_script_type": "776adb9eb6166befabc0889c188ce7f4f6c32f6f0db047f134a96a0fd09b1953", "TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1pam775nxmvam4pfpqlm5q06k0y84e3-a257be51": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plllllllllllllllllllllllllllll-aaa668e3": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plycg5qvjtrp3qjf5f7zl382j9x6nr-5447628e": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1zlycg5qvjtrp3qjf5f7zl382j9x6nr-880d4a6b": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", -"TT_bitcoin-test_signtx_taproot.py::test_send_mixed": "1aa19217e904d2909796603b7811bd8a8e3c997dae4cc5e159c2c3bae2db566e", +"TT_bitcoin-test_signtx_taproot.py::test_send_mixed": "6e664f837b805f06a329810449af860fc247672bdc637ad67280041944af7b6b", "TT_bitcoin-test_signtx_taproot.py::test_send_p2tr": "91597e1226f917aa01e0faffa2ba573f3f77521ce6a53fd4f8c4b2a15d8f4b36", -"TT_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "22f2ab9387ba5dfc06f23727fa3332974b70620d813eb61ae37bb482233860c0", +"TT_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "6c09c8bed294c912e4f504ce9ec6d786ca933a6e652b288d9c2140ccbfbe83a3", "TT_bitcoin-test_verifymessage.py::test_message_grs": "efba87e334f62f3ee18ce6ac2f6e8ba3738fc53434ad8d4027643d2047945620", "TT_bitcoin-test_verifymessage.py::test_message_long": "ddd376c7ce7731d990f231a81532dfa13d6a03bc88e5a77278d6eef514b496a2", "TT_bitcoin-test_verifymessage.py::test_message_testnet": "af4598881e7afbfb81313622d7186cd90e8bdcfdada4a0c0f31ca5f0af5f8d5d", @@ -1000,7 +1001,7 @@ "TT_bitcoin-test_verifymessage_segwit_native.py::test_verify_utf": "faf3fddc43290a424243562f3ed7598d5127b71b1680aee40e56f0b01d22664a", "TT_bitcoin-test_zcash.py::test_external_presigned": "08a22a49793201f8387a085a554f006387d1df1b37ed8a34bef7aa79b363b44b", "TT_bitcoin-test_zcash.py::test_one_one_fee_sapling": "ad8453495a316a0f01126bf882a5502f51e1ee622e56c7c175ba74fdba5dbc51", -"TT_bitcoin-test_zcash.py::test_spend_old_versions": "1fcfeb604cc82ab9b25ff9402efaac7ac72c90f2f5a43ac6843e9ef247573bc5", +"TT_bitcoin-test_zcash.py::test_spend_old_versions": "a58d7407f20caf14f9075618d09e5329eff592e9e432964487fe90954b9c2b21", "TT_bitcoin-test_zcash.py::test_v3_not_supported": "1c100ce4b7c1e47e72428f390de0846c1ff933e9f07894872644a369a9422738", "TT_bitcoin-test_zcash.py::test_version_group_id_missing": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_cardano-test_address_public_key.py::test_cardano_get_address[icarus-derivation]": "61bf57f65a018283d5e314f95f5580fe751eb3f09cd175a8f9e47f677419cbf2", @@ -1087,29 +1088,29 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_multiple_inputs]": "c77e3c0415689c335bc5f93e2aeb8bbb97dd33bcb67df3ffc76adbb164428949", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change0]": "c77e3c0415689c335bc5f93e2aeb8bbb97dd33bcb67df3ffc76adbb164428949", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change1]": "df3946295831aea335e5acc5b67ad489911f6925d6b85c84ef5ed0c93f4c9e63", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_different_policies_-1dbb1bfb": "c4f0571143d79ae816efb91bdfd65391170eea65030747f90c308c786e42ab35", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_multiasset_output]": "781d92c04e3d9a9cca60fb9ca5b324db8117657ac804db5137ff771f69770e6e", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_different_policies_-1dbb1bfb": "49a1608700f462b463610a62003f2c6a62b345738a83f42f4c7f90652b289ac3", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_multiasset_output]": "a480af45e325847cc9f61ab4ce26c99114236a36e510cca777c97c2182ba8562", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_no_ttl-validity_start]": "62a99839b54f92afddbef547cd643ff9651eb5ca7bab83bf1a89ffea8d161b6c", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_a_required_signer]": "54aec87c2101c890cff5221abd554f7ada0fda1b82947d9ff0e90b97888428aa", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_most_elements_fille-29691455": "1a7840abb3af82547a7ac1b32339bc7fab62cfa2435b8b6d52f80fb0c0b6390c", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_most_elements_fille-29691455": "86cf0c59445300f2e555fcac780884f3c2cdc11594fc83dd802c789a204a45e1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_output_datum_hash]": "0cef29dd17e32a99b8e1682a993a7f5e2ccc4458fae0b8701c023ecf53b03a11", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_script_data_hash]": "b7c43ad51a2a3323d6d2bc62649b218ad33085a76aa2b1076d200dd9eb976915", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistratio-1ab28f77": "227ac1e583e78b8bea39e2a5b12a4d484bc45b45e47384cfc49e8207bf238309", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistration]": "227ac1e583e78b8bea39e2a5b12a4d484bc45b45e47384cfc49e8207bf238309", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-a144c34c": "e007992f4db7dc705fea9fdf114cccfa4d71e675c290b844d5f2d6e400304842", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-bf5f9707": "c33ea9fb6d20f53293153be76a42e36c603b4a2cf57c4c5fc1140cb4604976cf", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_token_minting]": "336d330f0a5d2c91d2becf53f338c2743299a7dc438c1a88519d0bed8fc0bf6f", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_token_minting]": "f5ddbbdd8375b0c449b733bc61408f750280b9e1b363c18814c1f96b4a36e4bf", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_a_required_signer]": "53b24d40fc3ed95b8f102e8c5f2b885836eb5c56dd8aa0fdf3116bfb7187813c", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_both_output_formats]": "07bfba1a88feaefb43b1bd49db6e7aaa8a0ef8b13339dbc2f27c508a3fae8849", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_both_output_formats]": "5986c6b5f01afc41885541beb82ddae07a1a8a54f7435cf48c6c5cf380d20aeb", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_inline_datum,_refer-d1082570": "130274e06e2ead95d12929dd0a9574c1c21ab8335a2d49fc8d0d759fe6d46ad1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_long_inline_datum,_-1f681aaa": "43365cc88b8a81b7b6571159950914f86e449e93238aef62299ac2978294c13a", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_multiple_correctly_-6545455a": "8a359cbf1ee8ffed867eba7b6c7b5ed3277500fc23709c8e2f1e4aae84499861", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_multiple_correctly_-6545455a": "91d5fea02b413634e01c0553f7cff0e1804eed79f48a28531ba8467e59905215", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_network_id_included-d9df16f9": "c77e3c0415689c335bc5f93e2aeb8bbb97dd33bcb67df3ffc76adbb164428949", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash]": "130274e06e2ead95d12929dd0a9574c1c21ab8335a2d49fc8d0d759fe6d46ad1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash_a-84ad587a": "43365cc88b8a81b7b6571159950914f86e449e93238aef62299ac2978294c13a", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_address_but_-b0da7209": "00273e6ff8d318e08a3f715b99f368cbf504d58101d08c98a841d53b25bd0466", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_data_hash]": "53b24d40fc3ed95b8f102e8c5f2b885836eb5c56dd8aa0fdf3116bfb7187813c", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_token_minting]": "17b16f49d0f97c03532666fad5799c143980c14dfdb1339a6a528997a77e8988", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_token_minting]": "b8c5cfdf5166bf5ff6e6fbd7cc4c47456e3ea75cbdd0a69b32bfd8f6fd1dd327", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_an_ordinary_input]": "5be08858cfda90d26d122878721a9fca615655b289f2d59bd23572c8acb1223f", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a33e6741": "cab014743844f5e0aeacdcc1cf118cd9ed0650b175ef9d060f0de1099fc2dead", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a6481374": "e15f925910660632f5a0e78b86dc34a3c4d81a45e447abc9a294b96b6f04cddb", @@ -1124,7 +1125,7 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration_-78f5c748": "0fe3f2f6c42d6e6d7d3701bf34a92305971e8827e0cfde3afedeace4f63b1da6", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_an-4da9385a": "3a22e4667206bbb5963b1ef8686ad6f299c16e98f0cf177419bf89476ce5371b", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_ce-46b0a250": "0a23e6f91cf48f85ec9570f8390c0381ac45bbb5bd14d4a5856bdbb5c2e7cb21", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_token_minting]": "1f65bf2a68776383d6a651f2818a8366739113a3d040f177e07126ad69d27891", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_token_minting]": "660216653ea51bce0e780f58c673e89784a4cb4ef4373287142f6d200a9299a4", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral]": "2b6a74004dad6e60d2486dff949921650818bcf264b6550b3766587f3f1f298a", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-3f0b305a": "4e832f62ca9d2c6495d33d40b94f23979571f32bef98c94099f3d1a5bb35616e", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-c92d773b": "cf734dc9b83ee335b92dc886ea521e5fe61f838e27d19c4b3bac0c1b5943a462", @@ -1150,7 +1151,7 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_p-3c7243e1": "54266c3f100fae1303bb579bb3b731a24908eee78c634b1ba92af0dfbcf19d82", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_s-20438873": "b616c4005ee1a2728953ceb3a154e578d8ce53a908b6f11e8598290a3842f08a", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_catalyst_registration]": "3abfe7b0f3de4adacf9d07653eb0d3c80eb4c8876dc456f8c88b2e68ba14850c", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_everything_set_except_pool_r-1e1ef130": "2b65970f3b69f38715df07926fb6bdc4dbb72f0275e5163dd5049fe24047307a", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_everything_set_except_pool_r-1e1ef130": "9130bf5c2da6543833a3c841b18e649768f5c27108695a6227b0cb747a34be3d", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration]": "fea08104b2228ba952c9f0ccb64a88fee1c1fc91aa1fca951e812d1a50f7c771", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_and_withdrawal]": "fea08104b2228ba952c9f0ccb64a88fee1c1fc91aa1fca951e812d1a50f7c771", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_with_ac-9ca046f0": "a05ee17a405d989076f31a3aea3f83ffc9fa0ad266dfcd6e9106b064a7d3279b", @@ -1163,8 +1164,8 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_input_path_in_ordinary_transaction]": "c77e3c0415689c335bc5f93e2aeb8bbb97dd33bcb67df3ffc76adbb164428949", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[additional_witness_requests_in_ordinar-9c4f94c0": "c77e3c0415689c335bc5f93e2aeb8bbb97dd33bcb67df3ffc76adbb164428949", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[all_tx_inputs_must_be_external_(without_path)]": "86b34c2e24d9c2c6bec78c6762f0aef36f9d74fbeec51ffc246865c2cbbb5dc5", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_mint_token_group_in_wrong_order]": "eaaf57853b26425f900d4454adbb391d3d03763cd45fd3d6eacdaa58e5acf8e3", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_multiasset_token_group_-7c1351bc": "405290ca7b6cbe0eff75afe34624ef714bdbf74e919bb564d0c22feaed7d842d", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_mint_token_group_in_wrong_order]": "ddcdaed09c1046c9e98fab4f9f0dcb18fa73e202e80fe89b150f8afbf7de2865", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_multiasset_token_group_-7c1351bc": "d74a588277b730495f5d126d71c23f8ae34c448cd7a2c3d61faf6c33e971590d", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[auxiliary_data_hash_has_incorrect_length]": "dea77f61fa1f877bbd5ba70d5a4c911f27f7f2d41b35637baa4c5d8e9676a962", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[both_datum_hash_and_inline_datum_present]": "5a608b731c43231bcae0a856e74497612ccfeff809e5022dfb27798863e1bfb1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_input_accoun-863fee7d": "f393a074254d08159950790caa5c99b2ba3e2beeb6b2b8209a2aaabeaedf3886", @@ -1203,7 +1204,7 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_1852_multisi-b7679330": "ba9cc5dd31ce59791a6240eb62062aa23aeeca7597a5a3f95a8987f7edc3d012", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_a_collateral_input]": "9e1f554bb74f847e8f09201dda808fd1e0cdb68737515f34d6ad435957671c77", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_collateral_return]": "9e1f554bb74f847e8f09201dda808fd1e0cdb68737515f34d6ad435957671c77", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_long_token_m-9fb3cfe5": "87ce81d84aecfb57a4f7a6ce290a668dab029313c171a8d087f19ab2f83dccf2", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_long_token_m-9fb3cfe5": "b19ac3dd196737cf2811fbb76addf7e8376449aaedf7c9453b48522edaec8c23", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_output_conta-e3b36436": "bce97ba24f5b1f9ad0959f72b6c7db03aff5d92b146f2f0722926e4072e82063", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_reference_input]": "9e1f554bb74f847e8f09201dda808fd1e0cdb68737515f34d6ad435957671c77", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_repeated_withdrawal]": "0a859c5510befbbcf2d81bace32398b2e68dcda4da303559efb78abae674b056", @@ -1218,7 +1219,7 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-e98b1f5c": "0a859c5510befbbcf2d81bace32398b2e68dcda4da303559efb78abae674b056", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_wthdrawal_ad-3291ee9e": "0a859c5510befbbcf2d81bace32398b2e68dcda4da303559efb78abae674b056", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_without_minting_b-da5ba399": "ba9cc5dd31ce59791a6240eb62062aa23aeeca7597a5a3f95a8987f7edc3d012", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_long_token_m-350c65f4": "0233daff41c7b3100ff2af7d074ac48666015304902071ddc0a52ebc623b1c5b", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_long_token_m-350c65f4": "4b3f6183d1e17da5f156b163f994799b7ff2f48cd0f380b900e1060c82e7e4f3", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_token_mintin-bc56f145": "d58c052ea0001cf4225a0b401c2af8cec3f8b1f1bae45ac110c6b208380edd1c", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_without_token_min-a128d577": "ff8aa102716b3552ec2495222e82b3d1ec513ba904469a49f7ec2798e2e55c73", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_has_invalid_crc]": "5a608b731c43231bcae0a856e74497612ccfeff809e5022dfb27798863e1bfb1", @@ -1228,18 +1229,18 @@ "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_short]": "5a608b731c43231bcae0a856e74497612ccfeff809e5022dfb27798863e1bfb1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_datum_hash_has_incorrect_length]": "5a608b731c43231bcae0a856e74497612ccfeff809e5022dfb27798863e1bfb1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_has_both_address_and_address_pa-2efc280f": "5a608b731c43231bcae0a856e74497612ccfeff809e5022dfb27798863e1bfb1", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_total_is_too_high]": "e68296b4a6d2c45aa4dbf08f679f4df9839ca51d5aaccb1eab63c0c8e7a80718", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_total_is_too_high]": "30455081f2d1a22c391156db145d97fbd880226e17a23dc1ed4da633c423bbe0", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_with_reward_address]": "5a608b731c43231bcae0a856e74497612ccfeff809e5022dfb27798863e1bfb1", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[plutus_transaction_with_output_contain-74465253": "75aa26b722556d74bf6d6e8b7b3200bca2fd75cf5653f0f516472f3dd08b7f99", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_mint_in_wrong_order]": "ad69374bf0d0aca9f8477720df268f96a8c31ecb7660cbd9d63483a0b103534f", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_multiasset_output_in_wrong_order]": "3b0a4cfa217c7e96b07d56f3cbc5fc50d1bf8b0a7eb01d48a04bfa99a1c57208", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_mint_in_wrong_order]": "f92e8e57cd92a053a4038d9c2abdf1a2237b61a6583e61f1bc0e2910443b62c8", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_multiasset_output_in_wrong_order]": "6137e061ffe580b5df1c8a8aa7963ef33e4934d47276cad286f0e4f392bb537a", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_belongs_to_differe-e79b6855": "f916b9d6d07981967e15e71b71b46c501f0e0280c2ffd5270cf02f456de2cb61", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_is_a_base_address]": "f916b9d6d07981967e15e71b71b46c501f0e0280c2ffd5270cf02f456de2cb61", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[reference_input_is_present]": "9e1f554bb74f847e8f09201dda808fd1e0cdb68737515f34d6ad435957671c77", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_mint_token_group]": "517edcaa3e27366eb86bec17cf7fa07bff72d85bf44a78ffe196f4a813d51778", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_multiasset_token_group]": "80e37cd07015bc3e3323c221ffe847beed5f6032a430d48bf5c200b16579a2f4", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_mint]": "da1286102ca6870d11b49d5ff8d08fb75a13a4594c9a1711105fe0dfeef972d2", -"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_multiasset_output]": "b0d9aea49080edc90ee2a094ea44c83fe92219a9a7bce78c71273be605b65300", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_mint_token_group]": "eded94fcd4fd219e86c066a11caaba1b178a64f2e709a30f6295a99227b0f0f7", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_multiasset_token_group]": "8a906312d11d8e2ae490411626179d22d8f30f343fa7e29363b4ccc5f2ba7adf", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_mint]": "8c1ee94cf24ffb27eb233b0b298c649db4face4524c7ba501d86b23acba30e63", +"TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_multiasset_output]": "db51dee226c5f85e3a01e4062eda51796e34c59795c0889abecbe6828ccdacab", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[required_signer_with_both_key_path_and-7d9a3c59": "afcb60ac41dc9b1df008339176cfb974ee47df1d6b3cefe0a2ee0fa51dea7b95", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-02b129f8": "9e1f554bb74f847e8f09201dda808fd1e0cdb68737515f34d6ad435957671c77", "TT_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-11c8b442": "53cdf1d9500c6576de5f85dfecba4cd293b84dc0d2449f77fd95ff54126982cd", @@ -1338,7 +1339,7 @@ "TT_ethereum-test_sign_verify_message.py::test_verify[parameters6-result6]": "8a04d5a6b192e5fa20b76574457b6dd8f6a7796949bad7c1df9231eafd0c8dc7", "TT_ethereum-test_sign_verify_message.py::test_verify[parameters7-result7]": "03c6cc044648959592b297eda1239da7d379385b6483c61abdb6d3db1ecd40f9", "TT_ethereum-test_sign_verify_message.py::test_verify_invalid": "f56f261951ed30706d692510ea3a8860397bda9abe199f15eaa536d06e8977b1", -"TT_ethereum-test_signtx.py::test_data_streaming": "e0e6179a08c7a96958814d95ddfe09996a96aefeec3f538acfa58844c664d90f", +"TT_ethereum-test_signtx.py::test_data_streaming": "59c3b32d5d89e3e18dc965aced8e701670f788a4673214193df0b530e3744ca0", "TT_ethereum-test_signtx.py::test_sanity_checks": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_ethereum-test_signtx.py::test_sanity_checks_eip1559": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_ethereum-test_signtx.py::test_signtx[Auxilium]": "d2ba6424ba04e6db899ec33253ce7fd26bbb1850a5e548f1e5628bbb311cc2fc", @@ -1351,21 +1352,21 @@ "TT_ethereum-test_signtx.py::test_signtx[Unknown_chain_id_eth_path]": "e1c268db1580ebbf957eb2912baa747133bf640d886b1339aee7e709494b46a7", "TT_ethereum-test_signtx.py::test_signtx[Unknown_chain_id_testnet_path]": "e1c268db1580ebbf957eb2912baa747133bf640d886b1339aee7e709494b46a7", "TT_ethereum-test_signtx.py::test_signtx[data_1]": "277686786f4dee54e641b15850b482480d1de4fd63401b76beb8da085ba27314", -"TT_ethereum-test_signtx.py::test_signtx[data_2_bigdata]": "a728a670736dc4b5a60e1e98ff294f20e0b3c0c97e32e3e032e19140aa040561", +"TT_ethereum-test_signtx.py::test_signtx[data_2_bigdata]": "c3a636db7a09312d215a7cee53ab726bbe67db70bcd8143f1287a8a55a64ccad", "TT_ethereum-test_signtx.py::test_signtx[known_erc20_token]": "313cacddc8234c92ad18f4c94bbd9da366eb38e8f3a9345521cf4b4af491eac8", "TT_ethereum-test_signtx.py::test_signtx[max_chain_id]": "e1c268db1580ebbf957eb2912baa747133bf640d886b1339aee7e709494b46a7", "TT_ethereum-test_signtx.py::test_signtx[max_chain_plus_one]": "e1c268db1580ebbf957eb2912baa747133bf640d886b1339aee7e709494b46a7", "TT_ethereum-test_signtx.py::test_signtx[max_uint64]": "e1c268db1580ebbf957eb2912baa747133bf640d886b1339aee7e709494b46a7", -"TT_ethereum-test_signtx.py::test_signtx[newcontract]": "251aa9bf7d0febf372a3a9ba9c9a5b988ce02214cead9a768f994ad2a59ecfb3", +"TT_ethereum-test_signtx.py::test_signtx[newcontract]": "0a793ff148a61fa0216528817c8adc08dec422463b5fd68af6fb4e557a25c77e", "TT_ethereum-test_signtx.py::test_signtx[nodata_1]": "0653c875f9e81fbef050769692c650a62f4d10973fbfc02f3dd7e32d80c89176", -"TT_ethereum-test_signtx.py::test_signtx[nodata_2_bigvalue]": "a5d66260785d02985106b12e21dd96db82b8579d8b09e4135d796d33e31356c1", +"TT_ethereum-test_signtx.py::test_signtx[nodata_2_bigvalue]": "3ace0b955361d9b958738e085699fe25241adc0a79896dacecd5bf6fef9d181b", "TT_ethereum-test_signtx.py::test_signtx[unknown_erc20_token]": "9663070b464ef7bdd9f41bad540135a46564ee215e5d5d6448e4fa721a137bc8", "TT_ethereum-test_signtx.py::test_signtx[wanchain]": "feb75d11291435a367479d0f55874a6a276aa760b57b804f2339d4fb4143f5c8", "TT_ethereum-test_signtx.py::test_signtx_data_pagination[input_flow_go_back]": "e0304501e6dd76d08052edd3ef518e4873f2029e8351bc1fb5ed5ba2a99e740a", "TT_ethereum-test_signtx.py::test_signtx_data_pagination[input_flow_scroll_down]": "f707da6726a2ebad6888af490eed2a1441147c795a8b72fb805fd0d3a8b071f9", "TT_ethereum-test_signtx.py::test_signtx_data_pagination[input_flow_skip]": "5d73d7f8366f4abd3eaf3e666f140ee0fcc0aca4f35483a6be27d96e2b64fd27", "TT_ethereum-test_signtx.py::test_signtx_eip1559[data_1]": "fcff42ade9344444b345d8f0a707dc57ed7a06a7a208d77aeb2186da4bbb9dca", -"TT_ethereum-test_signtx.py::test_signtx_eip1559[data_2_bigdata]": "983a67f3fc48f03872593ee7b743272efa5c9906c07bd4411285b95813654233", +"TT_ethereum-test_signtx.py::test_signtx_eip1559[data_2_bigdata]": "08de57fed498a07f704f5d90ccd16a476c8258e9c44ed1add287dc3ae55fb187", "TT_ethereum-test_signtx.py::test_signtx_eip1559[known_erc20]": "a1a6350a0aabe1035e40fed9d8e28f9b9dc737d52814427c64ef00640d3752c7", "TT_ethereum-test_signtx.py::test_signtx_eip1559[large_chainid]": "a8a8aa0cea41f7534dd6c7953574a28dc923e2414cddde6c2dae2c6af8539c6d", "TT_ethereum-test_signtx.py::test_signtx_eip1559[nodata]": "5b103f4bf0ed90c0dd6ef8a33cdfa59edfd50e2441dbb4aa3dfec9dc6ba2d4c6", @@ -1413,7 +1414,7 @@ "TT_nem-test_signtx_transfers.py::test_nem_signtx_encrypted_payload": "a62817329e675c9648a3834bf5feb5fea40b5f65aaeeadb115b8f0b55804d245", "TT_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic": "61b7a05c0d52483b9e12fe7df81aef46535c89d119f9a11f9d54d224a5be5d2c", "TT_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic_with_levy": "fa0fa195b557a27472a1879079faa72a13054f2e0efc8f6e9a3f0daba7384fc2", -"TT_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "a1f3ad6744443336ef2c6b42d27a1f06d6d173a50f39d4eda3b8d5cf57becd83", +"TT_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "ce7a8514d1de43a2f428596bbf1de9af34163eb8f238f95f56e66feff55e1436", "TT_nem-test_signtx_transfers.py::test_nem_signtx_simple": "921869434cb375480391bd2e2dd7031975084f0f1e6c57e69f3ab87f24e86d5a", "TT_nem-test_signtx_transfers.py::test_nem_signtx_unknown_mosaic": "4e1b2be8902129d890f43cb2332cd87c5c017cf0f70f3497886d79a6879e4340", "TT_nem-test_signtx_transfers.py::test_nem_signtx_xem_as_mosaic": "58c8390a6bae376e7cb0469c976cc55725111c208f3e7b8dddf4352a3ad88263", @@ -1538,7 +1539,8 @@ "TT_test_cancel.py::test_cancel_message_via_initialize[message1]": "b014449cbf1a45739d64a370b30af75df2228f48c090a02227bac8ed20c7b2dc", "TT_test_cancel.py::test_cancel_on_paginated": "6b8a80b8e81a14c0183805fac48a36f9cc61daa290d04d295032ab76ec83300f", "TT_test_debuglink.py::test_softlock_instability": "9750df55cb4716f1d497d57de57257a0c5188fb652fcdb66a9d436d9c396c62b", -"TT_test_firmware_dump.py::test_firmware_dump_hash": "5bd19a3b684eb5160270266f1900dc1e0e216901a64f6ed1e91dc65f7d88d82f", +"TT_test_firmware_hash.py::test_firmware_hash_emu": "6156504fa1a43ed3e9aaae41c53dd6e5e979cc2558333b78846e0d9741e75c47", +"TT_test_firmware_hash.py::test_firmware_hash_hw": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TT_test_msg_applysettings.py::test_apply_homescreen_toif": "7e7fb6223f2113a592c848cd8e57aa22eb002e6472abb5045814f7fe958b2818", "TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x80\\x00\\x80\\x00~\\x00\\x00\\x0-ba464b0c": "d81ff1a197803cfda9180cad05dad5c1912a064da957d036c1311fa3eeef4b70", "TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x90\\x00\\x90\\x00~XXXf\\x90\\x0-cb3c88da": "d81ff1a197803cfda9180cad05dad5c1912a064da957d036c1311fa3eeef4b70", @@ -1646,7 +1648,7 @@ "TT_zcash-test_sign_tx.py::test_send_to_multisig": "17c0a3118c96052e23cde9b323de1c8249a0f70f59774c0e949aa151de491695", "TT_zcash-test_sign_tx.py::test_spend_multisig": "1f7cfe70831cffb4c076d0b4778704a982b37be4cc114e2cd9de85ee3173430e", "TT_zcash-test_sign_tx.py::test_spend_v4_input": "235910c3aa36150bb7012d21d52acdca347a2a216bb09a0588910329e464c8f0", -"TT_zcash-test_sign_tx.py::test_spend_v5_input": "dd9b4f0050836b7d881d9be798d2f4d972e39f460b8acc3e4e1c038ba754ae7c", +"TT_zcash-test_sign_tx.py::test_spend_v5_input": "2ec2223bdd77dc9e4cbfe1c85ed91dec77b7e6f1f37dd1cb160308808db9d9a6", "TT_zcash-test_sign_tx.py::test_unified_address": "90c260abe850e4821f479a489e79efaa75b7cf9af3ac74752a3cf7099fef6b31", "TT_zcash-test_sign_tx.py::test_version_group_id_missing": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "TTui2_binance-test_get_address.py::test_binance_get_address[m-44h-714h-0h-0-0-bnb1hgm0p7khfk85zpz-68e2cb5a": "577553344793d14026b1d3c7f6185a4858378476dafee67a958319bd8d8f58ac", @@ -2555,7 +2557,6 @@ "TTui2_test_cancel.py::test_cancel_message_via_initialize[message1]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c", "TTui2_test_cancel.py::test_cancel_on_paginated": "676407d1aadec40354589c2358f43d2a06a29eaa3ebb1a9ac43a1a7291615349", "TTui2_test_debuglink.py::test_softlock_instability": "ce63650e876dcd3c8cadac887e3f6561d2558dd2085d01b6c4f089b91cd4ae45", -"TTui2_test_firmware_dump.py::test_firmware_dump_hash": "fae9c002f2bd1d55e6efbc423d809088946063d3f87fa1ef40875aecdf793cf6", "TTui2_test_msg_applysettings.py::test_apply_homescreen_toif": "fb0b7a99c6881ad6bf3a27a09d0e37862a7419c6a10f65139ab3f4562c609d9e", "TTui2_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x80\\x00\\x80\\x00~\\x00\\x00\\x0-ba464b0c": "1eda1bb0dac1e0cd285b1face109de60cfd0e7ae4041b82b805cebc3be0db8f5", "TTui2_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x90\\x00\\x90\\x00~XXXf\\x90\\x0-cb3c88da": "1eda1bb0dac1e0cd285b1face109de60cfd0e7ae4041b82b805cebc3be0db8f5", diff --git a/tools/check-bitcoin-only b/tools/check-bitcoin-only index 055e4499250..41c4234eaac 100755 --- a/tools/check-bitcoin-only +++ b/tools/check-bitcoin-only @@ -4,7 +4,7 @@ RETURN=0 EXCEPTIONS="decred|omni|ripple|dash|TEXT_MARGIN_LEFT|dash_width|dashlane|flo|mnemonic|meter|refuse|fused|enemy|cinema|syntaxerror|mix|palm|UdesRsK|kcc|derive_cardano|ntity|gather|bmc|cloudflare" # dump all coins except the first 3 (Bitcoin, Testnet, Regtest) -ALTCOINS=$(./common/tools/cointool.py dump -l -p -t | grep '"name"' | cut -d '"' -f 4 | tail -n +4) +ALTCOINS=$(./common/tools/cointool.py dump -l -p -t -d trezor1 -d trezor2 | grep '"name"' | cut -d '"' -f 4 | tail -n +4) # split on newlines only OLDIFS=$IFS IFS=" @@ -17,4 +17,7 @@ for altcoin in $ALTCOINS; do done IFS=$OLDIFS +if [ $RETURN -ne 0 ]; then + echo "ERROR: Altcoin strings found in Bitcoin-only firmware." +fi exit $RETURN