1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-06 14:52:33 +00:00

core: store bitcoin-like coins as a decision tree

This commit is contained in:
Jan Pochyla 2019-05-22 14:55:32 +02:00 committed by Pavol Rusnak
parent 9676eec4df
commit 1f3adc7069
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
3 changed files with 1385 additions and 1332 deletions

View File

@ -3,6 +3,8 @@
from trezor.crypto.base58 import blake256d_32, groestl512d_32, keccak_32, sha256d_32 from trezor.crypto.base58 import blake256d_32, groestl512d_32, keccak_32, sha256d_32
from trezor.crypto.scripts import blake256_ripemd160_digest, sha256_ripemd160_digest from trezor.crypto.scripts import blake256_ripemd160_digest, sha256_ripemd160_digest
# flake8: noqa
class CoinInfo: class CoinInfo:
def __init__( def __init__(
@ -63,9 +65,12 @@ class CoinInfo:
# fmt: off # fmt: off
COINS = [ def by_name(name: str) -> CoinInfo:
CoinInfo( if False:
coin_name="Bitcoin", pass
elif name == "Bitcoin":
return CoinInfo(
coin_name=name,
coin_shortcut="BTC", coin_shortcut="BTC",
address_type=0, address_type=0,
address_type_p2sh=5, address_type_p2sh=5,
@ -83,9 +88,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Testnet":
coin_name="Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="TEST", coin_shortcut="TEST",
address_type=111, address_type=111,
address_type_p2sh=196, address_type_p2sh=196,
@ -103,9 +109,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Actinium":
coin_name="Actinium", return CoinInfo(
coin_name=name,
coin_shortcut="ACM", coin_shortcut="ACM",
address_type=53, address_type=53,
address_type_p2sh=55, address_type_p2sh=55,
@ -123,9 +130,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Axe":
coin_name="Axe", return CoinInfo(
coin_name=name,
coin_shortcut="AXE", coin_shortcut="AXE",
address_type=55, address_type=55,
address_type_p2sh=16, address_type_p2sh=16,
@ -143,9 +151,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bellcoin":
coin_name="Bellcoin", return CoinInfo(
coin_name=name,
coin_shortcut="BELL", coin_shortcut="BELL",
address_type=25, address_type=25,
address_type_p2sh=85, address_type_p2sh=85,
@ -163,9 +172,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "BitCash":
coin_name="BitCash", return CoinInfo(
coin_name=name,
coin_shortcut="BITC", coin_shortcut="BITC",
address_type=230, address_type=230,
address_type_p2sh=235, address_type_p2sh=235,
@ -183,9 +193,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "BitZeny":
coin_name="BitZeny", return CoinInfo(
coin_name=name,
coin_shortcut="ZNY", coin_shortcut="ZNY",
address_type=81, address_type=81,
address_type_p2sh=5, address_type_p2sh=5,
@ -203,9 +214,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bitcloud":
coin_name="Bitcloud", return CoinInfo(
coin_name=name,
coin_shortcut="BTDX", coin_shortcut="BTDX",
address_type=25, address_type=25,
address_type_p2sh=5, address_type_p2sh=5,
@ -223,9 +235,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bcash":
coin_name="Bcash", return CoinInfo(
coin_name=name,
coin_shortcut="BCH", coin_shortcut="BCH",
address_type=0, address_type=0,
address_type_p2sh=5, address_type_p2sh=5,
@ -243,9 +256,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bcash Testnet":
coin_name="Bcash Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="TBCH", coin_shortcut="TBCH",
address_type=111, address_type=111,
address_type_p2sh=196, address_type_p2sh=196,
@ -263,9 +277,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bgold":
coin_name="Bgold", return CoinInfo(
coin_name=name,
coin_shortcut="BTG", coin_shortcut="BTG",
address_type=38, address_type=38,
address_type_p2sh=23, address_type_p2sh=23,
@ -283,9 +298,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bgold Testnet":
coin_name="Bgold Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="TBTG", coin_shortcut="TBTG",
address_type=111, address_type=111,
address_type_p2sh=196, address_type_p2sh=196,
@ -303,9 +319,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bprivate":
coin_name="Bprivate", return CoinInfo(
coin_name=name,
coin_shortcut="BTCP", coin_shortcut="BTCP",
address_type=4901, address_type=4901,
address_type_p2sh=5039, address_type_p2sh=5039,
@ -323,9 +340,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Brhodium":
coin_name="Brhodium", return CoinInfo(
coin_name=name,
coin_shortcut="XRC", coin_shortcut="XRC",
address_type=61, address_type=61,
address_type_p2sh=123, address_type_p2sh=123,
@ -343,9 +361,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bitcore":
coin_name="Bitcore", return CoinInfo(
coin_name=name,
coin_shortcut="BTX", coin_shortcut="BTX",
address_type=3, address_type=3,
address_type_p2sh=125, address_type_p2sh=125,
@ -363,9 +382,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Bitsend":
coin_name="Bitsend", return CoinInfo(
coin_name=name,
coin_shortcut="BSD", coin_shortcut="BSD",
address_type=102, address_type=102,
address_type_p2sh=5, address_type_p2sh=5,
@ -383,9 +403,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "BlockStamp":
coin_name="BlockStamp", return CoinInfo(
coin_name=name,
coin_shortcut="BST", coin_shortcut="BST",
address_type=26, address_type=26,
address_type_p2sh=5, address_type_p2sh=5,
@ -403,9 +424,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Capricoin":
coin_name="Capricoin", return CoinInfo(
coin_name=name,
coin_shortcut="CPC", coin_shortcut="CPC",
address_type=28, address_type=28,
address_type_p2sh=35, address_type_p2sh=35,
@ -423,9 +445,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Dash":
coin_name="Dash", return CoinInfo(
coin_name=name,
coin_shortcut="DASH", coin_shortcut="DASH",
address_type=76, address_type=76,
address_type_p2sh=16, address_type_p2sh=16,
@ -443,9 +466,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Dash Testnet":
coin_name="Dash Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tDASH", coin_shortcut="tDASH",
address_type=140, address_type=140,
address_type_p2sh=19, address_type_p2sh=19,
@ -463,9 +487,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Decred":
coin_name="Decred", return CoinInfo(
coin_name=name,
coin_shortcut="DCR", coin_shortcut="DCR",
address_type=1855, address_type=1855,
address_type_p2sh=1818, address_type_p2sh=1818,
@ -483,9 +508,10 @@ COINS = [
bip115=False, bip115=False,
decred=True, decred=True,
curve_name='secp256k1-decred', curve_name='secp256k1-decred',
), )
CoinInfo( elif name == "Decred Testnet":
coin_name="Decred Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="TDCR", coin_shortcut="TDCR",
address_type=3873, address_type=3873,
address_type_p2sh=3836, address_type_p2sh=3836,
@ -503,9 +529,10 @@ COINS = [
bip115=False, bip115=False,
decred=True, decred=True,
curve_name='secp256k1-decred', curve_name='secp256k1-decred',
), )
CoinInfo( elif name == "Denarius":
coin_name="Denarius", return CoinInfo(
coin_name=name,
coin_shortcut="DNR", coin_shortcut="DNR",
address_type=30, address_type=30,
address_type_p2sh=90, address_type_p2sh=90,
@ -523,9 +550,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "DigiByte":
coin_name="DigiByte", return CoinInfo(
coin_name=name,
coin_shortcut="DGB", coin_shortcut="DGB",
address_type=30, address_type=30,
address_type_p2sh=63, address_type_p2sh=63,
@ -543,9 +571,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Dogecoin":
coin_name="Dogecoin", return CoinInfo(
coin_name=name,
coin_shortcut="DOGE", coin_shortcut="DOGE",
address_type=30, address_type=30,
address_type_p2sh=22, address_type_p2sh=22,
@ -563,9 +592,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "FairCoin":
coin_name="FairCoin", return CoinInfo(
coin_name=name,
coin_shortcut="FAIR", coin_shortcut="FAIR",
address_type=95, address_type=95,
address_type_p2sh=36, address_type_p2sh=36,
@ -583,9 +613,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Feathercoin":
coin_name="Feathercoin", return CoinInfo(
coin_name=name,
coin_shortcut="FTC", coin_shortcut="FTC",
address_type=14, address_type=14,
address_type_p2sh=5, address_type_p2sh=5,
@ -603,9 +634,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Flashcoin":
coin_name="Flashcoin", return CoinInfo(
coin_name=name,
coin_shortcut="FLASH", coin_shortcut="FLASH",
address_type=68, address_type=68,
address_type_p2sh=130, address_type_p2sh=130,
@ -623,9 +655,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Florincoin":
coin_name="Florincoin", return CoinInfo(
coin_name=name,
coin_shortcut="FLO", coin_shortcut="FLO",
address_type=35, address_type=35,
address_type_p2sh=94, address_type_p2sh=94,
@ -643,9 +676,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Fujicoin":
coin_name="Fujicoin", return CoinInfo(
coin_name=name,
coin_shortcut="FJC", coin_shortcut="FJC",
address_type=36, address_type=36,
address_type_p2sh=16, address_type_p2sh=16,
@ -663,9 +697,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Gincoin":
coin_name="Gincoin", return CoinInfo(
coin_name=name,
coin_shortcut="GIN", coin_shortcut="GIN",
address_type=38, address_type=38,
address_type_p2sh=10, address_type_p2sh=10,
@ -683,9 +718,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "GameCredits":
coin_name="GameCredits", return CoinInfo(
coin_name=name,
coin_shortcut="GAME", coin_shortcut="GAME",
address_type=38, address_type=38,
address_type_p2sh=62, address_type_p2sh=62,
@ -703,9 +739,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Groestlcoin":
coin_name="Groestlcoin", return CoinInfo(
coin_name=name,
coin_shortcut="GRS", coin_shortcut="GRS",
address_type=36, address_type=36,
address_type_p2sh=5, address_type_p2sh=5,
@ -723,9 +760,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1-groestl', curve_name='secp256k1-groestl',
), )
CoinInfo( elif name == "Groestlcoin Testnet":
coin_name="Groestlcoin Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tGRS", coin_shortcut="tGRS",
address_type=111, address_type=111,
address_type_p2sh=196, address_type_p2sh=196,
@ -743,9 +781,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1-groestl', curve_name='secp256k1-groestl',
), )
CoinInfo( elif name == "Horizen":
coin_name="Horizen", return CoinInfo(
coin_name=name,
coin_shortcut="ZEN", coin_shortcut="ZEN",
address_type=8329, address_type=8329,
address_type_p2sh=8342, address_type_p2sh=8342,
@ -763,9 +802,10 @@ COINS = [
bip115=True, bip115=True,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Komodo":
coin_name="Komodo", return CoinInfo(
coin_name=name,
coin_shortcut="KMD", coin_shortcut="KMD",
address_type=60, address_type=60,
address_type_p2sh=85, address_type_p2sh=85,
@ -783,9 +823,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Koto":
coin_name="Koto", return CoinInfo(
coin_name=name,
coin_shortcut="KOTO", coin_shortcut="KOTO",
address_type=6198, address_type=6198,
address_type_p2sh=6203, address_type_p2sh=6203,
@ -803,9 +844,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Litecoin":
coin_name="Litecoin", return CoinInfo(
coin_name=name,
coin_shortcut="LTC", coin_shortcut="LTC",
address_type=48, address_type=48,
address_type_p2sh=50, address_type_p2sh=50,
@ -823,9 +865,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Litecoin Testnet":
coin_name="Litecoin Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tLTC", coin_shortcut="tLTC",
address_type=111, address_type=111,
address_type_p2sh=58, address_type_p2sh=58,
@ -843,9 +886,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Megacoin":
coin_name="Megacoin", return CoinInfo(
coin_name=name,
coin_shortcut="MEC", coin_shortcut="MEC",
address_type=50, address_type=50,
address_type_p2sh=5, address_type_p2sh=5,
@ -863,9 +907,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Monacoin":
coin_name="Monacoin", return CoinInfo(
coin_name=name,
coin_shortcut="MONA", coin_shortcut="MONA",
address_type=50, address_type=50,
address_type_p2sh=55, address_type_p2sh=55,
@ -883,9 +928,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "MonetaryUnit":
coin_name="MonetaryUnit", return CoinInfo(
coin_name=name,
coin_shortcut="MUE", coin_shortcut="MUE",
address_type=16, address_type=16,
address_type_p2sh=76, address_type_p2sh=76,
@ -903,9 +949,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Myriad":
coin_name="Myriad", return CoinInfo(
coin_name=name,
coin_shortcut="XMY", coin_shortcut="XMY",
address_type=50, address_type=50,
address_type_p2sh=9, address_type_p2sh=9,
@ -923,9 +970,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "NIX":
coin_name="NIX", return CoinInfo(
coin_name=name,
coin_shortcut="NIX", coin_shortcut="NIX",
address_type=38, address_type=38,
address_type_p2sh=53, address_type_p2sh=53,
@ -943,9 +991,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Namecoin":
coin_name="Namecoin", return CoinInfo(
coin_name=name,
coin_shortcut="NMC", coin_shortcut="NMC",
address_type=52, address_type=52,
address_type_p2sh=5, address_type_p2sh=5,
@ -963,9 +1012,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "PIVX":
coin_name="PIVX", return CoinInfo(
coin_name=name,
coin_shortcut="PIVX", coin_shortcut="PIVX",
address_type=30, address_type=30,
address_type_p2sh=13, address_type_p2sh=13,
@ -983,9 +1033,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "PIVX Testnet":
coin_name="PIVX Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tPIVX", coin_shortcut="tPIVX",
address_type=139, address_type=139,
address_type_p2sh=19, address_type_p2sh=19,
@ -1003,9 +1054,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Pesetacoin":
coin_name="Pesetacoin", return CoinInfo(
coin_name=name,
coin_shortcut="PTC", coin_shortcut="PTC",
address_type=47, address_type=47,
address_type_p2sh=22, address_type_p2sh=22,
@ -1023,9 +1075,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Polis":
coin_name="Polis", return CoinInfo(
coin_name=name,
coin_shortcut="POLIS", coin_shortcut="POLIS",
address_type=55, address_type=55,
address_type_p2sh=56, address_type_p2sh=56,
@ -1043,9 +1096,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Primecoin":
coin_name="Primecoin", return CoinInfo(
coin_name=name,
coin_shortcut="XPM", coin_shortcut="XPM",
address_type=23, address_type=23,
address_type_p2sh=83, address_type_p2sh=83,
@ -1063,9 +1117,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Qtum":
coin_name="Qtum", return CoinInfo(
coin_name=name,
coin_shortcut="QTUM", coin_shortcut="QTUM",
address_type=58, address_type=58,
address_type_p2sh=50, address_type_p2sh=50,
@ -1083,9 +1138,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Qtum Testnet":
coin_name="Qtum Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tQTUM", coin_shortcut="tQTUM",
address_type=120, address_type=120,
address_type_p2sh=110, address_type_p2sh=110,
@ -1103,9 +1159,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Ravencoin":
coin_name="Ravencoin", return CoinInfo(
coin_name=name,
coin_shortcut="RVN", coin_shortcut="RVN",
address_type=60, address_type=60,
address_type_p2sh=122, address_type_p2sh=122,
@ -1123,9 +1180,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Regtest":
coin_name="Regtest", return CoinInfo(
coin_name=name,
coin_shortcut="REGTEST", coin_shortcut="REGTEST",
address_type=111, address_type=111,
address_type_p2sh=196, address_type_p2sh=196,
@ -1143,9 +1201,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "SmartCash":
coin_name="SmartCash", return CoinInfo(
coin_name=name,
coin_shortcut="SMART", coin_shortcut="SMART",
address_type=63, address_type=63,
address_type_p2sh=18, address_type_p2sh=18,
@ -1163,9 +1222,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1-smart', curve_name='secp256k1-smart',
), )
CoinInfo( elif name == "SmartCash Testnet":
coin_name="SmartCash Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tSMART", coin_shortcut="tSMART",
address_type=65, address_type=65,
address_type_p2sh=21, address_type_p2sh=21,
@ -1183,9 +1243,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1-smart', curve_name='secp256k1-smart',
), )
CoinInfo( elif name == "Stakenet":
coin_name="Stakenet", return CoinInfo(
coin_name=name,
coin_shortcut="XSN", coin_shortcut="XSN",
address_type=76, address_type=76,
address_type_p2sh=16, address_type_p2sh=16,
@ -1203,9 +1264,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "VIPSTARCOIN":
coin_name="VIPSTARCOIN", return CoinInfo(
coin_name=name,
coin_shortcut="VIPS", coin_shortcut="VIPS",
address_type=70, address_type=70,
address_type_p2sh=50, address_type_p2sh=50,
@ -1223,9 +1285,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Vertcoin":
coin_name="Vertcoin", return CoinInfo(
coin_name=name,
coin_shortcut="VTC", coin_shortcut="VTC",
address_type=71, address_type=71,
address_type_p2sh=5, address_type_p2sh=5,
@ -1243,9 +1306,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Viacoin":
coin_name="Viacoin", return CoinInfo(
coin_name=name,
coin_shortcut="VIA", coin_shortcut="VIA",
address_type=71, address_type=71,
address_type_p2sh=33, address_type_p2sh=33,
@ -1263,9 +1327,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "ZClassic":
coin_name="ZClassic", return CoinInfo(
coin_name=name,
coin_shortcut="ZCL", coin_shortcut="ZCL",
address_type=7352, address_type=7352,
address_type_p2sh=7357, address_type_p2sh=7357,
@ -1283,9 +1348,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Zcash":
coin_name="Zcash", return CoinInfo(
coin_name=name,
coin_shortcut="ZEC", coin_shortcut="ZEC",
address_type=7352, address_type=7352,
address_type_p2sh=7357, address_type_p2sh=7357,
@ -1303,9 +1369,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Zcash Testnet":
coin_name="Zcash Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="TAZ", coin_shortcut="TAZ",
address_type=7461, address_type=7461,
address_type_p2sh=7354, address_type_p2sh=7354,
@ -1323,9 +1390,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Zcoin":
coin_name="Zcoin", return CoinInfo(
coin_name=name,
coin_shortcut="XZC", coin_shortcut="XZC",
address_type=82, address_type=82,
address_type_p2sh=7, address_type_p2sh=7,
@ -1343,9 +1411,10 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
CoinInfo( elif name == "Zcoin Testnet":
coin_name="Zcoin Testnet", return CoinInfo(
coin_name=name,
coin_shortcut="tXZC", coin_shortcut="tXZC",
address_type=65, address_type=65,
address_type_p2sh=178, address_type_p2sh=178,
@ -1363,5 +1432,5 @@ COINS = [
bip115=False, bip115=False,
decred=False, decred=False,
curve_name='secp256k1', curve_name='secp256k1',
), )
] raise ValueError('Unknown coin name "%s"' % name)

View File

@ -3,6 +3,8 @@
from trezor.crypto.base58 import blake256d_32, groestl512d_32, keccak_32, sha256d_32 from trezor.crypto.base58 import blake256d_32, groestl512d_32, keccak_32, sha256d_32
from trezor.crypto.scripts import blake256_ripemd160_digest, sha256_ripemd160_digest from trezor.crypto.scripts import blake256_ripemd160_digest, sha256_ripemd160_digest
# flake8: noqa
class CoinInfo: class CoinInfo:
def __init__( def __init__(
@ -71,7 +73,7 @@ def hexfmt(x):
return "0x{:08x}".format(x) return "0x{:08x}".format(x)
ATTRIBUTES = ( ATTRIBUTES = (
("coin_name", black_repr), ("coin_name", lambda _: "name"),
("coin_shortcut", black_repr), ("coin_shortcut", black_repr),
("address_type", int), ("address_type", int),
("address_type_p2sh", int), ("address_type_p2sh", int),
@ -91,12 +93,15 @@ ATTRIBUTES = (
("curve_name", lambda r: repr(r.replace("_", "-"))), ("curve_name", lambda r: repr(r.replace("_", "-"))),
) )
%>\ %>\
COINS = [ def by_name(name: str) -> CoinInfo:
if False:
pass
% for coin in supported_on("trezor2", bitcoin): % for coin in supported_on("trezor2", bitcoin):
CoinInfo( elif name == ${black_repr(coin["coin_name"])}:
return CoinInfo(
% for attr, func in ATTRIBUTES: % for attr, func in ATTRIBUTES:
${attr}=${func(coin[attr])}, ${attr}=${func(coin[attr])},
% endfor % endfor
), )
% endfor % endfor
] raise ValueError('Unknown coin name "%s"' % name)

View File

@ -1,22 +1 @@
from apps.common.coininfo import COINS from apps.common.coininfo import by_name
def by_shortcut(shortcut):
for c in COINS:
if c.coin_shortcut == shortcut:
return c
raise ValueError('Unknown coin shortcut "%s"' % shortcut)
def by_name(name):
for c in COINS:
if c.coin_name == name:
return c
raise ValueError('Unknown coin name "%s"' % name)
def by_slip44(slip44):
for c in COINS:
if c.slip44 == slip44:
return c
raise ValueError("Unknown coin slip44 index %d" % slip44)