mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-06-02 14:18:59 +00:00
coins: refactor, use data from coins.json instead of hardcoded lists
This commit is contained in:
parent
c4f38fd740
commit
bd43363b1c
@ -30,9 +30,9 @@ import sys
|
|||||||
|
|
||||||
from trezorlib.client import TrezorClient, TrezorClientVerbose, CallException, format_protobuf
|
from trezorlib.client import TrezorClient, TrezorClientVerbose, CallException, format_protobuf
|
||||||
from trezorlib.transport import get_transport, enumerate_devices, TransportException
|
from trezorlib.transport import get_transport, enumerate_devices, TransportException
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib import protobuf
|
from trezorlib import protobuf
|
||||||
from trezorlib.coins import coins_txapi
|
|
||||||
from trezorlib.ckd_public import PRIME_DERIVATION_FLAG
|
from trezorlib.ckd_public import PRIME_DERIVATION_FLAG
|
||||||
|
|
||||||
|
|
||||||
@ -470,11 +470,11 @@ def get_public_node(connect, coin, address, curve, show_display):
|
|||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def sign_tx(connect, coin):
|
def sign_tx(connect, coin):
|
||||||
client = connect()
|
client = connect()
|
||||||
if coin in coins_txapi:
|
if coin in coins.tx_api:
|
||||||
txapi = coins_txapi[coin]
|
txapi = coins.tx_api[coin]
|
||||||
else:
|
else:
|
||||||
click.echo('Coin "%s" is not recognized.' % coin, err=True)
|
click.echo('Coin "%s" is not recognized.' % coin, err=True)
|
||||||
click.echo('Supported coin types: %s' % ', '.join(coins_txapi.keys()), err=True)
|
click.echo('Supported coin types: %s' % ', '.join(coins.tx_api.keys()), err=True)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
client.set_tx_api(txapi)
|
client.set_tx_api(txapi)
|
||||||
|
@ -34,7 +34,7 @@ from . import messages as proto
|
|||||||
from . import tools
|
from . import tools
|
||||||
from . import mapping
|
from . import mapping
|
||||||
from . import nem
|
from . import nem
|
||||||
from .coins import coins_slip44
|
from .coins import slip44
|
||||||
from .debuglink import DebugLink
|
from .debuglink import DebugLink
|
||||||
from .protobuf import MessageType
|
from .protobuf import MessageType
|
||||||
|
|
||||||
@ -530,8 +530,8 @@ class ProtocolMixin(object):
|
|||||||
n = n[1:]
|
n = n[1:]
|
||||||
|
|
||||||
# coin_name/a/b/c => 44'/SLIP44_constant'/a/b/c
|
# coin_name/a/b/c => 44'/SLIP44_constant'/a/b/c
|
||||||
if n[0] in coins_slip44:
|
if n[0] in slip44:
|
||||||
n = ["44'", "%d'" % coins_slip44[n[0]]] + n[1:]
|
n = ["44'", "%d'" % slip44[n[0]]] + n[1:]
|
||||||
|
|
||||||
path = []
|
path = []
|
||||||
for x in n:
|
for x in n:
|
||||||
|
@ -1,31 +1,41 @@
|
|||||||
from .tx_api import TxApiBitcoin, TxApiTestnet, TxApiLitecoin, TxApiZcash, TxApiDash, TxApiBcash, TxApiDecredTestnet, TxApiDogecoin, TxApiMonacoin, TxApiBitcoinGold
|
import os.path
|
||||||
|
import json
|
||||||
|
|
||||||
coins_slip44 = {
|
from .tx_api import TxApiInsight, TxApiBlockCypher
|
||||||
'Bitcoin': 0,
|
|
||||||
'Testnet': 1,
|
|
||||||
'Decred Testnet': 1,
|
|
||||||
'Litecoin': 2,
|
|
||||||
'Dogecoin': 3,
|
|
||||||
'Dash': 5,
|
|
||||||
'Namecoin': 7,
|
|
||||||
'Monacoin': 22,
|
|
||||||
'Decred': 42,
|
|
||||||
'Ether': 60,
|
|
||||||
'EtherClassic': 61,
|
|
||||||
'Zcash': 133,
|
|
||||||
'Bcash': 145,
|
|
||||||
'Bitcoin Gold': 156,
|
|
||||||
}
|
|
||||||
|
|
||||||
coins_txapi = {
|
COINS_JSON = os.path.join(os.path.dirname(__file__), 'coins.json')
|
||||||
'Bitcoin': TxApiBitcoin,
|
|
||||||
'Testnet': TxApiTestnet,
|
|
||||||
'Litecoin': TxApiLitecoin,
|
def _load_coins_json():
|
||||||
'Dash': TxApiDash,
|
# Load coins.json to local variables
|
||||||
'Zcash': TxApiZcash,
|
# NOTE: coins.json comes from 'vendor/trezor-common/coins.json',
|
||||||
'Bcash': TxApiBcash,
|
# which is a git submodule. If you're trying to run trezorlib directly
|
||||||
'Decred Testnet': TxApiDecredTestnet,
|
# from the checkout (or tarball), initialize the submodule with:
|
||||||
'Dogecoin': TxApiDogecoin,
|
# $ git submodule update --init
|
||||||
'Monacoin': TxApiMonacoin,
|
# and install coins.json with:
|
||||||
'Bitcoin Gold': TxApiBitcoinGold,
|
# $ python setup.py prebuild
|
||||||
}
|
with open(COINS_JSON) as coins_json:
|
||||||
|
coins_list = json.load(coins_json)
|
||||||
|
return {coin['coin_name']: coin for coin in coins_list}
|
||||||
|
|
||||||
|
|
||||||
|
def _insight_for_coin(coin):
|
||||||
|
if not coin['bitcore']:
|
||||||
|
return None
|
||||||
|
zcash = coin['coin_name'].lower().startswith('zcash')
|
||||||
|
network = 'insight_{}'.format(coin['coin_name'].lower().replace(' ', '_'))
|
||||||
|
url = coin['bitcore'][0] + 'api/'
|
||||||
|
return TxApiInsight(network=network, url=url, zcash=zcash)
|
||||||
|
|
||||||
|
|
||||||
|
# exported variables
|
||||||
|
__all__ = ['by_name', 'slip44', 'tx_api']
|
||||||
|
|
||||||
|
by_name = _load_coins_json()
|
||||||
|
slip44 = {name: coin['bip44'] for name, coin in by_name.items()}
|
||||||
|
tx_api = {name: _insight_for_coin(coin)
|
||||||
|
for name, coin in by_name.items()
|
||||||
|
if coin["bitcore"]}
|
||||||
|
|
||||||
|
# fixup for Dogecoin
|
||||||
|
tx_api['Dogecoin'] = TxApiBlockCypher(network='blockcypher_dogecoin', url='https://api.blockcypher.com/v1/doge/main/')
|
||||||
|
@ -22,9 +22,10 @@ from binascii import hexlify, unhexlify
|
|||||||
import pytest
|
import pytest
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
|
from trezorlib import tx_api
|
||||||
from trezorlib.client import TrezorClient, TrezorClientDebugLink
|
from trezorlib.client import TrezorClient, TrezorClientDebugLink
|
||||||
from trezorlib.transport import get_transport
|
from trezorlib.transport import get_transport
|
||||||
from trezorlib import tx_api
|
|
||||||
|
|
||||||
tests_dir = os.path.dirname(os.path.abspath(__file__))
|
tests_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
tx_api.cache_dir = os.path.join(tests_dir, '../txcache')
|
tx_api.cache_dir = os.path.join(tests_dir, '../txcache')
|
||||||
@ -42,7 +43,7 @@ class TrezorTest:
|
|||||||
debuglink = wirelink.find_debug()
|
debuglink = wirelink.find_debug()
|
||||||
self.client = TrezorClientDebugLink(wirelink)
|
self.client = TrezorClientDebugLink(wirelink)
|
||||||
self.client.set_debuglink(debuglink)
|
self.client.set_debuglink(debuglink)
|
||||||
self.client.set_tx_api(tx_api.TxApiBitcoin)
|
self.client.set_tx_api(coins.tx_api['Bitcoin'])
|
||||||
# self.client.set_buttonwait(3)
|
# self.client.set_buttonwait(3)
|
||||||
|
|
||||||
# 1 2 3 4 5 6 7 8 9 10 11 12
|
# 1 2 3 4 5 6 7 8 9 10 11 12
|
||||||
|
@ -18,9 +18,11 @@
|
|||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.client import CallException
|
from trezorlib.client import CallException
|
||||||
from trezorlib.tx_api import TxApiTestnet
|
|
||||||
|
TxApiTestnet = coins.tx_api['Testnet']
|
||||||
|
|
||||||
|
|
||||||
TXHASH_157041 = unhexlify('1570416eb4302cf52979afd5e6909e37d8fdd874301f7cc87e547e509cb1caa6')
|
TXHASH_157041 = unhexlify('1570416eb4302cf52979afd5e6909e37d8fdd874301f7cc87e547e509cb1caa6')
|
||||||
|
@ -16,11 +16,13 @@
|
|||||||
# along with this library. If not, see <http://www.gnu.org/licenses/>.
|
# along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.tx_api import TxApiBcash
|
|
||||||
from trezorlib.ckd_public import deserialize
|
from trezorlib.ckd_public import deserialize
|
||||||
from trezorlib.client import CallException
|
from trezorlib.client import CallException
|
||||||
|
|
||||||
|
TxApiBcash = coins.tx_api['Bcash']
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip_t2
|
@pytest.mark.skip_t2
|
||||||
class TestMsgSigntxBch(TrezorTest):
|
class TestMsgSigntxBch(TrezorTest):
|
||||||
|
@ -17,11 +17,13 @@
|
|||||||
# along with this library. If not, see <http://www.gnu.org/licenses/>.
|
# along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.tx_api import TxApiBitcoinGold
|
|
||||||
from trezorlib.ckd_public import deserialize
|
from trezorlib.ckd_public import deserialize
|
||||||
from trezorlib.client import CallException
|
from trezorlib.client import CallException
|
||||||
|
|
||||||
|
TxApiBitcoinGold = coins.tx_api["Bitcoin Gold"]
|
||||||
|
|
||||||
|
|
||||||
# All data taken from T1
|
# All data taken from T1
|
||||||
class TestMsgSigntxBitcoinGold(TrezorTest):
|
class TestMsgSigntxBitcoinGold(TrezorTest):
|
||||||
|
@ -17,8 +17,10 @@
|
|||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.tx_api import TxApiDecredTestnet
|
|
||||||
|
TxApiDecredTestnet = coins.tx_api['Decred Testnet']
|
||||||
|
|
||||||
|
|
||||||
TXHASH_e16248 = unhexlify("e16248f0b39a0a0c0e53d6f2f84c2a944f0d50e017a82701e8e02e46e979d5ed")
|
TXHASH_e16248 = unhexlify("e16248f0b39a0a0c0e53d6f2f84c2a944f0d50e017a82701e8e02e46e979d5ed")
|
||||||
|
@ -17,11 +17,13 @@
|
|||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.tx_api import TxApiTestnet
|
|
||||||
from trezorlib.ckd_public import deserialize
|
from trezorlib.ckd_public import deserialize
|
||||||
from trezorlib.client import CallException
|
from trezorlib.client import CallException
|
||||||
|
|
||||||
|
TxApiTestnet = coins.tx_api["Testnet"]
|
||||||
|
|
||||||
|
|
||||||
class TestMsgSigntxSegwit(TrezorTest):
|
class TestMsgSigntxSegwit(TrezorTest):
|
||||||
|
|
||||||
|
@ -17,10 +17,12 @@
|
|||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.tx_api import TxApiTestnet
|
|
||||||
from trezorlib.ckd_public import deserialize
|
from trezorlib.ckd_public import deserialize
|
||||||
|
|
||||||
|
TxApiTestnet = coins.tx_api['Testnet']
|
||||||
|
|
||||||
|
|
||||||
class TestMsgSigntxSegwitNative(TrezorTest):
|
class TestMsgSigntxSegwitNative(TrezorTest):
|
||||||
|
|
||||||
|
@ -18,8 +18,11 @@
|
|||||||
|
|
||||||
|
|
||||||
from .common import *
|
from .common import *
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
from trezorlib.tx_api import TxApiZcash
|
|
||||||
|
TxApiZcash = coins.tx_api["Zcash"]
|
||||||
|
|
||||||
|
|
||||||
TXHASH_93373e = unhexlify('93373e63cc626c4a7d049ad775d6511bb5eba985f142db660c9b9f955c722f5c')
|
TXHASH_93373e = unhexlify('93373e63cc626c4a7d049ad775d6511bb5eba985f142db660c9b9f955c722f5c')
|
||||||
|
@ -19,14 +19,14 @@
|
|||||||
from .common import *
|
from .common import *
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages as proto
|
||||||
import trezorlib.ckd_public as bip32
|
import trezorlib.ckd_public as bip32
|
||||||
from trezorlib import tx_api
|
from trezorlib.coins import tx_api
|
||||||
|
|
||||||
|
|
||||||
class TestMultisigChange(TrezorTest):
|
class TestMultisigChange(TrezorTest):
|
||||||
|
|
||||||
def setup_method(self, method):
|
def setup_method(self, method):
|
||||||
super(TestMultisigChange, self).setup_method(method)
|
super(TestMultisigChange, self).setup_method(method)
|
||||||
self.client.set_tx_api(tx_api.TxApiTestnet)
|
self.client.set_tx_api(tx_api['Testnet'])
|
||||||
|
|
||||||
node_ext1 = bip32.deserialize('tpubDADHV9u9Y6gkggintTdMjJE3be58zKNLhpxBQyuEM6Pwx3sN9JVLmMCMN4DNVwL9AKec27z5TaWcWuHzMXiGAtcra5DjwWbvppGX4gaEGVN')
|
node_ext1 = bip32.deserialize('tpubDADHV9u9Y6gkggintTdMjJE3be58zKNLhpxBQyuEM6Pwx3sN9JVLmMCMN4DNVwL9AKec27z5TaWcWuHzMXiGAtcra5DjwWbvppGX4gaEGVN')
|
||||||
# m/1 => 02c0d0c5fee952620757c6128dbf327c996cd72ed3358d15d6518a1186099bc15e
|
# m/1 => 02c0d0c5fee952620757c6128dbf327c996cd72ed3358d15d6518a1186099bc15e
|
||||||
|
@ -18,8 +18,11 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from trezorlib import coins
|
||||||
from trezorlib import tx_api
|
from trezorlib import tx_api
|
||||||
from trezorlib.tx_api import TxApiBitcoin, TxApiTestnet
|
|
||||||
|
TxApiBitcoin = coins.tx_api['Bitcoin']
|
||||||
|
TxApiTestnet = coins.tx_api['Testnet']
|
||||||
|
|
||||||
tests_dir = os.path.dirname(os.path.abspath(__file__))
|
tests_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
@ -148,15 +148,3 @@ class TxApiBlockCypher(TxApi):
|
|||||||
o.script_pubkey = binascii.unhexlify(vout['script'])
|
o.script_pubkey = binascii.unhexlify(vout['script'])
|
||||||
|
|
||||||
return t
|
return t
|
||||||
|
|
||||||
|
|
||||||
TxApiBitcoin = TxApiInsight(network='insight_bitcoin', url='https://btc-bitcore1.trezor.io/api/')
|
|
||||||
TxApiTestnet = TxApiInsight(network='insight_testnet', url='https://testnet-bitcore3.trezor.io/api/')
|
|
||||||
TxApiLitecoin = TxApiInsight(network='insight_litecoin', url='https://ltc-bitcore1.trezor.io/api/')
|
|
||||||
TxApiDash = TxApiInsight(network='insight_dash', url='https://dash-bitcore1.trezor.io/api/')
|
|
||||||
TxApiZcash = TxApiInsight(network='insight_zcash', url='https://zec-bitcore1.trezor.io/api/', zcash=True)
|
|
||||||
TxApiBcash = TxApiInsight(network='insight_bcash', url='https://bch-bitcore2.trezor.io/api/')
|
|
||||||
TxApiBitcoinGold = TxApiInsight(network='insight_bitcoin_gold', url='https://btg-bitcore2.trezor.io/api/')
|
|
||||||
TxApiDecredTestnet = TxApiInsight(network='insight_decred_testnet', url='https://testnet.decred.org/api/')
|
|
||||||
TxApiDogecoin = TxApiBlockCypher(network='blockcypher_dogecoin', url='https://api.blockcypher.com/v1/doge/main/')
|
|
||||||
TxApiMonacoin = TxApiInsight(network='insight_monacoin', url='https://mona.insight.monaco-ex.org/insight-api-monacoin/')
|
|
||||||
|
Loading…
Reference in New Issue
Block a user