core: store bitcoin-like coins as a decision tree

pull/169/head
Jan Pochyla 5 years ago committed by Pavol Rusnak
parent 9676eec4df
commit 1f3adc7069
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

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

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

@ -1,22 +1 @@
from apps.common.coininfo import COINS
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)
from apps.common.coininfo import by_name

Loading…
Cancel
Save