From d800fcbf9f49580c5171b90ace4f37d17964e70b Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Thu, 17 Oct 2019 10:51:55 +0200 Subject: [PATCH 01/45] core/sign_tx: If there is a non-multisig input, then change output cannot be multisig. (cherry picked from commit 8eb6ce08995514c67d175b7197feeadeccc48ff0) --- core/src/apps/wallet/sign_tx/signing.py | 2 + .../test_msg_signtx_segwit_native.py | 116 ++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 55cfbbe9a..794793c13 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -111,6 +111,8 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): if txi.multisig: multifp.add(txi.multisig) + else: + multifp.mismatch = True if txi.script_type in ( InputScriptType.SPENDWITNESS, diff --git a/tests/device_tests/test_msg_signtx_segwit_native.py b/tests/device_tests/test_msg_signtx_segwit_native.py index 51c66639d..9fdedfdce 100644 --- a/tests/device_tests/test_msg_signtx_segwit_native.py +++ b/tests/device_tests/test_msg_signtx_segwit_native.py @@ -810,3 +810,119 @@ class TestMsgSigntxSegwitNative: serialized_tx.hex() == "01000000000101e5918f661488bb7f0a7d04fc1dad61b5d0bad5167a05b3a637e36ace881cbc310000000023220020fa6c73de618ec134eeec0c16f6dd04d46d4347e9a4fd0a95fd7938403a4949f9ffffffff01d071180000000000220020bcea2324dacbcde5a9db90cc26b8df9cbc72010e05cb68cf034df6f0e05239a2040047304402206bbddb45f12e31e77610fd85b50a83bad4426433b1c4860b1c5ddc0a69f803720220087b0607daab14830f4b4941f16b953b38e606ad70029bac24af7267f93c4242014730440220551a0cb6b0d5b3fa0cfd0b07bb5d751494b827b1c6a08702186696cfbc18278302204f37c382876c4117cca656654599b508f2d55fc3b083dc938e3cd8491b29719601695221036a5ec3abd10501409092246fe59c6d7a15fff1a933479483c3ba98b866c5b9742103559be875179d44e438db2c74de26e0bc9842cbdefd16018eae8a2ed989e474722103067b56aad037cd8b5f569b21f9025b76470a72dc69457813d2b76e98dc0cd01a53ae00000000" ) + + # Ensure that if there is a non-multisig input, then a multisig output + # will not be identified as a change output. + def test_multisig_mismatch_inputs_single(self, client): + # m/84'/1'/0' for "alcohol woman abuse ..." seed. + node_int = deserialize( + "Vpub5kFDCYhiYuAzjk7TBQPNFffbexHF7iAd8AVVgHQKUany7e6NQvthgk86d7DfH57DY2dwBK4PyVTDDaS1r2gjkdyJyUYGoV9qNujGSrW9Dpe" + ) + + # m/84'/1'/0' for "all all ... all" seed. + node_ext = deserialize( + "Vpub5jR76XyyhBaQXPSRf3PBeY3gF914d9sf7DWFVhMESEQMCdNv35XiVvp8gZsFXAv222VPHLNnAEXxMPG8DPiSuhAXfEydBf55LTLBGHCDzH2" + ) + + # tb1qpzmgzpcumztvmpu3q27wwdggqav26j9dgks92pvnne2lz9ferxgssmhzlq + multisig_in = proto.MultisigRedeemScriptType( + nodes=[node_int, node_ext], address_n=[0, 0], signatures=[b"", b""], m=1 + ) + + multisig_out = proto.MultisigRedeemScriptType( + nodes=[node_int, node_ext], address_n=[1, 0], signatures=[b"", b""], m=1 + ) + + inp1 = proto.TxInputType( + address_n=parse_path("84'/1'/0'/0/0"), + amount=12300000, + prev_hash=bytes.fromhex( + "09144602765ce3dd8f4329445b20e3684e948709c5cdcaf12da3bb079c99448a" + ), + prev_index=0, + script_type=proto.InputScriptType.SPENDWITNESS, + ) + + inp2 = proto.TxInputType( + address_n=parse_path("84'/1'/0'/0/0"), + prev_hash=bytes.fromhex( + "a345b85759b385c6446055e4c3baa77e8161a65009dc009489b48aa6587ce348" + ), + prev_index=0, + script_type=proto.InputScriptType.SPENDWITNESS, + multisig=multisig_in, + amount=100, + ) + + out1 = proto.TxOutputType( + address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", + amount=5000000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + out2 = proto.TxOutputType( + address_n=parse_path("84'/1'/0'/1/0"), + script_type=proto.OutputScriptType.PAYTOWITNESS, + multisig=multisig_out, + amount=12300000 + 100 - 5000000 - 10000, + ) + + with client: + client.set_expected_responses( + [ + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + # Ensure that the multisig output is not identified as a change output. + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + proto.TxRequest(request_type=proto.RequestType.TXFINISHED), + ] + ) + + _, serialized_tx = btc.sign_tx( + client, "Testnet", [inp1, inp2], [out1, out2], prev_txes=TX_API + ) + + assert ( + serialized_tx.hex() + == "010000000001028a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff48e37c58a68ab4899400dc0950a661817ea7bac3e4556044c685b35957b845a30000000000ffffffff02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987f43c6f0000000000220020733ecfbbe7e47a74dde6c7645b60cdf627e90a585cde7733bc7fdaf9fe30b37402473044022037dc98b16be542a6e3e1ab32007a74192c43f2498170cc5e1dffb6847e3663e402206715102d0eb59e6461a97c78eb40a8679a04a8921fdafef25f0d3d16cc65de39012103adc58245cf28406af0ef5cc24b8afba7f1be6c72f279b642d85c48798685f8620300473044022070a24bcb00041cbed465f1f546bc59e1e353a6e182393932d5ba96e20bc32ef702202ddc76a97c01465692d5b0a0a61d653f64b9ea833af1810022110fd4d505ff950147512103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d2103adc58245cf28406af0ef5cc24b8afba7f1be6c72f279b642d85c48798685f86252ae00000000" + ) From 2ae8e16dd3213fc901348d846a5a736454827507 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 6 Mar 2020 10:25:52 +0000 Subject: [PATCH 02/45] tests: add ui fixture for the previous test --- tests/ui_tests/fixtures.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 2f4a0e838..674c084c9 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -303,6 +303,7 @@ "test_msg_signtx_segwit.py-test_send_p2sh": "ca593e31e919b9e920289b13e4c70b9607f34b93d06ace69835e3d08ecf046c8", "test_msg_signtx_segwit.py-test_send_p2sh_change": "562c7ee5a2e264c9f93387dd165403dab32bb305a4c3a6143a902c4a4c9e5950", "test_msg_signtx_segwit.py-test_testnet_segwit_big_amount": "5613c0c8852b3e79db9e90d2185ff5802e88869c51b3134a7f8463df47f17a02", +"test_msg_signtx_segwit_native.py-test_multisig_mismatch_inputs_single": "5094082bedf105f2fb6f116ea0348171ae01a51a63d3771c04cfb6c58d44a230", "test_msg_signtx_segwit_native.py-test_send_both": "0b6e01818e71c22ca40c9401c616582b95c8435ff0cd5b74d083332eeeac0b51", "test_msg_signtx_segwit_native.py-test_send_multisig_1": "f728159a10dd938b861e5e766319223b6aa7384c1be7edb5bdef12bd80159b9b", "test_msg_signtx_segwit_native.py-test_send_multisig_2": "30b2c9ef9f520d6098c6649b2a06263011bc8c0c0118bda637abca73f5a599ac", From 4af9aa547e6a21af923cba0c2b9efcc2657f9c6b Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Thu, 5 Mar 2020 15:23:45 +0000 Subject: [PATCH 03/45] core: forbid unnecessary fields in OPRETURN output --- core/src/apps/wallet/sign_tx/signing.py | 4 ++ tests/device_tests/test_op_return.py | 58 +++++++++++++++++++++++++ tests/ui_tests/fixtures.json | 1 - 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 794793c13..34f069235 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -706,6 +706,10 @@ def output_derive_script( raise SigningError( FailureType.DataError, "OP_RETURN output with non-zero amount" ) + if o.address or o.address_n or o.multisig: + raise SigningError( + FailureType.DataError, "OP_RETURN output with address or multisig" + ) return scripts.output_script_paytoopreturn(o.op_return_data) if o.address_n: diff --git a/tests/device_tests/test_op_return.py b/tests/device_tests/test_op_return.py index 4062e7325..54c071285 100644 --- a/tests/device_tests/test_op_return.py +++ b/tests/device_tests/test_op_return.py @@ -118,6 +118,7 @@ class TestOpReturn: == "010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b483045022100bc36e1227b334e856c532bbef86d30a96823a5f2461738f4dbf969dfbcf1b40b022078c5353ec9a4bce2bb05bd1ec466f2ab379c1aad926e208738407bba4e09784b012103330236b68aa6fdcaca0ea72e11b360c84ed19a338509aa527b678a7ec9076882ffffffff0260cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000000000001c6a1a74657374206f6620746865206f705f72657475726e206461746100000000" ) + @pytest.mark.skip_ui def test_nonzero_opreturn(self, client): inp1 = proto.TxInputType( address_n=parse_path("44'/0'/10'/0/5"), @@ -179,3 +180,60 @@ class TestOpReturn: assert exc.value.args[1].endswith( "OP_RETURN output with non-zero amount" ) + + @pytest.mark.skip_ui + def test_opreturn_address(self, client): + inp1 = proto.TxInputType( + address_n=parse_path("44'/0'/0'/0/2"), prev_hash=TXHASH_d5f65e, prev_index=0 + ) + + out1 = proto.TxOutputType( + address_n=parse_path("44'/0'/0'/1/2"), + amount=0, + op_return_data=b"OMNI TRANSACTION GOES HERE", + script_type=proto.OutputScriptType.PAYTOOPRETURN, + ) + + with client: + client.set_expected_responses( + [ + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + request_type=proto.RequestType.TXMETA, + details=proto.TxRequestDetailsType(tx_hash=TXHASH_d5f65e), + ), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType( + request_index=0, tx_hash=TXHASH_d5f65e + ), + ), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType( + request_index=1, tx_hash=TXHASH_d5f65e + ), + ), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType( + request_index=0, tx_hash=TXHASH_d5f65e + ), + ), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.Failure(), + ] + ) + with pytest.raises(CallException) as exc: + _, serialized_tx = btc.sign_tx( + client, "Bitcoin", [inp1], [out1], prev_txes=TX_API + ) + + assert exc.value.args[0] == proto.FailureType.DataError + assert exc.value.args[1] == "OP_RETURN output with address or multisig" diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 674c084c9..b28498b8b 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -371,7 +371,6 @@ "test_multisig_change.py-test_multisig_external_external": "ddecdadd659b0d1360a6a255c6f9dbf2c5b813039877b76d4062ddab765e1912", "test_multisig_change.py-test_multisig_mismatch_change": "7cb243b20be31a587dced4aaaf782a2d8487595369dde66aacb1b9a76e89c4fe", "test_multisig_change.py-test_multisig_mismatch_inputs": "64741bd84c5394e719125c1fbe8c34ef866ac63ca24ee1299e4268c59a199466", -"test_op_return.py-test_nonzero_opreturn": "826099ec3e22bd113fac1bc6f4b22e362673a730ad6838a8894b52541837141c", "test_op_return.py-test_opreturn": "87907ef9c2f4ce30ac95ad7d0cb3eac66762756e4ace52147bc589d64277f3b1", "test_passphrase_slip39_advanced.py::test_128bit_passphrase": "69b6b8b22c819e1282d7d2c14b31bf8d015c81ac05fe034540dbb11c8a20dbdb", "test_passphrase_slip39_advanced.py::test_256bit_passphrase": "69b6b8b22c819e1282d7d2c14b31bf8d015c81ac05fe034540dbb11c8a20dbdb", From a513f7429b0292974b7447f91d8d0e69414c5716 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 6 Mar 2020 07:33:24 +0000 Subject: [PATCH 04/45] legacy: forbid unnecessary fields in OPRETURN output --- legacy/firmware/signing.c | 9 +++++++++ legacy/firmware/transaction.c | 3 ++- tests/device_tests/test_op_return.py | 7 ++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 28277c043..5b251ac93 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -652,6 +652,15 @@ static bool signing_check_output(TxOutputType *txoutput) { // add it to hash_outputs // ask user for permission + if (txoutput->script_type == OutputScriptType_PAYTOOPRETURN) { + if (txoutput->has_address || (txoutput->address_n_count > 0) || + txoutput->has_multisig) { + fsm_sendFailure(FailureType_Failure_DataError, + _("OP_RETURN output with address or multisig")); + signing_abort(); + return false; + } + } // check for change address bool is_change = false; if (txoutput->address_n_count > 0) { diff --git a/legacy/firmware/transaction.c b/legacy/firmware/transaction.c index 551f38eb6..91e2d6aff 100644 --- a/legacy/firmware/transaction.c +++ b/legacy/firmware/transaction.c @@ -199,7 +199,8 @@ int compile_output(const CoinInfo *coin, const HDNode *root, TxOutputType *in, if (in->script_type == OutputScriptType_PAYTOOPRETURN) { // only 0 satoshi allowed for OP_RETURN - if (in->amount != 0) { + if (in->amount != 0 || in->has_address || (in->address_n_count > 0) || + in->has_multisig) { return 0; // failed to compile output } if (needs_confirm) { diff --git a/tests/device_tests/test_op_return.py b/tests/device_tests/test_op_return.py index 54c071285..82b6d5c7c 100644 --- a/tests/device_tests/test_op_return.py +++ b/tests/device_tests/test_op_return.py @@ -236,4 +236,9 @@ class TestOpReturn: ) assert exc.value.args[0] == proto.FailureType.DataError - assert exc.value.args[1] == "OP_RETURN output with address or multisig" + if client.features.model == "1": + assert exc.value.args[1].endswith( + "OP_RETURN output with address or multisig" + ) + else: + assert exc.value.args[1] == "OP_RETURN output with address or multisig" From 0903159d9b2df447434b9a5afdbca3eae8b4e52b Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 6 Mar 2020 17:26:19 +0000 Subject: [PATCH 05/45] core, legacy: make sure OPRETURN ouput is not marked as change --- core/src/apps/wallet/sign_tx/signing.py | 7 +++++++ legacy/firmware/signing.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 34f069235..0511a2c7b 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -790,6 +790,13 @@ def output_is_change( segwit_in: int, multifp: multisig.MultisigFingerprint, ) -> bool: + if o.script_type not in ( + OutputScriptType.PAYTOADDRESS, + OutputScriptType.PAYTOMULTISIG, + OutputScriptType.PAYTOWITNESS, + OutputScriptType.PAYTOP2SHWITNESS, + ): + return False if o.multisig and not multifp.matches(o.multisig): return False if output_is_segwit(o) and o.amount > segwit_in: diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 5b251ac93..b8d0b242d 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -696,6 +696,13 @@ static bool signing_check_output(TxOutputType *txoutput) { } } + if ((txoutput->script_type != OutputScriptType_PAYTOADDRESS) && + (txoutput->script_type != OutputScriptType_PAYTOMULTISIG) && + (txoutput->script_type != OutputScriptType_PAYTOWITNESS) && + (txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { + is_change = false; + } + if (is_change) { if (change_spend == 0) { // not set change_spend = txoutput->amount; From f0a39df75dbb52fad4be1eb34922dd88fecbd48d Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Tue, 10 Mar 2020 09:50:07 +0000 Subject: [PATCH 06/45] core/wallet: check inputs and outputs right after receiving them --- core/src/apps/wallet/sign_tx/helpers.py | 101 +++++++++++++++++++++--- core/src/apps/wallet/sign_tx/signing.py | 55 ++++--------- tests/device_tests/test_op_return.py | 4 +- 3 files changed, 108 insertions(+), 52 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index 8621c2564..658c7ce38 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -1,6 +1,6 @@ import gc -from trezor.messages import InputScriptType +from trezor.messages import FailureType, InputScriptType, OutputScriptType from trezor.messages.RequestType import ( TXEXTRADATA, TXFINISHED, @@ -16,8 +16,31 @@ from trezor.messages.TxOutputType import TxOutputType from trezor.messages.TxRequest import TxRequest from trezor.utils import obj_eq +from .signing import SigningError + from apps.common.coininfo import CoinInfo +CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES = { + OutputScriptType.PAYTOADDRESS: InputScriptType.SPENDADDRESS, + OutputScriptType.PAYTOMULTISIG: InputScriptType.SPENDMULTISIG, + OutputScriptType.PAYTOWITNESS: InputScriptType.SPENDWITNESS, + OutputScriptType.PAYTOP2SHWITNESS: InputScriptType.SPENDP2SHWITNESS, +} +CHANGE_INPUT_SCRIPT_TYPES = tuple(CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES.values()) +CHANGE_OUTPUT_SCRIPT_TYPES = tuple(CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES.keys()) + +MULTISIG_INPUT_SCRIPT_TYPES = ( + InputScriptType.SPENDMULTISIG, + InputScriptType.SPENDP2SHWITNESS, + InputScriptType.SPENDWITNESS, +) +MULTISIG_OUTPUT_SCRIPT_TYPES = ( + OutputScriptType.PAYTOMULTISIG, + OutputScriptType.PAYTOP2SHWITNESS, + OutputScriptType.PAYTOWITNESS, +) + + # Machine instructions # === @@ -107,17 +130,17 @@ def request_tx_extra_data( return ack.tx.extra_data -def request_tx_input(tx_req: TxRequest, i: int, tx_hash: bytes = None): +def request_tx_input(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes = None): tx_req.request_type = TXINPUT tx_req.details.request_index = i tx_req.details.tx_hash = tx_hash ack = yield tx_req tx_req.serialized = None gc.collect() - return sanitize_tx_input(ack.tx) + return sanitize_tx_input(ack.tx, coin) -def request_tx_output(tx_req: TxRequest, i: int, tx_hash: bytes = None): +def request_tx_output(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes = None): tx_req.request_type = TXOUTPUT tx_req.details.request_index = i tx_req.details.tx_hash = tx_hash @@ -127,7 +150,7 @@ def request_tx_output(tx_req: TxRequest, i: int, tx_hash: bytes = None): if tx_hash is None: return sanitize_tx_output(ack.tx) else: - return sanitize_tx_binoutput(ack.tx) + return sanitize_tx_binoutput(ack.tx, coin) def request_tx_finish(tx_req: TxRequest): @@ -166,18 +189,74 @@ def sanitize_tx_meta(tx: TransactionType) -> TransactionType: return tx -def sanitize_tx_input(tx: TransactionType) -> TxInputType: +def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: txi = tx.inputs[0] if txi.script_type is None: txi.script_type = InputScriptType.SPENDADDRESS if txi.sequence is None: txi.sequence = 0xFFFFFFFF + if txi.multisig and txi.script_type not in MULTISIG_INPUT_SCRIPT_TYPES: + raise SigningError( + FailureType.DataError, "Multisig field provided but not expected.", + ) + if txi.address_n and txi.script_type not in CHANGE_INPUT_SCRIPT_TYPES: + raise SigningError( + FailureType.DataError, "Input's address_n provided but not expected.", + ) + if txi.decred_script_version or txi.decred_script_version and not coin.decred: + raise SigningError( + FailureType.DataError, + "Decred details provided but Decred coin not specified.", + ) + if (txi.prev_block_hash_bip115 or txi.prev_block_height_bip115) and not coin.bip115: + raise SigningError( + FailureType.DataError, + "BIP-115 details provided, but the specified coin is unaware of BIP-115.", + ) return txi def sanitize_tx_output(tx: TransactionType) -> TxOutputType: - return tx.outputs[0] - - -def sanitize_tx_binoutput(tx: TransactionType) -> TxOutputBinType: - return tx.bin_outputs[0] + txo = tx.outputs[0] + if txo.multisig and txo.script_type not in MULTISIG_OUTPUT_SCRIPT_TYPES: + raise SigningError( + FailureType.DataError, "Multisig field provided but not expected.", + ) + if txo.address_n and txo.script_type not in CHANGE_OUTPUT_SCRIPT_TYPES: + raise SigningError( + FailureType.DataError, "Output's address_n provided but not expected.", + ) + if txo.script_type == OutputScriptType.PAYTOOPRETURN: + # op_return output + if txo.amount != 0: + raise SigningError( + FailureType.DataError, "OP_RETURN output with non-zero amount" + ) + if txo.address or txo.address_n or txo.multisig: + raise SigningError( + FailureType.DataError, "OP_RETURN output with address or multisig" + ) + else: + if txo.op_return_data: + raise SigningError( + FailureType.DataError, + "OP RETURN data provided but not OP RETURN script type.", + ) + if txo.address_n and txo.address: + raise SigningError( + FailureType.DataError, "Both address and address_n provided." + ) + if not txo.address_n and not txo.address: + raise SigningError(FailureType.DataError, "Missing address") + + return txo + + +def sanitize_tx_binoutput(tx: TransactionType, coin: CoinInfo) -> TxOutputBinType: + txo_bin = tx.bin_outputs[0] + if txo_bin.decred_script_version and not coin.decred: + raise SigningError( + FailureType.DataError, + "Decred details provided but Decred coin not specified.", + ) + return txo_bin diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 0511a2c7b..1c916105f 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -99,7 +99,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): for i in range(tx.inputs_count): progress.advance() # STAGE_REQUEST_1_INPUT - txi = await helpers.request_tx_input(tx_req, i) + txi = await helpers.request_tx_input(tx_req, i, coin) wallet_path = input_extract_wallet_path(txi, wallet_path) writers.write_tx_input_check(h_first, txi) weight.add_input(txi) @@ -162,7 +162,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): for o in range(tx.outputs_count): # STAGE_REQUEST_3_OUTPUT - txo = await helpers.request_tx_output(tx_req, o) + txo = await helpers.request_tx_output(tx_req, o, coin) txo_bin.amount = txo.amount txo_bin.script_pubkey = output_derive_script(txo, coin, keychain) weight.add_output(txo_bin.script_pubkey) @@ -255,7 +255,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): if segwit[i_sign]: # STAGE_REQUEST_SEGWIT_INPUT - txi_sign = await helpers.request_tx_input(tx_req, i_sign) + txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) if not input_is_segwit(txi_sign): raise SigningError( @@ -280,7 +280,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): elif coin.force_bip143 or (not utils.BITCOIN_ONLY and tx.overwintered): # STAGE_REQUEST_SEGWIT_INPUT - txi_sign = await helpers.request_tx_input(tx_req, i_sign) + txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) input_check_wallet_path(txi_sign, wallet_path) is_bip143 = ( @@ -327,7 +327,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): tx_req.serialized = tx_ser elif not utils.BITCOIN_ONLY and coin.decred: - txi_sign = await helpers.request_tx_input(tx_req, i_sign) + txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) input_check_wallet_path(txi_sign, wallet_path) @@ -414,7 +414,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): for i in range(tx.inputs_count): # STAGE_REQUEST_4_INPUT - txi = await helpers.request_tx_input(tx_req, i) + txi = await helpers.request_tx_input(tx_req, i, coin) input_check_wallet_path(txi, wallet_path) writers.write_tx_input_check(h_second, txi) if i == i_sign: @@ -449,7 +449,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): for o in range(tx.outputs_count): # STAGE_REQUEST_4_OUTPUT - txo = await helpers.request_tx_output(tx_req, o) + txo = await helpers.request_tx_output(tx_req, o, coin) txo_bin.amount = txo.amount txo_bin.script_pubkey = output_derive_script(txo, coin, keychain) writers.write_tx_output(h_second, txo_bin) @@ -500,7 +500,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): for o in range(tx.outputs_count): progress.advance() # STAGE_REQUEST_5_OUTPUT - txo = await helpers.request_tx_output(tx_req, o) + txo = await helpers.request_tx_output(tx_req, o, coin) txo_bin.amount = txo.amount txo_bin.script_pubkey = output_derive_script(txo, coin, keychain) @@ -522,7 +522,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): progress.advance() if segwit[i]: # STAGE_REQUEST_SEGWIT_WITNESS - txi = await helpers.request_tx_input(tx_req, i) + txi = await helpers.request_tx_input(tx_req, i, coin) input_check_wallet_path(txi, wallet_path) if not input_is_segwit(txi) or txi.amount > authorized_in: @@ -615,7 +615,7 @@ async def get_prevtx_output_value( for i in range(tx.inputs_cnt): # STAGE_REQUEST_2_PREV_INPUT - txi = await helpers.request_tx_input(tx_req, i, prev_hash) + txi = await helpers.request_tx_input(tx_req, i, coin, prev_hash) if not utils.BITCOIN_ONLY and coin.decred: writers.write_tx_input_decred(txh, txi) else: @@ -625,7 +625,7 @@ async def get_prevtx_output_value( for o in range(tx.outputs_cnt): # STAGE_REQUEST_2_PREV_OUTPUT - txo_bin = await helpers.request_tx_output(tx_req, o, prev_hash) + txo_bin = await helpers.request_tx_output(tx_req, o, coin, prev_hash) writers.write_tx_output(txh, txo_bin) if o == prev_index: total_out += txo_bin.amount @@ -701,25 +701,11 @@ def output_derive_script( ) -> bytes: if o.script_type == OutputScriptType.PAYTOOPRETURN: - # op_return output - if o.amount != 0: - raise SigningError( - FailureType.DataError, "OP_RETURN output with non-zero amount" - ) - if o.address or o.address_n or o.multisig: - raise SigningError( - FailureType.DataError, "OP_RETURN output with address or multisig" - ) return scripts.output_script_paytoopreturn(o.op_return_data) if o.address_n: # change output - if o.address: - raise SigningError(FailureType.DataError, "Address in change output") o.address = get_address_for_change(o, coin, keychain) - else: - if not o.address: - raise SigningError(FailureType.DataError, "Missing address") if coin.bech32_prefix and o.address.startswith(coin.bech32_prefix): # p2wpkh or p2wsh @@ -770,15 +756,9 @@ def output_derive_script( def get_address_for_change( o: TxOutputType, coin: coininfo.CoinInfo, keychain: seed.Keychain ): - if o.script_type == OutputScriptType.PAYTOADDRESS: - input_script_type = InputScriptType.SPENDADDRESS - elif o.script_type == OutputScriptType.PAYTOMULTISIG: - input_script_type = InputScriptType.SPENDMULTISIG - elif o.script_type == OutputScriptType.PAYTOWITNESS: - input_script_type = InputScriptType.SPENDWITNESS - elif o.script_type == OutputScriptType.PAYTOP2SHWITNESS: - input_script_type = InputScriptType.SPENDP2SHWITNESS - else: + try: + input_script_type = helpers.CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES[o.script_type] + except KeyError: raise SigningError(FailureType.DataError, "Invalid script type") node = keychain.derive(o.address_n, coin.curve_name) return addresses.get_address(input_script_type, coin, node, o.multisig) @@ -790,12 +770,7 @@ def output_is_change( segwit_in: int, multifp: multisig.MultisigFingerprint, ) -> bool: - if o.script_type not in ( - OutputScriptType.PAYTOADDRESS, - OutputScriptType.PAYTOMULTISIG, - OutputScriptType.PAYTOWITNESS, - OutputScriptType.PAYTOP2SHWITNESS, - ): + if o.script_type not in helpers.CHANGE_OUTPUT_SCRIPT_TYPES: return False if o.multisig and not multifp.matches(o.multisig): return False diff --git a/tests/device_tests/test_op_return.py b/tests/device_tests/test_op_return.py index 82b6d5c7c..25913f9a9 100644 --- a/tests/device_tests/test_op_return.py +++ b/tests/device_tests/test_op_return.py @@ -241,4 +241,6 @@ class TestOpReturn: "OP_RETURN output with address or multisig" ) else: - assert exc.value.args[1] == "OP_RETURN output with address or multisig" + assert ( + exc.value.args[1] == "Output's address_n provided but not expected." + ) From 8a0a38f948188bd250da550bb4c3d5e743b716df Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Mon, 9 Mar 2020 12:20:48 +0000 Subject: [PATCH 07/45] tests/singing: mixed inputs --- .../test_msg_signtx_segwit_native.py | 37 +++++++++++++++++++ tests/ui_tests/fixtures.json | 1 + 2 files changed, 38 insertions(+) diff --git a/tests/device_tests/test_msg_signtx_segwit_native.py b/tests/device_tests/test_msg_signtx_segwit_native.py index 9fdedfdce..8c9c86f25 100644 --- a/tests/device_tests/test_msg_signtx_segwit_native.py +++ b/tests/device_tests/test_msg_signtx_segwit_native.py @@ -395,6 +395,43 @@ class TestMsgSigntxSegwitNative: == "010000000001028a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090100000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff7b010c5faeb41cc5c253121b6bf69bf1a7c5867cd7f2d91569fea0ecd311b8650100000000ffffffff03e0aebb0000000000160014a579388225827d9f2fe9014add644487808c695d00cdb7020000000017a91491233e24a9bf8dbb19c1187ad876a9380c12e787870d859b03000000001976a914a579388225827d9f2fe9014add644487808c695d88ac02483045022100ead79ee134f25bb585b48aee6284a4bb14e07f03cc130253e83450d095515e5202201e161e9402c8b26b666f2b67e5b668a404ef7e57858ae9a6a68c3837e65fdc69012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b7902463043021f585c54a84dc7326fa60e22729accd41153c7dd4725bd4c8f751aa3a8cd8d6a0220631bfd83fc312cc6d5d129572a25178696d81eaf50c8c3f16c6121be4f4c029d012103505647c017ff2156eb6da20fae72173d3b681a1d0a629f95f49e884db300689f00000000" ) + def test_send_mixed_inputs(self, client): + # First is non-segwit, second is segwit. + + inp1 = proto.TxInputType( + address_n=parse_path("44'/1'/0'/0/0"), + # amount=31000000, + prev_hash=bytes.fromhex( + "e5040e1bc1ae7667ffb9e5248e90b2fb93cd9150234151ce90e14ab2f5933bcd" + ), + prev_index=0, + ) + + inp2 = proto.TxInputType( + address_n=parse_path("84'/1'/0'/1/0"), + amount=7289000, + prev_hash=bytes.fromhex( + "65b811d3eca0fe6915d9f2d77c86c5a7f19bf66b1b1253c2c51cb4ae5f0c017b" + ), + prev_index=1, + script_type=proto.InputScriptType.SPENDWITNESS, + ) + out1 = proto.TxOutputType( + address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", + amount=31000000 + 7289000 - 1000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + with client: + _, serialized_tx = btc.sign_tx( + client, "Testnet", [inp1, inp2], [out1], prev_txes=TX_API + ) + + assert ( + serialized_tx.hex() + == "01000000000102cd3b93f5b24ae190ce5141235091cd93fbb2908e24e5b9ff6776aec11b0e04e5000000006b483045022100b9b1002dfaa8aa6e658e37726dc526f145bac3715a933d40f8dacadff2cede560220197691c6bfc55ff260f5a48e9e94d9db73aff0400d79600f8ca63b7c0c7b37010121030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0ffffffff7b010c5faeb41cc5c253121b6bf69bf1a7c5867cd7f2d91569fea0ecd311b8650100000000ffffffff01803a480200000000160014a579388225827d9f2fe9014add644487808c695d0002473044022013dd59fb2e22da981a528b155e25e3ce360001c275408ea649b34cd51b509e68022030febb79bbb3e75263cdb68d9b9e08ab0ebe85d1986eb4fa5ce2f668b40a2a2c012103505647c017ff2156eb6da20fae72173d3b681a1d0a629f95f49e884db300689f00000000" + ) + @pytest.mark.multisig def test_send_multisig_1(self, client): nodes = [ diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index b28498b8b..7bf2261b6 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -305,6 +305,7 @@ "test_msg_signtx_segwit.py-test_testnet_segwit_big_amount": "5613c0c8852b3e79db9e90d2185ff5802e88869c51b3134a7f8463df47f17a02", "test_msg_signtx_segwit_native.py-test_multisig_mismatch_inputs_single": "5094082bedf105f2fb6f116ea0348171ae01a51a63d3771c04cfb6c58d44a230", "test_msg_signtx_segwit_native.py-test_send_both": "0b6e01818e71c22ca40c9401c616582b95c8435ff0cd5b74d083332eeeac0b51", +"test_msg_signtx_segwit_native.py-test_send_mixed_inputs": "d72acb396bbc3109054919bddc823e8900bb30b6c41c553922beb449af9bb51d", "test_msg_signtx_segwit_native.py-test_send_multisig_1": "f728159a10dd938b861e5e766319223b6aa7384c1be7edb5bdef12bd80159b9b", "test_msg_signtx_segwit_native.py-test_send_multisig_2": "30b2c9ef9f520d6098c6649b2a06263011bc8c0c0118bda637abca73f5a599ac", "test_msg_signtx_segwit_native.py-test_send_multisig_3_change": "a8b228c8dec41f1bb1ca7ee45b5a979a8b66fc03648c7324c989255a1d5cc01e", From bbb44405adad1e4fc9869a0001b3d5d08ef81e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Vejpustek?= Date: Wed, 11 Mar 2020 13:07:09 +0100 Subject: [PATCH 08/45] tests/singing: mixed inputs in bitcoin gold --- tests/device_tests/test_msg_signtx_bgold.py | 37 +++++++++++++++++++++ tests/ui_tests/fixtures.json | 1 + 2 files changed, 38 insertions(+) diff --git a/tests/device_tests/test_msg_signtx_bgold.py b/tests/device_tests/test_msg_signtx_bgold.py index 662328339..cade70a60 100644 --- a/tests/device_tests/test_msg_signtx_bgold.py +++ b/tests/device_tests/test_msg_signtx_bgold.py @@ -576,3 +576,40 @@ class TestMsgSigntxBitcoinGold: serialized_tx.hex() == "0100000000010185c9dd4ae1071affd77d90b9d03c1b5fdd7c62cf30a9bb8230ad766cf06b52250100000023220020ea9ec48498c451286c2ebaf9e19255e2873b0fb517d67b2f2005298c7e437829ffffffff01887d1800000000001976a914ea5f904d195079a350b534db4446433b3cec222e88ac0400473044022077cb8b2a534f79328810ca8c330539ae9ffa086c359ddb7da11026557b04eef202201d95be0dd1da0aa01720953e52d5dabffd19a998d1490c13a21b8e52e4ead2e041483045022100e41cbd6a501ba8fe6f65554420e23e950d35af0da9b052da54a087463b0717ca02206c695c8d1f74f9535b5d89a2fd1f9326a0ef20e5400137f1e1daeee992b62b594169522103279aea0b253b144d1b2bb8532280001a996dcddd04f86e5e13df1355032cbc1321032c6465c956c0879663fa8be974c912d229c179a5cdedeb29611a1bec1f951eb22103494480a4b72101cbd2eadac8e18c7a3a7589a7f576bf46b8971c38c51e5eceeb53ae00000000" ) + + def test_send_mixed_inputs(self, client): + # First is non-segwit, second is segwit. + + inp1 = proto.TxInputType( + address_n=parse_path("44'/156'/0'/0/0"), + amount=31000000, + prev_hash=bytes.fromhex( + "e5040e1bc1ae7667ffb9e5248e90b2fb93cd9150234151ce90e14ab2f5933bcd" + ), + prev_index=0, + ) + + inp2 = proto.TxInputType( + address_n=parse_path("84'/156'/0'/1/0"), + amount=7289000, + prev_hash=bytes.fromhex( + "65b811d3eca0fe6915d9f2d77c86c5a7f19bf66b1b1253c2c51cb4ae5f0c017b" + ), + prev_index=1, + script_type=proto.InputScriptType.SPENDWITNESS, + ) + out1 = proto.TxOutputType( + address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", + amount=31000000 + 7289000 - 1000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + with client: + _, serialized_tx = btc.sign_tx( + client, "Bgold", [inp1, inp2], [out1], prev_txes=TX_API + ) + + assert ( + serialized_tx.hex() + == "01000000000102cd3b93f5b24ae190ce5141235091cd93fbb2908e24e5b9ff6776aec11b0e04e5000000006a473044022061e94392fa4c0a4bf510bf713c23a37c6c5f6f4dbe5c116e86cff23a93c578e9022026661d2ffb1102d07b7c1631270152441fa171d91108b75a7b9a2cc36ca7db6c4121023bd0ec4022d12d0106c5b7308a25572953ba1951f576f691354a7b147ee0cc1fffffffff7b010c5faeb41cc5c253121b6bf69bf1a7c5867cd7f2d91569fea0ecd311b8650100000000ffffffff01803a4802000000001976a914ea5f904d195079a350b534db4446433b3cec222e88ac0002483045022100e39d9bff8350b9ba20cb2ed88e82d7568a83184616acdc16bd1adb4005c5a471022066ff36084e896a69a91a0fad01721f20f2bb42b41e20be35e72fc3729ac7ace74121030b75ccac9add5f82a4c61fe34e791a2f2eda61b544bce4f6fa3d403bb0de748400000000" + ) diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 7bf2261b6..c6065433a 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -280,6 +280,7 @@ "test_msg_signtx_bgold.py-test_send_bitcoin_gold_change": "de2fe54950938864480fd40866db18a73565fdc9de2f7867ab7e0a8ae7f65ce4", "test_msg_signtx_bgold.py-test_send_bitcoin_gold_nochange": "65a3fa31182748333a44e8cedcee653d7532428126d6df1ef3514424adcb10f1", "test_msg_signtx_bgold.py-test_send_btg_multisig_change": "4ed4962fa425498e4d7ae158d1233b01319dfa071edcb2d71f2f4d4e57c4b4fd", +"test_msg_signtx_bgold.py-test_send_mixed_inputs": "ed137c7c45d1bd9f2e73b4ca6ea0eff63b601e8ad73d79a90aefd2046e2d51b2", "test_msg_signtx_bgold.py-test_send_multisig_1": "d049b3b25042c732ce26a253e7de49581adc83003713860924b8d951cb46de0c", "test_msg_signtx_bgold.py-test_send_p2sh": "ddd48151ce1d74ade0b9858cbcdba316581991ec92c2ef54b5893e3aae75f995", "test_msg_signtx_bgold.py-test_send_p2sh_witness_change": "02e44d4c1072eb774486210f885b1bee53acfb3b7fd787207b9f955853fef055", From d61181d7e86bb1a68656cd4ad552f8df25a1fef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Vejpustek?= Date: Mon, 9 Mar 2020 18:07:12 +0100 Subject: [PATCH 09/45] core: fix transaction header for mixed segwit inputs --- core/src/apps/wallet/sign_tx/signing.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 1c916105f..e46d5e2be 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -152,7 +152,8 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): if not utils.BITCOIN_ONLY and coin.decred: w_txi = writers.empty_bytearray(8 if i == 0 else 0 + 9 + len(txi.prev_hash)) if i == 0: # serializing first input => prepend headers - writers.write_bytes(w_txi, get_tx_header(coin, tx)) + # decred doesn't support segwit + writers.write_bytes(w_txi, get_tx_header(coin, tx, False)) writers.write_tx_input_decred(w_txi, txi) tx_ser.serialized_tx = w_txi tx_req.serialized = tx_ser @@ -236,6 +237,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): # - sign inputs # - check that nothing changed + any_segwit = True in segwit.values() coin = coins.by_name(tx.coin_name) tx_ser = TxRequestSerializedType() @@ -320,7 +322,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 5 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes(w_txi_sign, get_tx_header(coin, tx)) + writers.write_bytes(w_txi_sign, get_tx_header(coin, tx, any_segwit)) writers.write_tx_input(w_txi_sign, txi_sign) tx_ser.serialized_tx = w_txi_sign @@ -488,7 +490,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 5 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes(w_txi_sign, get_tx_header(coin, tx)) + writers.write_bytes(w_txi_sign, get_tx_header(coin, tx, any_segwit)) writers.write_tx_input(w_txi_sign, txi_sign) tx_ser.serialized_tx = w_txi_sign @@ -516,8 +518,6 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): tx_req.serialized = tx_ser - any_segwit = True in segwit.values() - for i in range(tx.inputs_count): progress.advance() if segwit[i]: @@ -674,7 +674,7 @@ def get_hash_type(coin: coininfo.CoinInfo) -> int: return hashtype -def get_tx_header(coin: coininfo.CoinInfo, tx: SignTx, segwit: bool = False): +def get_tx_header(coin: coininfo.CoinInfo, tx: SignTx, segwit: bool): w_txi = bytearray() if not utils.BITCOIN_ONLY and tx.overwintered: writers.write_uint32( From 6274cfdf8b0497620ec5b27d6e283a98d24b4fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Vejpustek?= Date: Tue, 10 Mar 2020 15:20:18 +0100 Subject: [PATCH 10/45] core: remove unreachable zcash code --- core/src/apps/wallet/sign_tx/signing.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index e46d5e2be..dbb5059bb 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -402,15 +402,9 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): # same as h_first, checked before signing the digest h_second = utils.HashWriter(sha256()) - if not utils.BITCOIN_ONLY and tx.overwintered: - writers.write_uint32( - h_sign, tx.version | zcash.OVERWINTERED - ) # nVersion | fOverwintered - writers.write_uint32(h_sign, tx.version_group_id) # nVersionGroupId - else: - writers.write_uint32(h_sign, tx.version) # nVersion - if tx.timestamp: - writers.write_uint32(h_sign, tx.timestamp) + writers.write_uint32(h_sign, tx.version) # nVersion + if tx.timestamp: + writers.write_uint32(h_sign, tx.timestamp) writers.write_varint(h_sign, tx.inputs_count) @@ -458,10 +452,6 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): writers.write_tx_output(h_sign, txo_bin) writers.write_uint32(h_sign, tx.lock_time) - if not utils.BITCOIN_ONLY and tx.overwintered: - writers.write_uint32(h_sign, tx.expiry) # expiryHeight - writers.write_varint(h_sign, 0) # nJoinSplit - writers.write_uint32(h_sign, get_hash_type(coin)) # check the control digests From 163220e4b76b8a5366f57d919ef37f3faf70ed66 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Mon, 16 Mar 2020 16:36:36 +0000 Subject: [PATCH 11/45] core/wallet: properly check decred input --- core/src/apps/wallet/sign_tx/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index 658c7ce38..da5b31438 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -203,7 +203,7 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: raise SigningError( FailureType.DataError, "Input's address_n provided but not expected.", ) - if txi.decred_script_version or txi.decred_script_version and not coin.decred: + if (txi.decred_script_version or txi.decred_script_version) and not coin.decred: raise SigningError( FailureType.DataError, "Decred details provided but Decred coin not specified.", From 350a67d9a7ac26a7600ea3efb4f5b2146e2e3517 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 6 Mar 2020 16:31:22 +0100 Subject: [PATCH 12/45] tests: test multisig input replacement attack --- tests/device_tests/test_multisig.py | 112 ++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/tests/device_tests/test_multisig.py b/tests/device_tests/test_multisig.py index daab63254..af458e0c7 100644 --- a/tests/device_tests/test_multisig.py +++ b/tests/device_tests/test_multisig.py @@ -301,3 +301,115 @@ class TestMultisig: assert exc.value.args[0] == proto.FailureType.DataError assert exc.value.args[1].endswith("Pubkey not found in multisig script") + + def test_attack_change_input(self, client): + """ + In this attack scenario we replace the first input sent to the device + with `input_fake`, which differs from `input_real` only in a multisig + definition. If this input is later replaced with `input_real` error + must occur. + """ + address_n = parse_path("48'/1'/0'/0/0") + attacker_multisig_public_key = bytes.fromhex( + "03653a148b68584acb97947344a7d4fd6a6f8b8485cad12987ff8edac874268088" + ) + + input_real = proto.TxInputType( + address_n=address_n, + prev_hash=bytes.fromhex( + "fbbff7f3c85f8067453d7c062bd5efb8ad839953376ae5eceaf92774102c6e39" + ), + prev_index=1, + script_type=proto.InputScriptType.SPENDP2SHWITNESS, + amount=1000000, + ) + + multisig = proto.MultisigRedeemScriptType( + m=1, + nodes=[ + btc.get_public_node(client, address_n).node, + proto.HDNodeType( + depth=0, + fingerprint=0, + child_num=0, + chain_code=bytes(32), + public_key=attacker_multisig_public_key, + ), + ], + address_n=[], + ) + + input_fake = proto.TxInputType( + address_n=address_n, + prev_hash=input_real.prev_hash, + prev_index=input_real.prev_index, + script_type=input_real.script_type, + multisig=multisig, + amount=input_real.amount, + ) + + output_payee = proto.TxOutputType( + address="n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi", + amount=1000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + output_change = proto.TxOutputType( + address_n=address_n, + amount=input_real.amount - output_payee.amount - 1000, + script_type=proto.OutputScriptType.PAYTOP2SHWITNESS, + multisig=multisig, + ) + + run_attack = True + + def attack_processor(msg): + nonlocal run_attack + # replace the first input_real with input_fake + if run_attack and msg.tx.inputs and msg.tx.inputs[0] == input_real: + msg.tx.inputs[0] = input_fake + run_attack = False + return msg + + client.set_filter(proto.TxAck, attack_processor) + with client: + client.set_expected_responses( + [ + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.TxRequest( + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.TxRequest( + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.Failure(code=proto.FailureType.ProcessError), + ] + ) + + with pytest.raises(CallException) as exc: + btc.sign_tx( + client, "Testnet", [input_real], [output_payee, output_change] + ) + # must not produce this tx: + # 01000000000101396e2c107427f9eaece56a37539983adb8efd52b067c3d4567805fc8f3f7bffb01000000171600147a876a07b366f79000b441335f2907f777a0280bffffffff02e8030000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac703a0f000000000017a914a1261837f1b40e84346b1504ffe294e402965f2687024830450221009ff835e861be4e36ca1f2b6224aee2f253dfb9f456b13e4b1724bb4aaff4c9c802205e10679c2ead85743119f468cba5661f68b7da84dd2d477a7215fef98516f1f9012102af12ddd0d55e4fa2fcd084148eaf5b0b641320d0431d63d1e9a90f3cbd0d540700000000 + + if client.features.model == "1": + assert exc.value.args[0] == proto.FailureType.ProcessError + assert exc.value.args[1].endswith("Failed to compile input") + else: + # TODO + assert exc.value.args[0] == proto.FailureType.DataError + assert exc.value.args[1].endswith( + "OP_RETURN output with non-zero amount" + ) From c98592050b79c8d0d3ef6705a50e97f6292c3818 Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Mon, 9 Mar 2020 20:05:34 +0100 Subject: [PATCH 13/45] tests: Fix multisig input replacement attack to check correct behavior during the signing phase. --- tests/device_tests/test_multisig.py | 43 +++++++++++++++++++---------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/tests/device_tests/test_multisig.py b/tests/device_tests/test_multisig.py index af458e0c7..8943def02 100644 --- a/tests/device_tests/test_multisig.py +++ b/tests/device_tests/test_multisig.py @@ -304,10 +304,10 @@ class TestMultisig: def test_attack_change_input(self, client): """ - In this attack scenario we replace the first input sent to the device - with `input_fake`, which differs from `input_real` only in a multisig - definition. If this input is later replaced with `input_real` error - must occur. + In Phases 1 and 2 the attacker replaces a non-multisig input + `input_real` with a multisig input `input_fake`, which allows the + attacker to provide a 1-of-2 multisig change address. When `input_real` + is provided in the signing phase, an error must occur. """ address_n = parse_path("48'/1'/0'/0/0") attacker_multisig_public_key = bytes.fromhex( @@ -324,7 +324,7 @@ class TestMultisig: amount=1000000, ) - multisig = proto.MultisigRedeemScriptType( + multisig_fake = proto.MultisigRedeemScriptType( m=1, nodes=[ btc.get_public_node(client, address_n).node, @@ -344,7 +344,7 @@ class TestMultisig: prev_hash=input_real.prev_hash, prev_index=input_real.prev_index, script_type=input_real.script_type, - multisig=multisig, + multisig=multisig_fake, amount=input_real.amount, ) @@ -358,17 +358,17 @@ class TestMultisig: address_n=address_n, amount=input_real.amount - output_payee.amount - 1000, script_type=proto.OutputScriptType.PAYTOP2SHWITNESS, - multisig=multisig, + multisig=multisig_fake, ) - run_attack = True + attack_count = 2 def attack_processor(msg): - nonlocal run_attack + nonlocal attack_count # replace the first input_real with input_fake - if run_attack and msg.tx.inputs and msg.tx.inputs[0] == input_real: + if attack_count > 0 and msg.tx.inputs and msg.tx.inputs[0] == input_real: msg.tx.inputs[0] = input_fake - run_attack = False + attack_count -= 1 return msg client.set_filter(proto.TxAck, attack_processor) @@ -393,6 +393,21 @@ class TestMultisig: request_type=proto.RequestType.TXINPUT, details=proto.TxRequestDetailsType(request_index=0), ), + proto.TxRequest( + # serialized_tx: 01000000000101396e2c107427f9eaece56a37539983adb8efd52b067c3d4567805fc8f3f7bffb01000000232200200b5eada0e3bd4e52b831d6a14553e6f73a4387f1d3a19466af2850dedd74374effffffff + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), + proto.TxRequest( + # serialized_tx: 02e8030000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac + request_type=proto.RequestType.TXOUTPUT, + details=proto.TxRequestDetailsType(request_index=1), + ), + proto.TxRequest( + # serialized_tx: 703a0f000000000017a914a1261837f1b40e84346b1504ffe294e402965f2687 + request_type=proto.RequestType.TXINPUT, + details=proto.TxRequestDetailsType(request_index=0), + ), proto.Failure(code=proto.FailureType.ProcessError), ] ) @@ -404,12 +419,10 @@ class TestMultisig: # must not produce this tx: # 01000000000101396e2c107427f9eaece56a37539983adb8efd52b067c3d4567805fc8f3f7bffb01000000171600147a876a07b366f79000b441335f2907f777a0280bffffffff02e8030000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac703a0f000000000017a914a1261837f1b40e84346b1504ffe294e402965f2687024830450221009ff835e861be4e36ca1f2b6224aee2f253dfb9f456b13e4b1724bb4aaff4c9c802205e10679c2ead85743119f468cba5661f68b7da84dd2d477a7215fef98516f1f9012102af12ddd0d55e4fa2fcd084148eaf5b0b641320d0431d63d1e9a90f3cbd0d540700000000 + assert exc.value.args[0] == proto.FailureType.ProcessError if client.features.model == "1": - assert exc.value.args[0] == proto.FailureType.ProcessError assert exc.value.args[1].endswith("Failed to compile input") else: - # TODO - assert exc.value.args[0] == proto.FailureType.DataError assert exc.value.args[1].endswith( - "OP_RETURN output with non-zero amount" + "Transaction has changed during signing" ) From a34637c0f27f8570436c16da3a0793510a0ba895 Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Mon, 9 Mar 2020 20:06:22 +0100 Subject: [PATCH 14/45] core/sign_tx: Check multisig fingerprint before signing inputs. --- core/src/apps/wallet/sign_tx/signing.py | 45 +++++++++++++++++++------ 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index dbb5059bb..78bc3b2b5 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -81,7 +81,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): else: hash143 = segwit_bip143.Bip143() # BIP-0143 transaction hashing - multifp = multisig.MultisigFingerprint() # control checksum of multisig inputs + multisig_fp = multisig.MultisigFingerprint() # control checksum of multisig inputs weight = tx_weight.TxWeightCalculator(tx.inputs_count, tx.outputs_count) total_in = 0 # sum of input amounts @@ -110,9 +110,9 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): await helpers.confirm_foreign_address(txi.address_n) if txi.multisig: - multifp.add(txi.multisig) + multisig_fp.add(txi.multisig) else: - multifp.mismatch = True + multisig_fp.mismatch = True if txi.script_type in ( InputScriptType.SPENDWITNESS, @@ -168,7 +168,9 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): txo_bin.script_pubkey = output_derive_script(txo, coin, keychain) weight.add_output(txo_bin.script_pubkey) - if change_out == 0 and output_is_change(txo, wallet_path, segwit_in, multifp): + if change_out == 0 and output_is_change( + txo, wallet_path, segwit_in, multisig_fp + ): # output is change and does not need confirmation change_out = txo.amount elif not await helpers.confirm_output(txo, coin): @@ -219,7 +221,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): if not utils.BITCOIN_ONLY and coin.decred: hash143.add_locktime_expiry(tx) - return h_first, hash143, segwit, total_in, wallet_path + return h_first, hash143, segwit, total_in, wallet_path, multisig_fp async def sign_tx(tx: SignTx, keychain: seed.Keychain): @@ -229,9 +231,14 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): # Phase 1 - h_first, hash143, segwit, authorized_in, wallet_path = await check_tx_fee( - tx, keychain - ) + ( + h_first, + hash143, + segwit, + authorized_in, + wallet_path, + multisig_fp, + ) = await check_tx_fee(tx, keychain) # Phase 2 # - sign inputs @@ -264,6 +271,8 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): FailureType.ProcessError, "Transaction has changed during signing" ) input_check_wallet_path(txi_sign, wallet_path) + # NOTE: No need to check the multisig fingerprint, because we won't be signing + # the script here. Signatures are produced in STAGE_REQUEST_SEGWIT_WITNESS. key_sign = keychain.derive(txi_sign.address_n, coin.curve_name) key_sign_pub = key_sign.public_key() @@ -284,6 +293,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): # STAGE_REQUEST_SEGWIT_INPUT txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) input_check_wallet_path(txi_sign, wallet_path) + input_check_multisig_fingerprint(txi_sign, multisig_fp) is_bip143 = ( txi_sign.script_type == InputScriptType.SPENDADDRESS @@ -332,6 +342,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) input_check_wallet_path(txi_sign, wallet_path) + input_check_multisig_fingerprint(txi_sign, multisig_fp) key_sign = keychain.derive(txi_sign.address_n, coin.curve_name) key_sign_pub = key_sign.public_key() @@ -415,6 +426,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): writers.write_tx_input_check(h_second, txi) if i == i_sign: txi_sign = txi + input_check_multisig_fingerprint(txi_sign, multisig_fp) key_sign = keychain.derive(txi.address_n, coin.curve_name) key_sign_pub = key_sign.public_key() # for the signing process the script_sig is equal @@ -514,6 +526,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): # STAGE_REQUEST_SEGWIT_WITNESS txi = await helpers.request_tx_input(tx_req, i, coin) input_check_wallet_path(txi, wallet_path) + input_check_multisig_fingerprint(txi, multisig_fp) if not input_is_segwit(txi) or txi.amount > authorized_in: raise SigningError( @@ -758,11 +771,11 @@ def output_is_change( o: TxOutputType, wallet_path: list, segwit_in: int, - multifp: multisig.MultisigFingerprint, + multisig_fp: multisig.MultisigFingerprint, ) -> bool: if o.script_type not in helpers.CHANGE_OUTPUT_SCRIPT_TYPES: return False - if o.multisig and not multifp.matches(o.multisig): + if o.multisig and not multisig_fp.matches(o.multisig): return False if output_is_segwit(o) and o.amount > segwit_in: # if the output is segwit, make sure it doesn't spend more than what the @@ -858,6 +871,18 @@ def input_check_wallet_path(txi: TxInputType, wallet_path: list) -> list: ) +def input_check_multisig_fingerprint( + txi: TxInputType, multisig_fp: multisig.MultisigFingerprint +) -> None: + if multisig_fp.mismatch is False: + # All inputs in Phase 1 had matching multisig fingerprints, allowing a multisig change-output. + if not txi.multisig or not multisig_fp.matches(txi.multisig): + # This input no longer has a matching multisig fingerprint. + raise SigningError( + FailureType.ProcessError, "Transaction has changed during signing" + ) + + def ecdsa_sign(node: bip32.HDNode, digest: bytes) -> bytes: sig = secp256k1.sign(node.private_key(), digest) sigder = der.encode_seq((sig[1:33], sig[33:65])) From 1bf08cbb97d19483dd8a48c38847055f33580e44 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Wed, 11 Mar 2020 20:12:30 +0100 Subject: [PATCH 15/45] tests: add ui fixture for test_attack_change_input test --- tests/ui_tests/fixtures.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index c6065433a..7940c3235 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -364,6 +364,7 @@ "test_msg_wipedevice.py-test_wipe_device": "400dde1df31b10a4fcacc95a0f7a27f34c41a5f12ad5b7f253ec7e2ff38f0c41", "test_multisig.py-test_15_of_15": "b606b4e715f736e1e562747289a87624e93782f56ca36e90b4ef9bb4300b8d6d", "test_multisig.py-test_2_of_3": "2be92556edf4ff8eed340d535f379ee6915eae34fef25d669ce865848e7b4705", +"test_multisig.py-test_attack_change_input": "89859fea184df09ce96df5281d405c0e85c87ba7efbafa4b3fdf7d9402c0fc44", "test_multisig.py-test_missing_pubkey": "dfd9bdb063329cbc7fae8984a4ec4e4e1f700732e95429ff6a64ae912bacea8d", "test_multisig_change.py-test_external_external": "0f9bc8153070c4bad85bf7ae9d1d30843752538b4d1f8964bc748015a07f00bc", "test_multisig_change.py-test_external_internal": "f60554e040d8965b8f3efdf9eea1f940b64b5844f12d1ee802abbec8d15ea9bf", From 303c05aba792f898fa03342f7bb7d79b6229acbe Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 9 Mar 2020 17:42:41 +0100 Subject: [PATCH 16/45] core/sign_tx: check if prev_tx has enough outputs to match prev_index --- core/src/apps/wallet/sign_tx/signing.py | 5 +++++ tests/device_tests/test_msg_signtx.py | 29 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 78bc3b2b5..a411cd7a4 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -597,6 +597,11 @@ async def get_prevtx_output_value( # STAGE_REQUEST_2_PREV_META tx = await helpers.request_tx_meta(tx_req, prev_hash) + if tx.outputs_cnt <= prev_index: + raise SigningError( + FailureType.ProcessError, "Not enough outputs in previous transaction." + ) + if not utils.BITCOIN_ONLY and coin.decred: txh = utils.HashWriter(blake256()) else: diff --git a/tests/device_tests/test_msg_signtx.py b/tests/device_tests/test_msg_signtx.py index 0c97caec4..d823f0bb3 100644 --- a/tests/device_tests/test_msg_signtx.py +++ b/tests/device_tests/test_msg_signtx.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages as proto +from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, CallException, btc_hash, parse_path from ..common import MNEMONIC12 @@ -864,3 +865,31 @@ class TestMsgSigntx: ) check_sign_tx(client, "Testnet", [inp1], [out1, out_change]) + + @pytest.mark.skip_ui + def test_not_enough_vouts(self, client): + cache = tx_cache("Bitcoin") + prev_tx = cache[TXHASH_157041] + + # tx has two vouts + assert len(prev_tx.bin_outputs) == 2 + + # vout[0] and vout[1] exist + inp0 = proto.TxInputType(address_n=[0], prev_hash=TXHASH_157041, prev_index=0) + inp1 = proto.TxInputType(address_n=[0], prev_hash=TXHASH_157041, prev_index=1) + # vout[2] does not exist + inp2 = proto.TxInputType(address_n=[0], prev_hash=TXHASH_157041, prev_index=2) + + # try to spend the sum of existing vouts + out1 = proto.TxOutputType( + address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", + amount=220160000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + with pytest.raises(TrezorFailure) as e: + btc.sign_tx(client, "Bitcoin", [inp0, inp1, inp2], [out1], prev_txes=cache) + + assert e.value.failure.message.endswith( + "Not enough outputs in previous transaction." + ) From 136307bcae657f28e4de614460405e48ddc7224a Mon Sep 17 00:00:00 2001 From: matejcik Date: Thu, 12 Mar 2020 13:31:09 +0100 Subject: [PATCH 17/45] core: propagate coin info to all sanitize functions --- core/src/apps/wallet/sign_tx/helpers.py | 12 ++++++------ core/src/apps/wallet/sign_tx/signing.py | 13 ++++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index da5b31438..8ce189521 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -104,14 +104,14 @@ def confirm_nondefault_locktime(lock_time: int): return (yield UiConfirmNonDefaultLocktime(lock_time)) -def request_tx_meta(tx_req: TxRequest, tx_hash: bytes = None): +def request_tx_meta(tx_req: TxRequest, coin: CoinInfo, tx_hash: bytes = None): tx_req.request_type = TXMETA tx_req.details.tx_hash = tx_hash tx_req.details.request_index = None ack = yield tx_req tx_req.serialized = None gc.collect() - return sanitize_tx_meta(ack.tx) + return sanitize_tx_meta(ack.tx, coin) def request_tx_extra_data( @@ -148,7 +148,7 @@ def request_tx_output(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes tx_req.serialized = None gc.collect() if tx_hash is None: - return sanitize_tx_output(ack.tx) + return sanitize_tx_output(ack.tx, coin) else: return sanitize_tx_binoutput(ack.tx, coin) @@ -165,7 +165,7 @@ def request_tx_finish(tx_req: TxRequest): # === -def sanitize_sign_tx(tx: SignTx) -> SignTx: +def sanitize_sign_tx(tx: SignTx, coin: CoinInfo) -> SignTx: tx.version = tx.version if tx.version is not None else 1 tx.lock_time = tx.lock_time if tx.lock_time is not None else 0 tx.inputs_count = tx.inputs_count if tx.inputs_count is not None else 0 @@ -177,7 +177,7 @@ def sanitize_sign_tx(tx: SignTx) -> SignTx: return tx -def sanitize_tx_meta(tx: TransactionType) -> TransactionType: +def sanitize_tx_meta(tx: TransactionType, coin: CoinInfo) -> TransactionType: tx.version = tx.version if tx.version is not None else 1 tx.lock_time = tx.lock_time if tx.lock_time is not None else 0 tx.inputs_cnt = tx.inputs_cnt if tx.inputs_cnt is not None else 0 @@ -216,7 +216,7 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: return txi -def sanitize_tx_output(tx: TransactionType) -> TxOutputType: +def sanitize_tx_output(tx: TransactionType, coin: CoinInfo) -> TxOutputType: txo = tx.outputs[0] if txo.multisig and txo.script_type not in MULTISIG_OUTPUT_SCRIPT_TYPES: raise SigningError( diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index a411cd7a4..71dafe560 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -55,9 +55,7 @@ class SigningError(ValueError): # - check inputs, previous transactions, and outputs # - ask for confirmations # - check fee -async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): - coin = coins.by_name(tx.coin_name) - +async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinInfo): # h_first is used to make sure the inputs and outputs streamed in Phase 1 # are the same as in Phase 2. it is thus not required to fully hash the # tx, as the SignTx info is streamed only once @@ -225,7 +223,9 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain): async def sign_tx(tx: SignTx, keychain: seed.Keychain): - tx = helpers.sanitize_sign_tx(tx) + coin_name = tx.coin_name if tx.coin_name is not None else "Bitcoin" + coin = coins.by_name(coin_name) + tx = helpers.sanitize_sign_tx(tx, coin) progress.init(tx.inputs_count, tx.outputs_count) @@ -238,14 +238,13 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): authorized_in, wallet_path, multisig_fp, - ) = await check_tx_fee(tx, keychain) + ) = await check_tx_fee(tx, keychain, coin) # Phase 2 # - sign inputs # - check that nothing changed any_segwit = True in segwit.values() - coin = coins.by_name(tx.coin_name) tx_ser = TxRequestSerializedType() txo_bin = TxOutputBinType() @@ -595,7 +594,7 @@ async def get_prevtx_output_value( total_out = 0 # sum of output amounts # STAGE_REQUEST_2_PREV_META - tx = await helpers.request_tx_meta(tx_req, prev_hash) + tx = await helpers.request_tx_meta(tx_req, coin, prev_hash) if tx.outputs_cnt <= prev_index: raise SigningError( From 817b9228500bd68caffcf7da592b358a3b8eeabb Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Mon, 9 Mar 2020 21:23:27 +0000 Subject: [PATCH 18/45] all: add extra_data and timestamp fields to coin specification --- common/defs/bitcoin/actinium.json | 2 + common/defs/bitcoin/axe.json | 2 + common/defs/bitcoin/bcash.json | 2 + common/defs/bitcoin/bcash_testnet.json | 2 + common/defs/bitcoin/bellcoin.json | 2 + common/defs/bitcoin/bgold.json | 2 + common/defs/bitcoin/bgold_testnet.json | 2 + common/defs/bitcoin/bitcoin.json | 2 + common/defs/bitcoin/bitcoin_regtest.json | 2 + common/defs/bitcoin/bitcoin_testnet.json | 2 + common/defs/bitcoin/bitcore.json | 2 + common/defs/bitcoin/bitzeny.json | 2 + common/defs/bitcoin/bprivate.json | 2 + common/defs/bitcoin/brhodium.json | 2 + common/defs/bitcoin/capricoin.json | 2 + common/defs/bitcoin/cpuchain.json | 2 + common/defs/bitcoin/crown.json | 2 + common/defs/bitcoin/dash.json | 2 + common/defs/bitcoin/dash_testnet.json | 2 + common/defs/bitcoin/decred.json | 2 + common/defs/bitcoin/decred_testnet.json | 2 + common/defs/bitcoin/digibyte.json | 2 + common/defs/bitcoin/dogecoin.json | 2 + common/defs/bitcoin/elements.json | 2 + common/defs/bitcoin/etp.json | 2 + common/defs/bitcoin/feathercoin.json | 2 + common/defs/bitcoin/florincoin.json | 2 + common/defs/bitcoin/fujicoin.json | 2 + common/defs/bitcoin/gamecredits.json | 2 + common/defs/bitcoin/gincoin.json | 2 + common/defs/bitcoin/groestlcoin.json | 2 + common/defs/bitcoin/groestlcoin_testnet.json | 2 + common/defs/bitcoin/hatch.json | 2 + common/defs/bitcoin/hatch_testnet.json | 2 + common/defs/bitcoin/horizen.json | 2 + common/defs/bitcoin/komodo.json | 2 + common/defs/bitcoin/koto.json | 2 + common/defs/bitcoin/litecoin.json | 2 + common/defs/bitcoin/litecoin_testnet.json | 2 + common/defs/bitcoin/monacoin.json | 2 + common/defs/bitcoin/monetaryunit.json | 2 + common/defs/bitcoin/namecoin.json | 2 + common/defs/bitcoin/nix.json | 2 + common/defs/bitcoin/particl.json | 2 + common/defs/bitcoin/particl_testnet.json | 2 + common/defs/bitcoin/peercoin.json | 2 + common/defs/bitcoin/peercoin_testnet.json | 2 + common/defs/bitcoin/pesetacoin.json | 2 + common/defs/bitcoin/pivx.json | 2 + common/defs/bitcoin/pivx_testnet.json | 2 + common/defs/bitcoin/polis.json | 2 + common/defs/bitcoin/primecoin.json | 2 + common/defs/bitcoin/qtum.json | 2 + common/defs/bitcoin/qtum_testnet.json | 2 + common/defs/bitcoin/ravencoin.json | 2 + common/defs/bitcoin/ritocoin.json | 2 + common/defs/bitcoin/smartcash.json | 2 + common/defs/bitcoin/smartcash_testnet.json | 2 + common/defs/bitcoin/stakenet.json | 2 + common/defs/bitcoin/syscoin.json | 2 + common/defs/bitcoin/terracoin.json | 2 + common/defs/bitcoin/unobtanium.json | 2 + common/defs/bitcoin/vertcoin.json | 2 + common/defs/bitcoin/viacoin.json | 2 + common/defs/bitcoin/vipstarcoin.json | 2 + common/defs/bitcoin/zcash.json | 2 + common/defs/bitcoin/zcash_testnet.json | 2 + common/defs/bitcoin/zcoin.json | 2 + common/defs/bitcoin/zcoin_testnet.json | 2 + common/defs/bitcoin/zcore.json | 2 + common/defs/bitcoin/zelcash.json | 2 + core/src/apps/common/coininfo.py | 144 +++++++++++++++++++ core/src/apps/common/coininfo.py.mako | 6 + legacy/firmware/coin_info.c.mako | 2 + legacy/firmware/coins.h | 2 + python/src/trezorlib/coins.json | 2 +- 76 files changed, 297 insertions(+), 1 deletion(-) diff --git a/common/defs/bitcoin/actinium.json b/common/defs/bitcoin/actinium.json index 605ec4766..3b6cc8e0f 100644 --- a/common/defs/bitcoin/actinium.json +++ b/common/defs/bitcoin/actinium.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/axe.json b/common/defs/bitcoin/axe.json index 5af395765..83cecc96c 100644 --- a/common/defs/bitcoin/axe.json +++ b/common/defs/bitcoin/axe.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bcash.json b/common/defs/bitcoin/bcash.json index 7c4ccccbe..d5d6141b3 100644 --- a/common/defs/bitcoin/bcash.json +++ b/common/defs/bitcoin/bcash.json @@ -47,5 +47,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bcash_testnet.json b/common/defs/bitcoin/bcash_testnet.json index 058b86ba7..d9571513f 100644 --- a/common/defs/bitcoin/bcash_testnet.json +++ b/common/defs/bitcoin/bcash_testnet.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bellcoin.json b/common/defs/bitcoin/bellcoin.json index 8322c33a9..c1cdca252 100644 --- a/common/defs/bitcoin/bellcoin.json +++ b/common/defs/bitcoin/bellcoin.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bgold.json b/common/defs/bitcoin/bgold.json index 3691e317a..62b22fa9a 100644 --- a/common/defs/bitcoin/bgold.json +++ b/common/defs/bitcoin/bgold.json @@ -47,5 +47,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bgold_testnet.json b/common/defs/bitcoin/bgold_testnet.json index d2279826d..b93ecc89c 100644 --- a/common/defs/bitcoin/bgold_testnet.json +++ b/common/defs/bitcoin/bgold_testnet.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bitcoin.json b/common/defs/bitcoin/bitcoin.json index 8d0059d09..faf2ff4a4 100644 --- a/common/defs/bitcoin/bitcoin.json +++ b/common/defs/bitcoin/bitcoin.json @@ -47,5 +47,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bitcoin_regtest.json b/common/defs/bitcoin/bitcoin_regtest.json index 495495e87..824cb2f9d 100644 --- a/common/defs/bitcoin/bitcoin_regtest.json +++ b/common/defs/bitcoin/bitcoin_regtest.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bitcoin_testnet.json b/common/defs/bitcoin/bitcoin_testnet.json index 85a34a446..3dc60c8c5 100644 --- a/common/defs/bitcoin/bitcoin_testnet.json +++ b/common/defs/bitcoin/bitcoin_testnet.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bitcore.json b/common/defs/bitcoin/bitcore.json index adc22c6cb..9a16b6b71 100644 --- a/common/defs/bitcoin/bitcore.json +++ b/common/defs/bitcoin/bitcore.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bitzeny.json b/common/defs/bitcoin/bitzeny.json index 6e3d53b15..ed8e47bcb 100644 --- a/common/defs/bitcoin/bitzeny.json +++ b/common/defs/bitcoin/bitzeny.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/bprivate.json b/common/defs/bitcoin/bprivate.json index 945327841..63d4c8d57 100644 --- a/common/defs/bitcoin/bprivate.json +++ b/common/defs/bitcoin/bprivate.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/brhodium.json b/common/defs/bitcoin/brhodium.json index 9c1869093..f3f2e1692 100644 --- a/common/defs/bitcoin/brhodium.json +++ b/common/defs/bitcoin/brhodium.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/capricoin.json b/common/defs/bitcoin/capricoin.json index b029eff1d..31a1a948c 100644 --- a/common/defs/bitcoin/capricoin.json +++ b/common/defs/bitcoin/capricoin.json @@ -46,5 +46,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": true, "confidential_assets": null } diff --git a/common/defs/bitcoin/cpuchain.json b/common/defs/bitcoin/cpuchain.json index b1b9b351e..a9780b851 100644 --- a/common/defs/bitcoin/cpuchain.json +++ b/common/defs/bitcoin/cpuchain.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/crown.json b/common/defs/bitcoin/crown.json index 0fd4ff9f0..fdfe355ae 100644 --- a/common/defs/bitcoin/crown.json +++ b/common/defs/bitcoin/crown.json @@ -42,5 +42,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/dash.json b/common/defs/bitcoin/dash.json index 510fef860..87e2e186e 100644 --- a/common/defs/bitcoin/dash.json +++ b/common/defs/bitcoin/dash.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": true, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/dash_testnet.json b/common/defs/bitcoin/dash_testnet.json index 4116b0fb2..471dc93dc 100644 --- a/common/defs/bitcoin/dash_testnet.json +++ b/common/defs/bitcoin/dash_testnet.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": true, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/decred.json b/common/defs/bitcoin/decred.json index 5cd9de90a..7c5fe10ff 100644 --- a/common/defs/bitcoin/decred.json +++ b/common/defs/bitcoin/decred.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/decred_testnet.json b/common/defs/bitcoin/decred_testnet.json index a7ae8a910..d889e5726 100644 --- a/common/defs/bitcoin/decred_testnet.json +++ b/common/defs/bitcoin/decred_testnet.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/digibyte.json b/common/defs/bitcoin/digibyte.json index 50553407d..d800c9b18 100644 --- a/common/defs/bitcoin/digibyte.json +++ b/common/defs/bitcoin/digibyte.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/dogecoin.json b/common/defs/bitcoin/dogecoin.json index 7fec4f4c9..f1821a985 100644 --- a/common/defs/bitcoin/dogecoin.json +++ b/common/defs/bitcoin/dogecoin.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/elements.json b/common/defs/bitcoin/elements.json index 9878c680c..a1daefdca 100644 --- a/common/defs/bitcoin/elements.json +++ b/common/defs/bitcoin/elements.json @@ -38,6 +38,8 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": { "address_prefix": 4, "blech32_prefix": "el" diff --git a/common/defs/bitcoin/etp.json b/common/defs/bitcoin/etp.json index 7cdcd2548..1b95d6cf8 100644 --- a/common/defs/bitcoin/etp.json +++ b/common/defs/bitcoin/etp.json @@ -42,5 +42,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/feathercoin.json b/common/defs/bitcoin/feathercoin.json index b809aad93..4938e9a2f 100644 --- a/common/defs/bitcoin/feathercoin.json +++ b/common/defs/bitcoin/feathercoin.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/florincoin.json b/common/defs/bitcoin/florincoin.json index 789fe7340..af160b23f 100644 --- a/common/defs/bitcoin/florincoin.json +++ b/common/defs/bitcoin/florincoin.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/fujicoin.json b/common/defs/bitcoin/fujicoin.json index 25628d892..f51fe3dbc 100644 --- a/common/defs/bitcoin/fujicoin.json +++ b/common/defs/bitcoin/fujicoin.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/gamecredits.json b/common/defs/bitcoin/gamecredits.json index ef9f763e5..7513a6bfc 100644 --- a/common/defs/bitcoin/gamecredits.json +++ b/common/defs/bitcoin/gamecredits.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/gincoin.json b/common/defs/bitcoin/gincoin.json index 55be6b7cf..29f899180 100644 --- a/common/defs/bitcoin/gincoin.json +++ b/common/defs/bitcoin/gincoin.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/groestlcoin.json b/common/defs/bitcoin/groestlcoin.json index 39fc22a03..4768a032c 100644 --- a/common/defs/bitcoin/groestlcoin.json +++ b/common/defs/bitcoin/groestlcoin.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/groestlcoin_testnet.json b/common/defs/bitcoin/groestlcoin_testnet.json index 301272c7a..6fd3c675a 100644 --- a/common/defs/bitcoin/groestlcoin_testnet.json +++ b/common/defs/bitcoin/groestlcoin_testnet.json @@ -42,5 +42,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/hatch.json b/common/defs/bitcoin/hatch.json index 319c487a0..ba8774939 100644 --- a/common/defs/bitcoin/hatch.json +++ b/common/defs/bitcoin/hatch.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/hatch_testnet.json b/common/defs/bitcoin/hatch_testnet.json index 02e6d10f9..06cce20e8 100644 --- a/common/defs/bitcoin/hatch_testnet.json +++ b/common/defs/bitcoin/hatch_testnet.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/horizen.json b/common/defs/bitcoin/horizen.json index 5a1b2f920..a200f0fe4 100644 --- a/common/defs/bitcoin/horizen.json +++ b/common/defs/bitcoin/horizen.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/komodo.json b/common/defs/bitcoin/komodo.json index 5bf974d71..15f6632e6 100644 --- a/common/defs/bitcoin/komodo.json +++ b/common/defs/bitcoin/komodo.json @@ -45,5 +45,7 @@ "3": 1537743641, "4": 1991772603 }, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/koto.json b/common/defs/bitcoin/koto.json index 02adb0ce3..d9eea7c24 100644 --- a/common/defs/bitcoin/koto.json +++ b/common/defs/bitcoin/koto.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/litecoin.json b/common/defs/bitcoin/litecoin.json index 0f33757dd..05ffb4781 100644 --- a/common/defs/bitcoin/litecoin.json +++ b/common/defs/bitcoin/litecoin.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/litecoin_testnet.json b/common/defs/bitcoin/litecoin_testnet.json index b4d68ec2b..0a1347002 100644 --- a/common/defs/bitcoin/litecoin_testnet.json +++ b/common/defs/bitcoin/litecoin_testnet.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/monacoin.json b/common/defs/bitcoin/monacoin.json index f3daf8fb9..bd9ea1428 100644 --- a/common/defs/bitcoin/monacoin.json +++ b/common/defs/bitcoin/monacoin.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/monetaryunit.json b/common/defs/bitcoin/monetaryunit.json index c143d23c0..aa687c97b 100644 --- a/common/defs/bitcoin/monetaryunit.json +++ b/common/defs/bitcoin/monetaryunit.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/namecoin.json b/common/defs/bitcoin/namecoin.json index a2d4146fc..5ec8d577f 100644 --- a/common/defs/bitcoin/namecoin.json +++ b/common/defs/bitcoin/namecoin.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/nix.json b/common/defs/bitcoin/nix.json index 312835b3e..128217c5c 100644 --- a/common/defs/bitcoin/nix.json +++ b/common/defs/bitcoin/nix.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/particl.json b/common/defs/bitcoin/particl.json index 79635ff5f..7c08b4ac5 100644 --- a/common/defs/bitcoin/particl.json +++ b/common/defs/bitcoin/particl.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/particl_testnet.json b/common/defs/bitcoin/particl_testnet.json index 8db048e77..2b2ad1fbd 100644 --- a/common/defs/bitcoin/particl_testnet.json +++ b/common/defs/bitcoin/particl_testnet.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/peercoin.json b/common/defs/bitcoin/peercoin.json index d46e6dffe..f94d2391e 100644 --- a/common/defs/bitcoin/peercoin.json +++ b/common/defs/bitcoin/peercoin.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": true, "confidential_assets": null } diff --git a/common/defs/bitcoin/peercoin_testnet.json b/common/defs/bitcoin/peercoin_testnet.json index ca3a16c30..d0d7ec084 100644 --- a/common/defs/bitcoin/peercoin_testnet.json +++ b/common/defs/bitcoin/peercoin_testnet.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": true, "confidential_assets": null } diff --git a/common/defs/bitcoin/pesetacoin.json b/common/defs/bitcoin/pesetacoin.json index d178bc454..208253da1 100644 --- a/common/defs/bitcoin/pesetacoin.json +++ b/common/defs/bitcoin/pesetacoin.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/pivx.json b/common/defs/bitcoin/pivx.json index 8fa8b25ed..883d544d6 100644 --- a/common/defs/bitcoin/pivx.json +++ b/common/defs/bitcoin/pivx.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/pivx_testnet.json b/common/defs/bitcoin/pivx_testnet.json index 331550bd7..0130542ca 100644 --- a/common/defs/bitcoin/pivx_testnet.json +++ b/common/defs/bitcoin/pivx_testnet.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/polis.json b/common/defs/bitcoin/polis.json index 79a4cb532..edc897e44 100644 --- a/common/defs/bitcoin/polis.json +++ b/common/defs/bitcoin/polis.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/primecoin.json b/common/defs/bitcoin/primecoin.json index e3cc83129..f7bd33ba9 100644 --- a/common/defs/bitcoin/primecoin.json +++ b/common/defs/bitcoin/primecoin.json @@ -38,5 +38,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/qtum.json b/common/defs/bitcoin/qtum.json index 44d972fa0..30e6a6b10 100644 --- a/common/defs/bitcoin/qtum.json +++ b/common/defs/bitcoin/qtum.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/qtum_testnet.json b/common/defs/bitcoin/qtum_testnet.json index ed0313a6d..e4fdc1f07 100644 --- a/common/defs/bitcoin/qtum_testnet.json +++ b/common/defs/bitcoin/qtum_testnet.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/ravencoin.json b/common/defs/bitcoin/ravencoin.json index 755452e4b..e6713d3e6 100644 --- a/common/defs/bitcoin/ravencoin.json +++ b/common/defs/bitcoin/ravencoin.json @@ -42,5 +42,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/ritocoin.json b/common/defs/bitcoin/ritocoin.json index 86cb603cc..8f7adfda5 100644 --- a/common/defs/bitcoin/ritocoin.json +++ b/common/defs/bitcoin/ritocoin.json @@ -42,5 +42,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/smartcash.json b/common/defs/bitcoin/smartcash.json index e0ff4abd5..f6079ae3c 100644 --- a/common/defs/bitcoin/smartcash.json +++ b/common/defs/bitcoin/smartcash.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/smartcash_testnet.json b/common/defs/bitcoin/smartcash_testnet.json index 26b3089dd..77ab5ec4e 100644 --- a/common/defs/bitcoin/smartcash_testnet.json +++ b/common/defs/bitcoin/smartcash_testnet.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/stakenet.json b/common/defs/bitcoin/stakenet.json index 80ee55d0c..a17ab1c24 100644 --- a/common/defs/bitcoin/stakenet.json +++ b/common/defs/bitcoin/stakenet.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/syscoin.json b/common/defs/bitcoin/syscoin.json index a379b6fe3..5d06e8a10 100644 --- a/common/defs/bitcoin/syscoin.json +++ b/common/defs/bitcoin/syscoin.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/terracoin.json b/common/defs/bitcoin/terracoin.json index 17ce4fa8a..09e6548a9 100644 --- a/common/defs/bitcoin/terracoin.json +++ b/common/defs/bitcoin/terracoin.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/unobtanium.json b/common/defs/bitcoin/unobtanium.json index 1a9d267da..13b47ca6e 100644 --- a/common/defs/bitcoin/unobtanium.json +++ b/common/defs/bitcoin/unobtanium.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/vertcoin.json b/common/defs/bitcoin/vertcoin.json index 0781ab11e..8b567a4f2 100644 --- a/common/defs/bitcoin/vertcoin.json +++ b/common/defs/bitcoin/vertcoin.json @@ -44,5 +44,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/viacoin.json b/common/defs/bitcoin/viacoin.json index ebbec62e8..40e0bb48d 100644 --- a/common/defs/bitcoin/viacoin.json +++ b/common/defs/bitcoin/viacoin.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/vipstarcoin.json b/common/defs/bitcoin/vipstarcoin.json index 3e2a179ac..fb01b90ce 100644 --- a/common/defs/bitcoin/vipstarcoin.json +++ b/common/defs/bitcoin/vipstarcoin.json @@ -45,5 +45,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/zcash.json b/common/defs/bitcoin/zcash.json index 33288e36e..17b0fd17a 100644 --- a/common/defs/bitcoin/zcash.json +++ b/common/defs/bitcoin/zcash.json @@ -49,5 +49,7 @@ "3": 1537743641, "4": 733220448 }, + "extra_data": true, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/zcash_testnet.json b/common/defs/bitcoin/zcash_testnet.json index 9a74a0c51..f14937b28 100644 --- a/common/defs/bitcoin/zcash_testnet.json +++ b/common/defs/bitcoin/zcash_testnet.json @@ -45,5 +45,7 @@ "3": 1537743641, "4": 733220448 }, + "extra_data": true, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/zcoin.json b/common/defs/bitcoin/zcoin.json index 904206ada..a18ba3511 100644 --- a/common/defs/bitcoin/zcoin.json +++ b/common/defs/bitcoin/zcoin.json @@ -43,5 +43,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/zcoin_testnet.json b/common/defs/bitcoin/zcoin_testnet.json index 9f3a2f8a7..5050df520 100644 --- a/common/defs/bitcoin/zcoin_testnet.json +++ b/common/defs/bitcoin/zcoin_testnet.json @@ -41,5 +41,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/zcore.json b/common/defs/bitcoin/zcore.json index 484adec59..bbfc1aa74 100644 --- a/common/defs/bitcoin/zcore.json +++ b/common/defs/bitcoin/zcore.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/common/defs/bitcoin/zelcash.json b/common/defs/bitcoin/zelcash.json index ecbd25a09..2efb0c7b6 100644 --- a/common/defs/bitcoin/zelcash.json +++ b/common/defs/bitcoin/zelcash.json @@ -40,5 +40,7 @@ "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, + "extra_data": false, + "timestamp": false, "confidential_assets": null } diff --git a/core/src/apps/common/coininfo.py b/core/src/apps/common/coininfo.py index 06557a2f9..1993b762b 100644 --- a/core/src/apps/common/coininfo.py +++ b/core/src/apps/common/coininfo.py @@ -30,6 +30,8 @@ class CoinInfo: decred: bool, negative_fee: bool, curve_name: str, + extra_data: bool, + timestamp: bool, confidential_assets: dict, ): self.coin_name = coin_name @@ -52,6 +54,8 @@ class CoinInfo: self.decred = decred self.negative_fee = negative_fee self.curve_name = curve_name + self.extra_data = extra_data + self.timestamp = timestamp self.confidential_assets = confidential_assets if curve_name == "secp256k1-groestl": self.b58_hash = groestl512d_32 @@ -102,6 +106,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Regtest": @@ -126,6 +132,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Testnet": @@ -150,6 +158,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) if not utils.BITCOIN_ONLY: @@ -177,6 +187,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Axe": @@ -201,6 +213,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bellcoin": @@ -225,6 +239,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "BitZeny": @@ -249,6 +265,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bcash": @@ -273,6 +291,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bcash Testnet": @@ -297,6 +317,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bgold": @@ -321,6 +343,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bgold Testnet": @@ -345,6 +369,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bprivate": @@ -369,6 +395,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Brhodium": @@ -393,6 +421,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Bitcore": @@ -417,6 +447,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "CPUchain": @@ -441,6 +473,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Capricoin": @@ -465,6 +499,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=True, confidential_assets=None, ) elif name == "Crown": @@ -489,6 +525,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Dash": @@ -513,6 +551,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=True, + timestamp=False, confidential_assets=None, ) elif name == "Dash Testnet": @@ -537,6 +577,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=True, + timestamp=False, confidential_assets=None, ) elif name == "Decred": @@ -561,6 +603,8 @@ def by_name(name: str) -> CoinInfo: decred=True, negative_fee=False, curve_name='secp256k1-decred', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Decred Testnet": @@ -585,6 +629,8 @@ def by_name(name: str) -> CoinInfo: decred=True, negative_fee=False, curve_name='secp256k1-decred', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "DigiByte": @@ -609,6 +655,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Dogecoin": @@ -633,6 +681,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Elements": @@ -657,6 +707,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets={'address_prefix': 4, 'blech32_prefix': 'el'}, ) elif name == "Feathercoin": @@ -681,6 +733,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Florincoin": @@ -705,6 +759,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Fujicoin": @@ -729,6 +785,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Gincoin": @@ -753,6 +811,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "GameCredits": @@ -777,6 +837,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Groestlcoin": @@ -801,6 +863,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1-groestl', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Groestlcoin Testnet": @@ -825,6 +889,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1-groestl', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Hatch": @@ -849,6 +915,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Hatch Testnet": @@ -873,6 +941,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Horizen": @@ -897,6 +967,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Komodo": @@ -921,6 +993,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=True, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Koto": @@ -945,6 +1019,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Litecoin": @@ -969,6 +1045,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Litecoin Testnet": @@ -993,6 +1071,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "MetaverseETP": @@ -1017,6 +1097,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Monacoin": @@ -1041,6 +1123,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "MonetaryUnit": @@ -1065,6 +1149,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "NIX": @@ -1089,6 +1175,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Namecoin": @@ -1113,6 +1201,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "PIVX": @@ -1137,6 +1227,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "PIVX Testnet": @@ -1161,6 +1253,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Particl": @@ -1185,6 +1279,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Particl Testnet": @@ -1209,6 +1305,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Peercoin": @@ -1233,6 +1331,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=True, confidential_assets=None, ) elif name == "Peercoin Testnet": @@ -1257,6 +1357,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=True, confidential_assets=None, ) elif name == "Pesetacoin": @@ -1281,6 +1383,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Polis": @@ -1305,6 +1409,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Primecoin": @@ -1329,6 +1435,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Qtum": @@ -1353,6 +1461,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Qtum Testnet": @@ -1377,6 +1487,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Ravencoin": @@ -1401,6 +1513,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Ritocoin": @@ -1425,6 +1539,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "SmartCash": @@ -1449,6 +1565,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1-smart', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "SmartCash Testnet": @@ -1473,6 +1591,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1-smart', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Stakenet": @@ -1497,6 +1617,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Syscoin": @@ -1521,6 +1643,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Unobtanium": @@ -1545,6 +1669,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "VIPSTARCOIN": @@ -1569,6 +1695,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Vertcoin": @@ -1593,6 +1721,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Viacoin": @@ -1617,6 +1747,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "ZCore": @@ -1641,6 +1773,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Zcash": @@ -1665,6 +1799,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=True, + timestamp=False, confidential_assets=None, ) elif name == "Zcash Testnet": @@ -1689,6 +1825,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=True, + timestamp=False, confidential_assets=None, ) elif name == "Zcoin": @@ -1713,6 +1851,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "Zcoin Testnet": @@ -1737,6 +1877,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) elif name == "ZelCash": @@ -1761,6 +1903,8 @@ def by_name(name: str) -> CoinInfo: decred=False, negative_fee=False, curve_name='secp256k1', + extra_data=False, + timestamp=False, confidential_assets=None, ) raise ValueError('Unknown coin name "%s"' % name) diff --git a/core/src/apps/common/coininfo.py.mako b/core/src/apps/common/coininfo.py.mako index 14f8784a4..7535e0fe7 100644 --- a/core/src/apps/common/coininfo.py.mako +++ b/core/src/apps/common/coininfo.py.mako @@ -30,6 +30,8 @@ class CoinInfo: decred: bool, negative_fee: bool, curve_name: str, + extra_data: bool, + timestamp: bool, confidential_assets: dict, ): self.coin_name = coin_name @@ -52,6 +54,8 @@ class CoinInfo: self.decred = decred self.negative_fee = negative_fee self.curve_name = curve_name + self.extra_data = extra_data + self.timestamp = timestamp self.confidential_assets = confidential_assets if curve_name == "secp256k1-groestl": self.b58_hash = groestl512d_32 @@ -110,6 +114,8 @@ ATTRIBUTES = ( ("decred", bool), ("negative_fee", bool), ("curve_name", lambda r: repr(r.replace("_", "-"))), + ("extra_data", bool), + ("timestamp", bool), ("confidential_assets", optional_dict), ) diff --git a/legacy/firmware/coin_info.c.mako b/legacy/firmware/coin_info.c.mako index 56e8771b6..3c30ba067 100644 --- a/legacy/firmware/coin_info.c.mako +++ b/legacy/firmware/coin_info.c.mako @@ -46,6 +46,8 @@ const CoinInfo coins[COINS_COUNT] = { .negative_fee = ${c_bool(c.negative_fee)}, .curve_name = ${c.curve_name.upper()}_NAME, .curve = &${c.curve_name}_info, + .extra_data = ${c_bool(c.extra_data)}, + .timestamp = ${c_bool(c.timestamp)}, }, % endfor }; diff --git a/legacy/firmware/coins.h b/legacy/firmware/coins.h index 1b15dc15a..bc84b3c6a 100644 --- a/legacy/firmware/coins.h +++ b/legacy/firmware/coins.h @@ -49,6 +49,8 @@ typedef struct _CoinInfo { bool negative_fee; const char *curve_name; const curve_info *curve; + bool extra_data; + bool timestamp; } CoinInfo; #include "coin_info.h" diff --git a/python/src/trezorlib/coins.json b/python/src/trezorlib/coins.json index 7a73afa50..c9f99bb64 100644 --- a/python/src/trezorlib/coins.json +++ b/python/src/trezorlib/coins.json @@ -1 +1 @@ -[{"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": "bc", "bip115": false, "bitcore": [], "blockbook": ["https://btc1.trezor.io", "https://btc2.trezor.io", "https://btc3.trezor.io", "https://btc4.trezor.io", "https://btc5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin", "coin_name": "Bitcoin", "coin_shortcut": "BTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin", "negative_fee": false, "segwit": true, "shortcut": "BTC", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 0, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "bcrt", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Regtest", "coin_name": "Regtest", "coin_shortcut": "REGTEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", "key": "bitcoin:REGTEST", "maintainer": "Thomas Kerin ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Regtest", "negative_fee": false, "segwit": true, "shortcut": "REGTEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tb", "bip115": false, "bitcore": [], "blockbook": ["https://tbtc1.trezor.io", "https://tbtc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Testnet", "coin_name": "Testnet", "coin_shortcut": "TEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TEST", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Testnet", "negative_fee": false, "segwit": true, "shortcut": "TEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 53, "address_type_p2sh": 55, "bech32_prefix": "acm", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Actinium", "coin_name": "Actinium", "coin_shortcut": "ACM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/Actinium-project/Actinium", "hash_genesis_block": "28d77872e23714562f49a1be792c276623c1bbe3fdcf21b6035cfde78b00b824", "key": "bitcoin:ACM", "maintainer": "Harris Brakmic ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Actinium", "negative_fee": false, "segwit": true, "shortcut": "ACM", "signed_message_header": "Actinium Signed Message:\n", "slip44": 228, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "uri_prefix": "actinium", "website": "https://actinium.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 55, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Axe", "coin_name": "Axe", "coin_shortcut": "AXE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/axerunners/axe", "hash_genesis_block": "00000c33631ca6f2f61368991ce2dc03306b5bb50bf7cede5cfbba6db38e52e6", "key": "bitcoin:AXE", "maintainer": "Kirill Orlov ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Axe", "negative_fee": false, "segwit": false, "shortcut": "AXE", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 4242, "support": {"connect": true, "trezor1": "1.7.3", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "axe", "website": "https://axerunners.com", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 85, "bech32_prefix": "bm", "bip115": false, "bitcore": [], "blockbook": ["https://bellcoin-blockbook.ilmango.work", "https://bell.blockbook.ovh"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Bellcoin", "coin_name": "Bellcoin", "coin_shortcut": "BELL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/bellcoin-org/bellcoin", "hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603", "key": "bitcoin:BELL", "maintainer": "ilmango-doge ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bellcoin", "negative_fee": false, "segwit": true, "shortcut": "BELL", "signed_message_header": "Bellcoin Signed Message:\n", "slip44": 25252, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "bellcoin", "website": "https://bellcoin.web4u.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 81, "address_type_p2sh": 5, "bech32_prefix": "bz", "bip115": false, "bitcore": ["https://insight.bitzeny.jp", "https://zeny.insight.monaco-ex.org"], "blockbook": ["https://zny.blockbook.ovh"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "BitZeny", "coin_name": "BitZeny", "coin_shortcut": "ZNY", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "hash_genesis_block": "000009f7e55e9e3b4781e22bd87a7cfa4acada9e4340d43ca738bf4e9fb8f5ce", "key": "bitcoin:ZNY", "maintainer": "y-chan ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "BitZeny", "negative_fee": false, "segwit": true, "shortcut": "ZNY", "signed_message_header": "BitZeny Signed Message:\n", "slip44": 123, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "bitzeny", "website": "https://bitzeny.tech", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://bch1.trezor.io", "https://bch2.trezor.io", "https://bch3.trezor.io", "https://bch4.trezor.io", "https://bch5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": "bitcoincash", "coin_label": "Bitcoin Cash", "coin_name": "Bcash", "coin_shortcut": "BCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash", "negative_fee": false, "segwit": false, "shortcut": "BCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 145, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": "bchtest", "coin_label": "Bitcoin Cash Testnet", "coin_name": "Bcash Testnet", "coin_shortcut": "TBCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TBCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TBCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 23, "bech32_prefix": "btg", "bip115": false, "bitcore": [], "blockbook": ["https://btg1.trezor.io", "https://btg2.trezor.io", "https://btg3.trezor.io", "https://btg4.trezor.io", "https://btg5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold", "coin_name": "Bgold", "coin_shortcut": "BTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTG", "maintainer": "Saleem Rashid ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold", "negative_fee": false, "segwit": true, "shortcut": "BTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tbtg", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold Testnet", "coin_name": "Bgold Testnet", "coin_shortcut": "TBTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "00000000e0781ebe24b91eedc293adfea2f557b53ec379e78959de3853e6f9f6", "key": "bitcoin:TBTG", "maintainer": "The Bitcoin Gold Developers ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold Testnet", "negative_fee": false, "segwit": true, "shortcut": "TBTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 4901, "address_type_p2sh": 5039, "bech32_prefix": null, "bip115": false, "bitcore": ["https://explorer.btcprivate.org"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcoin Private", "coin_name": "Bprivate", "coin_shortcut": "BTCP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": 42, "github": "https://github.com/BTCPrivate/BitcoinPrivate", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:BTCP", "maintainer": "Chris Sulmone ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Bitcoin Private", "negative_fee": false, "segwit": false, "shortcut": "BTCP", "signed_message_header": "BitcoinPrivate Signed Message:\n", "slip44": 183, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "bitcoinprivate", "website": "https://btcprivate.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 61, "address_type_p2sh": 123, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook1.bitcoinrh.org", "https://blockbook2.bitcoinrh.org"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Rhodium", "coin_name": "Brhodium", "coin_shortcut": "XRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "hash_genesis_block": "baff5bfd9dc43fb672d003ec20fd21428f9282ca46bfa1730d73e1f2c75f5fdd", "key": "bitcoin:XRC", "maintainer": "baff5b ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Rhodium", "negative_fee": false, "segwit": false, "shortcut": "XRC", "signed_message_header": "BitCoin Rhodium Signed Message:\n", "slip44": 10291, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "bitcoin-rhodium", "website": "https://www.bitcoinrh.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3, "address_type_p2sh": 125, "bech32_prefix": "btx", "bip115": false, "bitcore": ["https://insight.bitcore.cc"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcore", "coin_name": "Bitcore", "coin_shortcut": "BTX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/LIMXTEC/BitCore", "hash_genesis_block": "604148281e5c4b7f2487e5d03cd60d8e6f69411d613f6448034508cea52e9574", "key": "bitcoin:BTX", "maintainer": "limxdev ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcore", "negative_fee": false, "segwit": true, "shortcut": "BTX", "signed_message_header": "BitCore Signed Message:\n", "slip44": 160, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "bitcore", "website": "https://bitcore.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 30, "bech32_prefix": "cpu", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.cpuchain.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "CPUchain", "coin_name": "CPUchain", "coin_shortcut": "CPU", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/cpuchain/cpuchain", "hash_genesis_block": "000024d8766043ea0e1c9ad42e7ea4b5fdb459887bd80b8f9756f3d87e128f12", "key": "bitcoin:CPU", "maintainer": "Min Khang Aung ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "CPUchain", "negative_fee": false, "segwit": true, "shortcut": "CPU", "signed_message_header": "CPUchain Signed Message:\n", "slip44": 363, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "uri_prefix": "cpuchain", "website": "https://cpuchain.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 35, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.capricoin.org", "https://blockbook2.capricoin.org", "https://blockbook3.capricoin.org", "https://blockbook4.capricoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Capricoin", "coin_name": "Capricoin", "coin_shortcut": "CPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7, "High": 20, "Low": 1, "Normal": 14}, "duplicate": true, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/Capricoinofficial/Capricoin", "hash_genesis_block": "00000d23fa0fc52c90893adb1181c9ddffb6c797a3e41864b9a23aa2f2981fe3", "key": "bitcoin:CPC", "maintainer": "Jozef Knaperek ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Capricoin", "negative_fee": false, "segwit": false, "shortcut": "CPC", "signed_message_header": "Capricoin Signed Message:\n", "slip44": 289, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.10", "webwallet": false}, "uri_prefix": "capricoin", "website": "https://capricoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 95495, "address_type_p2sh": 95473, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight-01.crownplatform.com", "https://insight-02.crownplatform.com", "https://insight-03.crownplatform.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Crown", "coin_name": "Crown", "coin_shortcut": "CRW", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/Crowndev/crowncoin", "hash_genesis_block": "0000000085370d5e122f64f4ab19c68614ff3df78c8d13cb814fd7e69a1dc6da", "key": "bitcoin:CRW", "maintainer": "Ashot ", "max_address_length": 40, "maxfee_kb": 2000000, "min_address_length": 36, "minfee_kb": 1000, "name": "Crown", "negative_fee": false, "segwit": false, "shortcut": "CRW", "signed_message_header": "Crown Signed Message:\n", "slip44": 72, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": false}, "uri_prefix": "crown", "website": "https://crownplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://dash1.trezor.io", "https://dash2.trezor.io", "https://dash3.trezor.io", "https://dash4.trezor.io", "https://dash5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash", "coin_name": "Dash", "coin_shortcut": "DASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", "key": "bitcoin:DASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dash", "negative_fee": false, "segwit": false, "shortcut": "DASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 5, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash Testnet", "coin_name": "Dash Testnet", "coin_shortcut": "tDASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", "key": "bitcoin:tDASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Dash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tDASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 1855, "address_type_p2sh": 1818, "bech32_prefix": null, "bip115": false, "bitcore": ["https://mainnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred", "coin_name": "Decred", "coin_shortcut": "DCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "298e5cc3d985bfe7f81dc135f360abe089edd4396b86d2de66b0cef42b21d980", "key": "bitcoin:DCR", "maintainer": "Alex Yocom-Piatt ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 10000, "name": "Decred", "negative_fee": false, "segwit": false, "shortcut": "DCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 42, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 50177256, "xpub_magic": 50178342, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3873, "address_type_p2sh": 3836, "bech32_prefix": null, "bip115": false, "bitcore": ["https://testnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred Testnet", "coin_name": "Decred Testnet", "coin_shortcut": "TDCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "a649dce53918caf422e9c711c858837e08d626ecfcd198969b24f7b634a49bac", "key": "bitcoin:TDCR", "maintainer": "Saleem Rashid ", "max_address_length": 35, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Decred Testnet", "negative_fee": false, "segwit": false, "shortcut": "TDCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 70615959, "xpub_magic": 70617041, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 63, "bech32_prefix": "dgb", "bip115": false, "bitcore": [], "blockbook": ["https://dgb1.trezor.io", "https://dgb2.trezor.io"], "blocktime_seconds": 15, "cashaddr_prefix": null, "coin_label": "DigiByte", "coin_name": "DigiByte", "coin_shortcut": "DGB", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/digibyte/digibyte", "hash_genesis_block": "7497ea1b465eb39f1c8f507bc877078fe016d6fcb6dfad3a64c98dcc6e1e8496", "key": "bitcoin:DGB", "maintainer": "DigiByte ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "DigiByte", "negative_fee": false, "segwit": true, "shortcut": "DGB", "signed_message_header": "DigiByte Signed Message:\n", "slip44": 20, "support": {"connect": true, "trezor1": "1.6.3", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "digibyte", "website": "https://digibyte.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 30, "address_type_p2sh": 22, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://doge1.trezor.io", "https://doge2.trezor.io", "https://doge3.trezor.io", "https://doge4.trezor.io", "https://doge5.trezor.io"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Dogecoin", "coin_name": "Dogecoin", "coin_shortcut": "DOGE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 100000}, "dust_limit": 10000000, "force_bip143": false, "fork_id": null, "github": "https://github.com/dogecoin/dogecoin", "hash_genesis_block": "1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691", "key": "bitcoin:DOGE", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dogecoin", "negative_fee": false, "segwit": false, "shortcut": "DOGE", "signed_message_header": "Dogecoin Signed Message:\n", "slip44": 3, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "dogecoin", "website": "https://dogecoin.com", "xprv_magic": 49988504, "xpub_magic": 49990397, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 235, "address_type_p2sh": 75, "bech32_prefix": "ert", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Elements", "coin_name": "Elements", "coin_shortcut": "ELEMENTS", "confidential_assets": {"address_prefix": 4, "blech32_prefix": "el"}, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/ElementsProject/elements", "hash_genesis_block": "209577bda6bf4b5804bd46f8621580dd6d4e8bfa2d190e1c50e932492baca07d", "key": "bitcoin:ELEMENTS", "maintainer": "Roman Zeyde ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Elements", "negative_fee": false, "segwit": true, "shortcut": "ELEMENTS", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "uri_prefix": "elements", "website": "https://elementsproject.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 14, "address_type_p2sh": 5, "bech32_prefix": "fc", "bip115": false, "bitcore": ["https://bitcore.feathercoin.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Feathercoin", "coin_name": "Feathercoin", "coin_shortcut": "FTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "duplicate": true, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/FeatherCoin/Feathercoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:FTC", "maintainer": "Lucas Betschart ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Feathercoin", "negative_fee": false, "segwit": true, "shortcut": "FTC", "signed_message_header": "Feathercoin Signed Message:\n", "slip44": 8, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "feathercoin", "website": "https://feathercoin.com", "xprv_magic": 76077806, "xpub_magic": 76069926, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 35, "address_type_p2sh": 94, "bech32_prefix": "flo", "bip115": false, "bitcore": ["https://livenet.flocha.in"], "blockbook": [], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "Flo", "coin_name": "Florincoin", "coin_shortcut": "FLO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/floblockchain/flo", "hash_genesis_block": "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea", "key": "bitcoin:FLO", "maintainer": "Robert English ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Flo", "negative_fee": false, "segwit": true, "shortcut": "FLO", "signed_message_header": "Florincoin Signed Message:\n", "slip44": 216, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "florincoin", "website": "https://flo.cash", "xprv_magic": 15264107, "xpub_magic": 1526049, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 16, "bech32_prefix": "fc", "bip115": false, "bitcore": [], "blockbook": ["https://explorer.fujicoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Fujicoin", "coin_name": "Fujicoin", "coin_shortcut": "FJC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 20000, "High": 100000, "Low": 10000, "Normal": 50000}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/fujicoin/fujicoin", "hash_genesis_block": "adb6d9cfd74075e7f91608add4bd2a2ea636f70856183086842667a1597714a0", "key": "bitcoin:FJC", "maintainer": "motty ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 10000000, "name": "Fujicoin", "negative_fee": false, "segwit": true, "shortcut": "FJC", "signed_message_header": "FujiCoin Signed Message:\n", "slip44": 75, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "fujicoin", "website": "https://fujicoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 38, "address_type_p2sh": 10, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.gincoin.io"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "GIN", "coin_name": "Gincoin", "coin_shortcut": "GIN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/gincoin-dev/gincoin-core", "hash_genesis_block": "00000cd6bde619b2c3b23ad2e384328a450a37fa28731debf748c3b17f91f97d", "key": "bitcoin:GIN", "maintainer": "Dragos Badea ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "GIN", "negative_fee": false, "segwit": false, "shortcut": "GIN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 2000, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "gincoin", "website": "https://gincoin.io", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 62, "bech32_prefix": "game", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.gamecredits.network"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "GameCredits", "coin_name": "GameCredits", "coin_shortcut": "GAME", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/gamecredits-project/gamecredits", "hash_genesis_block": "91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee", "key": "bitcoin:GAME", "maintainer": "Samad Sajanlal ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "GameCredits", "negative_fee": false, "segwit": true, "shortcut": "GAME", "signed_message_header": "GameCredits Signed Message:\n", "slip44": 101, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "gamecredits", "website": "https://gamecredits.org", "xprv_magic": 27108450, "xpub_magic": 27106558, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 5, "bech32_prefix": "grs", "bip115": false, "bitcore": ["https://groestlsight.groestlcoin.org", "https://grsblocks.com"], "blockbook": ["https://blockbook.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin", "coin_name": "Groestlcoin", "coin_shortcut": "GRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023", "key": "bitcoin:GRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin", "negative_fee": false, "segwit": true, "shortcut": "GRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 17, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tgrs", "bip115": false, "bitcore": ["https://groestlsight-test.groestlcoin.org"], "blockbook": ["https://blockbook-test.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin Testnet", "coin_name": "Groestlcoin Testnet", "coin_shortcut": "tGRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "000000ffbb50fc9898cdd36ec163e6ba23230164c0052a28876255b7dcf2cd36", "key": "bitcoin:tGRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tGRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch", "coin_name": "Hatch", "coin_shortcut": "HATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "000000fa6116f5d6c6ce9b60bd431469e40b4fe55feeeda59e33cd2f0b863196", "key": "bitcoin:HATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Hatch", "negative_fee": false, "segwit": false, "shortcut": "HATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 88888888, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch Testnet", "coin_name": "Hatch Testnet", "coin_shortcut": "tHATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "00000bf8b02180fa3860e3f4fbfaab76db14fbfd1323d1d3ad06d83b828b6644", "key": "bitcoin:tHATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Hatch Testnet", "negative_fee": false, "segwit": false, "shortcut": "tHATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 8329, "address_type_p2sh": 8342, "bech32_prefix": null, "bip115": true, "bitcore": ["https://explorer.horizen.global"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Horizen", "coin_name": "Horizen", "coin_shortcut": "ZEN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/ZencashOfficial/zen", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:ZEN", "maintainer": "Power_VANO ", "max_address_length": 95, "maxfee_kb": 2000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Horizen", "negative_fee": false, "segwit": false, "shortcut": "ZEN", "signed_message_header": "Zcash Signed Message:\n", "slip44": 121, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "horizen", "website": "https://www.horizen.global", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 60, "address_type_p2sh": 85, "bech32_prefix": null, "bip115": false, "bitcore": ["https://api.kmd.dev"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Komodo", "coin_name": "Komodo", "coin_shortcut": "KMD", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 1991772603}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/komodoplatform/komodo", "hash_genesis_block": "027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71", "key": "bitcoin:KMD", "maintainer": "Kadan Stadelmann ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Komodo", "negative_fee": true, "segwit": false, "shortcut": "KMD", "signed_message_header": "Komodo Signed Message:\n", "slip44": 141, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "komodo", "website": "https://komodoplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 6198, "address_type_p2sh": 6203, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.kotocoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Koto", "coin_name": "Koto", "coin_shortcut": "KOTO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/KotoDevelopers/koto", "hash_genesis_block": "6d424c350729ae633275d51dc3496e16cd1b1d195c164da00f39c499a2e9959e", "key": "bitcoin:KOTO", "maintainer": "WO ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Koto", "negative_fee": false, "segwit": false, "shortcut": "KOTO", "signed_message_header": "Koto Signed Message:\n", "slip44": 510, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "koto", "website": "https://ko-to.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 48, "address_type_p2sh": 50, "bech32_prefix": "ltc", "bip115": false, "bitcore": [], "blockbook": ["https://ltc1.trezor.io", "https://ltc2.trezor.io", "https://ltc3.trezor.io", "https://ltc4.trezor.io", "https://ltc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin", "coin_name": "Litecoin", "coin_shortcut": "LTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:LTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Litecoin", "negative_fee": false, "segwit": true, "shortcut": "LTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 2, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 27106558, "xpub_magic": 27108450, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 111, "address_type_p2sh": 58, "bech32_prefix": "tltc", "bip115": false, "bitcore": ["https://testnet.litecore.io"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin Testnet", "coin_name": "Litecoin Testnet", "coin_shortcut": "tLTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0", "key": "bitcoin:tLTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Litecoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tLTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 50, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Metaverse ETP", "coin_name": "MetaverseETP", "coin_shortcut": "ETP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/mvs-org/metaverse", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "key": "bitcoin:ETP", "maintainer": "Sven Mutzl ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 100, "name": "Metaverse ETP", "negative_fee": false, "segwit": false, "shortcut": "ETP", "signed_message_header": "Metaverse Signed Message:\n", "slip44": 2302, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "uri_prefix": "etp", "website": "https://mvs.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 50, "address_type_p2sh": 55, "bech32_prefix": "mona", "bip115": false, "bitcore": ["https://mona.chainsight.info", "https://insight.electrum-mona.org"], "blockbook": ["https://blockbook.electrum-mona.org"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "Monacoin", "coin_name": "Monacoin", "coin_shortcut": "MONA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/monacoinproject/monacoin", "hash_genesis_block": "ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6", "key": "bitcoin:MONA", "maintainer": "cryptcoin-junkey ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Monacoin", "negative_fee": false, "segwit": true, "shortcut": "MONA", "signed_message_header": "Monacoin Signed Message:\n", "slip44": 22, "support": {"connect": true, "trezor1": "1.6.0", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "monacoin", "website": "https://monacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 16, "address_type_p2sh": 76, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.monetaryunit.org"], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "MonetaryUnit", "coin_name": "MonetaryUnit", "coin_shortcut": "MUE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/muecoin/MUE", "hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f", "key": "bitcoin:MUE", "maintainer": "Sotiris Blad ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "MonetaryUnit", "negative_fee": false, "segwit": false, "shortcut": "MUE", "signed_message_header": "MonetaryUnit Signed Message:\n", "slip44": 31, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "monetaryunit", "website": "https://www.monetaryunit.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 53, "bech32_prefix": "nix", "bip115": false, "bitcore": ["https://blockchain.nixplatform.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "NIX", "coin_name": "NIX", "coin_shortcut": "NIX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/nixplatform/nixcore", "hash_genesis_block": "dd28ad86def767c3cfc34267a950d871fc7462bc57ea4a929fc3596d9b598e41", "key": "bitcoin:NIX", "maintainer": "mattt21 ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 0, "name": "NIX", "negative_fee": false, "segwit": true, "shortcut": "NIX", "signed_message_header": "NIX Signed Message:\n", "slip44": 400, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "nix", "website": "https://nixplatform.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 52, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://nmc1.trezor.io", "https://nmc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Namecoin", "coin_name": "Namecoin", "coin_shortcut": "NMC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 2940, "force_bip143": false, "fork_id": null, "github": "https://github.com/namecoin/namecoin-core", "hash_genesis_block": "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770", "key": "bitcoin:NMC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Namecoin", "negative_fee": false, "segwit": false, "shortcut": "NMC", "signed_message_header": "Namecoin Signed Message:\n", "slip44": 7, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "namecoin", "website": "https://namecoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 13, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX", "coin_name": "PIVX", "coin_shortcut": "PIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:PIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX", "negative_fee": false, "segwit": false, "shortcut": "PIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 119, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 35729707, "xpub_magic": 36513075, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 139, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook-testnet.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX Testnet", "coin_name": "PIVX Testnet", "coin_shortcut": "tPIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:tPIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX Testnet", "negative_fee": false, "segwit": false, "shortcut": "tPIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 981489719, "xpub_magic": 981492128, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 56, "address_type_p2sh": 60, "bech32_prefix": "bc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl", "coin_name": "Particl", "coin_shortcut": "PART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000ee0784c195317ac95623e22fddb8c7b8825dc3998e0bb924d66866eccf4c", "key": "bitcoin:PART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl", "negative_fee": false, "segwit": true, "shortcut": "PART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 44, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 1768850129, "xpub_magic": 2401087160, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 118, "address_type_p2sh": 122, "bech32_prefix": "tb", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl Testnet", "coin_name": "Particl Testnet", "coin_shortcut": "tPART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000594ada5310b367443ee0afd4fa3d0bbd5850ea4e33cdc7d6a904a7ec7c90", "key": "bitcoin:tPART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 3779229696, "xpub_magic": 76059768, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 55, "address_type_p2sh": 117, "bech32_prefix": "pc", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin", "coin_name": "Peercoin", "coin_shortcut": "PPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3", "key": "bitcoin:PPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin", "negative_fee": false, "segwit": true, "shortcut": "PPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 6, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tpc", "bip115": false, "bitcore": [], "blockbook": ["https://tblockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin Testnet", "coin_name": "Peercoin Testnet", "coin_shortcut": "tPPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06", "key": "bitcoin:tPPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 47, "address_type_p2sh": 22, "bech32_prefix": null, "bip115": false, "bitcore": ["https://live.pesetacoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Pesetacoin", "coin_name": "Pesetacoin", "coin_shortcut": "PTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 10000000, "force_bip143": false, "fork_id": null, "github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "hash_genesis_block": "edfe5830b53251bfff733600b1cd5c192e761c011b055f07924634818c906438", "key": "bitcoin:PTC", "maintainer": "Rw ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Pesetacoin", "negative_fee": false, "segwit": false, "shortcut": "PTC", "signed_message_header": "Pesetacoin Signed Message:\n", "slip44": 109, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "pesetacoin", "website": "https://pesetacoin.info", "xprv_magic": 76079604, "xpub_magic": 76071982, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 55, "address_type_p2sh": 56, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.polispay.org"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Polis", "coin_name": "Polis", "coin_shortcut": "POLIS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/polispay/polis", "hash_genesis_block": "000009701eb781a8113b1af1d814e2f060f6408a2c990db291bc5108a1345c1e", "key": "bitcoin:POLIS", "maintainer": "Cronos ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Polis", "negative_fee": false, "segwit": false, "shortcut": "POLIS", "signed_message_header": "Polis Signed Message:\n", "slip44": 1997, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "polis", "website": "https://www.polispay.org", "xprv_magic": 65165637, "xpub_magic": 65166718, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 23, "address_type_p2sh": 83, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Primecoin", "coin_name": "Primecoin", "coin_shortcut": "XPM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/primecoin/primecoin", "hash_genesis_block": "963d17ba4dc753138078a2f56afb3af9674e2546822badff26837db9a0152106", "key": "bitcoin:XPM", "maintainer": "James Skrowvedeht ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 26, "minfee_kb": 1000, "name": "Primecoin", "negative_fee": false, "segwit": false, "shortcut": "XPM", "signed_message_header": "Primecoin Signed Message:\n", "slip44": 24, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "primecoin", "website": "https://primecoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 58, "address_type_p2sh": 50, "bech32_prefix": "qc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum", "coin_name": "Qtum", "coin_shortcut": "QTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "duplicate": true, "dust_limit": 218400, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c", "key": "bitcoin:QTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum", "negative_fee": false, "segwit": true, "shortcut": "QTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 2301, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": true}, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 120, "address_type_p2sh": 110, "bech32_prefix": "tq", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum Testnet", "coin_name": "Qtum Testnet", "coin_shortcut": "tQTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222", "key": "bitcoin:tQTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum Testnet", "negative_fee": false, "segwit": true, "shortcut": "tQTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 60, "address_type_p2sh": 122, "bech32_prefix": null, "bip115": false, "bitcore": ["https://ravencoin.network"], "blockbook": ["https://blockbook.ravencoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ravencoin", "coin_name": "Ravencoin", "coin_shortcut": "RVN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/RavenProject/Ravencoin", "hash_genesis_block": "0000006b444bc2f2ffe627be9d9e7e7a0730000870ef6eb6da46c8eae389df90", "key": "bitcoin:RVN", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ravencoin", "negative_fee": false, "segwit": false, "shortcut": "RVN", "signed_message_header": "Raven Signed Message:\n", "slip44": 175, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "uri_prefix": "raven", "website": "https://ravencoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 105, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.ritocoin.org"], "blockbook": ["https://blockbook.ritocoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ritocoin", "coin_name": "Ritocoin", "coin_shortcut": "RITO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/RitoProject", "hash_genesis_block": "00000075e344bdf1c0e433f453764b1830a7aa19b2a5213e707502a22b779c1b", "key": "bitcoin:RITO", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ritocoin", "negative_fee": false, "segwit": false, "shortcut": "RITO", "signed_message_header": "Rito Signed Message:\n", "slip44": 19169, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "rito", "website": "https://ritocoin.org", "xprv_magic": 87326380, "xpub_magic": 87353290, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 63, "address_type_p2sh": 18, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.smartcash.cc"], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash", "coin_name": "SmartCash", "coin_shortcut": "SMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "duplicate": true, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "000007acc6970b812948d14ea5a0a13db0fdd07d5047c7e69101fa8b361e05a4", "key": "bitcoin:SMART", "maintainer": "Leandro Reinaux ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash", "negative_fee": false, "segwit": false, "shortcut": "SMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "smart", "website": "https://smartcash.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 21, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash Testnet", "coin_name": "SmartCash Testnet", "coin_shortcut": "tSMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "0000027235b5679bcd28c90d03d4bf1a9ba4c07c4efcc1c87d6c68cce25e6e5d", "key": "bitcoin:tSMART", "maintainer": "Leandro Reinaux ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tSMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "uri_prefix": "testsmart", "website": "https://smartcash.cc", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": "xc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Stakenet", "coin_name": "Stakenet", "coin_shortcut": "XSN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 1000, "force_bip143": false, "fork_id": null, "github": "https://github.com/X9Developers/XSN", "hash_genesis_block": "00000c822abdbb23e28f79a49d29b41429737c6c7e15df40d1b1f1b35907ae34", "key": "bitcoin:XSN", "maintainer": "Alexis Hernandez ", "max_address_length": 47, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Stakenet", "negative_fee": false, "segwit": true, "shortcut": "XSN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 199, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "uri_prefix": "stakenet", "website": "https://stakenet.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 63, "address_type_p2sh": 5, "bech32_prefix": "sys", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Syscoin", "coin_name": "Syscoin", "coin_shortcut": "SYS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 200, "High": 2000, "Low": 100, "Normal": 400}, "dust_limit": 1820, "force_bip143": false, "fork_id": null, "github": "https://github.com/syscoin/syscoin", "hash_genesis_block": "0000022642db0346b6e01c2a397471f4f12e65d4f4251ec96c1f85367a61a7ab", "key": "bitcoin:SYS", "maintainer": "Jagdeep Sidhu ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Syscoin", "negative_fee": false, "segwit": true, "shortcut": "SYS", "signed_message_header": "Syscoin Signed Message:\n", "slip44": 57, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "uri_prefix": "syscoin", "website": "https://syscoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.terracoin.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Terracoin", "coin_name": "Terracoin", "coin_shortcut": "TRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 5460, "force_bip143": false, "fork_id": null, "github": "https://github.com/terracoin/terracoin", "hash_genesis_block": "00000000804bbc6a621a9dbb564ce469f492e1ccf2d70f8a6b241e26a277afa2", "key": "bitcoin:TRC", "maintainer": "The Terracoin Foundation ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Terracoin", "negative_fee": false, "segwit": false, "shortcut": "TRC", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 83, "support": {"connect": false, "trezor1": false, "trezor2": false, "webwallet": false}, "uri_prefix": "terracoin", "website": "https://terracoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 130, "address_type_p2sh": 30, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno"], "blocktime_seconds": 30, "cashaddr_prefix": null, "coin_label": "Unobtanium", "coin_name": "Unobtanium", "coin_shortcut": "UNO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 50, "High": 160, "Low": 10, "Normal": 100}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/unobtanium-official/unobtanium", "hash_genesis_block": "000004c2fc5fffb810dccc197d603690099a68305232e552d96ccbe8e2c52b75", "key": "bitcoin:UNO", "maintainer": "choicesz ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Unobtanium", "negative_fee": false, "segwit": false, "shortcut": "UNO", "signed_message_header": "Unobtanium Signed Message:\n", "slip44": 92, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "uri_prefix": "unobtanium", "website": "https://unobtanium.uno", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 70, "address_type_p2sh": 50, "bech32_prefix": "vips", "bip115": false, "bitcore": ["https://insight.vipstarco.in"], "blockbook": ["https://vips.blockbook.japanesecoin-pool.work"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "VIPSTARCOIN", "coin_name": "VIPSTARCOIN", "coin_shortcut": "VIPS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "force_bip143": false, "fork_id": null, "github": "https://github.com/VIPSTARCOIN/VIPSTARCOIN", "hash_genesis_block": "0000d068e1d30f79fb64446137106be9c6ee69a6a722295c131506b1ee09b77c", "key": "bitcoin:VIPS", "maintainer": "y-chan ", "max_address_length": 36, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "VIPSTARCOIN", "negative_fee": false, "segwit": true, "shortcut": "VIPS", "signed_message_header": "VIPSTARCOIN Signed Message:\n", "slip44": 1919, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "uri_prefix": "vipstarcoin", "website": "https://vipstarcoin.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 5, "bech32_prefix": "vtc", "bip115": false, "bitcore": [], "blockbook": ["https://vtc1.trezor.io", "https://vtc2.trezor.io", "https://vtc3.trezor.io", "https://vtc4.trezor.io", "https://vtc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Vertcoin", "coin_name": "Vertcoin", "coin_shortcut": "VTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/vertcoin-project/vertcoin-core", "hash_genesis_block": "4d96a915f49d40b1e5c2844d1ee2dccb90013a990ccea12c492d22110489f0c4", "key": "bitcoin:VTC", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Vertcoin", "negative_fee": false, "segwit": true, "shortcut": "VTC", "signed_message_header": "Vertcoin Signed Message:\n", "slip44": 28, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "uri_prefix": "vertcoin", "website": "https://vertcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 33, "bech32_prefix": "via", "bip115": false, "bitcore": ["https://explorer.viacoin.org"], "blockbook": [], "blocktime_seconds": 24, "cashaddr_prefix": null, "coin_label": "Viacoin", "coin_name": "Viacoin", "coin_shortcut": "VIA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7000, "High": 20000, "Low": 1000, "Normal": 14000}, "dust_limit": 54600, "force_bip143": false, "fork_id": null, "github": "https://github.com/viacoin", "hash_genesis_block": "4e9b54001f9976049830128ec0331515eaabe35a70970d79971da1539a400ba1", "key": "bitcoin:VIA", "maintainer": "romanornr ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Viacoin", "negative_fee": false, "segwit": true, "shortcut": "VIA", "signed_message_header": "Viacoin Signed Message:\n", "slip44": 14, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "viacoin", "website": "https://viacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 142, "address_type_p2sh": 145, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.zcore.cash"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "ZCore", "coin_name": "ZCore", "coin_shortcut": "ZCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcore-coin/zcore-2.0", "hash_genesis_block": "695b79c8c234b45b2eeb4722f33373e471c9b686ff78efeb39da95f824a9f81b", "key": "bitcoin:ZCR", "maintainer": "Erick Costa ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 34, "minfee_kb": 1000, "name": "ZCore", "negative_fee": false, "segwit": false, "shortcut": "ZCR", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 428, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": true}, "uri_prefix": "zcore", "website": "https://zcore.cash", "xprv_magic": 78791432, "xpub_magic": 78792518, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://zec1.trezor.io", "https://zec2.trezor.io", "https://zec3.trezor.io", "https://zec4.trezor.io", "https://zec5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash", "coin_name": "Zcash", "coin_shortcut": "ZEC", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08", "key": "bitcoin:ZEC", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash", "negative_fee": false, "segwit": false, "shortcut": "ZEC", "signed_message_header": "Zcash Signed Message:\n", "slip44": 133, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7461, "address_type_p2sh": 7354, "bech32_prefix": null, "bip115": false, "bitcore": ["https://explorer.testnet.z.cash"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash Testnet", "coin_name": "Zcash Testnet", "coin_shortcut": "TAZ", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38", "key": "bitcoin:TAZ", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TAZ", "signed_message_header": "Zcash Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 82, "address_type_p2sh": 7, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.zcoin.io"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin", "coin_name": "Zcoin", "coin_shortcut": "XZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "4381deb85b1b2c9843c222944b616d997516dcbd6a964e1eaf0def0830695233", "key": "bitcoin:XZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin", "negative_fee": false, "segwit": false, "shortcut": "XZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 136, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "uri_prefix": "zcoin", "website": "https://zcoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 178, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin Testnet", "coin_name": "Zcoin Testnet", "coin_shortcut": "tXZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "7ac038c193c2158c428c59f9ae0c02a07115141c6e9dc244ae96132e99b4e642", "key": "bitcoin:tXZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin Testnet", "negative_fee": false, "segwit": false, "shortcut": "tXZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "uri_prefix": "testzcoin", "website": "https://zcoin.io", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.zel.network"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Zel", "coin_name": "ZelCash", "coin_shortcut": "ZEL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "force_bip143": false, "fork_id": null, "github": "https://github.com/zelcash", "hash_genesis_block": "00052461a5006c2e3b74ce48992a08695607912d5604c3eb8da25749b0900444", "key": "bitcoin:ZEL", "maintainer": "Cabecinha84 ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zel", "negative_fee": false, "segwit": false, "shortcut": "ZEL", "signed_message_header": "Zcash Signed Message:\n", "slip44": 19167, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "uri_prefix": "zelcash", "website": "https://zel.network", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}] +[{"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": "bc", "bip115": false, "bitcore": [], "blockbook": ["https://btc1.trezor.io", "https://btc2.trezor.io", "https://btc3.trezor.io", "https://btc4.trezor.io", "https://btc5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin", "coin_name": "Bitcoin", "coin_shortcut": "BTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin", "negative_fee": false, "segwit": true, "shortcut": "BTC", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 0, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "bcrt", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Regtest", "coin_name": "Regtest", "coin_shortcut": "REGTEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", "key": "bitcoin:REGTEST", "maintainer": "Thomas Kerin ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Regtest", "negative_fee": false, "segwit": true, "shortcut": "REGTEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tb", "bip115": false, "bitcore": [], "blockbook": ["https://tbtc1.trezor.io", "https://tbtc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Testnet", "coin_name": "Testnet", "coin_shortcut": "TEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TEST", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Testnet", "negative_fee": false, "segwit": true, "shortcut": "TEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 53, "address_type_p2sh": 55, "bech32_prefix": "acm", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Actinium", "coin_name": "Actinium", "coin_shortcut": "ACM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Actinium-project/Actinium", "hash_genesis_block": "28d77872e23714562f49a1be792c276623c1bbe3fdcf21b6035cfde78b00b824", "key": "bitcoin:ACM", "maintainer": "Harris Brakmic ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Actinium", "negative_fee": false, "segwit": true, "shortcut": "ACM", "signed_message_header": "Actinium Signed Message:\n", "slip44": 228, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "actinium", "website": "https://actinium.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 55, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Axe", "coin_name": "Axe", "coin_shortcut": "AXE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/axerunners/axe", "hash_genesis_block": "00000c33631ca6f2f61368991ce2dc03306b5bb50bf7cede5cfbba6db38e52e6", "key": "bitcoin:AXE", "maintainer": "Kirill Orlov ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Axe", "negative_fee": false, "segwit": false, "shortcut": "AXE", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 4242, "support": {"connect": true, "trezor1": "1.7.3", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "axe", "website": "https://axerunners.com", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 85, "bech32_prefix": "bm", "bip115": false, "bitcore": [], "blockbook": ["https://bellcoin-blockbook.ilmango.work", "https://bell.blockbook.ovh"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Bellcoin", "coin_name": "Bellcoin", "coin_shortcut": "BELL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bellcoin-org/bellcoin", "hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603", "key": "bitcoin:BELL", "maintainer": "ilmango-doge ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bellcoin", "negative_fee": false, "segwit": true, "shortcut": "BELL", "signed_message_header": "Bellcoin Signed Message:\n", "slip44": 25252, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bellcoin", "website": "https://bellcoin.web4u.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 81, "address_type_p2sh": 5, "bech32_prefix": "bz", "bip115": false, "bitcore": ["https://insight.bitzeny.jp", "https://zeny.insight.monaco-ex.org"], "blockbook": ["https://zny.blockbook.ovh"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "BitZeny", "coin_name": "BitZeny", "coin_shortcut": "ZNY", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "hash_genesis_block": "000009f7e55e9e3b4781e22bd87a7cfa4acada9e4340d43ca738bf4e9fb8f5ce", "key": "bitcoin:ZNY", "maintainer": "y-chan ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "BitZeny", "negative_fee": false, "segwit": true, "shortcut": "ZNY", "signed_message_header": "BitZeny Signed Message:\n", "slip44": 123, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitzeny", "website": "https://bitzeny.tech", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://bch1.trezor.io", "https://bch2.trezor.io", "https://bch3.trezor.io", "https://bch4.trezor.io", "https://bch5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": "bitcoincash", "coin_label": "Bitcoin Cash", "coin_name": "Bcash", "coin_shortcut": "BCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash", "negative_fee": false, "segwit": false, "shortcut": "BCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 145, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": "bchtest", "coin_label": "Bitcoin Cash Testnet", "coin_name": "Bcash Testnet", "coin_shortcut": "TBCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TBCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TBCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 23, "bech32_prefix": "btg", "bip115": false, "bitcore": [], "blockbook": ["https://btg1.trezor.io", "https://btg2.trezor.io", "https://btg3.trezor.io", "https://btg4.trezor.io", "https://btg5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold", "coin_name": "Bgold", "coin_shortcut": "BTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTG", "maintainer": "Saleem Rashid ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold", "negative_fee": false, "segwit": true, "shortcut": "BTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tbtg", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold Testnet", "coin_name": "Bgold Testnet", "coin_shortcut": "TBTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "00000000e0781ebe24b91eedc293adfea2f557b53ec379e78959de3853e6f9f6", "key": "bitcoin:TBTG", "maintainer": "The Bitcoin Gold Developers ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold Testnet", "negative_fee": false, "segwit": true, "shortcut": "TBTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 4901, "address_type_p2sh": 5039, "bech32_prefix": null, "bip115": false, "bitcore": ["https://explorer.btcprivate.org"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcoin Private", "coin_name": "Bprivate", "coin_shortcut": "BTCP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": 42, "github": "https://github.com/BTCPrivate/BitcoinPrivate", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:BTCP", "maintainer": "Chris Sulmone ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Bitcoin Private", "negative_fee": false, "segwit": false, "shortcut": "BTCP", "signed_message_header": "BitcoinPrivate Signed Message:\n", "slip44": 183, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoinprivate", "website": "https://btcprivate.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 61, "address_type_p2sh": 123, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook1.bitcoinrh.org", "https://blockbook2.bitcoinrh.org"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Rhodium", "coin_name": "Brhodium", "coin_shortcut": "XRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "hash_genesis_block": "baff5bfd9dc43fb672d003ec20fd21428f9282ca46bfa1730d73e1f2c75f5fdd", "key": "bitcoin:XRC", "maintainer": "baff5b ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Rhodium", "negative_fee": false, "segwit": false, "shortcut": "XRC", "signed_message_header": "BitCoin Rhodium Signed Message:\n", "slip44": 10291, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin-rhodium", "website": "https://www.bitcoinrh.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3, "address_type_p2sh": 125, "bech32_prefix": "btx", "bip115": false, "bitcore": ["https://insight.bitcore.cc"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcore", "coin_name": "Bitcore", "coin_shortcut": "BTX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/LIMXTEC/BitCore", "hash_genesis_block": "604148281e5c4b7f2487e5d03cd60d8e6f69411d613f6448034508cea52e9574", "key": "bitcoin:BTX", "maintainer": "limxdev ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcore", "negative_fee": false, "segwit": true, "shortcut": "BTX", "signed_message_header": "BitCore Signed Message:\n", "slip44": 160, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcore", "website": "https://bitcore.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 30, "bech32_prefix": "cpu", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.cpuchain.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "CPUchain", "coin_name": "CPUchain", "coin_shortcut": "CPU", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/cpuchain/cpuchain", "hash_genesis_block": "000024d8766043ea0e1c9ad42e7ea4b5fdb459887bd80b8f9756f3d87e128f12", "key": "bitcoin:CPU", "maintainer": "Min Khang Aung ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "CPUchain", "negative_fee": false, "segwit": true, "shortcut": "CPU", "signed_message_header": "CPUchain Signed Message:\n", "slip44": 363, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "cpuchain", "website": "https://cpuchain.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 35, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.capricoin.org", "https://blockbook2.capricoin.org", "https://blockbook3.capricoin.org", "https://blockbook4.capricoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Capricoin", "coin_name": "Capricoin", "coin_shortcut": "CPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7, "High": 20, "Low": 1, "Normal": 14}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Capricoinofficial/Capricoin", "hash_genesis_block": "00000d23fa0fc52c90893adb1181c9ddffb6c797a3e41864b9a23aa2f2981fe3", "key": "bitcoin:CPC", "maintainer": "Jozef Knaperek ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Capricoin", "negative_fee": false, "segwit": false, "shortcut": "CPC", "signed_message_header": "Capricoin Signed Message:\n", "slip44": 289, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.10", "webwallet": false}, "timestamp": true, "uri_prefix": "capricoin", "website": "https://capricoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 95495, "address_type_p2sh": 95473, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight-01.crownplatform.com", "https://insight-02.crownplatform.com", "https://insight-03.crownplatform.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Crown", "coin_name": "Crown", "coin_shortcut": "CRW", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Crowndev/crowncoin", "hash_genesis_block": "0000000085370d5e122f64f4ab19c68614ff3df78c8d13cb814fd7e69a1dc6da", "key": "bitcoin:CRW", "maintainer": "Ashot ", "max_address_length": 40, "maxfee_kb": 2000000, "min_address_length": 36, "minfee_kb": 1000, "name": "Crown", "negative_fee": false, "segwit": false, "shortcut": "CRW", "signed_message_header": "Crown Signed Message:\n", "slip44": 72, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": false}, "timestamp": false, "uri_prefix": "crown", "website": "https://crownplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://dash1.trezor.io", "https://dash2.trezor.io", "https://dash3.trezor.io", "https://dash4.trezor.io", "https://dash5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash", "coin_name": "Dash", "coin_shortcut": "DASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", "key": "bitcoin:DASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dash", "negative_fee": false, "segwit": false, "shortcut": "DASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 5, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash Testnet", "coin_name": "Dash Testnet", "coin_shortcut": "tDASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", "key": "bitcoin:tDASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Dash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tDASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 1855, "address_type_p2sh": 1818, "bech32_prefix": null, "bip115": false, "bitcore": ["https://mainnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred", "coin_name": "Decred", "coin_shortcut": "DCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "298e5cc3d985bfe7f81dc135f360abe089edd4396b86d2de66b0cef42b21d980", "key": "bitcoin:DCR", "maintainer": "Alex Yocom-Piatt ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 10000, "name": "Decred", "negative_fee": false, "segwit": false, "shortcut": "DCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 42, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 50177256, "xpub_magic": 50178342, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3873, "address_type_p2sh": 3836, "bech32_prefix": null, "bip115": false, "bitcore": ["https://testnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred Testnet", "coin_name": "Decred Testnet", "coin_shortcut": "TDCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "a649dce53918caf422e9c711c858837e08d626ecfcd198969b24f7b634a49bac", "key": "bitcoin:TDCR", "maintainer": "Saleem Rashid ", "max_address_length": 35, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Decred Testnet", "negative_fee": false, "segwit": false, "shortcut": "TDCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 70615959, "xpub_magic": 70617041, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 63, "bech32_prefix": "dgb", "bip115": false, "bitcore": [], "blockbook": ["https://dgb1.trezor.io", "https://dgb2.trezor.io"], "blocktime_seconds": 15, "cashaddr_prefix": null, "coin_label": "DigiByte", "coin_name": "DigiByte", "coin_shortcut": "DGB", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/digibyte/digibyte", "hash_genesis_block": "7497ea1b465eb39f1c8f507bc877078fe016d6fcb6dfad3a64c98dcc6e1e8496", "key": "bitcoin:DGB", "maintainer": "DigiByte ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "DigiByte", "negative_fee": false, "segwit": true, "shortcut": "DGB", "signed_message_header": "DigiByte Signed Message:\n", "slip44": 20, "support": {"connect": true, "trezor1": "1.6.3", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "digibyte", "website": "https://digibyte.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 30, "address_type_p2sh": 22, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://doge1.trezor.io", "https://doge2.trezor.io", "https://doge3.trezor.io", "https://doge4.trezor.io", "https://doge5.trezor.io"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Dogecoin", "coin_name": "Dogecoin", "coin_shortcut": "DOGE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 100000}, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/dogecoin/dogecoin", "hash_genesis_block": "1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691", "key": "bitcoin:DOGE", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dogecoin", "negative_fee": false, "segwit": false, "shortcut": "DOGE", "signed_message_header": "Dogecoin Signed Message:\n", "slip44": 3, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dogecoin", "website": "https://dogecoin.com", "xprv_magic": 49988504, "xpub_magic": 49990397, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 235, "address_type_p2sh": 75, "bech32_prefix": "ert", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Elements", "coin_name": "Elements", "coin_shortcut": "ELEMENTS", "confidential_assets": {"address_prefix": 4, "blech32_prefix": "el"}, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ElementsProject/elements", "hash_genesis_block": "209577bda6bf4b5804bd46f8621580dd6d4e8bfa2d190e1c50e932492baca07d", "key": "bitcoin:ELEMENTS", "maintainer": "Roman Zeyde ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Elements", "negative_fee": false, "segwit": true, "shortcut": "ELEMENTS", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "elements", "website": "https://elementsproject.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 14, "address_type_p2sh": 5, "bech32_prefix": "fc", "bip115": false, "bitcore": ["https://bitcore.feathercoin.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Feathercoin", "coin_name": "Feathercoin", "coin_shortcut": "FTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "duplicate": true, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FeatherCoin/Feathercoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:FTC", "maintainer": "Lucas Betschart ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Feathercoin", "negative_fee": false, "segwit": true, "shortcut": "FTC", "signed_message_header": "Feathercoin Signed Message:\n", "slip44": 8, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "feathercoin", "website": "https://feathercoin.com", "xprv_magic": 76077806, "xpub_magic": 76069926, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 35, "address_type_p2sh": 94, "bech32_prefix": "flo", "bip115": false, "bitcore": ["https://livenet.flocha.in"], "blockbook": [], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "Flo", "coin_name": "Florincoin", "coin_shortcut": "FLO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/floblockchain/flo", "hash_genesis_block": "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea", "key": "bitcoin:FLO", "maintainer": "Robert English ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Flo", "negative_fee": false, "segwit": true, "shortcut": "FLO", "signed_message_header": "Florincoin Signed Message:\n", "slip44": 216, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "florincoin", "website": "https://flo.cash", "xprv_magic": 15264107, "xpub_magic": 1526049, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 16, "bech32_prefix": "fc", "bip115": false, "bitcore": [], "blockbook": ["https://explorer.fujicoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Fujicoin", "coin_name": "Fujicoin", "coin_shortcut": "FJC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 20000, "High": 100000, "Low": 10000, "Normal": 50000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/fujicoin/fujicoin", "hash_genesis_block": "adb6d9cfd74075e7f91608add4bd2a2ea636f70856183086842667a1597714a0", "key": "bitcoin:FJC", "maintainer": "motty ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 10000000, "name": "Fujicoin", "negative_fee": false, "segwit": true, "shortcut": "FJC", "signed_message_header": "FujiCoin Signed Message:\n", "slip44": 75, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "fujicoin", "website": "https://fujicoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 38, "address_type_p2sh": 10, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.gincoin.io"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "GIN", "coin_name": "Gincoin", "coin_shortcut": "GIN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gincoin-dev/gincoin-core", "hash_genesis_block": "00000cd6bde619b2c3b23ad2e384328a450a37fa28731debf748c3b17f91f97d", "key": "bitcoin:GIN", "maintainer": "Dragos Badea ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "GIN", "negative_fee": false, "segwit": false, "shortcut": "GIN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 2000, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "gincoin", "website": "https://gincoin.io", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 62, "bech32_prefix": "game", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.gamecredits.network"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "GameCredits", "coin_name": "GameCredits", "coin_shortcut": "GAME", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gamecredits-project/gamecredits", "hash_genesis_block": "91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee", "key": "bitcoin:GAME", "maintainer": "Samad Sajanlal ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "GameCredits", "negative_fee": false, "segwit": true, "shortcut": "GAME", "signed_message_header": "GameCredits Signed Message:\n", "slip44": 101, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "gamecredits", "website": "https://gamecredits.org", "xprv_magic": 27108450, "xpub_magic": 27106558, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 5, "bech32_prefix": "grs", "bip115": false, "bitcore": ["https://groestlsight.groestlcoin.org", "https://grsblocks.com"], "blockbook": ["https://blockbook.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin", "coin_name": "Groestlcoin", "coin_shortcut": "GRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023", "key": "bitcoin:GRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin", "negative_fee": false, "segwit": true, "shortcut": "GRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 17, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tgrs", "bip115": false, "bitcore": ["https://groestlsight-test.groestlcoin.org"], "blockbook": ["https://blockbook-test.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin Testnet", "coin_name": "Groestlcoin Testnet", "coin_shortcut": "tGRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "000000ffbb50fc9898cdd36ec163e6ba23230164c0052a28876255b7dcf2cd36", "key": "bitcoin:tGRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tGRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch", "coin_name": "Hatch", "coin_shortcut": "HATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "000000fa6116f5d6c6ce9b60bd431469e40b4fe55feeeda59e33cd2f0b863196", "key": "bitcoin:HATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Hatch", "negative_fee": false, "segwit": false, "shortcut": "HATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 88888888, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch Testnet", "coin_name": "Hatch Testnet", "coin_shortcut": "tHATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "00000bf8b02180fa3860e3f4fbfaab76db14fbfd1323d1d3ad06d83b828b6644", "key": "bitcoin:tHATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Hatch Testnet", "negative_fee": false, "segwit": false, "shortcut": "tHATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 8329, "address_type_p2sh": 8342, "bech32_prefix": null, "bip115": true, "bitcore": ["https://explorer.horizen.global"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Horizen", "coin_name": "Horizen", "coin_shortcut": "ZEN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ZencashOfficial/zen", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:ZEN", "maintainer": "Power_VANO ", "max_address_length": 95, "maxfee_kb": 2000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Horizen", "negative_fee": false, "segwit": false, "shortcut": "ZEN", "signed_message_header": "Zcash Signed Message:\n", "slip44": 121, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "horizen", "website": "https://www.horizen.global", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 60, "address_type_p2sh": 85, "bech32_prefix": null, "bip115": false, "bitcore": ["https://api.kmd.dev"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Komodo", "coin_name": "Komodo", "coin_shortcut": "KMD", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 1991772603}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/komodoplatform/komodo", "hash_genesis_block": "027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71", "key": "bitcoin:KMD", "maintainer": "Kadan Stadelmann ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Komodo", "negative_fee": true, "segwit": false, "shortcut": "KMD", "signed_message_header": "Komodo Signed Message:\n", "slip44": 141, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "komodo", "website": "https://komodoplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 6198, "address_type_p2sh": 6203, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.kotocoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Koto", "coin_name": "Koto", "coin_shortcut": "KOTO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/KotoDevelopers/koto", "hash_genesis_block": "6d424c350729ae633275d51dc3496e16cd1b1d195c164da00f39c499a2e9959e", "key": "bitcoin:KOTO", "maintainer": "WO ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Koto", "negative_fee": false, "segwit": false, "shortcut": "KOTO", "signed_message_header": "Koto Signed Message:\n", "slip44": 510, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "koto", "website": "https://ko-to.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 48, "address_type_p2sh": 50, "bech32_prefix": "ltc", "bip115": false, "bitcore": [], "blockbook": ["https://ltc1.trezor.io", "https://ltc2.trezor.io", "https://ltc3.trezor.io", "https://ltc4.trezor.io", "https://ltc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin", "coin_name": "Litecoin", "coin_shortcut": "LTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:LTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Litecoin", "negative_fee": false, "segwit": true, "shortcut": "LTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 2, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 27106558, "xpub_magic": 27108450, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 111, "address_type_p2sh": 58, "bech32_prefix": "tltc", "bip115": false, "bitcore": ["https://testnet.litecore.io"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin Testnet", "coin_name": "Litecoin Testnet", "coin_shortcut": "tLTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0", "key": "bitcoin:tLTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Litecoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tLTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 50, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Metaverse ETP", "coin_name": "MetaverseETP", "coin_shortcut": "ETP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/mvs-org/metaverse", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "key": "bitcoin:ETP", "maintainer": "Sven Mutzl ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 100, "name": "Metaverse ETP", "negative_fee": false, "segwit": false, "shortcut": "ETP", "signed_message_header": "Metaverse Signed Message:\n", "slip44": 2302, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "etp", "website": "https://mvs.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 50, "address_type_p2sh": 55, "bech32_prefix": "mona", "bip115": false, "bitcore": ["https://mona.chainsight.info", "https://insight.electrum-mona.org"], "blockbook": ["https://blockbook.electrum-mona.org"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "Monacoin", "coin_name": "Monacoin", "coin_shortcut": "MONA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/monacoinproject/monacoin", "hash_genesis_block": "ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6", "key": "bitcoin:MONA", "maintainer": "cryptcoin-junkey ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Monacoin", "negative_fee": false, "segwit": true, "shortcut": "MONA", "signed_message_header": "Monacoin Signed Message:\n", "slip44": 22, "support": {"connect": true, "trezor1": "1.6.0", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "monacoin", "website": "https://monacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 16, "address_type_p2sh": 76, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.monetaryunit.org"], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "MonetaryUnit", "coin_name": "MonetaryUnit", "coin_shortcut": "MUE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/muecoin/MUE", "hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f", "key": "bitcoin:MUE", "maintainer": "Sotiris Blad ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "MonetaryUnit", "negative_fee": false, "segwit": false, "shortcut": "MUE", "signed_message_header": "MonetaryUnit Signed Message:\n", "slip44": 31, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "monetaryunit", "website": "https://www.monetaryunit.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 53, "bech32_prefix": "nix", "bip115": false, "bitcore": ["https://blockchain.nixplatform.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "NIX", "coin_name": "NIX", "coin_shortcut": "NIX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/nixplatform/nixcore", "hash_genesis_block": "dd28ad86def767c3cfc34267a950d871fc7462bc57ea4a929fc3596d9b598e41", "key": "bitcoin:NIX", "maintainer": "mattt21 ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 0, "name": "NIX", "negative_fee": false, "segwit": true, "shortcut": "NIX", "signed_message_header": "NIX Signed Message:\n", "slip44": 400, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "nix", "website": "https://nixplatform.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 52, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://nmc1.trezor.io", "https://nmc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Namecoin", "coin_name": "Namecoin", "coin_shortcut": "NMC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 2940, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/namecoin/namecoin-core", "hash_genesis_block": "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770", "key": "bitcoin:NMC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Namecoin", "negative_fee": false, "segwit": false, "shortcut": "NMC", "signed_message_header": "Namecoin Signed Message:\n", "slip44": 7, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "namecoin", "website": "https://namecoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 13, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX", "coin_name": "PIVX", "coin_shortcut": "PIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:PIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX", "negative_fee": false, "segwit": false, "shortcut": "PIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 119, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 35729707, "xpub_magic": 36513075, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 139, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook-testnet.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX Testnet", "coin_name": "PIVX Testnet", "coin_shortcut": "tPIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:tPIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX Testnet", "negative_fee": false, "segwit": false, "shortcut": "tPIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 981489719, "xpub_magic": 981492128, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 56, "address_type_p2sh": 60, "bech32_prefix": "bc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl", "coin_name": "Particl", "coin_shortcut": "PART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000ee0784c195317ac95623e22fddb8c7b8825dc3998e0bb924d66866eccf4c", "key": "bitcoin:PART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl", "negative_fee": false, "segwit": true, "shortcut": "PART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 44, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 1768850129, "xpub_magic": 2401087160, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 118, "address_type_p2sh": 122, "bech32_prefix": "tb", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl Testnet", "coin_name": "Particl Testnet", "coin_shortcut": "tPART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000594ada5310b367443ee0afd4fa3d0bbd5850ea4e33cdc7d6a904a7ec7c90", "key": "bitcoin:tPART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 3779229696, "xpub_magic": 76059768, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 55, "address_type_p2sh": 117, "bech32_prefix": "pc", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin", "coin_name": "Peercoin", "coin_shortcut": "PPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3", "key": "bitcoin:PPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin", "negative_fee": false, "segwit": true, "shortcut": "PPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 6, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tpc", "bip115": false, "bitcore": [], "blockbook": ["https://tblockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin Testnet", "coin_name": "Peercoin Testnet", "coin_shortcut": "tPPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06", "key": "bitcoin:tPPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 47, "address_type_p2sh": 22, "bech32_prefix": null, "bip115": false, "bitcore": ["https://live.pesetacoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Pesetacoin", "coin_name": "Pesetacoin", "coin_shortcut": "PTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "hash_genesis_block": "edfe5830b53251bfff733600b1cd5c192e761c011b055f07924634818c906438", "key": "bitcoin:PTC", "maintainer": "Rw ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Pesetacoin", "negative_fee": false, "segwit": false, "shortcut": "PTC", "signed_message_header": "Pesetacoin Signed Message:\n", "slip44": 109, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "pesetacoin", "website": "https://pesetacoin.info", "xprv_magic": 76079604, "xpub_magic": 76071982, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 55, "address_type_p2sh": 56, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.polispay.org"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Polis", "coin_name": "Polis", "coin_shortcut": "POLIS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/polispay/polis", "hash_genesis_block": "000009701eb781a8113b1af1d814e2f060f6408a2c990db291bc5108a1345c1e", "key": "bitcoin:POLIS", "maintainer": "Cronos ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Polis", "negative_fee": false, "segwit": false, "shortcut": "POLIS", "signed_message_header": "Polis Signed Message:\n", "slip44": 1997, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "polis", "website": "https://www.polispay.org", "xprv_magic": 65165637, "xpub_magic": 65166718, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 23, "address_type_p2sh": 83, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Primecoin", "coin_name": "Primecoin", "coin_shortcut": "XPM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/primecoin/primecoin", "hash_genesis_block": "963d17ba4dc753138078a2f56afb3af9674e2546822badff26837db9a0152106", "key": "bitcoin:XPM", "maintainer": "James Skrowvedeht ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 26, "minfee_kb": 1000, "name": "Primecoin", "negative_fee": false, "segwit": false, "shortcut": "XPM", "signed_message_header": "Primecoin Signed Message:\n", "slip44": 24, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "primecoin", "website": "https://primecoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 58, "address_type_p2sh": 50, "bech32_prefix": "qc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum", "coin_name": "Qtum", "coin_shortcut": "QTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "duplicate": true, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c", "key": "bitcoin:QTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum", "negative_fee": false, "segwit": true, "shortcut": "QTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 2301, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": true}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 120, "address_type_p2sh": 110, "bech32_prefix": "tq", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum Testnet", "coin_name": "Qtum Testnet", "coin_shortcut": "tQTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222", "key": "bitcoin:tQTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum Testnet", "negative_fee": false, "segwit": true, "shortcut": "tQTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 60, "address_type_p2sh": 122, "bech32_prefix": null, "bip115": false, "bitcore": ["https://ravencoin.network"], "blockbook": ["https://blockbook.ravencoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ravencoin", "coin_name": "Ravencoin", "coin_shortcut": "RVN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RavenProject/Ravencoin", "hash_genesis_block": "0000006b444bc2f2ffe627be9d9e7e7a0730000870ef6eb6da46c8eae389df90", "key": "bitcoin:RVN", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ravencoin", "negative_fee": false, "segwit": false, "shortcut": "RVN", "signed_message_header": "Raven Signed Message:\n", "slip44": 175, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "raven", "website": "https://ravencoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 105, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.ritocoin.org"], "blockbook": ["https://blockbook.ritocoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ritocoin", "coin_name": "Ritocoin", "coin_shortcut": "RITO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RitoProject", "hash_genesis_block": "00000075e344bdf1c0e433f453764b1830a7aa19b2a5213e707502a22b779c1b", "key": "bitcoin:RITO", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ritocoin", "negative_fee": false, "segwit": false, "shortcut": "RITO", "signed_message_header": "Rito Signed Message:\n", "slip44": 19169, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "rito", "website": "https://ritocoin.org", "xprv_magic": 87326380, "xpub_magic": 87353290, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 63, "address_type_p2sh": 18, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.smartcash.cc"], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash", "coin_name": "SmartCash", "coin_shortcut": "SMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "000007acc6970b812948d14ea5a0a13db0fdd07d5047c7e69101fa8b361e05a4", "key": "bitcoin:SMART", "maintainer": "Leandro Reinaux ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash", "negative_fee": false, "segwit": false, "shortcut": "SMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "smart", "website": "https://smartcash.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 21, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash Testnet", "coin_name": "SmartCash Testnet", "coin_shortcut": "tSMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "0000027235b5679bcd28c90d03d4bf1a9ba4c07c4efcc1c87d6c68cce25e6e5d", "key": "bitcoin:tSMART", "maintainer": "Leandro Reinaux ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tSMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "testsmart", "website": "https://smartcash.cc", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": "xc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Stakenet", "coin_name": "Stakenet", "coin_shortcut": "XSN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 1000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/X9Developers/XSN", "hash_genesis_block": "00000c822abdbb23e28f79a49d29b41429737c6c7e15df40d1b1f1b35907ae34", "key": "bitcoin:XSN", "maintainer": "Alexis Hernandez ", "max_address_length": 47, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Stakenet", "negative_fee": false, "segwit": true, "shortcut": "XSN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 199, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "stakenet", "website": "https://stakenet.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 63, "address_type_p2sh": 5, "bech32_prefix": "sys", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Syscoin", "coin_name": "Syscoin", "coin_shortcut": "SYS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 200, "High": 2000, "Low": 100, "Normal": 400}, "dust_limit": 1820, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/syscoin/syscoin", "hash_genesis_block": "0000022642db0346b6e01c2a397471f4f12e65d4f4251ec96c1f85367a61a7ab", "key": "bitcoin:SYS", "maintainer": "Jagdeep Sidhu ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Syscoin", "negative_fee": false, "segwit": true, "shortcut": "SYS", "signed_message_header": "Syscoin Signed Message:\n", "slip44": 57, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "syscoin", "website": "https://syscoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.terracoin.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Terracoin", "coin_name": "Terracoin", "coin_shortcut": "TRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/terracoin/terracoin", "hash_genesis_block": "00000000804bbc6a621a9dbb564ce469f492e1ccf2d70f8a6b241e26a277afa2", "key": "bitcoin:TRC", "maintainer": "The Terracoin Foundation ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Terracoin", "negative_fee": false, "segwit": false, "shortcut": "TRC", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 83, "support": {"connect": false, "trezor1": false, "trezor2": false, "webwallet": false}, "timestamp": false, "uri_prefix": "terracoin", "website": "https://terracoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 130, "address_type_p2sh": 30, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno"], "blocktime_seconds": 30, "cashaddr_prefix": null, "coin_label": "Unobtanium", "coin_name": "Unobtanium", "coin_shortcut": "UNO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 50, "High": 160, "Low": 10, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/unobtanium-official/unobtanium", "hash_genesis_block": "000004c2fc5fffb810dccc197d603690099a68305232e552d96ccbe8e2c52b75", "key": "bitcoin:UNO", "maintainer": "choicesz ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Unobtanium", "negative_fee": false, "segwit": false, "shortcut": "UNO", "signed_message_header": "Unobtanium Signed Message:\n", "slip44": 92, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "unobtanium", "website": "https://unobtanium.uno", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 70, "address_type_p2sh": 50, "bech32_prefix": "vips", "bip115": false, "bitcore": ["https://insight.vipstarco.in"], "blockbook": ["https://vips.blockbook.japanesecoin-pool.work"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "VIPSTARCOIN", "coin_name": "VIPSTARCOIN", "coin_shortcut": "VIPS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/VIPSTARCOIN/VIPSTARCOIN", "hash_genesis_block": "0000d068e1d30f79fb64446137106be9c6ee69a6a722295c131506b1ee09b77c", "key": "bitcoin:VIPS", "maintainer": "y-chan ", "max_address_length": 36, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "VIPSTARCOIN", "negative_fee": false, "segwit": true, "shortcut": "VIPS", "signed_message_header": "VIPSTARCOIN Signed Message:\n", "slip44": 1919, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "vipstarcoin", "website": "https://vipstarcoin.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 5, "bech32_prefix": "vtc", "bip115": false, "bitcore": [], "blockbook": ["https://vtc1.trezor.io", "https://vtc2.trezor.io", "https://vtc3.trezor.io", "https://vtc4.trezor.io", "https://vtc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Vertcoin", "coin_name": "Vertcoin", "coin_shortcut": "VTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/vertcoin-project/vertcoin-core", "hash_genesis_block": "4d96a915f49d40b1e5c2844d1ee2dccb90013a990ccea12c492d22110489f0c4", "key": "bitcoin:VTC", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Vertcoin", "negative_fee": false, "segwit": true, "shortcut": "VTC", "signed_message_header": "Vertcoin Signed Message:\n", "slip44": 28, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "vertcoin", "website": "https://vertcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 33, "bech32_prefix": "via", "bip115": false, "bitcore": ["https://explorer.viacoin.org"], "blockbook": [], "blocktime_seconds": 24, "cashaddr_prefix": null, "coin_label": "Viacoin", "coin_name": "Viacoin", "coin_shortcut": "VIA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7000, "High": 20000, "Low": 1000, "Normal": 14000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/viacoin", "hash_genesis_block": "4e9b54001f9976049830128ec0331515eaabe35a70970d79971da1539a400ba1", "key": "bitcoin:VIA", "maintainer": "romanornr ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Viacoin", "negative_fee": false, "segwit": true, "shortcut": "VIA", "signed_message_header": "Viacoin Signed Message:\n", "slip44": 14, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "viacoin", "website": "https://viacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 142, "address_type_p2sh": 145, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.zcore.cash"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "ZCore", "coin_name": "ZCore", "coin_shortcut": "ZCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcore-coin/zcore-2.0", "hash_genesis_block": "695b79c8c234b45b2eeb4722f33373e471c9b686ff78efeb39da95f824a9f81b", "key": "bitcoin:ZCR", "maintainer": "Erick Costa ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 34, "minfee_kb": 1000, "name": "ZCore", "negative_fee": false, "segwit": false, "shortcut": "ZCR", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 428, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcore", "website": "https://zcore.cash", "xprv_magic": 78791432, "xpub_magic": 78792518, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://zec1.trezor.io", "https://zec2.trezor.io", "https://zec3.trezor.io", "https://zec4.trezor.io", "https://zec5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash", "coin_name": "Zcash", "coin_shortcut": "ZEC", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08", "key": "bitcoin:ZEC", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash", "negative_fee": false, "segwit": false, "shortcut": "ZEC", "signed_message_header": "Zcash Signed Message:\n", "slip44": 133, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7461, "address_type_p2sh": 7354, "bech32_prefix": null, "bip115": false, "bitcore": ["https://explorer.testnet.z.cash"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash Testnet", "coin_name": "Zcash Testnet", "coin_shortcut": "TAZ", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38", "key": "bitcoin:TAZ", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TAZ", "signed_message_header": "Zcash Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 82, "address_type_p2sh": 7, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.zcoin.io"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin", "coin_name": "Zcoin", "coin_shortcut": "XZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "4381deb85b1b2c9843c222944b616d997516dcbd6a964e1eaf0def0830695233", "key": "bitcoin:XZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin", "negative_fee": false, "segwit": false, "shortcut": "XZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 136, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcoin", "website": "https://zcoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 178, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin Testnet", "coin_name": "Zcoin Testnet", "coin_shortcut": "tXZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "7ac038c193c2158c428c59f9ae0c02a07115141c6e9dc244ae96132e99b4e642", "key": "bitcoin:tXZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin Testnet", "negative_fee": false, "segwit": false, "shortcut": "tXZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "testzcoin", "website": "https://zcoin.io", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.zel.network"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Zel", "coin_name": "ZelCash", "coin_shortcut": "ZEL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zelcash", "hash_genesis_block": "00052461a5006c2e3b74ce48992a08695607912d5604c3eb8da25749b0900444", "key": "bitcoin:ZEL", "maintainer": "Cabecinha84 ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zel", "negative_fee": false, "segwit": false, "shortcut": "ZEL", "signed_message_header": "Zcash Signed Message:\n", "slip44": 19167, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "zelcash", "website": "https://zel.network", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}] From c9fd3f77a549c1bed422a65cfa1c4eb07e72b5ea Mon Sep 17 00:00:00 2001 From: matejcik Date: Thu, 12 Mar 2020 15:13:08 +0100 Subject: [PATCH 19/45] all: add overwintered field to coin specification --- core/src/apps/common/coininfo.py | 72 +++++++++++++++++++++++++++ core/src/apps/common/coininfo.py.mako | 6 +++ legacy/firmware/coin_info.c.mako | 1 + legacy/firmware/coins.h | 1 + 4 files changed, 80 insertions(+) diff --git a/core/src/apps/common/coininfo.py b/core/src/apps/common/coininfo.py index 1993b762b..05ccb5150 100644 --- a/core/src/apps/common/coininfo.py +++ b/core/src/apps/common/coininfo.py @@ -32,6 +32,7 @@ class CoinInfo: curve_name: str, extra_data: bool, timestamp: bool, + overwintered: bool, confidential_assets: dict, ): self.coin_name = coin_name @@ -56,6 +57,7 @@ class CoinInfo: self.curve_name = curve_name self.extra_data = extra_data self.timestamp = timestamp + self.overwintered = overwintered self.confidential_assets = confidential_assets if curve_name == "secp256k1-groestl": self.b58_hash = groestl512d_32 @@ -108,6 +110,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Regtest": @@ -134,6 +137,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Testnet": @@ -160,6 +164,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) if not utils.BITCOIN_ONLY: @@ -189,6 +194,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Axe": @@ -215,6 +221,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bellcoin": @@ -241,6 +248,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "BitZeny": @@ -267,6 +275,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bcash": @@ -293,6 +302,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bcash Testnet": @@ -319,6 +329,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bgold": @@ -345,6 +356,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bgold Testnet": @@ -371,6 +383,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bprivate": @@ -397,6 +410,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Brhodium": @@ -423,6 +437,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Bitcore": @@ -449,6 +464,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "CPUchain": @@ -475,6 +491,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Capricoin": @@ -501,6 +518,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=True, + overwintered=False, confidential_assets=None, ) elif name == "Crown": @@ -527,6 +545,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Dash": @@ -553,6 +572,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=True, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Dash Testnet": @@ -579,6 +599,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=True, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Decred": @@ -605,6 +626,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1-decred', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Decred Testnet": @@ -631,6 +653,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1-decred', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "DigiByte": @@ -657,6 +680,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Dogecoin": @@ -683,6 +707,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Elements": @@ -709,6 +734,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets={'address_prefix': 4, 'blech32_prefix': 'el'}, ) elif name == "Feathercoin": @@ -735,6 +761,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Florincoin": @@ -761,6 +788,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Fujicoin": @@ -787,6 +815,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Gincoin": @@ -813,6 +842,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "GameCredits": @@ -839,6 +869,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Groestlcoin": @@ -865,6 +896,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1-groestl', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Groestlcoin Testnet": @@ -891,6 +923,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1-groestl', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Hatch": @@ -917,6 +950,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Hatch Testnet": @@ -943,6 +977,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Horizen": @@ -969,6 +1004,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Komodo": @@ -995,6 +1031,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=True, confidential_assets=None, ) elif name == "Koto": @@ -1021,6 +1058,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Litecoin": @@ -1047,6 +1085,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Litecoin Testnet": @@ -1073,6 +1112,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "MetaverseETP": @@ -1099,6 +1139,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Monacoin": @@ -1125,6 +1166,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "MonetaryUnit": @@ -1151,6 +1193,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "NIX": @@ -1177,6 +1220,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Namecoin": @@ -1203,6 +1247,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "PIVX": @@ -1229,6 +1274,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "PIVX Testnet": @@ -1255,6 +1301,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Particl": @@ -1281,6 +1328,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Particl Testnet": @@ -1307,6 +1355,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Peercoin": @@ -1333,6 +1382,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=True, + overwintered=False, confidential_assets=None, ) elif name == "Peercoin Testnet": @@ -1359,6 +1409,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=True, + overwintered=False, confidential_assets=None, ) elif name == "Pesetacoin": @@ -1385,6 +1436,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Polis": @@ -1411,6 +1463,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Primecoin": @@ -1437,6 +1490,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Qtum": @@ -1463,6 +1517,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Qtum Testnet": @@ -1489,6 +1544,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Ravencoin": @@ -1515,6 +1571,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Ritocoin": @@ -1541,6 +1598,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "SmartCash": @@ -1567,6 +1625,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1-smart', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "SmartCash Testnet": @@ -1593,6 +1652,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1-smart', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Stakenet": @@ -1619,6 +1679,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Syscoin": @@ -1645,6 +1706,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Unobtanium": @@ -1671,6 +1733,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "VIPSTARCOIN": @@ -1697,6 +1760,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Vertcoin": @@ -1723,6 +1787,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Viacoin": @@ -1749,6 +1814,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "ZCore": @@ -1775,6 +1841,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Zcash": @@ -1801,6 +1868,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=True, timestamp=False, + overwintered=True, confidential_assets=None, ) elif name == "Zcash Testnet": @@ -1827,6 +1895,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=True, timestamp=False, + overwintered=True, confidential_assets=None, ) elif name == "Zcoin": @@ -1853,6 +1922,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "Zcoin Testnet": @@ -1879,6 +1949,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) elif name == "ZelCash": @@ -1905,6 +1976,7 @@ def by_name(name: str) -> CoinInfo: curve_name='secp256k1', extra_data=False, timestamp=False, + overwintered=False, confidential_assets=None, ) raise ValueError('Unknown coin name "%s"' % name) diff --git a/core/src/apps/common/coininfo.py.mako b/core/src/apps/common/coininfo.py.mako index 7535e0fe7..81a3ea731 100644 --- a/core/src/apps/common/coininfo.py.mako +++ b/core/src/apps/common/coininfo.py.mako @@ -32,6 +32,7 @@ class CoinInfo: curve_name: str, extra_data: bool, timestamp: bool, + overwintered: bool, confidential_assets: dict, ): self.coin_name = coin_name @@ -56,6 +57,7 @@ class CoinInfo: self.curve_name = curve_name self.extra_data = extra_data self.timestamp = timestamp + self.overwintered = overwintered self.confidential_assets = confidential_assets if curve_name == "secp256k1-groestl": self.b58_hash = groestl512d_32 @@ -116,6 +118,7 @@ ATTRIBUTES = ( ("curve_name", lambda r: repr(r.replace("_", "-"))), ("extra_data", bool), ("timestamp", bool), + ("overwintered", bool), ("confidential_assets", optional_dict), ) @@ -124,6 +127,9 @@ btc_names = ["Bitcoin", "Testnet", "Regtest"] coins_btc = [c for c in supported_on("trezor2", bitcoin) if c.name in btc_names] coins_alt = [c for c in supported_on("trezor2", bitcoin) if c.name not in btc_names] +for c in coins_btc + coins_alt: + c.overwintered = bool(c.consensus_branch_id) + %>\ def by_name(name: str) -> CoinInfo: if False: diff --git a/legacy/firmware/coin_info.c.mako b/legacy/firmware/coin_info.c.mako index 3c30ba067..0bf75df24 100644 --- a/legacy/firmware/coin_info.c.mako +++ b/legacy/firmware/coin_info.c.mako @@ -48,6 +48,7 @@ const CoinInfo coins[COINS_COUNT] = { .curve = &${c.curve_name}_info, .extra_data = ${c_bool(c.extra_data)}, .timestamp = ${c_bool(c.timestamp)}, + .overwintered = ${c_bool(c.consensus_branch_id)}, }, % endfor }; diff --git a/legacy/firmware/coins.h b/legacy/firmware/coins.h index bc84b3c6a..4bb924f78 100644 --- a/legacy/firmware/coins.h +++ b/legacy/firmware/coins.h @@ -51,6 +51,7 @@ typedef struct _CoinInfo { const curve_info *curve; bool extra_data; bool timestamp; + bool overwintered; } CoinInfo; #include "coin_info.h" From 27803ee8c1a327e902e5efedb3bd0c4cdb7b2bee Mon Sep 17 00:00:00 2001 From: matejcik Date: Thu, 12 Mar 2020 15:30:21 +0100 Subject: [PATCH 20/45] all: drop overwintered field from transaction --- common/protob/messages-bitcoin.proto | 12 ++++----- core/src/apps/wallet/sign_tx/helpers.py | 2 -- core/src/apps/wallet/sign_tx/segwit_bip143.py | 2 +- core/src/apps/wallet/sign_tx/signing.py | 14 +++++------ core/src/apps/wallet/sign_tx/zcash.py | 4 +-- core/src/trezor/messages/SignTx.py | 3 --- core/src/trezor/messages/TransactionType.py | 3 --- core/tests/test_apps.wallet.zcash.zip143.py | 1 - core/tests/test_apps.wallet.zcash.zip243.py | 1 - legacy/firmware/signing.c | 25 +++++++++---------- python/src/trezorlib/messages/SignTx.py | 3 --- .../src/trezorlib/messages/TransactionType.py | 3 --- tests/device_tests/test_msg_signtx_komodo.py | 2 -- tests/device_tests/test_msg_signtx_zcash.py | 10 ++------ 14 files changed, 30 insertions(+), 55 deletions(-) diff --git a/common/protob/messages-bitcoin.proto b/common/protob/messages-bitcoin.proto index eb119a17a..55ac743bd 100644 --- a/common/protob/messages-bitcoin.proto +++ b/common/protob/messages-bitcoin.proto @@ -130,10 +130,10 @@ message SignTx { optional uint32 version = 4 [default=1]; // transaction version optional uint32 lock_time = 5 [default=0]; // transaction lock_time optional uint32 expiry = 6; // only for Decred and Zcash - optional bool overwintered = 7; // only for Zcash - optional uint32 version_group_id = 8; // only for Zcash, nVersionGroupId when overwintered is set + // optional bool overwintered = 7; // deprecated - only for Zcash + optional uint32 version_group_id = 8; // only for Zcash, nVersionGroupId optional uint32 timestamp = 9; // only for Peercoin, Capricoin - optional uint32 branch_id = 10; // only for Zcash, BRANCH_ID when overwintered is set + optional uint32 branch_id = 10; // only for Zcash, BRANCH_ID } /** @@ -196,10 +196,10 @@ message TxAck { optional bytes extra_data = 8; // only for Dash, Zcash optional uint32 extra_data_len = 9; // only for Dash, Zcash optional uint32 expiry = 10; // only for Decred and Zcash - optional bool overwintered = 11; // only for Zcash - optional uint32 version_group_id = 12; // only for Zcash, nVersionGroupId when overwintered is set + // optional bool overwintered = 11; // deprecated - only for Zcash + optional uint32 version_group_id = 12; // only for Zcash, nVersionGroupId optional uint32 timestamp = 13; // only for Peercoin, Capricoin - optional uint32 branch_id = 14; // only for Zcash, BRANCH_ID when overwintered is set + optional uint32 branch_id = 14; // only for Zcash, BRANCH_ID /** * Structure representing transaction input */ diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index 8ce189521..d01f35b16 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -172,7 +172,6 @@ def sanitize_sign_tx(tx: SignTx, coin: CoinInfo) -> SignTx: tx.outputs_count = tx.outputs_count if tx.outputs_count is not None else 0 tx.coin_name = tx.coin_name if tx.coin_name is not None else "Bitcoin" tx.expiry = tx.expiry if tx.expiry is not None else 0 - tx.overwintered = tx.overwintered if tx.overwintered is not None else False tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 return tx @@ -184,7 +183,6 @@ def sanitize_tx_meta(tx: TransactionType, coin: CoinInfo) -> TransactionType: tx.outputs_cnt = tx.outputs_cnt if tx.outputs_cnt is not None else 0 tx.extra_data_len = tx.extra_data_len if tx.extra_data_len is not None else 0 tx.expiry = tx.expiry if tx.expiry is not None else 0 - tx.overwintered = tx.overwintered if tx.overwintered is not None else False tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 return tx diff --git a/core/src/apps/wallet/sign_tx/segwit_bip143.py b/core/src/apps/wallet/sign_tx/segwit_bip143.py index e25a8ff33..a92d4a847 100644 --- a/core/src/apps/wallet/sign_tx/segwit_bip143.py +++ b/core/src/apps/wallet/sign_tx/segwit_bip143.py @@ -58,7 +58,7 @@ class Bip143: ) -> bytes: h_preimage = HashWriter(sha256()) - ensure(not tx.overwintered) + ensure(not coin.overwintered) write_uint32(h_preimage, tx.version) # nVersion write_bytes(h_preimage, self.get_prevouts_hash(coin)) # hashPrevouts diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 71dafe560..dee13b1b7 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -64,7 +64,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI if not utils.BITCOIN_ONLY and coin.decred: hash143 = decred.DecredPrefixHasher(tx) # pseudo BIP-0143 prefix hashing tx_ser = TxRequestSerializedType() - elif not utils.BITCOIN_ONLY and tx.overwintered: + elif not utils.BITCOIN_ONLY and coin.overwintered: if tx.version == 3: branch_id = tx.branch_id or 0x5BA81B19 # Overwinter hash143 = zcash.Zip143(branch_id) # ZIP-0143 transaction hashing @@ -130,7 +130,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI InputScriptType.SPENDADDRESS, InputScriptType.SPENDMULTISIG, ): - if coin.force_bip143 or (not utils.BITCOIN_ONLY and tx.overwintered): + if coin.force_bip143 or (not utils.BITCOIN_ONLY and coin.overwintered): if not txi.amount: raise SigningError( FailureType.DataError, "Expected input with amount" @@ -288,7 +288,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): tx_ser.signature = None tx_req.serialized = tx_ser - elif coin.force_bip143 or (not utils.BITCOIN_ONLY and tx.overwintered): + elif coin.force_bip143 or (not utils.BITCOIN_ONLY and coin.overwintered): # STAGE_REQUEST_SEGWIT_INPUT txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) input_check_wallet_path(txi_sign, wallet_path) @@ -569,7 +569,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): writers.write_uint32(tx_ser.serialized_tx, tx.lock_time) - if not utils.BITCOIN_ONLY and tx.overwintered: + if not utils.BITCOIN_ONLY and coin.overwintered: if tx.version == 3: writers.write_uint32(tx_ser.serialized_tx, tx.expiry) # expiryHeight writers.write_varint(tx_ser.serialized_tx, 0) # nJoinSplit @@ -606,7 +606,7 @@ async def get_prevtx_output_value( else: txh = utils.HashWriter(sha256()) - if not utils.BITCOIN_ONLY and tx.overwintered: + if not utils.BITCOIN_ONLY and coin.overwintered: writers.write_uint32( txh, tx.version | zcash.OVERWINTERED ) # nVersion | fOverwintered @@ -649,7 +649,7 @@ async def get_prevtx_output_value( writers.write_uint32(txh, tx.lock_time) - if not utils.BITCOIN_ONLY and (tx.overwintered or coin.decred): + if not utils.BITCOIN_ONLY and (coin.overwintered or coin.decred): writers.write_uint32(txh, tx.expiry) ofs = 0 @@ -683,7 +683,7 @@ def get_hash_type(coin: coininfo.CoinInfo) -> int: def get_tx_header(coin: coininfo.CoinInfo, tx: SignTx, segwit: bool): w_txi = bytearray() - if not utils.BITCOIN_ONLY and tx.overwintered: + if not utils.BITCOIN_ONLY and coin.overwintered: writers.write_uint32( w_txi, tx.version | zcash.OVERWINTERED ) # nVersion | fOverwintered diff --git a/core/src/apps/wallet/sign_tx/zcash.py b/core/src/apps/wallet/sign_tx/zcash.py index a192922a2..d0776fa3f 100644 --- a/core/src/apps/wallet/sign_tx/zcash.py +++ b/core/src/apps/wallet/sign_tx/zcash.py @@ -85,7 +85,7 @@ class Zip143: ) ) - ensure(tx.overwintered) + ensure(coin.overwintered) ensure(tx.version == 3) write_uint32( @@ -132,7 +132,7 @@ class Zip243(Zip143): ) ) - ensure(tx.overwintered) + ensure(coin.overwintered) ensure(tx.version == 4) write_uint32( diff --git a/core/src/trezor/messages/SignTx.py b/core/src/trezor/messages/SignTx.py index 67e5b3ebc..2977808ea 100644 --- a/core/src/trezor/messages/SignTx.py +++ b/core/src/trezor/messages/SignTx.py @@ -21,7 +21,6 @@ class SignTx(p.MessageType): version: int = None, lock_time: int = None, expiry: int = None, - overwintered: bool = None, version_group_id: int = None, timestamp: int = None, branch_id: int = None, @@ -32,7 +31,6 @@ class SignTx(p.MessageType): self.version = version self.lock_time = lock_time self.expiry = expiry - self.overwintered = overwintered self.version_group_id = version_group_id self.timestamp = timestamp self.branch_id = branch_id @@ -46,7 +44,6 @@ class SignTx(p.MessageType): 4: ('version', p.UVarintType, 0), # default=1 5: ('lock_time', p.UVarintType, 0), # default=0 6: ('expiry', p.UVarintType, 0), - 7: ('overwintered', p.BoolType, 0), 8: ('version_group_id', p.UVarintType, 0), 9: ('timestamp', p.UVarintType, 0), 10: ('branch_id', p.UVarintType, 0), diff --git a/core/src/trezor/messages/TransactionType.py b/core/src/trezor/messages/TransactionType.py index 0d239f6bd..b2aaaf1ec 100644 --- a/core/src/trezor/messages/TransactionType.py +++ b/core/src/trezor/messages/TransactionType.py @@ -28,7 +28,6 @@ class TransactionType(p.MessageType): extra_data: bytes = None, extra_data_len: int = None, expiry: int = None, - overwintered: bool = None, version_group_id: int = None, timestamp: int = None, branch_id: int = None, @@ -43,7 +42,6 @@ class TransactionType(p.MessageType): self.extra_data = extra_data self.extra_data_len = extra_data_len self.expiry = expiry - self.overwintered = overwintered self.version_group_id = version_group_id self.timestamp = timestamp self.branch_id = branch_id @@ -61,7 +59,6 @@ class TransactionType(p.MessageType): 8: ('extra_data', p.BytesType, 0), 9: ('extra_data_len', p.UVarintType, 0), 10: ('expiry', p.UVarintType, 0), - 11: ('overwintered', p.BoolType, 0), 12: ('version_group_id', p.UVarintType, 0), 13: ('timestamp', p.UVarintType, 0), 14: ('branch_id', p.UVarintType, 0), diff --git a/core/tests/test_apps.wallet.zcash.zip143.py b/core/tests/test_apps.wallet.zcash.zip143.py index 4ee999479..8c7d3eaba 100644 --- a/core/tests/test_apps.wallet.zcash.zip143.py +++ b/core/tests/test_apps.wallet.zcash.zip143.py @@ -151,7 +151,6 @@ class TestZcashZip143(unittest.TestCase): version=v["version"], lock_time=v["lock_time"], expiry=v["expiry"], - overwintered=(v["version"] >= 3), version_group_id=v["version_group_id"], ) zip143 = Zip143(0x5ba81b19) # Overwinter diff --git a/core/tests/test_apps.wallet.zcash.zip243.py b/core/tests/test_apps.wallet.zcash.zip243.py index 776179b85..b4ed1e079 100644 --- a/core/tests/test_apps.wallet.zcash.zip243.py +++ b/core/tests/test_apps.wallet.zcash.zip243.py @@ -185,7 +185,6 @@ class TestZcashZip243(unittest.TestCase): version=v["version"], lock_time=v["lock_time"], expiry=v["expiry"], - overwintered=(v["version"] >= 3), version_group_id=v["version_group_id"], ) zip243 = Zip243(0x76b809bb) # Sapling diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index b8d0b242d..4cc9944f6 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -70,7 +70,6 @@ static uint64_t to_spend, authorized_amount, spending, change_spend; static uint32_t version = 1; static uint32_t lock_time = 0; static uint32_t expiry = 0; -static bool overwintered = false; static uint32_t version_group_id = 0; static uint32_t timestamp = 0; #if !BITCOIN_ONLY @@ -486,12 +485,11 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, lock_time = msg->lock_time; expiry = msg->expiry; #if !BITCOIN_ONLY - overwintered = msg->has_overwintered && msg->overwintered; version_group_id = msg->version_group_id; timestamp = msg->timestamp; branch_id = msg->branch_id; // set default values for Zcash if branch_id is unset - if (overwintered && (branch_id == 0)) { + if (coin->overwintered && (branch_id == 0)) { switch (version) { case 3: branch_id = 0x5BA81B19; // Overwinter @@ -536,7 +534,8 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, next_nonsegwit_input = 0xffffffff; tx_init(&to, inputs_count, outputs_count, version, lock_time, expiry, 0, - coin->curve->hasher_sign, overwintered, version_group_id, timestamp); + coin->curve->hasher_sign, coin->overwintered, version_group_id, + timestamp); #if !BITCOIN_ONLY if (coin->decred) { @@ -544,7 +543,7 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, to.is_decred = true; tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, - coin->curve->hasher_sign, overwintered, version_group_id, + coin->curve->hasher_sign, coin->overwintered, version_group_id, timestamp); ti.version |= (DECRED_SERIALIZE_NO_WITNESS << 16); ti.is_decred = true; @@ -553,7 +552,7 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, // segwit hashes for hashPrevouts and hashSequence #if !BITCOIN_ONLY - if (overwintered) { + if (coin->overwintered) { hasher_InitParam(&hasher_prevouts, HASHER_BLAKE2B_PERSONAL, "ZcashPrevoutHash", 16); hasher_InitParam(&hasher_sequence, HASHER_BLAKE2B_PERSONAL, @@ -1139,7 +1138,7 @@ void signing_txack(TransactionType *tx) { } #endif - if (coin->force_bip143 || overwintered) { + if (coin->force_bip143 || coin->overwintered) { if (!tx->inputs[0].has_amount) { fsm_sendFailure(FailureType_Failure_DataError, _("Expected input with amount")); @@ -1229,7 +1228,7 @@ void signing_txack(TransactionType *tx) { } tx_init(&tp, tx->inputs_cnt, tx->outputs_cnt, tx->version, tx->lock_time, tx->expiry, tx->extra_data_len, coin->curve->hasher_sign, - tx->overwintered, tx->version_group_id, tx->timestamp); + coin->overwintered, tx->version_group_id, tx->timestamp); #if !BITCOIN_ONLY if (coin->decred) { tp.version |= (DECRED_SERIALIZE_NO_WITNESS << 16); @@ -1331,7 +1330,7 @@ void signing_txack(TransactionType *tx) { PROGRESS_PRECISION); if (idx2 == 0) { tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, - coin->curve->hasher_sign, overwintered, version_group_id, + coin->curve->hasher_sign, coin->overwintered, version_group_id, timestamp); hasher_Reset(&hasher_check); } @@ -1427,7 +1426,7 @@ void signing_txack(TransactionType *tx) { resp.serialized.has_serialized_tx = true; if (tx->inputs[0].script_type == InputScriptType_SPENDMULTISIG || tx->inputs[0].script_type == InputScriptType_SPENDADDRESS) { - if (!(coin->force_bip143 || overwintered)) { + if (!(coin->force_bip143 || coin->overwintered)) { fsm_sendFailure(FailureType_Failure_DataError, _("Transaction has changed during signing")); signing_abort(); @@ -1449,7 +1448,7 @@ void signing_txack(TransactionType *tx) { uint8_t hash[32] = {0}; #if !BITCOIN_ONLY - if (overwintered) { + if (coin->overwintered) { switch (version) { case 3: signing_hash_zip143(&tx->inputs[0], hash); @@ -1575,14 +1574,14 @@ void signing_txack(TransactionType *tx) { if (idx1 == 0) { // witness tx_init(&to, inputs_count, outputs_count, version, lock_time, expiry, 0, - coin->curve->hasher_sign, overwintered, version_group_id, + coin->curve->hasher_sign, coin->overwintered, version_group_id, timestamp); to.is_decred = true; } // witness hash tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, - coin->curve->hasher_sign, overwintered, version_group_id, + coin->curve->hasher_sign, coin->overwintered, version_group_id, timestamp); ti.version |= (DECRED_SERIALIZE_WITNESS_SIGNING << 16); ti.is_decred = true; diff --git a/python/src/trezorlib/messages/SignTx.py b/python/src/trezorlib/messages/SignTx.py index c34c04bb1..905f019b0 100644 --- a/python/src/trezorlib/messages/SignTx.py +++ b/python/src/trezorlib/messages/SignTx.py @@ -21,7 +21,6 @@ class SignTx(p.MessageType): version: int = None, lock_time: int = None, expiry: int = None, - overwintered: bool = None, version_group_id: int = None, timestamp: int = None, branch_id: int = None, @@ -32,7 +31,6 @@ class SignTx(p.MessageType): self.version = version self.lock_time = lock_time self.expiry = expiry - self.overwintered = overwintered self.version_group_id = version_group_id self.timestamp = timestamp self.branch_id = branch_id @@ -46,7 +44,6 @@ class SignTx(p.MessageType): 4: ('version', p.UVarintType, 0), # default=1 5: ('lock_time', p.UVarintType, 0), # default=0 6: ('expiry', p.UVarintType, 0), - 7: ('overwintered', p.BoolType, 0), 8: ('version_group_id', p.UVarintType, 0), 9: ('timestamp', p.UVarintType, 0), 10: ('branch_id', p.UVarintType, 0), diff --git a/python/src/trezorlib/messages/TransactionType.py b/python/src/trezorlib/messages/TransactionType.py index c3eb7698d..c3949337b 100644 --- a/python/src/trezorlib/messages/TransactionType.py +++ b/python/src/trezorlib/messages/TransactionType.py @@ -28,7 +28,6 @@ class TransactionType(p.MessageType): extra_data: bytes = None, extra_data_len: int = None, expiry: int = None, - overwintered: bool = None, version_group_id: int = None, timestamp: int = None, branch_id: int = None, @@ -43,7 +42,6 @@ class TransactionType(p.MessageType): self.extra_data = extra_data self.extra_data_len = extra_data_len self.expiry = expiry - self.overwintered = overwintered self.version_group_id = version_group_id self.timestamp = timestamp self.branch_id = branch_id @@ -61,7 +59,6 @@ class TransactionType(p.MessageType): 8: ('extra_data', p.BytesType, 0), 9: ('extra_data_len', p.UVarintType, 0), 10: ('expiry', p.UVarintType, 0), - 11: ('overwintered', p.BoolType, 0), 12: ('version_group_id', p.UVarintType, 0), 13: ('timestamp', p.UVarintType, 0), 14: ('branch_id', p.UVarintType, 0), diff --git a/tests/device_tests/test_msg_signtx_komodo.py b/tests/device_tests/test_msg_signtx_komodo.py index c7594ee73..46e76252c 100644 --- a/tests/device_tests/test_msg_signtx_komodo.py +++ b/tests/device_tests/test_msg_signtx_komodo.py @@ -85,7 +85,6 @@ class TestMsgSigntxKomodo: details = proto.SignTx( version=4, - overwintered=True, version_group_id=0x892F2085, branch_id=0x76B809BB, lock_time=0x5D2A30B8, @@ -165,7 +164,6 @@ class TestMsgSigntxKomodo: details = proto.SignTx( version=4, - overwintered=True, version_group_id=0x892F2085, branch_id=0x76B809BB, lock_time=0x5D2AF1F2, diff --git a/tests/device_tests/test_msg_signtx_zcash.py b/tests/device_tests/test_msg_signtx_zcash.py index e063c3e93..85ea5939d 100644 --- a/tests/device_tests/test_msg_signtx_zcash.py +++ b/tests/device_tests/test_msg_signtx_zcash.py @@ -79,10 +79,7 @@ class TestMsgSigntxZcash: ) details = proto.SignTx( - version=3, - overwintered=True, - version_group_id=0x03C48270, - branch_id=0x5BA81B19, + version=3, version_group_id=0x03C48270, branch_id=0x5BA81B19, ) _, serialized_tx = btc.sign_tx( client, @@ -144,10 +141,7 @@ class TestMsgSigntxZcash: ) details = proto.SignTx( - version=4, - overwintered=True, - version_group_id=0x892F2085, - branch_id=0x76B809BB, + version=4, version_group_id=0x892F2085, branch_id=0x76B809BB, ) _, serialized_tx = btc.sign_tx( client, From ed464f3d4720638b8a5cf353893dde9b1909e8df Mon Sep 17 00:00:00 2001 From: matejcik Date: Tue, 10 Mar 2020 17:08:49 +0100 Subject: [PATCH 21/45] all: ensure expiry, timestamp and extra_data are blocked as appropriate --- core/src/apps/wallet/sign_tx/helpers.py | 27 +++++++++-- core/src/apps/wallet/sign_tx/signing.py | 19 ++++---- legacy/firmware/fsm_msg_coin.h | 6 +++ legacy/firmware/signing.c | 61 +++++++++++++++++++------ legacy/firmware/transaction.c | 36 +++++++++++++-- tests/device_tests/test_msg_signtx.py | 41 +++++++++++++++++ 6 files changed, 158 insertions(+), 32 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index d01f35b16..2964ccc47 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -171,8 +171,14 @@ def sanitize_sign_tx(tx: SignTx, coin: CoinInfo) -> SignTx: tx.inputs_count = tx.inputs_count if tx.inputs_count is not None else 0 tx.outputs_count = tx.outputs_count if tx.outputs_count is not None else 0 tx.coin_name = tx.coin_name if tx.coin_name is not None else "Bitcoin" - tx.expiry = tx.expiry if tx.expiry is not None else 0 - tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 + if coin.decred or coin.overwintered: + tx.expiry = tx.expiry if tx.expiry is not None else 0 + elif tx.expiry: + raise SigningError(FailureType.DataError, "Expiry not enabled on this coin.") + if coin.timestamp: + tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 + elif tx.timestamp: + raise SigningError(FailureType.DataError, "Timestamp not enabled on this coin.") return tx @@ -181,9 +187,20 @@ def sanitize_tx_meta(tx: TransactionType, coin: CoinInfo) -> TransactionType: tx.lock_time = tx.lock_time if tx.lock_time is not None else 0 tx.inputs_cnt = tx.inputs_cnt if tx.inputs_cnt is not None else 0 tx.outputs_cnt = tx.outputs_cnt if tx.outputs_cnt is not None else 0 - tx.extra_data_len = tx.extra_data_len if tx.extra_data_len is not None else 0 - tx.expiry = tx.expiry if tx.expiry is not None else 0 - tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 + if coin.extra_data: + tx.extra_data_len = tx.extra_data_len if tx.extra_data_len is not None else 0 + elif tx.extra_data_len: + raise SigningError( + FailureType.DataError, "Extra data not enabled on this coin." + ) + if coin.decred or coin.overwintered: + tx.expiry = tx.expiry if tx.expiry is not None else 0 + elif tx.expiry: + raise SigningError(FailureType.DataError, "Expiry not enabled on this coin.") + if coin.timestamp: + tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 + elif tx.timestamp: + raise SigningError(FailureType.DataError, "Timestamp not enabled on this coin.") return tx diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index dee13b1b7..cbdb276cb 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -413,7 +413,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): h_second = utils.HashWriter(sha256()) writers.write_uint32(h_sign, tx.version) # nVersion - if tx.timestamp: + if not utils.BITCOIN_ONLY and coin.timestamp: writers.write_uint32(h_sign, tx.timestamp) writers.write_varint(h_sign, tx.inputs_count) @@ -615,7 +615,7 @@ async def get_prevtx_output_value( writers.write_uint32(txh, tx.version | decred.DECRED_SERIALIZE_NO_WITNESS) else: writers.write_uint32(txh, tx.version) # nVersion - if tx.timestamp: + if not utils.BITCOIN_ONLY and coin.timestamp: writers.write_uint32(txh, tx.timestamp) writers.write_varint(txh, tx.inputs_cnt) @@ -652,12 +652,13 @@ async def get_prevtx_output_value( if not utils.BITCOIN_ONLY and (coin.overwintered or coin.decred): writers.write_uint32(txh, tx.expiry) - ofs = 0 - while ofs < tx.extra_data_len: - size = min(1024, tx.extra_data_len - ofs) - data = await helpers.request_tx_extra_data(tx_req, ofs, size, prev_hash) - writers.write_bytes(txh, data) - ofs += len(data) + if not utils.BITCOIN_ONLY and coin.extra_data: + ofs = 0 + while ofs < tx.extra_data_len: + size = min(1024, tx.extra_data_len - ofs) + data = await helpers.request_tx_extra_data(tx_req, ofs, size, prev_hash) + writers.write_bytes(txh, data) + ofs += len(data) if ( writers.get_tx_hash(txh, double=coin.sign_hash_double, reverse=True) @@ -690,7 +691,7 @@ def get_tx_header(coin: coininfo.CoinInfo, tx: SignTx, segwit: bool): writers.write_uint32(w_txi, tx.version_group_id) # nVersionGroupId else: writers.write_uint32(w_txi, tx.version) # nVersion - if tx.timestamp: + if not utils.BITCOIN_ONLY and coin.timestamp: writers.write_uint32(w_txi, tx.timestamp) if segwit: writers.write_varint(w_txi, 0x00) # segwit witness marker diff --git a/legacy/firmware/fsm_msg_coin.h b/legacy/firmware/fsm_msg_coin.h index 65d621eab..24ccee89d 100644 --- a/legacy/firmware/fsm_msg_coin.h +++ b/legacy/firmware/fsm_msg_coin.h @@ -102,6 +102,12 @@ void fsm_msgSignTx(const SignTx *msg) { const CoinInfo *coin = fsm_getCoin(msg->has_coin_name, msg->coin_name); if (!coin) return; + + CHECK_PARAM((coin->decred || coin->overwintered) || !msg->has_expiry, + _("Expiry not enabled on this coin.")) + CHECK_PARAM(coin->timestamp || !msg->has_timestamp, + _("Timestamp not enabled on this coin.")) + const HDNode *node = fsm_getDerivedNode(coin->curve_name, NULL, 0, NULL); if (!node) return; diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 4cc9944f6..4205f22b5 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -41,7 +41,9 @@ enum { STAGE_REQUEST_2_PREV_META, STAGE_REQUEST_2_PREV_INPUT, STAGE_REQUEST_2_PREV_OUTPUT, +#if !BITCOIN_ONLY STAGE_REQUEST_2_PREV_EXTRADATA, +#endif STAGE_REQUEST_3_OUTPUT, STAGE_REQUEST_4_INPUT, STAGE_REQUEST_4_OUTPUT, @@ -268,6 +270,8 @@ void send_req_2_prev_output(void) { msg_write(MessageType_MessageType_TxRequest, &resp); } +#if !BITCOIN_ONLY + void send_req_2_prev_extradata(uint32_t chunk_offset, uint32_t chunk_len) { signing_stage = STAGE_REQUEST_2_PREV_EXTRADATA; resp.has_request_type = true; @@ -284,6 +288,8 @@ void send_req_2_prev_extradata(uint32_t chunk_offset, uint32_t chunk_len) { msg_write(MessageType_MessageType_TxRequest, &resp); } +#endif + void send_req_3_output(void) { signing_stage = STAGE_REQUEST_3_OUTPUT; resp.has_request_type = true; @@ -483,21 +489,26 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, memcpy(&root, _root, sizeof(HDNode)); version = msg->version; lock_time = msg->lock_time; - expiry = msg->expiry; #if !BITCOIN_ONLY - version_group_id = msg->version_group_id; - timestamp = msg->timestamp; - branch_id = msg->branch_id; - // set default values for Zcash if branch_id is unset - if (coin->overwintered && (branch_id == 0)) { - switch (version) { - case 3: - branch_id = 0x5BA81B19; // Overwinter - break; - case 4: - branch_id = 0x76B809BB; // Sapling - break; + expiry = (coin->decred || coin->overwintered) ? msg->expiry : 0; + timestamp = coin->timestamp ? msg->timestamp : 0; + if (coin->overwintered) { + version_group_id = msg->version_group_id; + branch_id = msg->branch_id; + if (branch_id == 0) { + // set default values for Zcash if branch_id is unset + switch (version) { + case 3: + branch_id = 0x5BA81B19; // Overwinter + break; + case 4: + branch_id = 0x76B809BB; // Sapling + break; + } } + } else { + version_group_id = 0; + branch_id = 0; } #endif @@ -1221,6 +1232,24 @@ void signing_txack(TransactionType *tx) { signing_abort(); return; } + if (!coin->extra_data && tx->extra_data_len > 0) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Extra data not enabled on this coin.")); + signing_abort(); + return; + } + if (!coin->decred && !coin->overwintered && tx->has_expiry) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Expiry not enabled on this coin.")); + signing_abort(); + return; + } + if (!coin->timestamp && tx->has_timestamp) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Timestamp not enabled on this coin.")); + signing_abort(); + return; + } if (tx->inputs_cnt + tx->outputs_cnt < tx->inputs_cnt) { fsm_sendFailure(FailureType_Failure_DataError, _("Value overflow")); signing_abort(); @@ -1292,14 +1321,17 @@ void signing_txack(TransactionType *tx) { /* Check prevtx of next input */ idx2++; send_req_2_prev_output(); - } else if (tp.extra_data_len > 0) { // has extra data +#if !BITCOIN_ONLY + } else if (coin->extra_data && tp.extra_data_len > 0) { // has extra data send_req_2_prev_extradata(0, MIN(1024, tp.extra_data_len)); return; +#endif } else { /* prevtx is done */ signing_check_prevtx_hash(); } return; +#if !BITCOIN_ONLY case STAGE_REQUEST_2_PREV_EXTRADATA: if (!tx_serialize_extra_data_hash(&tp, tx->extra_data.bytes, tx->extra_data.size)) { @@ -1317,6 +1349,7 @@ void signing_txack(TransactionType *tx) { signing_check_prevtx_hash(); } return; +#endif case STAGE_REQUEST_3_OUTPUT: if (!signing_check_output(&tx->outputs[0])) { return; diff --git a/legacy/firmware/transaction.c b/legacy/firmware/transaction.c index 91e2d6aff..450a165d1 100644 --- a/legacy/firmware/transaction.c +++ b/legacy/firmware/transaction.c @@ -504,17 +504,22 @@ uint32_t tx_serialize_script(uint32_t size, const uint8_t *data, uint8_t *out) { uint32_t tx_serialize_header(TxStruct *tx, uint8_t *out) { int r = 4; +#if !BITCOIN_ONLY if (tx->overwintered) { uint32_t ver = tx->version | TX_OVERWINTERED; memcpy(out, &ver, 4); memcpy(out + 4, &(tx->version_group_id), 4); r += 4; - } else { + } else +#endif + { memcpy(out, &(tx->version), 4); +#if !BITCOIN_ONLY if (tx->timestamp) { memcpy(out + r, &(tx->timestamp), 4); r += 4; } +#endif if (tx->is_segwit) { memcpy(out + r, segwit_header, 2); r += 2; @@ -525,16 +530,21 @@ uint32_t tx_serialize_header(TxStruct *tx, uint8_t *out) { uint32_t tx_serialize_header_hash(TxStruct *tx) { int r = 4; +#if !BITCOIN_ONLY if (tx->overwintered) { uint32_t ver = tx->version | TX_OVERWINTERED; hasher_Update(&(tx->hasher), (const uint8_t *)&ver, 4); hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->version_group_id), 4); r += 4; - } else { + } else +#endif + { hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->version), 4); +#if !BITCOIN_ONLY if (tx->timestamp) { hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->timestamp), 4); } +#endif if (tx->is_segwit) { hasher_Update(&(tx->hasher), segwit_header, 2); r += 2; @@ -559,10 +569,13 @@ uint32_t tx_serialize_input(TxStruct *tx, const TxInputType *input, r += 32; memcpy(out + r, &input->prev_index, 4); r += 4; +#if !BITCOIN_ONLY if (tx->is_decred) { uint8_t tree = input->decred_tree & 0xFF; out[r++] = tree; - } else { + } else +#endif + { r += tx_serialize_script(input->script_sig.size, input->script_sig.bytes, out + r); } @@ -585,11 +598,14 @@ uint32_t tx_serialize_input_hash(TxStruct *tx, const TxInputType *input) { r += tx_serialize_header_hash(tx); } r += tx_prevout_hash(&(tx->hasher), input); +#if !BITCOIN_ONLY if (tx->is_decred) { uint8_t tree = input->decred_tree & 0xFF; hasher_Update(&(tx->hasher), (const uint8_t *)&(tree), 1); r++; - } else { + } else +#endif + { r += tx_script_hash(&(tx->hasher), input->script_sig.size, input->script_sig.bytes); } @@ -601,6 +617,7 @@ uint32_t tx_serialize_input_hash(TxStruct *tx, const TxInputType *input) { return r; } +#if !BITCOIN_ONLY uint32_t tx_serialize_decred_witness(TxStruct *tx, const TxInputType *input, uint8_t *out) { static const uint64_t amount = 0; @@ -652,6 +669,7 @@ uint32_t tx_serialize_decred_witness_hash(TxStruct *tx, return r; } +#endif uint32_t tx_serialize_middle(TxStruct *tx, uint8_t *out) { return ser_length(tx->outputs_len, out); @@ -663,6 +681,7 @@ uint32_t tx_serialize_middle_hash(TxStruct *tx) { uint32_t tx_serialize_footer(TxStruct *tx, uint8_t *out) { memcpy(out, &(tx->lock_time), 4); +#if !BITCOIN_ONLY if (tx->overwintered) { if (tx->version == 3) { memcpy(out + 4, &(tx->expiry), 4); @@ -681,11 +700,13 @@ uint32_t tx_serialize_footer(TxStruct *tx, uint8_t *out) { memcpy(out + 4, &(tx->expiry), 4); return 8; } +#endif return 4; } uint32_t tx_serialize_footer_hash(TxStruct *tx) { hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->lock_time), 4); +#if !BITCOIN_ONLY if (tx->overwintered) { hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->expiry), 4); hasher_Update(&(tx->hasher), (const uint8_t *)"\x00", 1); // nJoinSplit @@ -695,6 +716,7 @@ uint32_t tx_serialize_footer_hash(TxStruct *tx) { hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->expiry), 4); return 8; } +#endif return 4; } @@ -714,11 +736,13 @@ uint32_t tx_serialize_output(TxStruct *tx, const TxOutputBinType *output, } memcpy(out + r, &output->amount, 8); r += 8; +#if !BITCOIN_ONLY if (tx->is_decred) { uint16_t script_version = output->decred_script_version & 0xFFFF; memcpy(out + r, &script_version, 2); r += 2; } +#endif r += tx_serialize_script(output->script_pubkey.size, output->script_pubkey.bytes, out + r); tx->have_outputs++; @@ -751,6 +775,7 @@ uint32_t tx_serialize_output_hash(TxStruct *tx, const TxOutputBinType *output) { return r; } +#if !BITCOIN_ONLY uint32_t tx_serialize_extra_data_hash(TxStruct *tx, const uint8_t *data, uint32_t datalen) { if (tx->have_inputs < tx->inputs_len) { @@ -770,6 +795,7 @@ uint32_t tx_serialize_extra_data_hash(TxStruct *tx, const uint8_t *data, tx->size += datalen; return datalen; } +#endif void tx_init(TxStruct *tx, uint32_t inputs_len, uint32_t outputs_len, uint32_t version, uint32_t lock_time, uint32_t expiry, @@ -903,6 +929,7 @@ uint32_t tx_output_weight(const CoinInfo *coin, const TxOutputType *txoutput) { return 4 * (size + output_script_size); } +#if !BITCOIN_ONLY uint32_t tx_decred_witness_weight(const TxInputType *txinput) { uint32_t input_script_size = tx_input_script_size(txinput); uint32_t size = TXSIZE_DECRED_WITNESS + ser_length_size(input_script_size) + @@ -910,3 +937,4 @@ uint32_t tx_decred_witness_weight(const TxInputType *txinput) { return 4 * size; } +#endif diff --git a/tests/device_tests/test_msg_signtx.py b/tests/device_tests/test_msg_signtx.py index d823f0bb3..b71730104 100644 --- a/tests/device_tests/test_msg_signtx.py +++ b/tests/device_tests/test_msg_signtx.py @@ -893,3 +893,44 @@ class TestMsgSigntx: assert e.value.failure.message.endswith( "Not enough outputs in previous transaction." ) + + @pytest.mark.parametrize( + "field, value", + (("extra_data", b"hello world"), ("expiry", 9), ("timestamp", 42)), + ) + @pytest.mark.skip_ui + def test_prevtx_forbidden_fields(self, client, field, value): + cache = tx_cache("Bitcoin") + inp0 = proto.TxInputType(address_n=[0], prev_hash=TXHASH_157041, prev_index=0) + out1 = proto.TxOutputType( + address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", + amount=1000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + prev_tx = cache[TXHASH_157041] + setattr(prev_tx, field, value) + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, "Bitcoin", [inp0], [out1], prev_txes={TXHASH_157041: prev_tx} + ) + name = field[0].upper() + field[1:].replace("_", " ") + assert e.value.failure.message.endswith(name + " not enabled on this coin.") + + @pytest.mark.parametrize("field, value", (("expiry", 9), ("timestamp", 42))) + @pytest.mark.skip_ui + def test_signtx_forbidden_fields(self, client, field, value): + cache = tx_cache("Bitcoin") + inp0 = proto.TxInputType(address_n=[0], prev_hash=TXHASH_157041, prev_index=0) + out1 = proto.TxOutputType( + address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", + amount=1000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + details = proto.SignTx() + setattr(details, field, value) + with pytest.raises(TrezorFailure) as e: + btc.sign_tx(client, "Bitcoin", [inp0], [out1], details, prev_txes=cache) + name = field[0].upper() + field[1:].replace("_", " ") + assert e.value.failure.message.endswith(name + " not enabled on this coin.") From 7d5771911ce57c1f75a45a61d1e14c21d863747f Mon Sep 17 00:00:00 2001 From: matejcik Date: Fri, 13 Mar 2020 10:27:27 +0100 Subject: [PATCH 22/45] core: flip condition for force_bip143 this should be equivalent because Bitcoin does not have force_bip143 set --- core/src/apps/wallet/sign_tx/signing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index cbdb276cb..b8f16f5fb 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -130,7 +130,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI InputScriptType.SPENDADDRESS, InputScriptType.SPENDMULTISIG, ): - if coin.force_bip143 or (not utils.BITCOIN_ONLY and coin.overwintered): + if not utils.BITCOIN_ONLY and (coin.force_bip143 or coin.overwintered): if not txi.amount: raise SigningError( FailureType.DataError, "Expected input with amount" @@ -288,7 +288,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): tx_ser.signature = None tx_req.serialized = tx_ser - elif coin.force_bip143 or (not utils.BITCOIN_ONLY and coin.overwintered): + elif not utils.BITCOIN_ONLY and (coin.force_bip143 or coin.overwintered): # STAGE_REQUEST_SEGWIT_INPUT txi_sign = await helpers.request_tx_input(tx_req, i_sign, coin) input_check_wallet_path(txi_sign, wallet_path) From 6f9c6361eadab167ace267d8a559812976f635db Mon Sep 17 00:00:00 2001 From: matejcik Date: Fri, 13 Mar 2020 11:55:11 +0100 Subject: [PATCH 23/45] core: remove negative_fee and cashaddr_prefix from bitcoin-only fw --- core/src/apps/wallet/sign_tx/signing.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index b8f16f5fb..ccc044894 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -198,7 +198,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI fee = total_in - total_out - if coin.negative_fee: + if not utils.BITCOIN_ONLY and coin.negative_fee: pass # bypass check for negative fee coins, required for reward TX else: if fee < 0: @@ -720,8 +720,10 @@ def output_derive_script( witprog = addresses.decode_bech32_address(coin.bech32_prefix, o.address) return scripts.output_script_native_p2wpkh_or_p2wsh(witprog) - if coin.cashaddr_prefix is not None and o.address.startswith( - coin.cashaddr_prefix + ":" + if ( + not utils.BITCOIN_ONLY + and coin.cashaddr_prefix is not None + and o.address.startswith(coin.cashaddr_prefix + ":") ): prefix, addr = o.address.split(":") version, data = cashaddr.decode(prefix, addr) From e2035b49721274a8cefdf241d9b9abfee96fe884 Mon Sep 17 00:00:00 2001 From: matejcik Date: Fri, 13 Mar 2020 12:19:48 +0100 Subject: [PATCH 24/45] all: drop Horizen and BIP-115 support [NO BACKPORT] --- common/defs/bitcoin/actinium.json | 1 - common/defs/bitcoin/axe.json | 1 - common/defs/bitcoin/bcash.json | 1 - common/defs/bitcoin/bcash_testnet.json | 1 - common/defs/bitcoin/bellcoin.json | 1 - common/defs/bitcoin/bgold.json | 1 - common/defs/bitcoin/bgold_testnet.json | 1 - common/defs/bitcoin/bitcoin.json | 1 - common/defs/bitcoin/bitcoin_regtest.json | 1 - common/defs/bitcoin/bitcoin_testnet.json | 1 - common/defs/bitcoin/bitcore.json | 1 - common/defs/bitcoin/bitzeny.json | 1 - common/defs/bitcoin/bprivate.json | 1 - common/defs/bitcoin/brhodium.json | 1 - common/defs/bitcoin/capricoin.json | 1 - common/defs/bitcoin/cpuchain.json | 1 - common/defs/bitcoin/crown.json | 1 - common/defs/bitcoin/dash.json | 1 - common/defs/bitcoin/dash_testnet.json | 1 - common/defs/bitcoin/decred.json | 1 - common/defs/bitcoin/decred_testnet.json | 1 - common/defs/bitcoin/digibyte.json | 1 - common/defs/bitcoin/dogecoin.json | 1 - common/defs/bitcoin/elements.json | 1 - common/defs/bitcoin/etp.json | 8 +- common/defs/bitcoin/feathercoin.json | 1 - common/defs/bitcoin/florincoin.json | 1 - common/defs/bitcoin/fujicoin.json | 1 - common/defs/bitcoin/gamecredits.json | 1 - common/defs/bitcoin/gincoin.json | 1 - common/defs/bitcoin/groestlcoin.json | 1 - common/defs/bitcoin/groestlcoin_testnet.json | 1 - common/defs/bitcoin/hatch.json | 1 - common/defs/bitcoin/hatch_testnet.json | 1 - common/defs/bitcoin/horizen.json | 46 - common/defs/bitcoin/horizen.png | Bin 7883 -> 0 bytes common/defs/bitcoin/komodo.json | 1 - common/defs/bitcoin/koto.json | 1 - common/defs/bitcoin/litecoin.json | 1 - common/defs/bitcoin/litecoin_testnet.json | 1 - common/defs/bitcoin/monacoin.json | 1 - common/defs/bitcoin/monetaryunit.json | 1 - common/defs/bitcoin/namecoin.json | 1 - common/defs/bitcoin/nix.json | 1 - common/defs/bitcoin/particl.json | 1 - common/defs/bitcoin/particl_testnet.json | 1 - common/defs/bitcoin/peercoin.json | 1 - common/defs/bitcoin/peercoin_testnet.json | 1 - common/defs/bitcoin/pesetacoin.json | 1 - common/defs/bitcoin/pivx.json | 1 - common/defs/bitcoin/pivx_testnet.json | 1 - common/defs/bitcoin/polis.json | 1 - common/defs/bitcoin/primecoin.json | 1 - common/defs/bitcoin/qtum.json | 1 - common/defs/bitcoin/qtum_testnet.json | 1 - common/defs/bitcoin/ravencoin.json | 1 - common/defs/bitcoin/ritocoin.json | 1 - common/defs/bitcoin/smartcash.json | 1 - common/defs/bitcoin/smartcash_testnet.json | 1 - common/defs/bitcoin/stakenet.json | 1 - common/defs/bitcoin/syscoin.json | 1 - common/defs/bitcoin/terracoin.json | 1 - common/defs/bitcoin/unobtanium.json | 1 - common/defs/bitcoin/vertcoin.json | 1 - common/defs/bitcoin/viacoin.json | 1 - common/defs/bitcoin/vipstarcoin.json | 1 - common/defs/bitcoin/zcash.json | 1 - common/defs/bitcoin/zcash_testnet.json | 1 - common/defs/bitcoin/zcoin.json | 1 - common/defs/bitcoin/zcoin_testnet.json | 1 - common/defs/bitcoin/zcore.json | 1 - common/defs/bitcoin/zelcash.json | 1 - common/defs/coins_details.json | 1261 ++++++++--------- common/protob/messages-bitcoin.proto | 8 +- common/tools/coin_info.py | 1 - common/tools/coindef.py | 3 - core/src/apps/common/coininfo.py | 98 -- core/src/apps/common/coininfo.py.mako | 3 - core/src/apps/wallet/sign_tx/helpers.py | 5 - core/src/apps/wallet/sign_tx/scripts.py | 21 +- core/src/apps/wallet/sign_tx/signing.py | 13 - core/src/apps/wallet/sign_tx/writers.py | 22 - core/src/trezor/messages/TxInputType.py | 6 - core/src/trezor/messages/TxOutputType.py | 6 - core/tests/test_apps.wallet.signtx.scripts.py | 20 - .../firmware/protob/messages-bitcoin.options | 2 - python/docs/transaction-format.md | 8 +- python/src/trezorlib/coins.json | 2 +- python/src/trezorlib/messages/TxInputType.py | 6 - python/src/trezorlib/messages/TxOutputType.py | 6 - python/src/trezorlib/tx_api.py | 7 - python/tests/test_tx_api.py | 13 - 92 files changed, 635 insertions(+), 999 deletions(-) delete mode 100644 common/defs/bitcoin/horizen.json delete mode 100644 common/defs/bitcoin/horizen.png delete mode 100644 core/tests/test_apps.wallet.signtx.scripts.py diff --git a/common/defs/bitcoin/actinium.json b/common/defs/bitcoin/actinium.json index 3b6cc8e0f..d32404c28 100644 --- a/common/defs/bitcoin/actinium.json +++ b/common/defs/bitcoin/actinium.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/axe.json b/common/defs/bitcoin/axe.json index 83cecc96c..254d8f528 100644 --- a/common/defs/bitcoin/axe.json +++ b/common/defs/bitcoin/axe.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/bcash.json b/common/defs/bitcoin/bcash.json index d5d6141b3..ebfbfd234 100644 --- a/common/defs/bitcoin/bcash.json +++ b/common/defs/bitcoin/bcash.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": 0, "force_bip143": true, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/bcash_testnet.json b/common/defs/bitcoin/bcash_testnet.json index d9571513f..cc2931ddd 100644 --- a/common/defs/bitcoin/bcash_testnet.json +++ b/common/defs/bitcoin/bcash_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": 0, "force_bip143": true, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/bellcoin.json b/common/defs/bitcoin/bellcoin.json index c1cdca252..d84ec7b0b 100644 --- a/common/defs/bitcoin/bellcoin.json +++ b/common/defs/bitcoin/bellcoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 20 }, diff --git a/common/defs/bitcoin/bgold.json b/common/defs/bitcoin/bgold.json index 62b22fa9a..18a7a7a96 100644 --- a/common/defs/bitcoin/bgold.json +++ b/common/defs/bitcoin/bgold.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": 79, "force_bip143": true, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/bgold_testnet.json b/common/defs/bitcoin/bgold_testnet.json index b93ecc89c..a89907df2 100644 --- a/common/defs/bitcoin/bgold_testnet.json +++ b/common/defs/bitcoin/bgold_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": 79, "force_bip143": true, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/bitcoin.json b/common/defs/bitcoin/bitcoin.json index faf2ff4a4..53239270d 100644 --- a/common/defs/bitcoin/bitcoin.json +++ b/common/defs/bitcoin/bitcoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/bitcoin_regtest.json b/common/defs/bitcoin/bitcoin_regtest.json index 824cb2f9d..9f29818b6 100644 --- a/common/defs/bitcoin/bitcoin_regtest.json +++ b/common/defs/bitcoin/bitcoin_regtest.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/bitcoin_testnet.json b/common/defs/bitcoin/bitcoin_testnet.json index 3dc60c8c5..5faa6b477 100644 --- a/common/defs/bitcoin/bitcoin_testnet.json +++ b/common/defs/bitcoin/bitcoin_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/bitcore.json b/common/defs/bitcoin/bitcore.json index 9a16b6b71..726b079d2 100644 --- a/common/defs/bitcoin/bitcore.json +++ b/common/defs/bitcoin/bitcore.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10 }, diff --git a/common/defs/bitcoin/bitzeny.json b/common/defs/bitcoin/bitzeny.json index ed8e47bcb..7b14ccbd9 100644 --- a/common/defs/bitcoin/bitzeny.json +++ b/common/defs/bitcoin/bitzeny.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 20 }, diff --git a/common/defs/bitcoin/bprivate.json b/common/defs/bitcoin/bprivate.json index 63d4c8d57..9a2d26a49 100644 --- a/common/defs/bitcoin/bprivate.json +++ b/common/defs/bitcoin/bprivate.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": 42, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/brhodium.json b/common/defs/bitcoin/brhodium.json index f3f2e1692..8461d5bd2 100644 --- a/common/defs/bitcoin/brhodium.json +++ b/common/defs/bitcoin/brhodium.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/capricoin.json b/common/defs/bitcoin/capricoin.json index 31a1a948c..fb59cd931 100644 --- a/common/defs/bitcoin/capricoin.json +++ b/common/defs/bitcoin/capricoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 1, "Economy": 7, diff --git a/common/defs/bitcoin/cpuchain.json b/common/defs/bitcoin/cpuchain.json index a9780b851..40c30c69d 100644 --- a/common/defs/bitcoin/cpuchain.json +++ b/common/defs/bitcoin/cpuchain.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 20 }, diff --git a/common/defs/bitcoin/crown.json b/common/defs/bitcoin/crown.json index fdfe355ae..c20969cbd 100644 --- a/common/defs/bitcoin/crown.json +++ b/common/defs/bitcoin/crown.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/dash.json b/common/defs/bitcoin/dash.json index 87e2e186e..980d18883 100644 --- a/common/defs/bitcoin/dash.json +++ b/common/defs/bitcoin/dash.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/dash_testnet.json b/common/defs/bitcoin/dash_testnet.json index 471dc93dc..2a7b5b009 100644 --- a/common/defs/bitcoin/dash_testnet.json +++ b/common/defs/bitcoin/dash_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/decred.json b/common/defs/bitcoin/decred.json index 7c5fe10ff..f35b425a6 100644 --- a/common/defs/bitcoin/decred.json +++ b/common/defs/bitcoin/decred.json @@ -24,7 +24,6 @@ "decred": true, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/decred_testnet.json b/common/defs/bitcoin/decred_testnet.json index d889e5726..54aa6c814 100644 --- a/common/defs/bitcoin/decred_testnet.json +++ b/common/defs/bitcoin/decred_testnet.json @@ -24,7 +24,6 @@ "decred": true, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/digibyte.json b/common/defs/bitcoin/digibyte.json index d800c9b18..93129a40c 100644 --- a/common/defs/bitcoin/digibyte.json +++ b/common/defs/bitcoin/digibyte.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/dogecoin.json b/common/defs/bitcoin/dogecoin.json index f1821a985..1dee1bdeb 100644 --- a/common/defs/bitcoin/dogecoin.json +++ b/common/defs/bitcoin/dogecoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 100000 }, diff --git a/common/defs/bitcoin/elements.json b/common/defs/bitcoin/elements.json index a1daefdca..df1b85851 100644 --- a/common/defs/bitcoin/elements.json +++ b/common/defs/bitcoin/elements.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/etp.json b/common/defs/bitcoin/etp.json index 1b95d6cf8..8d16d377a 100644 --- a/common/defs/bitcoin/etp.json +++ b/common/defs/bitcoin/etp.json @@ -9,12 +9,12 @@ "decimals": 8, "address_type": 50, "address_type_p2sh": 5, - "maxfee_kb": 2000000, + "maxfee_kb": 2000000, "minfee_kb": 100, "signed_message_header": "Metaverse Signed Message:\n", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "xprv_magic": 76066276, - "xpub_magic": 76067358, + "xpub_magic": 76067358, "xpub_magic_segwit_p2sh": null, "xpub_magic_segwit_native": null, "bech32_prefix": null, @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, @@ -37,8 +36,7 @@ "min_address_length": 27, "max_address_length": 34, "bitcore": [], - "blockbook": [ - ], + "blockbook": [], "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, diff --git a/common/defs/bitcoin/feathercoin.json b/common/defs/bitcoin/feathercoin.json index 4938e9a2f..fa5343c0c 100644 --- a/common/defs/bitcoin/feathercoin.json +++ b/common/defs/bitcoin/feathercoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/florincoin.json b/common/defs/bitcoin/florincoin.json index af160b23f..a40a1243d 100644 --- a/common/defs/bitcoin/florincoin.json +++ b/common/defs/bitcoin/florincoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/fujicoin.json b/common/defs/bitcoin/fujicoin.json index f51fe3dbc..55da047be 100644 --- a/common/defs/bitcoin/fujicoin.json +++ b/common/defs/bitcoin/fujicoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10000, "Economy": 20000, diff --git a/common/defs/bitcoin/gamecredits.json b/common/defs/bitcoin/gamecredits.json index 7513a6bfc..185db1445 100644 --- a/common/defs/bitcoin/gamecredits.json +++ b/common/defs/bitcoin/gamecredits.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/gincoin.json b/common/defs/bitcoin/gincoin.json index 29f899180..7fa2ae1b0 100644 --- a/common/defs/bitcoin/gincoin.json +++ b/common/defs/bitcoin/gincoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/groestlcoin.json b/common/defs/bitcoin/groestlcoin.json index 4768a032c..f1f03adee 100644 --- a/common/defs/bitcoin/groestlcoin.json +++ b/common/defs/bitcoin/groestlcoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/groestlcoin_testnet.json b/common/defs/bitcoin/groestlcoin_testnet.json index 6fd3c675a..92e19afb3 100644 --- a/common/defs/bitcoin/groestlcoin_testnet.json +++ b/common/defs/bitcoin/groestlcoin_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/hatch.json b/common/defs/bitcoin/hatch.json index ba8774939..ef6f9787d 100644 --- a/common/defs/bitcoin/hatch.json +++ b/common/defs/bitcoin/hatch.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/hatch_testnet.json b/common/defs/bitcoin/hatch_testnet.json index 06cce20e8..3877a0b42 100644 --- a/common/defs/bitcoin/hatch_testnet.json +++ b/common/defs/bitcoin/hatch_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/horizen.json b/common/defs/bitcoin/horizen.json deleted file mode 100644 index a200f0fe4..000000000 --- a/common/defs/bitcoin/horizen.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "coin_name": "Horizen", - "coin_shortcut": "ZEN", - "coin_label": "Horizen", - "website": "https://www.horizen.global", - "github": "https://github.com/ZencashOfficial/zen", - "maintainer": "Power_VANO ", - "curve_name": "secp256k1", - "decimals": 8, - "address_type": 8329, - "address_type_p2sh": 8342, - "maxfee_kb": 2000000, - "minfee_kb": 1000, - "signed_message_header": "Zcash Signed Message:\n", - "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", - "xprv_magic": 76066276, - "xpub_magic": 76067358, - "xpub_magic_segwit_p2sh": null, - "xpub_magic_segwit_native": null, - "bech32_prefix": null, - "cashaddr_prefix": null, - "slip44": 121, - "segwit": false, - "decred": false, - "fork_id": null, - "force_bip143": false, - "bip115": true, - "default_fee_b": { - "Normal": 10 - }, - "dust_limit": 546, - "blocktime_seconds": 150, - "uri_prefix": "horizen", - "min_address_length": 35, - "max_address_length": 95, - "bitcore": [ - "https://explorer.horizen.global" - ], - "blockbook": [], - "negative_fee": false, - "cooldown": 100, - "consensus_branch_id": null, - "extra_data": false, - "timestamp": false, - "confidential_assets": null -} diff --git a/common/defs/bitcoin/horizen.png b/common/defs/bitcoin/horizen.png deleted file mode 100644 index 53036a457741e96044df2490d913c444835a2722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7883 zcmbVx2UJsCx9y>W^xi~b04WlZPyz($p-B-bf+$jw0HGy>5;_4CA|N7IP(TszLo5_U z1QZBG0THRvksu&ViqfRXjbHKo_l^I*?~a!-PR>4O&o$TFYpuO9#?ED18#C@h5{Cc) z;I=SF+0pOrzb*hzb*#gPOcaLu!-jx7vEH~qUGU1Q1~3SR(FHqcSi`Id##kSmc_a~QA8F%& zj`TxoW5D`)pcCOpIza$7!~+x_;2#)_4A%w!$%~|qf4zo+L4QI*{B*&FzZ`;`t!+WZ zcp?_0p@M**;p!S7O>Gr8LQP#;TN$JZgKI%yT2Qze1dc$e!;q?~puaz0x;G-m3u%Wk z{o5D)Nf+!B5<);ip(GMXg`}o}CwfES+S=Msm?~6N6+%Zqf+GS$Ji;M?!7~3aps>Mc zB90J(!v}(XF?x97Lql}IbfteSA%O6kHZb__Fwp}B4fh~G;VQ6SOZpRtLI1`PLW%x= zI>(@)SbuB)HZUZZj)nim5`6F>_+TIWf1v(7{ofqWLu+mQ+sD7v5)km)MR15o7=0Ok z2jt(PgB>CWSg0K~7#~VRV@<;7GG%_PhJZ9CVm(6eLuOz1@X|vXlQDy!x1ob&wuPucy#EmD)?pp*M`90 z(R7agBM+g4Kw!00Js|4Z7mIg*mQwxrOs3Wi%5KsC(f_NfSJs}z%7;P`OCsqp$ga4}hKZ^-zjti!zIpXiV zWRDH{d*qJ;{aHUq5A?5np$kU;DhMnF{P%0zzlq2H%Jbj$Bp)oD^na+5zq|+Iy+TMH zM697VJ$C<_LWKS&{lOk#|Fio4T{i!c^;`XaD%}51^?wHk?c)*Xjit9*DEQZUpud{Z zU#Wrq-&y-}?q3?%KX7_i{5AaDj_D7-8#*?SPEDk@>*{5Zy8s|YvOpO+gpVxcMdY4$ zywTb)d&ZIEB#$#Yeq^0}n!n0Xsgz(Aenn3^$q{fSqXUUoe(!da}mV}mw z7J*$#FXJie1tt;T6jRxr3_~|_B@i6Hg*Pp}^?ZXmMLo5@GVoNG+(T8Q*2GrgFK1&DsH;8(=o>J!wtcds7xSzO$*NIpcqOl@E=3%r!R!V<_@&m3}n zOP1L$5;j^Sez0mKQ5Rg0$AgZyLl@)Hk;i` z^XGcwi#o|rm@|;hw#-sB{yzP5+2X}%i3KAs%H4+MGW6O$m%G78yO-EO*1YVhxP3FFD8>)SuK4n!5YRuW`KLvkhmi^|4y$Br>=kTD7FP8qa0R zpSYo$)VHpgjIC4IFg)0K>9kzY*k|(;NNcrt`HE+f($HSKja2q5I9ibB0>HGE_F{}z z;mG(hz>NvPbt^nX0aq*n{1pE2nJ+s17I`hmv1Af$Y^C#&5jMKE=Drk0vvZ#+C&n&S z1}E{xtw?YIqd$6(Vp4AL5qF76gVeITu(v=Q<3c=%Dekc_Ij3%owRy{XYWjSV)KcY! zhiQ@6L3f%jZuT6tcz-Es&g|w2FIh2meejO|2BS2~5ed&h4B1p)XEE>b+{SQFa@Sq9 zve5Ojvgo1tPdN1>!{@Cl)jE=^f>^U>LLWQ=oPon?l&;mFdl23M3Gx=e24vN}h7By9 z!tojy)JxAnXpXdo{gur-z#Nacre=A^R4bXkQuE=ohfFl9ehuyCY&0V9I18=FFnz2e zUXpG8N6g-CHp^j~0C=lq?6mG&A|Xc7;>RO~R9Y zFA{@p6xYPUB@g*A9oZP$+dIZcgVD~uJN_)S?vy4EGxa=8UL&?!pO&KfRO3VyN3qde z-HYka%CH873v5pwvy+p(dAP_vtn!C#q-YymEyAVm7&E?)=|4{59ZdAAc5!Y-^L{H_ zBXEKA5w6-V6?$5E3F{JNT`mpf3dn`t=IEt z-~&tGw`-kWDv!`SX*qHSemC+9uLkJX$m^U}yW}1-Uw;9<3DCq*W;|kpzSoCT6xgVP z@zDNNk5AtV!((n-eZ}Pzu@g12L3MnvcjH`-#b$=o?bWqmX205Z469mmyG^arGF?N0 za?6=f4m0)-fFb_ku;rTDMjtq1`pe~p9FI^g&YTH@6F0-deok5ukDrwFXnNz0H!|oJ zV|20OAv`y@S)eNQ1AP>bW{7oe&WRHbhkkT?qIb4hEP!D%;=G13FLfc%)Jn4B$33ak zfW^kJ_4sRAKm&vBiOG=mgLgWvoL-5!sf&izz^ZG*Nhd$=GxP76;=P9|Urf8GZQZ_n z>8$W*PY0rSsd3Xuiunwu2wHnoTQ#Jfhk79KAt6~vTbqaKqn{~1K;5^0)P|6(TjL!u z63%~9T^r;VEjD|ms$%V`mzwV;^UlrI=5U_&isU*dln;HEgNfAUYZj`s)8+4b4(A2Xjr;&oQDRrTJmr2=J2y962PnG z>{QVplUu&c)o1tL^s-bHyG@hEnizc6m{fhax=Rn=cD*yS-7|F`YOpKNG49}S7ZuV^ zoe!m?lixYTTN(jJm~BeGU(vg=nDMYO?&ldAV^Xr5+_XW3F2krB{8E6;y^8^-)_t+$ zRs%2Lrz{fpc-jdLjv_#-MQzQ4cAe)V%InAV(#u-jPNuBt@CX8kaO;Jq(Kg+NQyx0- z$@ZG{`tg(^fy}NKlrFhL#*R0#2O0PsSTgh(`eet)REHPE3Liyh1(WYNg)fOlXKLnt z^(_;xX{mmZywg4k-#n)VFHEhxe>;|YW6~!2D1zm%>=7Xjav|N;&a#tq<7(`u657c9 zuMdZEtGfNp*(Ab@0=FaIMu#bNYT6W%+LNZaoLr~9Bj+8R0gVbDc5L0zk14wg|^wMUHC)U!=DXTphhp58z zAJZD1AGeey#-2@*_B5`TgLYSXs?NYPfsl< zf9%-&mzyiLF${8zSA{9APCWKNpiKQ#D|^jMK-#NaX4AtBI*sp80W)?*(iTW!ZNkOd z6(^MGHpxM{nIE0ozq^P>0fWifhnFnIyofoc-qnh2jccoa$TldiRnzO$PZ~Ymb9KgW z)neG5E-)ftffH72J3P>dr0EBRCQbUpt@fhK;J~Y6fGw7%O=e%ViRCmOSvfN#xI@jM z;pO9AzRGqeH45+58qgxu-Lrt+v1xd?x!sey$>EU5+mJ)Rb}v~@GersdJvlTG3g287 z#Q9q=l3|?dm%}Mj%eSVDo*WX3yIikCmwf5S%*oCj+%|?~FmRS(C`Qm!$#TzpUpg*| zW1zID$mK=hy=_R=2<%n2s6j!!dGFQO!h zS4_)~Rj?kO368JrwKvEl)toI4*J50)9mI(o{SI!+3G3WB)4B1(@G043{^;{Q=7mkE ztDEb>*W%SN>^EQb?k{+rk8}DibI1Q?f0fLFMma-9DpUECt9-9kjOS6H??GCA$u|uH z!Iz?zwKX$mX%uUeVc`j2m#b+~Rh!kwrT2P*`L6^~{HJB*hBm`0 zo-UnjFIva|@sQ=(LM_p*_}U0r<^iUBcLNEv_5D~y-LeDjKIdCpasklLtSUK;TKF|K zT3DK%3qmkm*Q_2fB{G>zkn;KH>|iHJb&0Na=`6h?%D2rhpyxaIB*rX&cYgen_5L+` z++KIZTv8YYBUK_*#X`)!o>nQT^Rn;56&=ev>V);Xgdt;bP zNXihxU8>-*;VtmqC6MzSiI3e%g$pC)5-m zjBb_%oTX=rz4o|gt9u(|sJkb&(og+3i8OR)a zs?IIyq6}^jktxs98PjsUZpUJ)&nSMrKoi`@NNUm^x!oA*6I-)hn)|`KG=HW&J--x- zz0q@b*;uagaJLNKxKobw+B1d#*XKIZUnm5n0((B|%g!tBtJjRYUB(U+YbUNQ54Fj22vjeE zqL-;`@=&2pfa8!iS#&BS^585XH-(v&`r=*BBH_|TgUH3)EvIst5`oQdxntzx22Y7l zXrEW6b|mWt+o{IVbC)(ZUOUa{m~jPXxbJ!*kBWQ@mw+37l~~lfE0h*n!6V91VkQGa z38}Mky{1(3aSBf`yGKZ-&Vjq*l;*d(C+oEeBXB!~^oBGnI@s{ZL5@8*NV2NYu{L(j z+eH6HeE;K-;aKf)*9KXggj$)2Q{(T4i{zIsZ-yC+jucuHe-P}M;@4s9zpABw`O41e zuXBH7B(w}AoaIjs3$?kLnDE6gerOH#eAcDgFZ08C*=c{Z(=kRxA(q8Aum2$jq+h4^ zHih#R&qfm01K$L=NidwSi(kVJR)uPs_f>WDWff;?f5F&Iz14n%J6ET}e2X%4RmNq- zw8+}dTnzkKv8`o$By!dswiD3Xb2Q_A;hUY=wF~gclTVhwn|0M{N||EWnXbKq2^WOj z@Tsp?I<7^iuXlmWl1#RD38Pz&D_RNGXGuSXZSR(%zRV|WOx)TreReA@vA>>;y5q>V z-fuYZMoibOd{kcXEm&Y0Cr`|njWCWyp!V)w_5H4z29er8F{u_Q@?9B7jpE-&RjdUl z?zDq8;SNfI>T94AJdytF)CUd?h1eIOC7Ua=cTBSTy(|b7Iccr*?bl#fZRD^5 z*KF!g2cOh6H&CL&v!Dj1&koZAfTYRsh~n1mI;#+rp1{fP(I?cecr_22tS5k%%ulAr z^3_RP^Hb6ZFf=l8IsJuEpOe9dQG_9i>)P6Zlosb)k7LI}{VC4{8y&&jhBzkvmm7|s zQ+;Xkaz_wf;wiZpqkR8QiULz>L{9&NyZ)*q_Pnwbu}`eJ*9(l#X*7J1g{1bF6og4% ziX}Oso*FGTD+|tm+)Z9WGe-6QcKmk z?Hj_-5G=v;*7Wc)5IpRIGUEqbcaBE$pH>zi-uGT7f##IcVjg8zy?8%2i>7>9e3vF1 zeoU!lmCvX^Ta;$(5MhAhcr{!+{eh^>PVA3~K5`q^dOx72>WNxR)0aX~Nhb1;GW%W| zXLF04AJcZLXgklh+lE53qS)8V^%0c17Z{#%s_PDXu9UX>4|(Pe5^O6mQ9EIJho3qk zZA8lH+uzuCflC5f&+>|>C}wY`bNTaDbr!vP5MAH&qD2HxRjbzkt>kun8$mzTg^QJY zZ3BxY36EheA9@}n+_opPjd6WnN6@%zZJ!IFiwoaKs#9M`Ua(7CTTzyq!;K>CcBO5? zK3V%j`IWTR%pLzQak_23M*rQJsmT(^^KKCoqTo#`aqRwboF--H_}Zc^2jFl>h$Vpd z2ohzXJzVqp@HgESQ;6;*z^XCyBK8sCXBWX$xQc#A{=xJ|t$7BwR912R^urHkhAw#AvWXPYkRnvx_iR1y644F^Erx>mheswIO-wRtt`&G91nPxphB zLViBhV^XQnE;9lE9+Mwcl$cYWh9}Lrzds*sF^xkx30y|21RdYgDM|ySgu#?W)`RmK zjtOS~20{tyzI}3LFNzXM9_n%5fjH#I+)*rPPn6Ehr~#o*h4Tf4QD&2K_WFVRz%o=WPX&t;t0b%D#rDv;f+z9Xb>N$mSVarJwf} zG(079Yj}E2S4qeS3fQ$8AQ+>M#;xUNG9`PY!Vv$h=|5*ksNXta!>U1vbPNw1}D5 z!vU)gq4LuU?2(dVeMxEs>_F7v0$#=|r>`Syr|tKKy^ii+N;uh&&%T;w&g#qh6=6;5 zOV7qfY+;@`MKhJ)QJPQ6K&MN@$O7MV;SbdFl>tS~?*S^tZmkFvchwry(PDs{#aCzM zkOMr+0>4hY|JEmuDMBN<_v*;dW3x7!{DbXUFjsI9LOYoW(WxKU2{!3~hxO}5FDH>`@c zoM%*r>RDHQ*m^&E0JM32y+!7ft*0h=l#gI?EQHcURxa|dH=7^i*efxBmLd)!-UV1Z zx*euu*sOCVM#PthW#B{ioR`Sy(3+JJT+o}nL5;UL%%+s2(T(waNh}2QuMqiJ#aCPTdshQm+ULi*p=Ym7R2&YjI3PX z21K!#XRV|tn7_ULtd(D=;nplFcwG`+~jQ8V17C$qiVY&k~tF9>~o zBb6FAInwWRy7O{150F^SBw!`fBf}TP-ZV*>ND_J{_DHT)uIW3rk;C~9LgPl=$>sWB z*k&oF_>Cg&I*_M_gNZG&^WQ-wYE@q zQ-PJ(MDlCtO-036$xJzsN1x>0eqdUnpk7&XkOQ4h`A(Ezpw;|K^Gc-=BBQu!!Qy9J zoW~tJIOi1#?%x2Pzs#|mKIi`&=&rrlZ`jv%K}*`Tp|+Re?Jezlx3jzwhWxI9t>#6S z2~@;c`6rGj0}hUZkZ0&1Zf8idAo~TQbuU9{S!|Z$GY>{`mz=ifkHa|!?#nZuvNYv-90x#^*Q&2XOSj}{_w13vc93I% zKkt1`mpbQW=QNT6P)1{`?M>60H5mL$(GaKYo_ZksU25DuXVf`GASj3O7$x<2Fr_Y; z5ccG|ORwaG>2v1c$9x{VThIr9pbp^GWPNe0rhCGH_~Kxu>AiqtH*{c7u}kPA56&fN t_vGV-&-FdaQe&dVTLa1gcrfsj7t{B;Do^%a$FIMeElg}srAF=v{{>+=(op~a diff --git a/common/defs/bitcoin/komodo.json b/common/defs/bitcoin/komodo.json index 15f6632e6..8e821e80d 100644 --- a/common/defs/bitcoin/komodo.json +++ b/common/defs/bitcoin/komodo.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/koto.json b/common/defs/bitcoin/koto.json index d9eea7c24..f501d84a7 100644 --- a/common/defs/bitcoin/koto.json +++ b/common/defs/bitcoin/koto.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/litecoin.json b/common/defs/bitcoin/litecoin.json index 05ffb4781..3f51cfea3 100644 --- a/common/defs/bitcoin/litecoin.json +++ b/common/defs/bitcoin/litecoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/litecoin_testnet.json b/common/defs/bitcoin/litecoin_testnet.json index 0a1347002..2f03f6522 100644 --- a/common/defs/bitcoin/litecoin_testnet.json +++ b/common/defs/bitcoin/litecoin_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/monacoin.json b/common/defs/bitcoin/monacoin.json index bd9ea1428..7774ba36c 100644 --- a/common/defs/bitcoin/monacoin.json +++ b/common/defs/bitcoin/monacoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/monetaryunit.json b/common/defs/bitcoin/monetaryunit.json index aa687c97b..407e5c04d 100644 --- a/common/defs/bitcoin/monetaryunit.json +++ b/common/defs/bitcoin/monetaryunit.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/namecoin.json b/common/defs/bitcoin/namecoin.json index 5ec8d577f..30820c3ce 100644 --- a/common/defs/bitcoin/namecoin.json +++ b/common/defs/bitcoin/namecoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/nix.json b/common/defs/bitcoin/nix.json index 128217c5c..ef5f331b0 100644 --- a/common/defs/bitcoin/nix.json +++ b/common/defs/bitcoin/nix.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/particl.json b/common/defs/bitcoin/particl.json index 7c08b4ac5..a9c7bd198 100644 --- a/common/defs/bitcoin/particl.json +++ b/common/defs/bitcoin/particl.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/particl_testnet.json b/common/defs/bitcoin/particl_testnet.json index 2b2ad1fbd..8297f99c7 100644 --- a/common/defs/bitcoin/particl_testnet.json +++ b/common/defs/bitcoin/particl_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/peercoin.json b/common/defs/bitcoin/peercoin.json index f94d2391e..4842e2cfd 100644 --- a/common/defs/bitcoin/peercoin.json +++ b/common/defs/bitcoin/peercoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/peercoin_testnet.json b/common/defs/bitcoin/peercoin_testnet.json index d0d7ec084..98b88c6f1 100644 --- a/common/defs/bitcoin/peercoin_testnet.json +++ b/common/defs/bitcoin/peercoin_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/pesetacoin.json b/common/defs/bitcoin/pesetacoin.json index 208253da1..40231ede7 100644 --- a/common/defs/bitcoin/pesetacoin.json +++ b/common/defs/bitcoin/pesetacoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/pivx.json b/common/defs/bitcoin/pivx.json index 883d544d6..0c734ae89 100644 --- a/common/defs/bitcoin/pivx.json +++ b/common/defs/bitcoin/pivx.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/pivx_testnet.json b/common/defs/bitcoin/pivx_testnet.json index 0130542ca..697051cbc 100644 --- a/common/defs/bitcoin/pivx_testnet.json +++ b/common/defs/bitcoin/pivx_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/polis.json b/common/defs/bitcoin/polis.json index edc897e44..a23f0f783 100644 --- a/common/defs/bitcoin/polis.json +++ b/common/defs/bitcoin/polis.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/primecoin.json b/common/defs/bitcoin/primecoin.json index f7bd33ba9..09eda9fa3 100644 --- a/common/defs/bitcoin/primecoin.json +++ b/common/defs/bitcoin/primecoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/qtum.json b/common/defs/bitcoin/qtum.json index 30e6a6b10..79d06ceed 100644 --- a/common/defs/bitcoin/qtum.json +++ b/common/defs/bitcoin/qtum.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 410, "Economy": 500, diff --git a/common/defs/bitcoin/qtum_testnet.json b/common/defs/bitcoin/qtum_testnet.json index e4fdc1f07..777197203 100644 --- a/common/defs/bitcoin/qtum_testnet.json +++ b/common/defs/bitcoin/qtum_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 410, "Economy": 500, diff --git a/common/defs/bitcoin/ravencoin.json b/common/defs/bitcoin/ravencoin.json index e6713d3e6..f54079a5c 100644 --- a/common/defs/bitcoin/ravencoin.json +++ b/common/defs/bitcoin/ravencoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10 }, diff --git a/common/defs/bitcoin/ritocoin.json b/common/defs/bitcoin/ritocoin.json index 8f7adfda5..1900910eb 100644 --- a/common/defs/bitcoin/ritocoin.json +++ b/common/defs/bitcoin/ritocoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10 }, diff --git a/common/defs/bitcoin/smartcash.json b/common/defs/bitcoin/smartcash.json index f6079ae3c..147f4357b 100644 --- a/common/defs/bitcoin/smartcash.json +++ b/common/defs/bitcoin/smartcash.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 1, "Economy": 10, diff --git a/common/defs/bitcoin/smartcash_testnet.json b/common/defs/bitcoin/smartcash_testnet.json index 77ab5ec4e..d26b4208e 100644 --- a/common/defs/bitcoin/smartcash_testnet.json +++ b/common/defs/bitcoin/smartcash_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 1, "Economy": 10, diff --git a/common/defs/bitcoin/stakenet.json b/common/defs/bitcoin/stakenet.json index a17ab1c24..86b1de067 100644 --- a/common/defs/bitcoin/stakenet.json +++ b/common/defs/bitcoin/stakenet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 10, "Economy": 70, diff --git a/common/defs/bitcoin/syscoin.json b/common/defs/bitcoin/syscoin.json index 5d06e8a10..f1d467abb 100644 --- a/common/defs/bitcoin/syscoin.json +++ b/common/defs/bitcoin/syscoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 100, "Economy": 200, diff --git a/common/defs/bitcoin/terracoin.json b/common/defs/bitcoin/terracoin.json index 09e6548a9..9d973bd04 100644 --- a/common/defs/bitcoin/terracoin.json +++ b/common/defs/bitcoin/terracoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/unobtanium.json b/common/defs/bitcoin/unobtanium.json index 13b47ca6e..a9d37dda7 100644 --- a/common/defs/bitcoin/unobtanium.json +++ b/common/defs/bitcoin/unobtanium.json @@ -40,7 +40,6 @@ "https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno" ], - "bip115": false, "negative_fee": false, "cooldown": 100, "consensus_branch_id": null, diff --git a/common/defs/bitcoin/vertcoin.json b/common/defs/bitcoin/vertcoin.json index 8b567a4f2..ed9b33f64 100644 --- a/common/defs/bitcoin/vertcoin.json +++ b/common/defs/bitcoin/vertcoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 1000 }, diff --git a/common/defs/bitcoin/viacoin.json b/common/defs/bitcoin/viacoin.json index 40e0bb48d..652774d0d 100644 --- a/common/defs/bitcoin/viacoin.json +++ b/common/defs/bitcoin/viacoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 1000, "Economy": 7000, diff --git a/common/defs/bitcoin/vipstarcoin.json b/common/defs/bitcoin/vipstarcoin.json index fb01b90ce..9f98ba22d 100644 --- a/common/defs/bitcoin/vipstarcoin.json +++ b/common/defs/bitcoin/vipstarcoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 410, "Economy": 500, diff --git a/common/defs/bitcoin/zcash.json b/common/defs/bitcoin/zcash.json index 17b0fd17a..bc57f8120 100644 --- a/common/defs/bitcoin/zcash.json +++ b/common/defs/bitcoin/zcash.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/zcash_testnet.json b/common/defs/bitcoin/zcash_testnet.json index f14937b28..c0a89e6c8 100644 --- a/common/defs/bitcoin/zcash_testnet.json +++ b/common/defs/bitcoin/zcash_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/zcoin.json b/common/defs/bitcoin/zcoin.json index a18ba3511..cca4013ab 100644 --- a/common/defs/bitcoin/zcoin.json +++ b/common/defs/bitcoin/zcoin.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 1, "Economy": 10, diff --git a/common/defs/bitcoin/zcoin_testnet.json b/common/defs/bitcoin/zcoin_testnet.json index 5050df520..cf01ad535 100644 --- a/common/defs/bitcoin/zcoin_testnet.json +++ b/common/defs/bitcoin/zcoin_testnet.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Low": 1, "Economy": 10, diff --git a/common/defs/bitcoin/zcore.json b/common/defs/bitcoin/zcore.json index bbfc1aa74..414b53238 100644 --- a/common/defs/bitcoin/zcore.json +++ b/common/defs/bitcoin/zcore.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/bitcoin/zelcash.json b/common/defs/bitcoin/zelcash.json index 2efb0c7b6..5969df33d 100644 --- a/common/defs/bitcoin/zelcash.json +++ b/common/defs/bitcoin/zelcash.json @@ -24,7 +24,6 @@ "decred": false, "fork_id": null, "force_bip143": false, - "bip115": false, "default_fee_b": { "Normal": 10 }, diff --git a/common/defs/coins_details.json b/common/defs/coins_details.json index 8280ce49a..fc98df485 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": 348858, + "marketcap_usd": 284448, "name": "Actinium", "shortcut": "ACM", "t1_enabled": "yes", @@ -23,7 +23,7 @@ "Github": "https://github.com/axerunners/axe", "Homepage": "https://axerunners.com" }, - "marketcap_usd": 2167490, + "marketcap_usd": 1472918, "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": 6056391355, + "marketcap_usd": 3069782791, "name": "Bitcoin Cash", "shortcut": "BCH", "t1_enabled": "yes", @@ -85,7 +85,7 @@ "Github": "https://github.com/bitcoin/bitcoin", "Homepage": "https://bitcoin.org" }, - "marketcap_usd": 162513519175, + "marketcap_usd": 99181552329, "name": "Bitcoin", "shortcut": "BTC", "t1_enabled": "yes", @@ -115,7 +115,7 @@ "Github": "https://github.com/BTCPrivate/BitcoinPrivate", "Homepage": "https://btcprivate.org" }, - "marketcap_usd": 639557, + "marketcap_usd": 261002, "name": "Bitcoin Private", "shortcut": "BTCP", "t1_enabled": "yes", @@ -133,7 +133,7 @@ "Github": "https://github.com/BTCGPU/BTCGPU", "Homepage": "https://bitcoingold.org" }, - "marketcap_usd": 148051720, + "marketcap_usd": 109620606, "name": "Bitcoin Gold", "shortcut": "BTG", "t1_enabled": "yes", @@ -159,7 +159,7 @@ "Github": "https://github.com/LIMXTEC/BitCore", "Homepage": "https://bitcore.cc" }, - "marketcap_usd": 7727429, + "marketcap_usd": 3517763, "name": "Bitcore", "shortcut": "BTX", "t1_enabled": "yes", @@ -181,7 +181,7 @@ "Github": "https://github.com/Capricoinofficial/Capricoin", "Homepage": "https://capricoin.org" }, - "marketcap_usd": 31957, + "marketcap_usd": 6206, "name": "Capricoin", "shortcut": "CPC", "t1_enabled": "no", @@ -199,7 +199,7 @@ "Github": "https://github.com/cpuchain/cpuchain", "Homepage": "https://cpuchain.org" }, - "marketcap_usd": 10463, + "marketcap_usd": 4021, "name": "CPUchain", "shortcut": "CPU", "t1_enabled": "yes", @@ -217,7 +217,7 @@ "Github": "https://github.com/Crowndev/crowncoin", "Homepage": "https://crownplatform.com" }, - "marketcap_usd": 1721485, + "marketcap_usd": 857639, "name": "Crown", "shortcut": "CRW", "t1_enabled": "soon", @@ -230,7 +230,7 @@ "Github": "https://github.com/dashpay/dash", "Homepage": "https://www.dash.org" }, - "marketcap_usd": 860715782, + "marketcap_usd": 441924648, "name": "Dash", "shortcut": "DASH", "t1_enabled": "yes", @@ -264,7 +264,7 @@ "Github": "https://github.com/decred/dcrd", "Homepage": "https://www.decred.org" }, - "marketcap_usd": 195645540, + "marketcap_usd": 110067303, "name": "Decred", "shortcut": "DCR", "t1_enabled": "yes", @@ -282,7 +282,7 @@ "Github": "https://github.com/digibyte/digibyte", "Homepage": "https://digibyte.io" }, - "marketcap_usd": 78622272, + "marketcap_usd": 45707355, "name": "DigiByte", "shortcut": "DGB", "t1_enabled": "yes", @@ -304,7 +304,7 @@ "Github": "https://github.com/dogecoin/dogecoin", "Homepage": "https://dogecoin.com" }, - "marketcap_usd": 295344122, + "marketcap_usd": 200000251, "name": "Dogecoin", "shortcut": "DOGE", "t1_enabled": "yes", @@ -356,7 +356,7 @@ "Github": "https://github.com/fujicoin/fujicoin", "Homepage": "https://fujicoin.org" }, - "marketcap_usd": 229577, + "marketcap_usd": 133330, "name": "Fujicoin", "shortcut": "FJC", "t1_enabled": "yes", @@ -374,7 +374,7 @@ "Github": "https://github.com/floblockchain/flo", "Homepage": "https://flo.cash" }, - "marketcap_usd": 5655356, + "marketcap_usd": 2359449, "name": "Flo", "shortcut": "FLO", "t1_enabled": "yes", @@ -392,7 +392,7 @@ "Github": "https://github.com/FeatherCoin/Feathercoin", "Homepage": "https://feathercoin.com" }, - "marketcap_usd": 2229384, + "marketcap_usd": 1378933, "name": "Feathercoin", "shortcut": "FTC", "t1_enabled": "yes", @@ -410,7 +410,7 @@ "Github": "https://github.com/gamecredits-project/gamecredits", "Homepage": "https://gamecredits.org" }, - "marketcap_usd": 3124500, + "marketcap_usd": 2233426, "name": "GameCredits", "shortcut": "GAME", "t1_enabled": "yes", @@ -441,7 +441,7 @@ "Github": "https://github.com/Groestlcoin/groestlcoin", "Homepage": "https://www.groestlcoin.org" }, - "marketcap_usd": 14809785, + "marketcap_usd": 8641210, "name": "Groestlcoin", "shortcut": "GRS", "t1_enabled": "yes", @@ -477,7 +477,7 @@ "Github": "https://github.com/komodoplatform/komodo", "Homepage": "https://komodoplatform.com" }, - "marketcap_usd": 73876290, + "marketcap_usd": 37694869, "name": "Komodo", "shortcut": "KMD", "t1_enabled": "yes", @@ -513,7 +513,7 @@ "Github": "https://github.com/litecoin-project/litecoin", "Homepage": "https://litecoin.org" }, - "marketcap_usd": 4115243879, + "marketcap_usd": 2197821105, "name": "Litecoin", "shortcut": "LTC", "t1_enabled": "yes", @@ -539,7 +539,7 @@ "Github": "https://github.com/monacoinproject/monacoin", "Homepage": "https://monacoin.org" }, - "marketcap_usd": 110358644, + "marketcap_usd": 72775511, "name": "Monacoin", "shortcut": "MONA", "t1_enabled": "yes", @@ -557,7 +557,7 @@ "Github": "https://github.com/muecoin/MUE", "Homepage": "https://www.monetaryunit.org" }, - "marketcap_usd": 931035, + "marketcap_usd": 454980, "name": "MonetaryUnit", "shortcut": "MUE", "t1_enabled": "yes", @@ -575,7 +575,7 @@ "Github": "https://github.com/nixplatform/nixcore", "Homepage": "https://nixplatform.io" }, - "marketcap_usd": 3735859, + "marketcap_usd": 1580424, "name": "NIX", "shortcut": "NIX", "t1_enabled": "yes", @@ -593,7 +593,7 @@ "Github": "https://github.com/namecoin/namecoin-core", "Homepage": "https://namecoin.org" }, - "marketcap_usd": 7517954, + "marketcap_usd": 4337849, "name": "Namecoin", "shortcut": "NMC", "t1_enabled": "yes", @@ -615,7 +615,7 @@ "Github": "https://github.com/particl/particl-core", "Homepage": "https://particl.io" }, - "marketcap_usd": 4820447, + "marketcap_usd": 2814792, "name": "Particl", "shortcut": "PART", "t1_enabled": "yes", @@ -633,7 +633,7 @@ "Github": "https://github.com/PIVX-Project/PIVX", "Homepage": "https://pivx.org" }, - "marketcap_usd": 19529599, + "marketcap_usd": 12637347, "name": "PIVX", "shortcut": "PIVX", "t1_enabled": "yes", @@ -655,7 +655,7 @@ "Github": "https://github.com/polispay/polis", "Homepage": "https://www.polispay.org" }, - "marketcap_usd": 6608492, + "marketcap_usd": 4290843, "name": "Polis", "shortcut": "POLIS", "t1_enabled": "yes", @@ -673,11 +673,11 @@ "Github": "https://github.com/peercoin/peercoin", "Homepage": "https://peercoin.net" }, - "marketcap_usd": 5513496, + "marketcap_usd": 3512377, "name": "Peercoin", "shortcut": "PPC", "t1_enabled": "soon", - "t2_enabled": "yes", + "t2_enabled": "soon", "type": "coin", "wallet": [ { @@ -691,7 +691,7 @@ "Github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "Homepage": "https://pesetacoin.info" }, - "marketcap_usd": 168917, + "marketcap_usd": 100908, "name": "Pesetacoin", "shortcut": "PTC", "t1_enabled": "yes", @@ -704,7 +704,7 @@ "Github": "https://github.com/qtumproject/qtum", "Homepage": "https://qtum.org" }, - "marketcap_usd": 211671340, + "marketcap_usd": 116575156, "name": "Qtum", "shortcut": "QTUM", "t1_enabled": "yes", @@ -740,7 +740,7 @@ "Github": "https://github.com/RavenProject/Ravencoin", "Homepage": "https://ravencoin.org" }, - "marketcap_usd": 151119573, + "marketcap_usd": 79119711, "name": "Ravencoin", "shortcut": "RVN", "t1_enabled": "yes", @@ -766,7 +766,7 @@ "Github": "https://github.com/SmartCash/Core-Smart", "Homepage": "https://smartcash.cc" }, - "marketcap_usd": 6407070, + "marketcap_usd": 3055243, "name": "SmartCash", "shortcut": "SMART", "t1_enabled": "yes", @@ -784,7 +784,7 @@ "Github": "https://github.com/syscoin/syscoin", "Homepage": "https://syscoin.org" }, - "marketcap_usd": 17209672, + "marketcap_usd": 8654383, "name": "Syscoin", "shortcut": "SYS", "t1_enabled": "soon", @@ -802,7 +802,7 @@ "Github": "https://github.com/unobtanium-official/unobtanium", "Homepage": "https://unobtanium.uno" }, - "marketcap_usd": 13662159, + "marketcap_usd": 8570650, "name": "Unobtanium", "shortcut": "UNO", "t1_enabled": "soon", @@ -820,7 +820,7 @@ "Github": "https://github.com/viacoin", "Homepage": "https://viacoin.org" }, - "marketcap_usd": 4559309, + "marketcap_usd": 2114325, "name": "Viacoin", "shortcut": "VIA", "t1_enabled": "yes", @@ -856,7 +856,7 @@ "Github": "https://github.com/vertcoin-project/vertcoin-core", "Homepage": "https://vertcoin.org" }, - "marketcap_usd": 16703670, + "marketcap_usd": 9081381, "name": "Vertcoin", "shortcut": "VTC", "t1_enabled": "yes", @@ -874,7 +874,7 @@ "Github": "https://github.com/primecoin/primecoin", "Homepage": "https://primecoin.io" }, - "marketcap_usd": 940801, + "marketcap_usd": 684009, "name": "Primecoin", "shortcut": "XPM", "t1_enabled": "yes", @@ -892,7 +892,7 @@ "Github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "Homepage": "https://www.bitcoinrh.org" }, - "marketcap_usd": 5117344, + "marketcap_usd": 3061085, "name": "Bitcoin Rhodium", "shortcut": "XRC", "t1_enabled": "yes", @@ -910,7 +910,7 @@ "Github": "https://github.com/X9Developers/XSN", "Homepage": "https://stakenet.io" }, - "marketcap_usd": 4879272, + "marketcap_usd": 2994219, "name": "Stakenet", "shortcut": "XSN", "t1_enabled": "yes", @@ -928,7 +928,7 @@ "Github": "https://github.com/zcoinofficial/zcoin", "Homepage": "https://zcoin.io" }, - "marketcap_usd": 51973336, + "marketcap_usd": 27363348, "name": "Zcoin", "shortcut": "XZC", "t1_enabled": "yes", @@ -950,7 +950,7 @@ "Github": "https://github.com/zcore-coin/zcore-2.0", "Homepage": "https://zcore.cash" }, - "marketcap_usd": 107389, + "marketcap_usd": 115337, "name": "ZCore", "shortcut": "ZCR", "t1_enabled": "soon", @@ -968,7 +968,7 @@ "Github": "https://github.com/zcash/zcash", "Homepage": "https://z.cash" }, - "marketcap_usd": 494685720, + "marketcap_usd": 249527758, "name": "Zcash", "shortcut": "ZEC", "t1_enabled": "yes", @@ -994,7 +994,7 @@ "Github": "https://github.com/zelcash", "Homepage": "https://zel.network" }, - "marketcap_usd": 4007588, + "marketcap_usd": 2166477, "name": "Zel", "shortcut": "ZEL", "t1_enabled": "yes", @@ -1002,25 +1002,12 @@ "type": "coin", "wallet": [] }, - "bitcoin:ZEN": { - "links": { - "Github": "https://github.com/ZencashOfficial/zen", - "Homepage": "https://www.horizen.global" - }, - "marketcap_usd": 91170520, - "name": "Horizen", - "shortcut": "ZEN", - "t1_enabled": "no", - "t2_enabled": "yes", - "type": "coin", - "wallet": [] - }, "bitcoin:ZNY": { "links": { "Github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "Homepage": "https://bitzeny.tech" }, - "marketcap_usd": 73157, + "marketcap_usd": 0, "name": "BitZeny", "shortcut": "ZNY", "t1_enabled": "yes", @@ -1138,7 +1125,7 @@ "links": { "Homepage": "https://0xbitcoin.org/" }, - "marketcap_usd": 887148, + "marketcap_usd": 442343, "name": "0xBitcoin", "network": "eth", "shortcut": "0xBTC", @@ -1158,7 +1145,7 @@ "Github": "https://github.com/MarsBlockchain/1sg-contract", "Homepage": "https://www.1.sg" }, - "marketcap_usd": 1594116, + "marketcap_usd": 1568093, "name": "1SG", "network": "eth", "shortcut": "1SG", @@ -1177,7 +1164,7 @@ "links": { "Homepage": "https://firstblood.io" }, - "marketcap_usd": 6461825, + "marketcap_usd": 3954091, "name": "FirstBlood", "network": "eth", "shortcut": "1ST", @@ -1196,7 +1183,7 @@ "links": { "Homepage": "https://ico.1worldonline.com" }, - "marketcap_usd": 6778959, + "marketcap_usd": 2444333, "name": "1World", "network": "eth", "shortcut": "1WO", @@ -1274,7 +1261,7 @@ "Github": "https://github.com/crypt04dvisor/AlphaWallet", "Homepage": "https://alphaplatform.co/" }, - "marketcap_usd": 413562, + "marketcap_usd": 192703, "name": "Alpha", "network": "eth", "shortcut": "A", @@ -1353,7 +1340,7 @@ "links": { "Homepage": "https://www.arcblock.io" }, - "marketcap_usd": 12263197, + "marketcap_usd": 6486069, "name": "ArcBlock Token", "network": "eth", "shortcut": "ABT", @@ -1373,7 +1360,7 @@ "Github": "https://github.com/theabyssportal", "Homepage": "https://www.theabyss.com" }, - "marketcap_usd": 1919978, + "marketcap_usd": 1156289, "name": "The Abyss", "network": "eth", "shortcut": "ABYSS", @@ -1411,7 +1398,7 @@ "links": { "Homepage": "https://tokenstars.com/en/ace" }, - "marketcap_usd": 77103, + "marketcap_usd": 87960, "name": "ACE (TokenStars)", "network": "eth", "shortcut": "ACE", @@ -1430,7 +1417,7 @@ "links": { "Homepage": "https://adbank.network" }, - "marketcap_usd": 411014, + "marketcap_usd": 254635, "name": "adbank", "network": "eth", "shortcut": "ADB", @@ -1469,7 +1456,7 @@ "links": { "Homepage": "https://adhive.tv" }, - "marketcap_usd": 149120, + "marketcap_usd": 74915, "name": "AdHive Token", "network": "eth", "shortcut": "ADH", @@ -1489,7 +1476,7 @@ "Github": "https://github.com/aditus", "Homepage": "https://aditus.net" }, - "marketcap_usd": 81698, + "marketcap_usd": 77711, "name": "Aditus", "network": "eth", "shortcut": "ADI", @@ -1509,7 +1496,7 @@ "Github": "https://github.com/adelecosystem", "Homepage": "https://adel.io" }, - "marketcap_usd": 173397, + "marketcap_usd": 110938, "name": "Adelphoi", "network": "eth", "shortcut": "ADL", @@ -1548,7 +1535,7 @@ "Github": "https://github.com/adchain", "Homepage": "https://adtoken.com" }, - "marketcap_usd": 3349522, + "marketcap_usd": 2765692, "name": "AdToken", "network": "eth", "shortcut": "ADT", @@ -1568,7 +1555,7 @@ "Github": "https://github.com/AdExBlockchain", "Homepage": "https://www.adex.network" }, - "marketcap_usd": 7353581, + "marketcap_usd": 4364178, "name": "AdEx Network", "network": "eth", "shortcut": "ADX", @@ -1648,7 +1635,7 @@ "Github": "https://github.com/singnet/singnet", "Homepage": "https://singularitynet.io" }, - "marketcap_usd": 11695889, + "marketcap_usd": 6087581, "name": "SingularityNET", "network": "eth", "shortcut": "AGI", @@ -1706,7 +1693,7 @@ "links": { "Homepage": "https://www.aidcoin.co" }, - "marketcap_usd": 527800, + "marketcap_usd": 213226, "name": "AidCoin", "network": "eth", "shortcut": "AID", @@ -1765,7 +1752,7 @@ "Github": "https://github.com/AigangNetwork", "Homepage": "https://aigang.network/" }, - "marketcap_usd": 13972, + "marketcap_usd": 6550, "name": "Aigang", "network": "eth", "shortcut": "AIX", @@ -1823,7 +1810,7 @@ "links": { "Homepage": "http://ailink.in" }, - "marketcap_usd": 57763, + "marketcap_usd": 28786, "name": "AiLink Token", "network": "eth", "shortcut": "ALI", @@ -1901,7 +1888,7 @@ "Github": "https://github.com/ambrosus", "Homepage": "https://ambrosus.com/index.html" }, - "marketcap_usd": 2355123, + "marketcap_usd": 2455928, "name": "Amber Token", "network": "eth", "shortcut": "AMB", @@ -1961,7 +1948,7 @@ "Github": "https://github.com/amlt-by-coinfirm", "Homepage": "https://amlt.coinfirm.io/" }, - "marketcap_usd": 1730871, + "marketcap_usd": 1119988, "name": "AMLT", "network": "eth", "shortcut": "AMLT", @@ -1981,7 +1968,7 @@ "Github": "https://github.com/amontech", "Homepage": "https://amon.tech" }, - "marketcap_usd": 637995, + "marketcap_usd": 432186, "name": "Amon", "network": "eth", "shortcut": "AMN", @@ -2001,7 +1988,7 @@ "Github": "https://github.com/AMO-Project/", "Homepage": "https://amo.foundation" }, - "marketcap_usd": 3382659, + "marketcap_usd": 2932723, "name": "AMO Coin", "network": "eth", "shortcut": "AMO", @@ -2020,7 +2007,7 @@ "links": { "Homepage": "https://ados.foundation/" }, - "marketcap_usd": 501726, + "marketcap_usd": 423308, "name": "Token AmonD", "network": "eth", "shortcut": "AMON", @@ -2040,7 +2027,7 @@ "Github": "https://github.com/ampleforth", "Homepage": "https://ampleforth.org" }, - "marketcap_usd": 2639522, + "marketcap_usd": 2378809, "name": "Ampleforth", "network": "eth", "shortcut": "AMPL", @@ -2118,7 +2105,7 @@ "links": { "Homepage": "https://aragon.org" }, - "marketcap_usd": 34256473, + "marketcap_usd": 19341082, "name": "Aragon", "network": "eth", "shortcut": "ANT", @@ -2137,7 +2124,7 @@ "links": { "Homepage": "https://www.aurorachain.io" }, - "marketcap_usd": 11165806, + "marketcap_usd": 6407814, "name": "Aurora", "network": "eth", "shortcut": "AOA", @@ -2157,7 +2144,7 @@ "Github": "https://github.com/Oxchild/crowdsale", "Homepage": "https://apisplatform.io" }, - "marketcap_usd": 2588355, + "marketcap_usd": 2641646, "name": "APIS", "network": "eth", "shortcut": "APIS", @@ -2177,7 +2164,7 @@ "Github": "https://github.com/Aptoide/AppCoins-ethereumj", "Homepage": "https://appcoins.io" }, - "marketcap_usd": 3713194, + "marketcap_usd": 1925559, "name": "AppCoins", "network": "eth", "shortcut": "APPC", @@ -2235,7 +2222,7 @@ "links": { "Homepage": "https://www.arbitragect.com" }, - "marketcap_usd": 27590, + "marketcap_usd": 8227, "name": "ArbitrageCT", "network": "eth", "shortcut": "ARCT", @@ -2294,7 +2281,7 @@ "links": { "Homepage": "https://aeron.aero" }, - "marketcap_usd": 2625684, + "marketcap_usd": 1412033, "name": "Aeron", "network": "eth", "shortcut": "ARN", @@ -2313,7 +2300,7 @@ "links": { "Homepage": "http://www.maecenas.co" }, - "marketcap_usd": 1526027, + "marketcap_usd": 763675, "name": "Maecenas", "network": "eth", "shortcut": "ART", @@ -2391,7 +2378,7 @@ "links": { "Homepage": "https://airswap.io" }, - "marketcap_usd": 3067764, + "marketcap_usd": 1450755, "name": "Airswap", "network": "eth", "shortcut": "AST", @@ -2430,7 +2417,7 @@ "links": { "Homepage": "https://atlant.io" }, - "marketcap_usd": 1153507, + "marketcap_usd": 375514, "name": "ATLANT", "network": "eth", "shortcut": "ATL", @@ -2469,7 +2456,7 @@ "Github": "https://github.com/atonomi", "Homepage": "https://atonomi.io" }, - "marketcap_usd": 106429, + "marketcap_usd": 73909, "name": "Atonomi", "network": "eth", "shortcut": "ATMI", @@ -2527,7 +2514,7 @@ "links": { "Homepage": "https://www.aston.company" }, - "marketcap_usd": 122152, + "marketcap_usd": 74312, "name": "Aston", "network": "eth", "shortcut": "ATX", @@ -2546,7 +2533,7 @@ "links": { "Homepage": "https://auctus.org" }, - "marketcap_usd": 348980, + "marketcap_usd": 228271, "name": "Auctus", "network": "eth", "shortcut": "AUC", @@ -2604,7 +2591,7 @@ "links": { "Homepage": "https://cubeint.io" }, - "marketcap_usd": 1968444, + "marketcap_usd": 1801191, "name": "Cube", "network": "eth", "shortcut": "AUTO", @@ -2643,7 +2630,7 @@ "links": { "Homepage": "https://aventus.io" }, - "marketcap_usd": 735397, + "marketcap_usd": 493443, "name": "Aventus", "network": "eth", "shortcut": "AVT", @@ -2702,7 +2689,7 @@ "Github": "https://www.github.com/axpire", "Homepage": "https://www.axpire.io" }, - "marketcap_usd": 853811, + "marketcap_usd": 545523, "name": "aXpire", "network": "eth", "shortcut": "AXPR", @@ -2721,7 +2708,7 @@ "links": { "Homepage": "https://www.b2bx.exchange" }, - "marketcap_usd": 10731048, + "marketcap_usd": 9447140, "name": "B2BX", "network": "eth", "shortcut": "B2BX", @@ -2780,7 +2767,7 @@ "links": { "Homepage": "https://www.banca.world" }, - "marketcap_usd": 443448, + "marketcap_usd": 271042, "name": "Banca", "network": "eth", "shortcut": "BANCA", @@ -2838,7 +2825,7 @@ "links": { "Homepage": "https://basicattentiontoken.org" }, - "marketcap_usd": 327645075, + "marketcap_usd": 182919029, "name": "Basic Attention Token", "network": "eth", "shortcut": "BAT", @@ -2857,7 +2844,7 @@ "links": { "Homepage": "https://getbabb.com" }, - "marketcap_usd": 5188972, + "marketcap_usd": 3323761, "name": "BABB", "network": "eth", "shortcut": "BAX", @@ -2876,7 +2863,7 @@ "links": { "Homepage": "http://bbcoin.tradove.com" }, - "marketcap_usd": 412875, + "marketcap_usd": 282970, "name": "TraDove B2BCoin", "network": "eth", "shortcut": "BBC", @@ -2896,7 +2883,7 @@ "Github": "https://github.com/brickblock-io", "Homepage": "https://www.brickblock.io/" }, - "marketcap_usd": 1123895, + "marketcap_usd": 1976430, "name": "BRICKBLOCK TOKEN", "network": "eth", "shortcut": "BBK", @@ -2934,7 +2921,7 @@ "links": { "Homepage": "https://bigbom.com" }, - "marketcap_usd": 210956, + "marketcap_usd": 105351, "name": "Bigbom", "network": "eth", "shortcut": "BBO", @@ -2953,7 +2940,7 @@ "links": { "Homepage": "https://block-chain.com" }, - "marketcap_usd": 719026, + "marketcap_usd": 432305, "name": "Block-Chain.com", "network": "eth", "shortcut": "BC", @@ -3032,7 +3019,7 @@ "Github": "https://github.com/VinceBCD/BCDiploma", "Homepage": "https://www.bcdiploma.com" }, - "marketcap_usd": 1593277, + "marketcap_usd": 749994, "name": "Blockchain Certified Data Token", "network": "eth", "shortcut": "BCDT", @@ -3071,7 +3058,7 @@ "Github": "https://github.com/blockmason", "Homepage": "https://blockmason.io" }, - "marketcap_usd": 2700569, + "marketcap_usd": 1283744, "name": "BlockMason Credit Protocol Token", "network": "eth", "shortcut": "BCPT", @@ -3091,7 +3078,7 @@ "Github": "https://github.com/bitcv", "Homepage": "https://bitcv.one/" }, - "marketcap_usd": 6095229, + "marketcap_usd": 2544533, "name": "BitCapitalVendor Token", "network": "eth", "shortcut": "BCV", @@ -3111,7 +3098,7 @@ "Github": "https://github.com/bitdegree", "Homepage": "https://bitdegree.org" }, - "marketcap_usd": 376668, + "marketcap_usd": 270423, "name": "BitDegree Token", "network": "eth", "shortcut": "BDG", @@ -3150,7 +3137,7 @@ "Github": "https://github.com/thebeetoken", "Homepage": "https://www.beetoken.com" }, - "marketcap_usd": 87860, + "marketcap_usd": 49618, "name": "Bee Token", "network": "eth", "shortcut": "BEE", @@ -3190,7 +3177,7 @@ "Github": "https://github.com/Rentberry", "Homepage": "https://rentberry.com" }, - "marketcap_usd": 61607, + "marketcap_usd": 32136, "name": "Berry", "network": "eth", "shortcut": "BERRY", @@ -3210,7 +3197,7 @@ "Github": "https://github.com/daocasino", "Homepage": "https://dao.casino" }, - "marketcap_usd": 3314346, + "marketcap_usd": 1634707, "name": "DAO.Casino", "network": "eth", "shortcut": "BET", @@ -3230,7 +3217,7 @@ "Github": "https://github.com/bethereumproject", "Homepage": "https://www.bethereum.com/" }, - "marketcap_usd": 129864, + "marketcap_usd": 103653, "name": "Bethereum", "network": "eth", "shortcut": "BETHER", @@ -3250,7 +3237,7 @@ "Github": "https://github.com/betterbetting", "Homepage": "https://www.betterbetting.org" }, - "marketcap_usd": 74188, + "marketcap_usd": 46586, "name": "BetterBetting", "network": "eth", "shortcut": "BETR", @@ -3288,7 +3275,7 @@ "links": { "Homepage": "https://bnktothefuture.com" }, - "marketcap_usd": 10077021, + "marketcap_usd": 4420022, "name": "BnkToTheFuture", "network": "eth", "shortcut": "BFT", @@ -3385,7 +3372,7 @@ "Github": "https://github.com/BitScreenerTech", "Homepage": "https://tokensale.bitscreener.com/" }, - "marketcap_usd": 227365, + "marketcap_usd": 122426, "name": "Token BitScreenerToken", "network": "eth", "shortcut": "BITX", @@ -3404,7 +3391,7 @@ "links": { "Homepage": "https://www.bibox.com" }, - "marketcap_usd": 14538799, + "marketcap_usd": 7002462, "name": "Bibox Token", "network": "eth", "shortcut": "BIX", @@ -3482,7 +3469,7 @@ "Github": "https://github.com/BankEx", "Homepage": "https://bankex.com/" }, - "marketcap_usd": 695246, + "marketcap_usd": 375987, "name": "BANKEX", "network": "eth", "shortcut": "BKX", @@ -3541,7 +3528,7 @@ "Github": "https://github.com/hellobloom", "Homepage": "https://hellobloom.io" }, - "marketcap_usd": 2572595, + "marketcap_usd": 1363945, "name": "Bloom", "network": "eth", "shortcut": "BLT", @@ -3561,7 +3548,7 @@ "Github": "https://github.com/BlueCrypto", "Homepage": "https://blueprotocol.com/" }, - "marketcap_usd": 287400, + "marketcap_usd": 141539, "name": "Ethereum Blue", "network": "eth", "shortcut": "BLUE", @@ -3619,7 +3606,7 @@ "links": { "Homepage": "https://bluzelle.com" }, - "marketcap_usd": 4388812, + "marketcap_usd": 1357060, "name": "Bluzelle", "network": "eth", "shortcut": "BLZ", @@ -3639,7 +3626,7 @@ "Github": "https://github.com/blackmoonfg", "Homepage": "https://blackmooncrypto.com" }, - "marketcap_usd": 4987000, + "marketcap_usd": 3671847, "name": "Blackmoon Crypto BMC Token", "network": "eth", "shortcut": "BMC", @@ -3678,7 +3665,7 @@ "links": { "Homepage": "https://www.bitmart.com" }, - "marketcap_usd": 3222743, + "marketcap_usd": 1601069, "name": "BitMart Token", "network": "eth", "shortcut": "BMX", @@ -3756,7 +3743,7 @@ "Github": "https://github.com/bancorprotocol", "Homepage": "https://www.bancor.network" }, - "marketcap_usd": 19554681, + "marketcap_usd": 10754604, "name": "Bancor Network Token", "network": "eth", "shortcut": "BNT", @@ -3775,7 +3762,7 @@ "links": { "Homepage": "https://bounty0x.io" }, - "marketcap_usd": 243832, + "marketcap_usd": 123615, "name": "Bounty0x Token", "network": "eth", "shortcut": "BNTY", @@ -3794,7 +3781,7 @@ "links": { "Homepage": "https://bobsrepair.com" }, - "marketcap_usd": 490020, + "marketcap_usd": 261925, "name": "Bob's repair", "network": "eth", "shortcut": "BOB", @@ -3852,7 +3839,7 @@ "links": { "Homepage": "https://www.bolt.global" }, - "marketcap_usd": 2086337, + "marketcap_usd": 611010, "name": "BOLT Token", "network": "eth", "shortcut": "BOLT", @@ -3871,7 +3858,7 @@ "links": { "Homepage": "https://bonpay.com" }, - "marketcap_usd": 96511, + "marketcap_usd": 93083, "name": "Bonpay", "network": "eth", "shortcut": "BON", @@ -3928,7 +3915,7 @@ "links": { "Homepage": "https://www.bouts.pro" }, - "marketcap_usd": 114266, + "marketcap_usd": 66130, "name": "BoutsPro", "network": "eth", "shortcut": "BOUTS", @@ -3947,7 +3934,7 @@ "links": { "Homepage": "https://www.goblockparty.com" }, - "marketcap_usd": 162777, + "marketcap_usd": 24307, "name": "BOXX Token [Blockparty]", "network": "eth", "shortcut": "BOXX", @@ -3967,7 +3954,7 @@ "Github": "https://github.com/Blockport/tokensale", "Homepage": "https://blockport.io" }, - "marketcap_usd": 1823097, + "marketcap_usd": 917956, "name": "Blockport Token", "network": "eth", "shortcut": "BPT", @@ -3986,7 +3973,7 @@ "links": { "Homepage": "https://www.bitquence.com" }, - "marketcap_usd": 10626635, + "marketcap_usd": 6300468, "name": "Bitquence", "network": "eth", "shortcut": "BQX", @@ -4005,7 +3992,7 @@ "links": { "Homepage": "http://bro-consortium.io" }, - "marketcap_usd": 1520, + "marketcap_usd": 1312, "name": "BROTHER", "network": "eth", "shortcut": "BRAT", @@ -4025,7 +4012,7 @@ "Github": "https://github.com/breadwallet", "Homepage": "https://token.breadapp.com/en" }, - "marketcap_usd": 20653573, + "marketcap_usd": 9027685, "name": "Bread", "network": "eth", "shortcut": "BRD", @@ -4140,7 +4127,7 @@ "links": { "Homepage": "http://btclite.org" }, - "marketcap_usd": 43292, + "marketcap_usd": 25028, "name": "BTC Lite", "network": "eth", "shortcut": "BTCL", @@ -4355,7 +4342,7 @@ "links": { "Homepage": "https://biotron.io" }, - "marketcap_usd": 11747, + "marketcap_usd": 7063, "name": "Biotron", "network": "eth", "shortcut": "BTRN", @@ -4375,7 +4362,7 @@ "Github": "https://github.com/btuprotocol", "Homepage": "https://btu-protocol.com" }, - "marketcap_usd": 13928061, + "marketcap_usd": 7753161, "name": "BTU Protocol", "network": "eth", "shortcut": "BTU", @@ -4434,7 +4421,7 @@ "Github": "https://github.com/paxosglobal/busd-contract", "Homepage": "https://www.paxos.com/busd" }, - "marketcap_usd": 69841647, + "marketcap_usd": 112173300, "name": "Binance USD (BUSD)", "network": "eth", "shortcut": "BUSD", @@ -4492,7 +4479,7 @@ "links": { "Homepage": "https://www.bitz.com" }, - "marketcap_usd": 22047983, + "marketcap_usd": 16717551, "name": "Bit-Z Token", "network": "eth", "shortcut": "BZ", @@ -4511,7 +4498,7 @@ "links": { "Homepage": "https://bezant.io" }, - "marketcap_usd": 3752129, + "marketcap_usd": 2389383, "name": "Bezant", "network": "eth", "shortcut": "BZNT", @@ -4551,7 +4538,7 @@ "Github": "https://github.com/cryptotwenty", "Homepage": "https://crypto20.com" }, - "marketcap_usd": 24319334, + "marketcap_usd": 11689528, "name": "Crypto20's Token", "network": "eth", "shortcut": "C20", @@ -4570,7 +4557,7 @@ "links": { "Homepage": "https://www.carboneum.io" }, - "marketcap_usd": 228061, + "marketcap_usd": 198339, "name": "Carboneum", "network": "eth", "shortcut": "C8", @@ -4589,7 +4576,7 @@ "links": { "Homepage": "https://change-bank.com" }, - "marketcap_usd": 2055955, + "marketcap_usd": 765576, "name": "Change Bank", "network": "eth", "shortcut": "CAG", @@ -4609,7 +4596,7 @@ "Github": "https://github.com/Global-Crypto-Alliance/call-token", "Homepage": "https://gcalliance.io" }, - "marketcap_usd": 16069, + "marketcap_usd": 28406, "name": "CALL token", "network": "eth", "shortcut": "CALL", @@ -4628,7 +4615,7 @@ "links": { "Homepage": "https://canya.io" }, - "marketcap_usd": 1803188, + "marketcap_usd": 1010375, "name": "CanYaCoin", "network": "eth", "shortcut": "CAN", @@ -4647,7 +4634,7 @@ "links": { "Homepage": "https://cappasity.com/tech/" }, - "marketcap_usd": 732425, + "marketcap_usd": 391078, "name": "Cappasity", "network": "eth", "shortcut": "CAPP", @@ -4723,7 +4710,7 @@ "links": { "Homepage": "https://coin.cashbet.com" }, - "marketcap_usd": 1297635, + "marketcap_usd": 745540, "name": "CashBet Coin", "network": "eth", "shortcut": "CBC", @@ -4762,7 +4749,7 @@ "links": { "Homepage": "https://www.commerceblock.com" }, - "marketcap_usd": 2938171, + "marketcap_usd": 1993829, "name": "CommerceBlock", "network": "eth", "shortcut": "CBT", @@ -4839,7 +4826,7 @@ "links": { "Homepage": "https://ccore.io" }, - "marketcap_usd": 17639, + "marketcap_usd": 7676, "name": "Ccore", "network": "eth", "shortcut": "CCO", @@ -4878,7 +4865,7 @@ "links": { "Homepage": "http://crystal-clear.io" }, - "marketcap_usd": 9174, + "marketcap_usd": 4950, "name": "Crystal Clear Token", "network": "eth", "shortcut": "CCT", @@ -4917,7 +4904,7 @@ "links": { "Homepage": "https://www.coindash.io" }, - "marketcap_usd": 3958141, + "marketcap_usd": 1654124, "name": "CoinDash", "network": "eth", "shortcut": "CDT", @@ -4936,7 +4923,7 @@ "links": { "Homepage": "https://www.ceek.com/" }, - "marketcap_usd": 792404, + "marketcap_usd": 630294, "name": "CEEK VR Token", "network": "eth", "shortcut": "CEEK", @@ -4956,7 +4943,7 @@ "Github": "https://github.com/celer-network", "Homepage": "https://www.celer.network/" }, - "marketcap_usd": 12377267, + "marketcap_usd": 5060405, "name": "CelerToken", "network": "eth", "shortcut": "CELR", @@ -4976,7 +4963,7 @@ "Github": "https://github.com/coinsuperapi", "Homepage": "https://www.coinsuper.com" }, - "marketcap_usd": 525693, + "marketcap_usd": 294381, "name": "CEN", "network": "eth", "shortcut": "CEN", @@ -4995,7 +4982,7 @@ "links": { "Homepage": "https://www.centrality.ai" }, - "marketcap_usd": 69646614, + "marketcap_usd": 38331916, "name": "Centrality", "network": "eth", "shortcut": "CENNZ", @@ -5112,7 +5099,7 @@ "links": { "Homepage": "https://coinpoker.com" }, - "marketcap_usd": 2138151, + "marketcap_usd": 1198505, "name": "CoinPoker", "network": "eth", "shortcut": "CHP", @@ -5131,7 +5118,7 @@ "links": { "Homepage": "https://swissborg.com" }, - "marketcap_usd": 16565453, + "marketcap_usd": 10240798, "name": "SwissBorg", "network": "eth", "shortcut": "CHSB", @@ -5208,7 +5195,7 @@ "links": { "Homepage": "https://www.connectjob.io" }, - "marketcap_usd": 43246, + "marketcap_usd": 24164, "name": "ConnectJob", "network": "eth", "shortcut": "CJT", @@ -5246,7 +5233,7 @@ "links": { "Homepage": "https://www.coinlancer.io" }, - "marketcap_usd": 99703, + "marketcap_usd": 84909, "name": "Coinlancer", "network": "eth", "shortcut": "CL", @@ -5266,7 +5253,7 @@ "Github": "https://github.com/Cloudbric-Project", "Homepage": "https://www.cloudbric.io/" }, - "marketcap_usd": 754925, + "marketcap_usd": 354513, "name": "Cloudbric", "network": "eth", "shortcut": "CLB", @@ -5382,7 +5369,7 @@ "links": { "Homepage": "https://crowdmachine.com" }, - "marketcap_usd": 205422, + "marketcap_usd": 123419, "name": "Crowd Machine Compute Token", "network": "eth", "shortcut": "CMCT", @@ -5440,7 +5427,7 @@ "links": { "Homepage": "https://cindicator.com" }, - "marketcap_usd": 11475515, + "marketcap_usd": 5764069, "name": "Cindicator", "network": "eth", "shortcut": "CND", @@ -5459,7 +5446,7 @@ "links": { "Homepage": "https://cnntoken.io" }, - "marketcap_usd": 3260581, + "marketcap_usd": 1475345, "name": "Content Neutrality Network", "network": "eth", "shortcut": "CNN", @@ -5518,7 +5505,7 @@ "Github": "https://github.com/cobinhood", "Homepage": "https://cobinhood.com" }, - "marketcap_usd": 146387, + "marketcap_usd": 62269, "name": "Cobinhood Token", "network": "eth", "shortcut": "COB", @@ -5558,7 +5545,7 @@ "Github": "https://github.com/coinfi", "Homepage": "https://www.coinfi.com" }, - "marketcap_usd": 303249, + "marketcap_usd": 156442, "name": "CoinFi Token", "network": "eth", "shortcut": "COFI", @@ -5635,7 +5622,7 @@ "links": { "Homepage": "https://covesting.io/" }, - "marketcap_usd": 2127309, + "marketcap_usd": 1234715, "name": "Covesting", "network": "eth", "shortcut": "COV", @@ -5674,7 +5661,7 @@ "links": { "Homepage": "https://cryptopay.me" }, - "marketcap_usd": 2535386, + "marketcap_usd": 985692, "name": "Cryptopay", "network": "eth", "shortcut": "CPAY", @@ -5734,7 +5721,7 @@ "Github": "https://github.com/aditus", "Homepage": "https://copytrack.io" }, - "marketcap_usd": 512169, + "marketcap_usd": 0, "name": "COPYTRACK", "network": "eth", "shortcut": "CPY", @@ -5811,7 +5798,7 @@ "links": { "Homepage": "https://crycash.io" }, - "marketcap_usd": 1020222, + "marketcap_usd": 378249, "name": "CryCash", "network": "eth", "shortcut": "CRC", @@ -5831,7 +5818,7 @@ "Github": "https://github.com/verifyas", "Homepage": "https://token.verify.as" }, - "marketcap_usd": 105376, + "marketcap_usd": 88889, "name": "Verify", "network": "eth", "shortcut": "CRED", @@ -5850,7 +5837,7 @@ "links": { "Homepage": "https://bitbounce.io" }, - "marketcap_usd": 3905942, + "marketcap_usd": 5289246, "name": "Credo / Bitbounce", "network": "eth", "shortcut": "CREDO", @@ -5908,7 +5895,7 @@ "links": { "Homepage": "https://crypterium.io" }, - "marketcap_usd": 33173172, + "marketcap_usd": 19423335, "name": "CrypteriumToken", "network": "eth", "shortcut": "CRPT", @@ -5946,7 +5933,7 @@ "links": { "Homepage": "https://credits.com/en" }, - "marketcap_usd": 8891184, + "marketcap_usd": 4752011, "name": "Credits", "network": "eth", "shortcut": "CS", @@ -6140,7 +6127,7 @@ "links": { "Homepage": "https://www.civic.com" }, - "marketcap_usd": 18025800, + "marketcap_usd": 10304109, "name": "Civic", "network": "eth", "shortcut": "CVC", @@ -6179,7 +6166,7 @@ "links": { "Homepage": "http://www.cybervein.org" }, - "marketcap_usd": 4642095, + "marketcap_usd": 6631808, "name": "CyberVein", "network": "eth", "shortcut": "CVT", @@ -6219,7 +6206,7 @@ "Github": "https://github.com/cargoxio", "Homepage": "https://cargox.io" }, - "marketcap_usd": 1754655, + "marketcap_usd": 1502773, "name": "CargoX", "network": "eth", "shortcut": "CXO", @@ -6258,7 +6245,7 @@ "links": { "Homepage": "https://cyberfmradio.com" }, - "marketcap_usd": 81046, + "marketcap_usd": 14401, "name": "CyberFM", "network": "eth", "shortcut": "CYFM", @@ -6277,7 +6264,7 @@ "links": { "Homepage": "https://cybermusic.io" }, - "marketcap_usd": 18368, + "marketcap_usd": 8880, "name": "CyberMusic", "network": "eth", "shortcut": "CYMT", @@ -6296,7 +6283,7 @@ "links": { "Homepage": "http://www.canonchain.com" }, - "marketcap_usd": 1942595, + "marketcap_usd": 744368, "name": "CanonChain", "network": "eth", "shortcut": "CZR", @@ -6353,7 +6340,7 @@ "links": { "Homepage": "https://dacsee.io/#" }, - "marketcap_usd": 2922750, + "marketcap_usd": 1199982, "name": "DACSEE", "network": "eth", "shortcut": "DACS", @@ -6372,7 +6359,7 @@ "links": { "Homepage": "https://dadi.cloud" }, - "marketcap_usd": 2283997, + "marketcap_usd": 1122050, "name": "DADI", "network": "eth", "shortcut": "DADI", @@ -6392,7 +6379,7 @@ "Github": "https://github.com/makerdao", "Homepage": "https://makerdao.com" }, - "marketcap_usd": 121510652, + "marketcap_usd": 104540630, "name": "Dai Stablecoin v2.0", "network": "eth", "shortcut": "DAI", @@ -6411,7 +6398,7 @@ "links": { "Homepage": "http://www.dalecoin.org" }, - "marketcap_usd": 6115, + "marketcap_usd": 3585, "name": "DaleCoin", "network": "eth", "shortcut": "DALC", @@ -6469,7 +6456,7 @@ "links": { "Homepage": "https://datum.org" }, - "marketcap_usd": 1012619, + "marketcap_usd": 491531, "name": "Datum Token", "network": "eth", "shortcut": "DAT", @@ -6489,7 +6476,7 @@ "Github": "https://github.com/streamr-dev", "Homepage": "https://www.streamr.com" }, - "marketcap_usd": 9659259, + "marketcap_usd": 4509266, "name": "Streamr DATAcoin", "network": "eth", "shortcut": "DATA", @@ -6528,7 +6515,7 @@ "links": { "Homepage": "https://www.datx.co" }, - "marketcap_usd": 477740, + "marketcap_usd": 240206, "name": "DATx", "network": "eth", "shortcut": "DATX", @@ -6548,7 +6535,7 @@ "Github": "https://github.com/DAVFoundation", "Homepage": "https://dav.network/" }, - "marketcap_usd": 115652, + "marketcap_usd": 57485, "name": "DAV Token", "network": "eth", "shortcut": "DAV", @@ -6567,7 +6554,7 @@ "links": { "Homepage": "https://www.daex.io" }, - "marketcap_usd": 1303014, + "marketcap_usd": 659141, "name": "DAEX", "network": "eth", "shortcut": "DAX", @@ -6606,7 +6593,7 @@ "Github": "https://github.com/chronologic", "Homepage": "https://chronologic.network" }, - "marketcap_usd": 239408, + "marketcap_usd": 121393, "name": "ChronoLogic DAY", "network": "eth", "shortcut": "DAY", @@ -6704,7 +6691,7 @@ "Github": "https://github.com/Dentacoin", "Homepage": "https://dentacoin.com" }, - "marketcap_usd": 11045513, + "marketcap_usd": 8238825, "name": "Dentacoin", "network": "eth", "shortcut": "DCN", @@ -6782,7 +6769,7 @@ "links": { "Homepage": "https://deltachain.tech" }, - "marketcap_usd": 7486, + "marketcap_usd": 15478, "name": "DeltaChain", "network": "eth", "shortcut": "DELTA", @@ -6801,7 +6788,7 @@ "links": { "Homepage": "https://www.dentwireless.com" }, - "marketcap_usd": 13608343, + "marketcap_usd": 8165561, "name": "DENT", "network": "eth", "shortcut": "DENT", @@ -6839,7 +6826,7 @@ "links": { "Homepage": "https://www.coinbit.co.kr/" }, - "marketcap_usd": 1822115, + "marketcap_usd": 901947, "name": "DEX", "network": "eth", "shortcut": "DEX", @@ -6878,7 +6865,7 @@ "links": { "Homepage": "https://digix.global/" }, - "marketcap_usd": 85990908, + "marketcap_usd": 46753156, "name": "Digix DAO", "network": "eth", "shortcut": "DGD", @@ -6938,7 +6925,7 @@ "Github": "https://github.com/DigitexFutures", "Homepage": "https://digitexfutures.com/" }, - "marketcap_usd": 27358782, + "marketcap_usd": 17768056, "name": "DigitexFutures", "network": "eth", "shortcut": "DGTX", @@ -6958,7 +6945,7 @@ "Github": "https://github.com/DigixGlobal", "Homepage": "https://digix.global" }, - "marketcap_usd": 6018620, + "marketcap_usd": 5944889, "name": "Digix Gold Token", "network": "eth", "shortcut": "DGX", @@ -6997,7 +6984,7 @@ "links": { "Homepage": "https://etheroll.com" }, - "marketcap_usd": 3147521, + "marketcap_usd": 1874198, "name": "Etheroll", "network": "eth", "shortcut": "DICE", @@ -7016,7 +7003,7 @@ "links": { "Homepage": "https://inmediate.io" }, - "marketcap_usd": 827470, + "marketcap_usd": 354413, "name": "Digital Insurance Token", "network": "eth", "shortcut": "DIT", @@ -7054,7 +7041,7 @@ "links": { "Homepage": "https://www.agrello.org" }, - "marketcap_usd": 3767050, + "marketcap_usd": 2050873, "name": "Agrello", "network": "eth", "shortcut": "DLT", @@ -7074,7 +7061,7 @@ "Github": "https://github.com/suntechsoft/dmarket-smartcontract", "Homepage": "https://dmarket.com" }, - "marketcap_usd": 8839167, + "marketcap_usd": 4333808, "name": "DMarket Token", "network": "eth", "shortcut": "DMT", @@ -7093,7 +7080,7 @@ "links": { "Homepage": "https://www.encrypgen.com" }, - "marketcap_usd": 836844, + "marketcap_usd": 599172, "name": "EncrypGen", "network": "eth", "shortcut": "DNA", @@ -7113,7 +7100,7 @@ "Github": "https://github.com/district0x", "Homepage": "https://district0x.io" }, - "marketcap_usd": 4220792, + "marketcap_usd": 1885462, "name": "District0x Network Token", "network": "eth", "shortcut": "DNT", @@ -7152,7 +7139,7 @@ "links": { "Homepage": "https://dock.io" }, - "marketcap_usd": 4250479, + "marketcap_usd": 1949841, "name": "Dock", "network": "eth", "shortcut": "DOCK", @@ -7190,7 +7177,7 @@ "links": { "Homepage": "https://dovu.io" }, - "marketcap_usd": 217490, + "marketcap_usd": 165559, "name": "Dovu", "network": "eth", "shortcut": "DOV", @@ -7249,7 +7236,7 @@ "links": { "Homepage": "https://dreamteam.gg" }, - "marketcap_usd": 3682920, + "marketcap_usd": 1567688, "name": "DREAM", "network": "eth", "shortcut": "DREAM", @@ -7269,7 +7256,7 @@ "Github": "https://github.com/dragonchain/dragonchain", "Homepage": "https://dragonchain.com" }, - "marketcap_usd": 15297639, + "marketcap_usd": 6372370, "name": "Dragon", "network": "eth", "shortcut": "DRGN", @@ -7307,7 +7294,7 @@ "links": { "Homepage": "https://token.domraider.com" }, - "marketcap_usd": 503154, + "marketcap_usd": 357613, "name": "DomRaider", "network": "eth", "shortcut": "DRT", @@ -7406,7 +7393,7 @@ "Github": "https://github.com/dethertech", "Homepage": "https://dether.io" }, - "marketcap_usd": 168853, + "marketcap_usd": 87693, "name": "dether", "network": "eth", "shortcut": "DTH", @@ -7425,7 +7412,7 @@ "links": { "Homepage": "https://www.tokens.net" }, - "marketcap_usd": 26941744, + "marketcap_usd": 16038581, "name": "Dynamic Trading Rights", "network": "eth", "shortcut": "DTR", @@ -7444,7 +7431,7 @@ "links": { "Homepage": "https://datarius.io" }, - "marketcap_usd": 38066, + "marketcap_usd": 30870, "name": "Datarius Credit", "network": "eth", "shortcut": "DTRC", @@ -7483,7 +7470,7 @@ "links": { "Homepage": "https://datawallet.com" }, - "marketcap_usd": 478507, + "marketcap_usd": 238508, "name": "Datawallet", "network": "eth", "shortcut": "DXT", @@ -7560,7 +7547,7 @@ "links": { "Homepage": "https://ebcoin.io" }, - "marketcap_usd": 497393, + "marketcap_usd": 275245, "name": "EBCoin", "network": "eth", "shortcut": "EBC", @@ -7637,7 +7624,7 @@ "links": { "Homepage": "https://omnitude.tech" }, - "marketcap_usd": 363930, + "marketcap_usd": 239776, "name": "Omnitude", "network": "eth", "shortcut": "ECOM", @@ -7675,7 +7662,7 @@ "links": { "Homepage": "https://edgeless.io" }, - "marketcap_usd": 1531798, + "marketcap_usd": 782614, "name": "Edgeless", "network": "eth", "shortcut": "EDG", @@ -7694,7 +7681,7 @@ "links": { "Homepage": "https://eidoo.io" }, - "marketcap_usd": 13964254, + "marketcap_usd": 5683099, "name": "Eidoo", "network": "eth", "shortcut": "EDO", @@ -7714,7 +7701,7 @@ "Github": "https://github.com/EndorCoin", "Homepage": "https://www.endor.com" }, - "marketcap_usd": 4900202, + "marketcap_usd": 2572376, "name": "Endor Protocol Token", "network": "eth", "shortcut": "EDR", @@ -7774,7 +7761,7 @@ "Github": "https://github.com/egretia", "Homepage": "https://www.egretia.io" }, - "marketcap_usd": 6723965, + "marketcap_usd": 3078001, "name": "Egretia Token", "network": "eth", "shortcut": "EGT", @@ -7832,7 +7819,7 @@ "links": { "Homepage": "https://echolink.info" }, - "marketcap_usd": 724899, + "marketcap_usd": 334185, "name": "EchoLink", "network": "eth", "shortcut": "EKO", @@ -7870,7 +7857,7 @@ "links": { "Homepage": "https://electrify.asia" }, - "marketcap_usd": 350688, + "marketcap_usd": 381289, "name": "Electrify.Asia", "network": "eth", "shortcut": "ELEC", @@ -7890,7 +7877,7 @@ "Github": "https://github.com/aelfProject", "Homepage": "https://aelf.io/" }, - "marketcap_usd": 48968670, + "marketcap_usd": 27753087, "name": "ELF Token", "network": "eth", "shortcut": "ELF", @@ -7929,7 +7916,7 @@ "Github": "https://github.com/eltcoin", "Homepage": "http://www.eltcoin.tech/" }, - "marketcap_usd": 18859, + "marketcap_usd": 5638, "name": "ELTCOIN", "network": "eth", "shortcut": "ELTCOIN", @@ -7949,7 +7936,7 @@ "Github": "https://github.com/Elysian-ELY", "Homepage": "https://elycoin.io" }, - "marketcap_usd": 48392, + "marketcap_usd": 31307, "name": "ELYCOIN", "network": "eth", "shortcut": "ELY", @@ -8087,7 +8074,7 @@ "Github": "https://github.com/enigmampc", "Homepage": "https://enigma.co/" }, - "marketcap_usd": 19226415, + "marketcap_usd": 7341792, "name": "Enigma", "network": "eth", "shortcut": "ENG", @@ -8106,7 +8093,7 @@ "links": { "Homepage": "https://engagementtoken.com" }, - "marketcap_usd": 12054, + "marketcap_usd": 9580, "name": "Engagement Token", "network": "eth", "shortcut": "ENGT", @@ -8126,7 +8113,7 @@ "Github": "https://github.com/enjin/contracts", "Homepage": "https://enjincoin.io" }, - "marketcap_usd": 85276951, + "marketcap_usd": 42680782, "name": "ENJIN", "network": "eth", "shortcut": "ENJ", @@ -8225,7 +8212,7 @@ "links": { "Homepage": "https://emphy.io" }, - "marketcap_usd": 81565, + "marketcap_usd": 62827, "name": "Emphy", "network": "eth", "shortcut": "EPY", @@ -8263,7 +8250,7 @@ "links": { "Homepage": "https://eroscoin.org" }, - "marketcap_usd": 382451, + "marketcap_usd": 149963, "name": "Eroscoin", "network": "eth", "shortcut": "ERO", @@ -8283,7 +8270,7 @@ "Github": "https://github.com/Krishtopa/ContractEristica", "Homepage": "https://eristica.com/" }, - "marketcap_usd": 364909, + "marketcap_usd": 203131, "name": "Eristica", "network": "eth", "shortcut": "ERT", @@ -8323,7 +8310,7 @@ "Github": "https://github.com/EtherSportz/ESZCoin", "Homepage": "https://ethersportz.com" }, - "marketcap_usd": 195813, + "marketcap_usd": 111718, "name": "ESZCoin", "network": "eth", "shortcut": "ESZ", @@ -8457,7 +8444,7 @@ "links": { "Homepage": "https://energitoken.com" }, - "marketcap_usd": 611227, + "marketcap_usd": 163106, "name": "EnergiToken", "network": "eth", "shortcut": "ETK", @@ -8517,7 +8504,7 @@ "Github": "https://github.com/stasisnet", "Homepage": "https://stasis.net" }, - "marketcap_usd": 35107888, + "marketcap_usd": 34623560, "name": "STASIS EURS", "network": "eth", "shortcut": "EURS", @@ -8555,7 +8542,7 @@ "links": { "Homepage": "https://eventchain.io" }, - "marketcap_usd": 90749, + "marketcap_usd": 54142, "name": "EventChain", "network": "eth", "shortcut": "EVC", @@ -8594,7 +8581,7 @@ "Github": "https://github.com/devery", "Homepage": "https://devery.io" }, - "marketcap_usd": 126383, + "marketcap_usd": 72031, "name": "Devery", "network": "eth", "shortcut": "EVE", @@ -8614,7 +8601,7 @@ "Github": "https://github.com/evedo-co", "Homepage": "https://www.evedo.co" }, - "marketcap_usd": 202406, + "marketcap_usd": 50283, "name": "Evedo Token", "network": "eth", "shortcut": "EVED", @@ -8673,7 +8660,7 @@ "links": { "Homepage": "https://everex.io " }, - "marketcap_usd": 5631323, + "marketcap_usd": 2988501, "name": "EVX Token", "network": "eth", "shortcut": "EVX", @@ -8771,7 +8758,7 @@ "links": { "Homepage": "https://exrnchain.com" }, - "marketcap_usd": 1522349, + "marketcap_usd": 779269, "name": "EXRNchain", "network": "eth", "shortcut": "EXRN", @@ -8810,7 +8797,7 @@ "links": { "Homepage": "https://experty.io/en" }, - "marketcap_usd": 804449, + "marketcap_usd": 461082, "name": "Experty", "network": "eth", "shortcut": "EXY", @@ -8887,7 +8874,7 @@ "links": { "Homepage": "https://tokensale.faceter.io" }, - "marketcap_usd": 441376, + "marketcap_usd": 298155, "name": "Faceter", "network": "eth", "shortcut": "FACE", @@ -8985,7 +8972,7 @@ "links": { "Homepage": "https://friendz.io" }, - "marketcap_usd": 966598, + "marketcap_usd": 428889, "name": "Friendz", "network": "eth", "shortcut": "FDZ", @@ -9104,7 +9091,7 @@ "Github": "https://github.com/FortKnoxster", "Homepage": "https://fortknoxster.com" }, - "marketcap_usd": 330435, + "marketcap_usd": 192176, "name": "Knoxstertoken", "network": "eth", "shortcut": "FKX", @@ -9123,7 +9110,7 @@ "links": { "Homepage": "https://www.flixxo.com" }, - "marketcap_usd": 498415, + "marketcap_usd": 284358, "name": "Flixxo", "network": "eth", "shortcut": "FLIXX", @@ -9142,7 +9129,7 @@ "links": { "Homepage": "https://firelotto.io" }, - "marketcap_usd": 122353, + "marketcap_usd": 70620, "name": "Fire Lotto", "network": "eth", "shortcut": "FLOT", @@ -9162,7 +9149,7 @@ "Github": "https://github.com/gameflip", "Homepage": "https://gameflip.com" }, - "marketcap_usd": 543083, + "marketcap_usd": 319671, "name": "FLIP Token", "network": "eth", "shortcut": "FLP", @@ -9278,7 +9265,7 @@ "links": { "Homepage": "https://www.foglink.io" }, - "marketcap_usd": 1283113, + "marketcap_usd": 399755, "name": "FNKOS", "network": "eth", "shortcut": "FNKOS", @@ -9297,7 +9284,7 @@ "links": { "Homepage": "https://fintab.io/ico" }, - "marketcap_usd": 12369, + "marketcap_usd": 8391, "name": "Fintab", "network": "eth", "shortcut": "FNTB", @@ -9317,7 +9304,7 @@ "Github": "https://github.com/f-o-a-m", "Homepage": "http://foam.space" }, - "marketcap_usd": 5776046, + "marketcap_usd": 3315362, "name": "FOAM Token", "network": "eth", "shortcut": "FOAM", @@ -9375,7 +9362,7 @@ "links": { "Homepage": "https://www.fota.io" }, - "marketcap_usd": 288305, + "marketcap_usd": 130565, "name": "Fortuna", "network": "eth", "shortcut": "FOTA", @@ -9511,7 +9498,7 @@ "links": { "Homepage": "https://fusion.org" }, - "marketcap_usd": 5348512, + "marketcap_usd": 3854545, "name": "Fusion", "network": "eth", "shortcut": "FSN", @@ -9549,7 +9536,7 @@ "links": { "Homepage": "https://fanstime.org" }, - "marketcap_usd": 763508, + "marketcap_usd": 304559, "name": "FansTime", "network": "eth", "shortcut": "FTI", @@ -9588,7 +9575,7 @@ "Github": "https://github.com/farmatrust", "Homepage": "https://www.farmatrust.io" }, - "marketcap_usd": 325173, + "marketcap_usd": 204430, "name": "FarmaTrust Token", "network": "eth", "shortcut": "FTT", @@ -9607,7 +9594,7 @@ "links": { "Homepage": "https://www.fintrux.com" }, - "marketcap_usd": 963344, + "marketcap_usd": 453084, "name": "FintruX Network", "network": "eth", "shortcut": "FTX", @@ -9627,7 +9614,7 @@ "Github": "https://github.com/futuraxproject", "Homepage": "https://futurax.global" }, - "marketcap_usd": 6256, + "marketcap_usd": 2177, "name": "FUTURAX", "network": "eth", "shortcut": "FTXT", @@ -9647,7 +9634,7 @@ "Github": "https://github.com/etherparty", "Homepage": "https://etherparty.io" }, - "marketcap_usd": 2760160, + "marketcap_usd": 1231850, "name": "Etherparty FUEL", "network": "eth", "shortcut": "FUEL", @@ -9666,7 +9653,7 @@ "links": { "Homepage": "https://funfair.io" }, - "marketcap_usd": 21043242, + "marketcap_usd": 10092832, "name": "Funfair", "network": "eth", "shortcut": "FUN", @@ -9685,7 +9672,7 @@ "links": { "Homepage": "https://fuzex.co" }, - "marketcap_usd": 527638, + "marketcap_usd": 234563, "name": "FuzeX", "network": "eth", "shortcut": "FXT", @@ -9743,7 +9730,7 @@ "links": { "Homepage": "https://flyp.me" }, - "marketcap_usd": 230863, + "marketcap_usd": 148227, "name": "FlypMe", "network": "eth", "shortcut": "FYP", @@ -10056,7 +10043,7 @@ "links": { "Homepage": "https://gems.org" }, - "marketcap_usd": 284429, + "marketcap_usd": 126313, "name": "Gems", "network": "eth", "shortcut": "GEM", @@ -10076,7 +10063,7 @@ "Github": "https://github.com/daostack", "Homepage": "https://daostack.io" }, - "marketcap_usd": 4403819, + "marketcap_usd": 1818231, "name": "DAOstack", "network": "eth", "shortcut": "GEN", @@ -10095,7 +10082,7 @@ "links": { "Homepage": "https://parkgene.io" }, - "marketcap_usd": 78337, + "marketcap_usd": 30210, "name": "Parkgene", "network": "eth", "shortcut": "GENE", @@ -10115,7 +10102,7 @@ "Github": "https://github.com/Getprotocol", "Homepage": "http://www.get-protocol.io" }, - "marketcap_usd": 3952063, + "marketcap_usd": 2534277, "name": "GET Protocol", "network": "eth", "shortcut": "GET", @@ -10270,7 +10257,7 @@ "links": { "Homepage": "https://gnosis.pm" }, - "marketcap_usd": 18740793, + "marketcap_usd": 10381125, "name": "Gnosis", "network": "eth", "shortcut": "GNO", @@ -10290,7 +10277,7 @@ "Github": "https://github.com/golemfactory/golem", "Homepage": "https://golem.network" }, - "marketcap_usd": 57608720, + "marketcap_usd": 28596156, "name": "Golem", "network": "eth", "shortcut": "GNT", @@ -10309,7 +10296,7 @@ "links": { "Homepage": "https://genaro.network" }, - "marketcap_usd": 2568432, + "marketcap_usd": 1177438, "name": "Genaro Network", "network": "eth", "shortcut": "GNX", @@ -10329,7 +10316,7 @@ "Github": "https://github.com/GNYIO", "Homepage": "https://www.gny.io/" }, - "marketcap_usd": 6497961, + "marketcap_usd": 3744826, "name": "GNY", "network": "eth", "shortcut": "GNY", @@ -10368,7 +10355,7 @@ "links": { "Homepage": "https://gonetwork.co/index.html" }, - "marketcap_usd": 356055, + "marketcap_usd": 161449, "name": "GoNetwork", "network": "eth", "shortcut": "GOT", @@ -10387,7 +10374,7 @@ "links": { "Homepage": "http://gridplus.io" }, - "marketcap_usd": 2059365, + "marketcap_usd": 1055301, "name": "Grid+", "network": "eth", "shortcut": "GRID", @@ -10465,7 +10452,7 @@ "links": { "Homepage": "https://www.gsc.social" }, - "marketcap_usd": 2732611, + "marketcap_usd": 1486255, "name": "Global Social Chain", "network": "eth", "shortcut": "GSC", @@ -10504,7 +10491,7 @@ "Github": "https://github.com/GameLeLe", "Homepage": "https://game.com" }, - "marketcap_usd": 3673115, + "marketcap_usd": 2458053, "name": "GTC Token", "network": "eth", "shortcut": "GTC", @@ -10544,7 +10531,7 @@ "Github": "https://github.com/GIFTO-io", "Homepage": "https://gifto.io/" }, - "marketcap_usd": 6146360, + "marketcap_usd": 3543856, "name": "Gifto", "network": "eth", "shortcut": "GTO", @@ -10563,7 +10550,7 @@ "links": { "Homepage": "https://peerguess.com" }, - "marketcap_usd": 5477, + "marketcap_usd": 6473, "name": "Peerguess", "network": "eth", "shortcut": "GUESS", @@ -10602,7 +10589,7 @@ "links": { "Homepage": "https://matchpool.co" }, - "marketcap_usd": 186980, + "marketcap_usd": 120456, "name": "Matchpool", "network": "eth", "shortcut": "GUP", @@ -10622,7 +10609,7 @@ "Github": "https://github.com/GenesisVision", "Homepage": "https://genesis.vision" }, - "marketcap_usd": 4856460, + "marketcap_usd": 2379464, "name": "Genesis Vision", "network": "eth", "shortcut": "GVT", @@ -10778,7 +10765,7 @@ "links": { "Homepage": "https://www.showhand.io" }, - "marketcap_usd": 13842, + "marketcap_usd": 4749, "name": "ShowHand", "network": "eth", "shortcut": "HAND", @@ -10835,7 +10822,7 @@ "links": { "Homepage": "https://heartbout.com" }, - "marketcap_usd": 109535, + "marketcap_usd": 43423, "name": "HeartBout", "network": "eth", "shortcut": "HB", @@ -10854,7 +10841,7 @@ "links": { "Homepage": "https://www.hubii.network" }, - "marketcap_usd": 1286875, + "marketcap_usd": 1315823, "name": "Hubii Network", "network": "eth", "shortcut": "HBT", @@ -10873,7 +10860,7 @@ "links": { "Homepage": "https://www.hbzcoin.com/#" }, - "marketcap_usd": 421959, + "marketcap_usd": 209649, "name": "HBZ coin", "network": "eth", "shortcut": "HBZ", @@ -10951,7 +10938,7 @@ "links": { "Homepage": "https://heronode.io" }, - "marketcap_usd": 61823, + "marketcap_usd": 35981, "name": "HeroNode", "network": "eth", "shortcut": "HER", @@ -10991,7 +10978,7 @@ "Github": "https://github.com/myHelloGold/Foundation", "Homepage": "https://www.hellogold.org" }, - "marketcap_usd": 172156, + "marketcap_usd": 157580, "name": "HelloGold", "network": "eth", "shortcut": "HGT", @@ -11087,7 +11074,7 @@ "links": { "Homepage": "https://hacken.io" }, - "marketcap_usd": 845511, + "marketcap_usd": 574868, "name": "Hacken", "network": "eth", "shortcut": "HKN", @@ -11145,7 +11132,7 @@ "links": { "Homepage": "https://humaniq.com" }, - "marketcap_usd": 966530, + "marketcap_usd": 472296, "name": "Humaniq", "network": "eth", "shortcut": "HMQ", @@ -11223,7 +11210,7 @@ "Github": "https://github.com/ethorse", "Homepage": "https://ethorse.com" }, - "marketcap_usd": 47496, + "marketcap_usd": 37548, "name": "Ethorse", "network": "eth", "shortcut": "HORSE", @@ -11243,7 +11230,7 @@ "Github": "https://github.com/Holo-Host", "Homepage": "https://holo.host/" }, - "marketcap_usd": 107133544, + "marketcap_usd": 52604427, "name": "Holo Token", "network": "eth", "shortcut": "HOT (Holo)", @@ -11262,7 +11249,7 @@ "links": { "Homepage": "https://thehydrofoundation.com/" }, - "marketcap_usd": 1602775, + "marketcap_usd": 784254, "name": "Hydro Protocol", "network": "eth", "shortcut": "HOT (Hydro)", @@ -11300,7 +11287,7 @@ "links": { "Homepage": "https://www.hbg.com" }, - "marketcap_usd": 990800213, + "marketcap_usd": 604118139, "name": "Huobi Token", "network": "eth", "shortcut": "HT", @@ -11359,7 +11346,7 @@ "Github": "https://github.com/HurifyPlatform", "Homepage": "https://hurify.co/" }, - "marketcap_usd": 57945, + "marketcap_usd": 28418, "name": "$Hurify Token", "network": "eth", "shortcut": "HUR", @@ -11399,7 +11386,7 @@ "Github": "https://github.com/HiveProjectLTD", "Homepage": "https://www.hiveterminal.com" }, - "marketcap_usd": 832771, + "marketcap_usd": 836973, "name": "Hiveterminal Token", "network": "eth", "shortcut": "HVN", @@ -11419,7 +11406,7 @@ "Github": "https://github.com/hydrogen-dev", "Homepage": "https://www.hydrogenplatform.com/hydro" }, - "marketcap_usd": 7076633, + "marketcap_usd": 3449994, "name": "Hydro", "network": "eth", "shortcut": "HYDRO", @@ -11592,7 +11579,7 @@ "links": { "Homepage": "https://indahash.com" }, - "marketcap_usd": 1204535, + "marketcap_usd": 728210, "name": "indaHash", "network": "eth", "shortcut": "IDH", @@ -11612,7 +11599,7 @@ "Github": "https://github.com/rupiah-token/", "Homepage": "https://www.rupiahtoken.com" }, - "marketcap_usd": 93056, + "marketcap_usd": 86785, "name": "Rupiah Token", "network": "eth", "shortcut": "IDRT", @@ -11631,7 +11618,7 @@ "links": { "Homepage": "https://investfeed.com" }, - "marketcap_usd": 73717, + "marketcap_usd": 44898, "name": "InvestFeed", "network": "eth", "shortcut": "IFT", @@ -11650,7 +11637,7 @@ "links": { "Homepage": "http://igtoken.net" }, - "marketcap_usd": 39795, + "marketcap_usd": 12382, "name": "IGToken", "network": "eth", "shortcut": "IG", @@ -11689,7 +11676,7 @@ "links": { "Homepage": "https://ihtcoin.com" }, - "marketcap_usd": 1470353, + "marketcap_usd": 737407, "name": "I HOUSE TOKEN", "network": "eth", "shortcut": "IHT", @@ -11766,7 +11753,7 @@ "links": { "Homepage": "https://indorse.io" }, - "marketcap_usd": 105668, + "marketcap_usd": 71404, "name": "Indorse", "network": "eth", "shortcut": "IND", @@ -11786,7 +11773,7 @@ "Github": "https://github.com/InfinitusToken/InfinitusToken", "Homepage": "https://inftech.io/ " }, - "marketcap_usd": 162796, + "marketcap_usd": 101350, "name": "InfinitusTokens", "network": "eth", "shortcut": "INF", @@ -11805,7 +11792,7 @@ "links": { "Homepage": "https://iungo.network" }, - "marketcap_usd": 46459, + "marketcap_usd": 32106, "name": "Iungo", "network": "eth", "shortcut": "ING", @@ -11843,7 +11830,7 @@ "links": { "Homepage": "https://insights.network" }, - "marketcap_usd": 2235189, + "marketcap_usd": 917830, "name": "Insights Network", "network": "eth", "shortcut": "INSTAR", @@ -11901,7 +11888,7 @@ "Github": "https://github.com/InMax-Exchange", "Homepage": "https://inmax.live/ " }, - "marketcap_usd": 72465, + "marketcap_usd": 53733, "name": "Token INMAX", "network": "eth", "shortcut": "INX", @@ -11921,7 +11908,7 @@ "Github": "https://github.com/Internxt/", "Homepage": "https://internxt.com/" }, - "marketcap_usd": 628293, + "marketcap_usd": 378565, "name": "Internxt", "network": "eth", "shortcut": "INXT", @@ -11960,7 +11947,7 @@ "Github": "https://github.com/iotexproject/iotex-core", "Homepage": "http://iotex.io/" }, - "marketcap_usd": 23614779, + "marketcap_usd": 9787130, "name": "IoTeX Network", "network": "eth", "shortcut": "IOTX", @@ -11980,7 +11967,7 @@ "Github": "https://github.com/InsurePal", "Homepage": "https://insurepal.io/" }, - "marketcap_usd": 1327648, + "marketcap_usd": 587921, "name": "InsurePal token", "network": "eth", "shortcut": "IPL", @@ -11999,7 +11986,7 @@ "links": { "Homepage": "https://ip.sx" }, - "marketcap_usd": 276651, + "marketcap_usd": 170299, "name": "IP Exchange", "network": "eth", "shortcut": "IPSX", @@ -12019,7 +12006,7 @@ "Github": "https://github.com/iqeon", "Homepage": "https://iqeon.io/" }, - "marketcap_usd": 3934166, + "marketcap_usd": 5928112, "name": "IQeon", "network": "eth", "shortcut": "IQN", @@ -12079,7 +12066,7 @@ "Github": "https://github.com/IoTChainCode", "Homepage": "https://iotchain.io/" }, - "marketcap_usd": 10830389, + "marketcap_usd": 5398160, "name": "IoT Chain", "network": "eth", "shortcut": "ITC", @@ -12138,7 +12125,7 @@ "links": { "Homepage": "https://www.ivykoin.com" }, - "marketcap_usd": 642191, + "marketcap_usd": 5753867, "name": "IvyKoin Public Network Tokens", "network": "eth", "shortcut": "IVY", @@ -12157,7 +12144,7 @@ "links": { "Homepage": "https://www.insurex.co" }, - "marketcap_usd": 260107, + "marketcap_usd": 148860, "name": "InsureX", "network": "eth", "shortcut": "IXT", @@ -12196,7 +12183,7 @@ "Github": "https://github.com/jet8", "Homepage": "https://jet8.io" }, - "marketcap_usd": 316910, + "marketcap_usd": 179995, "name": "J8T Token", "network": "eth", "shortcut": "J8T", @@ -12273,7 +12260,7 @@ "Github": "https://github.com/jibrelnetwork", "Homepage": "https://jibrel.network" }, - "marketcap_usd": 5227457, + "marketcap_usd": 4379930, "name": "Jibrel Network", "network": "eth", "shortcut": "JNT", @@ -12293,7 +12280,7 @@ "Github": "https://github.com/JobchainOfficial", "Homepage": "https://www.jobchain.com" }, - "marketcap_usd": 15372, + "marketcap_usd": 0, "name": "JOBCHAIN", "network": "eth", "shortcut": "JOB", @@ -12351,7 +12338,7 @@ "Github": "https://github.com/jsecoin", "Homepage": "https://jsecoin.com" }, - "marketcap_usd": 73104, + "marketcap_usd": 39691, "name": "JSE Token", "network": "eth", "shortcut": "JSE", @@ -12370,7 +12357,7 @@ "links": { "Homepage": "http://www.kan.land" }, - "marketcap_usd": 14920689, + "marketcap_usd": 10399559, "name": "BitKan", "network": "eth", "shortcut": "KAN", @@ -12448,7 +12435,7 @@ "links": { "Homepage": "https://kindads.io" }, - "marketcap_usd": 38801, + "marketcap_usd": 23098, "name": "Kind Ads Token", "network": "eth", "shortcut": "KIND", @@ -12487,7 +12474,7 @@ "Github": "https://github.com/KyberNetwork", "Homepage": "https://kyber.network" }, - "marketcap_usd": 97893330, + "marketcap_usd": 89338878, "name": "Kyber Network", "network": "eth", "shortcut": "KNC", @@ -12506,7 +12493,7 @@ "links": { "Homepage": "https://kanadecoin.com" }, - "marketcap_usd": 51535, + "marketcap_usd": 49915, "name": "KanadeCoin", "network": "eth", "shortcut": "KNDC", @@ -12525,7 +12512,7 @@ "links": { "Homepage": "https://kora.network" }, - "marketcap_usd": 13436, + "marketcap_usd": 7294, "name": "Kora Network Token", "network": "eth", "shortcut": "KNT", @@ -12584,7 +12571,7 @@ "Github": "https://github.com/Cryptense/", "Homepage": "https://kryll.io/" }, - "marketcap_usd": 1381037, + "marketcap_usd": 829283, "name": "Kryll", "network": "eth", "shortcut": "KRL", @@ -12643,7 +12630,7 @@ "links": { "Homepage": "https://ico.kuende.com" }, - "marketcap_usd": 33403, + "marketcap_usd": 33002, "name": "Kuende Token", "network": "eth", "shortcut": "KUE", @@ -12662,7 +12649,7 @@ "links": { "Homepage": "https://4new.io" }, - "marketcap_usd": 16560, + "marketcap_usd": 7818, "name": "4NEW", "network": "eth", "shortcut": "KWATT", @@ -12720,7 +12707,7 @@ "Github": "https://github.com/latoken", "Homepage": "https://latoken.com/" }, - "marketcap_usd": 20157850, + "marketcap_usd": 13024208, "name": "LATOKEN", "network": "eth", "shortcut": "LA", @@ -12759,7 +12746,7 @@ "Github": "https://github.com/LambdaIM", "Homepage": "https://www.lambda.im/" }, - "marketcap_usd": 17389800, + "marketcap_usd": 7984277, "name": "Lambda", "network": "eth", "shortcut": "LAMB", @@ -12797,7 +12784,7 @@ "links": { "Homepage": "https://www.mycred.io" }, - "marketcap_usd": 12792368, + "marketcap_usd": 8486695, "name": "Cred", "network": "eth", "shortcut": "LBA", @@ -12816,7 +12803,7 @@ "links": { "Homepage": "https://www.localcoinswap.com" }, - "marketcap_usd": 193800, + "marketcap_usd": 173359, "name": "LocalCoinSwap", "network": "eth", "shortcut": "LCS", @@ -12835,7 +12822,7 @@ "links": { "Homepage": "https://www.leadcoin.network/" }, - "marketcap_usd": 37336, + "marketcap_usd": 38025, "name": "LEADCOIN", "network": "eth", "shortcut": "LDC", @@ -12895,7 +12882,7 @@ "Github": "https://github.com/ETHLend", "Homepage": "https://ethlend.io/" }, - "marketcap_usd": 36077464, + "marketcap_usd": 27814644, "name": "EHTLend", "network": "eth", "shortcut": "LEND", @@ -12914,7 +12901,7 @@ "links": { "Homepage": "https://www.leocoin.org/" }, - "marketcap_usd": 370239, + "marketcap_usd": 180915, "name": "LEOcoin", "network": "eth", "shortcut": "LEO", @@ -12933,7 +12920,7 @@ "links": { "Homepage": "https://www.leverj.io" }, - "marketcap_usd": 1767193, + "marketcap_usd": 802282, "name": "Leverj", "network": "eth", "shortcut": "LEV", @@ -12990,7 +12977,7 @@ "links": { "Homepage": "http://legendsroomlv.com" }, - "marketcap_usd": 47535, + "marketcap_usd": 23448, "name": "Legends", "network": "eth", "shortcut": "LGD", @@ -13068,7 +13055,7 @@ "Github": "https://github.com/windingtree", "Homepage": "https://windingtree.com/" }, - "marketcap_usd": 3622068, + "marketcap_usd": 1956044, "name": "Winding Tree", "network": "eth", "shortcut": "LIF", @@ -13087,7 +13074,7 @@ "links": { "Homepage": "http://www.lifelabs.io" }, - "marketcap_usd": 1566651, + "marketcap_usd": 680281, "name": "LIFE", "network": "eth", "shortcut": "LIFE", @@ -13126,7 +13113,7 @@ "links": { "Homepage": "https://link.smartcontract.com" }, - "marketcap_usd": 1394620235, + "marketcap_usd": 784063483, "name": "Chainlink", "network": "eth", "shortcut": "LINK (Chainlink)", @@ -13164,7 +13151,7 @@ "links": { "Homepage": "https://www.linkey.info" }, - "marketcap_usd": 4245391, + "marketcap_usd": 759870, "name": "Linkey", "network": "eth", "shortcut": "LKY", @@ -13184,7 +13171,7 @@ "Github": "https://github.com/GNYIO", "Homepage": "https://www.gny.io/lisk" }, - "marketcap_usd": 608630, + "marketcap_usd": 562243, "name": "Lisk Machine Learning", "network": "eth", "shortcut": "LML", @@ -13204,7 +13191,7 @@ "Github": "https://github.com/lendingblock", "Homepage": "https://lendingblock.com" }, - "marketcap_usd": 1617043, + "marketcap_usd": 647639, "name": "Lendingblock", "network": "eth", "shortcut": "LND", @@ -13223,7 +13210,7 @@ "links": { "Homepage": "https://LockChain.co" }, - "marketcap_usd": 6280815, + "marketcap_usd": 3431651, "name": "LockChain", "network": "eth", "shortcut": "LOC", @@ -13243,7 +13230,7 @@ "Github": "http://github.com/locipro/loci-coin-sale", "Homepage": "https://locipro.com" }, - "marketcap_usd": 29782, + "marketcap_usd": 25445, "name": "LOCIcoin", "network": "eth", "shortcut": "LOCI", @@ -13262,7 +13249,7 @@ "links": { "Homepage": "https://www.locuschain.com" }, - "marketcap_usd": 985521, + "marketcap_usd": 2813143, "name": "Locus Chain", "network": "eth", "shortcut": "LOCUS", @@ -13320,7 +13307,7 @@ "Github": "github.com/loomnetwork/", "Homepage": "https://loomx.io" }, - "marketcap_usd": 20253985, + "marketcap_usd": 11020593, "name": "Loom Network", "network": "eth", "shortcut": "LOOM", @@ -13359,7 +13346,7 @@ "links": { "Homepage": "https://liquidity.network/" }, - "marketcap_usd": 1129372, + "marketcap_usd": 395131, "name": "Liquidity Network Token", "network": "eth", "shortcut": "LQD", @@ -13379,7 +13366,7 @@ "Github": "https://github.com/loopring", "Homepage": "https://loopring.org" }, - "marketcap_usd": 38492458, + "marketcap_usd": 30549035, "name": "Loopring", "network": "eth", "shortcut": "LRC", @@ -13399,7 +13386,7 @@ "Github": "https://github.com/Play2Live/blockchain", "Homepage": "https://play2live.io" }, - "marketcap_usd": 82863, + "marketcap_usd": 46171, "name": "LUCToken", "network": "eth", "shortcut": "LUC", @@ -13457,7 +13444,7 @@ "Github": "https://github.com/lunyr", "Homepage": "https://lunyr.com" }, - "marketcap_usd": 2212963, + "marketcap_usd": 1066858, "name": "Lunyr", "network": "eth", "shortcut": "LUN", @@ -13575,7 +13562,7 @@ "Github": "https://github.com/decentraland", "Homepage": "https://decentraland.org" }, - "marketcap_usd": 44310877, + "marketcap_usd": 21478146, "name": "Decentraland MANA", "network": "eth", "shortcut": "MANA", @@ -13613,7 +13600,7 @@ "links": { "Homepage": "https://midasprotocol.io/" }, - "marketcap_usd": 823067, + "marketcap_usd": 431249, "name": "MIDAS PROTOCOL", "network": "eth", "shortcut": "MAS", @@ -13691,7 +13678,7 @@ "links": { "Homepage": "https://crypto.com" }, - "marketcap_usd": 81543584, + "marketcap_usd": 41224593, "name": "Crypto.com", "network": "eth", "shortcut": "MCO", @@ -13710,7 +13697,7 @@ "links": { "Homepage": "https://moedaseeds.com" }, - "marketcap_usd": 11376977, + "marketcap_usd": 5756106, "name": "Moeda Loyalty Points", "network": "eth", "shortcut": "MDA", @@ -13729,7 +13716,7 @@ "links": { "Homepage": "https://www.mdt.co" }, - "marketcap_usd": 3884902, + "marketcap_usd": 2209024, "name": "Measurable Data Token", "network": "eth", "shortcut": "MDT", @@ -13768,7 +13755,7 @@ "Github": "https://github.com/mesg-foundation", "Homepage": "https://mesg.com" }, - "marketcap_usd": 589882, + "marketcap_usd": 358744, "name": "MESG", "network": "eth", "shortcut": "MESG", @@ -13807,7 +13794,7 @@ "links": { "Homepage": "https://www.metronome.io" }, - "marketcap_usd": 5441908, + "marketcap_usd": 2936206, "name": "Metronome", "network": "eth", "shortcut": "MET", @@ -13826,7 +13813,7 @@ "links": { "Homepage": "https://metamorph.pro" }, - "marketcap_usd": 133092, + "marketcap_usd": 54765, "name": "MetaMorph", "network": "eth", "shortcut": "METM", @@ -13846,7 +13833,7 @@ "Github": "https://github.com/syncfab", "Homepage": "https://syncfab.com/" }, - "marketcap_usd": 381771, + "marketcap_usd": 442810, "name": "SyncFab Smart Manufacturing Blockchain", "network": "eth", "shortcut": "MFG", @@ -13866,7 +13853,7 @@ "Github": "https://github.com/MainframeHQ", "Homepage": "https://mainframe.com" }, - "marketcap_usd": 8361254, + "marketcap_usd": 4797054, "name": "Mainframe Token", "network": "eth", "shortcut": "MFT", @@ -13885,7 +13872,7 @@ "links": { "Homepage": "https://mftu.net" }, - "marketcap_usd": 81018, + "marketcap_usd": 4571, "name": "Mainstream For The Underground", "network": "eth", "shortcut": "MFTU", @@ -13904,7 +13891,7 @@ "links": { "Homepage": "https://mobilego.io" }, - "marketcap_usd": 768429, + "marketcap_usd": 944876, "name": "MobileGo", "network": "eth", "shortcut": "MGO", @@ -13981,7 +13968,7 @@ "links": { "Homepage": "https://token.morpheuslabs.io" }, - "marketcap_usd": 1986075, + "marketcap_usd": 1114859, "name": "Morpheus Infrastructure Token", "network": "eth", "shortcut": "MITX", @@ -14001,7 +13988,7 @@ "Github": "https://github.com/makerdao", "Homepage": "https://makerdao.com" }, - "marketcap_usd": 573446810, + "marketcap_usd": 257434224, "name": "MakerDAO", "network": "eth", "shortcut": "MKR", @@ -14040,7 +14027,7 @@ "links": { "Homepage": "https://melonport.com" }, - "marketcap_usd": 5434079, + "marketcap_usd": 3187168, "name": "Melonport", "network": "eth", "shortcut": "MLN (new)", @@ -14059,7 +14046,7 @@ "links": { "Homepage": "https://minereum.com" }, - "marketcap_usd": 83123, + "marketcap_usd": 54826, "name": "Minereum", "network": "eth", "shortcut": "MNE", @@ -14118,7 +14105,7 @@ "links": { "Homepage": "https://moss.land" }, - "marketcap_usd": 7404750, + "marketcap_usd": 4706819, "name": "Moss Coin", "network": "eth", "shortcut": "MOC", @@ -14195,7 +14182,7 @@ "links": { "Homepage": "https://mark.space" }, - "marketcap_usd": 594456, + "marketcap_usd": 248617, "name": "MARK.SPACE", "network": "eth", "shortcut": "MRK", @@ -14291,7 +14278,7 @@ "links": { "Homepage": "http://www.monetha.io" }, - "marketcap_usd": 3934663, + "marketcap_usd": 1829313, "name": "Monetha", "network": "eth", "shortcut": "MTH", @@ -14310,7 +14297,7 @@ "links": { "Homepage": "https://www.metalpay.com" }, - "marketcap_usd": 19073371, + "marketcap_usd": 11093388, "name": "Metal", "network": "eth", "shortcut": "MTL", @@ -14329,7 +14316,7 @@ "links": { "Homepage": "https://medicalchain.com" }, - "marketcap_usd": 981145, + "marketcap_usd": 587341, "name": "MedToken", "network": "eth", "shortcut": "MTN", @@ -14386,7 +14373,7 @@ "links": { "Homepage": "https://www.matryx.ai" }, - "marketcap_usd": 546092, + "marketcap_usd": 278040, "name": "Matryx", "network": "eth", "shortcut": "MTX", @@ -14463,7 +14450,7 @@ "links": { "Homepage": "http://mvlchain.io" }, - "marketcap_usd": 2108522, + "marketcap_usd": 1343646, "name": "Mass Vehicle Ledger Token", "network": "eth", "shortcut": "MVL", @@ -14483,7 +14470,7 @@ "Github": "https://github.com/Merculet", "Homepage": "https://www.merculet.io" }, - "marketcap_usd": 543697, + "marketcap_usd": 262704, "name": "Merculet", "network": "eth", "shortcut": "MVP", @@ -14502,7 +14489,7 @@ "links": { "Homepage": "https://www.restartenergy.io" }, - "marketcap_usd": 3241848, + "marketcap_usd": 1111127, "name": "RED MWAT", "network": "eth", "shortcut": "MWAT", @@ -14521,7 +14508,7 @@ "links": { "Homepage": "https://mysterium.network" }, - "marketcap_usd": 1397002, + "marketcap_usd": 860519, "name": "Mysterium", "network": "eth", "shortcut": "MYST", @@ -14560,7 +14547,7 @@ "Github": "https://github.com/NANJ-COIN", "Homepage": "https://nanjcoin.com/" }, - "marketcap_usd": 318948, + "marketcap_usd": 175178, "name": "NANJCOIN", "network": "eth", "shortcut": "NANJ", @@ -14638,7 +14625,7 @@ "links": { "Homepage": "https://niobiumcoin.io" }, - "marketcap_usd": 824998, + "marketcap_usd": 510437, "name": "Niobium Coin", "network": "eth", "shortcut": "NBC", @@ -14657,7 +14644,7 @@ "links": { "Homepage": "https://nucleus.vision" }, - "marketcap_usd": 5647816, + "marketcap_usd": 2659551, "name": "Nucleus Vision", "network": "eth", "shortcut": "NCASH", @@ -14677,7 +14664,7 @@ "Github": "https://github.com/polyswarm", "Homepage": "https://polyswarm.io" }, - "marketcap_usd": 2937121, + "marketcap_usd": 1583235, "name": "Nectar", "network": "eth", "shortcut": "NCT", @@ -14716,7 +14703,7 @@ "Github": "https://github.com/ndexnetwork/NDX", "Homepage": "https://ndexnetwork.com" }, - "marketcap_usd": 3530, + "marketcap_usd": 2683, "name": "nDEX", "network": "eth", "shortcut": "NDX", @@ -14736,7 +14723,7 @@ "Github": "https://github.com/ethfinex/", "Homepage": "https://nectar.community" }, - "marketcap_usd": 5256764, + "marketcap_usd": 4951690, "name": "Ethfinex Nectar Token", "network": "eth", "shortcut": "NEC", @@ -14794,7 +14781,7 @@ "Github": "https://github.com/neufund", "Homepage": "https://neufund.org" }, - "marketcap_usd": 4365461, + "marketcap_usd": 3815760, "name": "NEU Fund", "network": "eth", "shortcut": "NEU", @@ -14813,7 +14800,7 @@ "links": { "Homepage": "http://nexo.io" }, - "marketcap_usd": 88874044, + "marketcap_usd": 55571220, "name": "Nexo", "network": "eth", "shortcut": "NEXO", @@ -14832,7 +14819,7 @@ "links": { "Homepage": "https://www.nagaico.com" }, - "marketcap_usd": 1051257, + "marketcap_usd": 640282, "name": "NAGA Coin", "network": "eth", "shortcut": "NGC", @@ -14912,7 +14899,7 @@ "Github": "https://github.com/numerai", "Homepage": "https://numer.ai" }, - "marketcap_usd": 17272629, + "marketcap_usd": 11932661, "name": "Numerai", "network": "eth", "shortcut": "NMR", @@ -14932,7 +14919,7 @@ "Github": "https://github.com/NoahFoundation/NoahCoin", "Homepage": "https://noahcoin.org" }, - "marketcap_usd": 43768744, + "marketcap_usd": 0, "name": "Noah Coin", "network": "eth", "shortcut": "NOAH", @@ -14951,7 +14938,7 @@ "links": { "Homepage": "https://nobscrypto.com" }, - "marketcap_usd": 62557, + "marketcap_usd": 26439, "name": "No BS Crypto", "network": "eth", "shortcut": "NOBS", @@ -14971,7 +14958,7 @@ "Github": "https://github.com/nitrotoken/nitro-crowdsale", "Homepage": "https://nitro.live" }, - "marketcap_usd": 26867, + "marketcap_usd": 15559, "name": "Nitro", "network": "eth", "shortcut": "NOX", @@ -15010,7 +14997,7 @@ "links": { "Homepage": "https://napoleonx.ai" }, - "marketcap_usd": 1889237, + "marketcap_usd": 1564712, "name": "NaPoleonX", "network": "eth", "shortcut": "NPX", @@ -15030,7 +15017,7 @@ "Github": "https://github.com/pundix", "Homepage": "https://pundix.com" }, - "marketcap_usd": 41377265, + "marketcap_usd": 23078077, "name": "Pundi X Token", "network": "eth", "shortcut": "NPXS", @@ -15088,7 +15075,7 @@ "links": { "Homepage": "https://nuggets.life/" }, - "marketcap_usd": 1218537, + "marketcap_usd": 1212913, "name": "Nuggets Token", "network": "eth", "shortcut": "NUG", @@ -15166,7 +15153,7 @@ "Github": "https://github.com/NeutralGroup", "Homepage": "https://neutralproject.com" }, - "marketcap_usd": 80148, + "marketcap_usd": 80872, "name": "Neutral Dollar", "network": "eth", "shortcut": "NUSD", @@ -15242,7 +15229,7 @@ "links": { "Homepage": "https://www.openanx.org/en" }, - "marketcap_usd": 3848424, + "marketcap_usd": 1845008, "name": "OAX", "network": "eth", "shortcut": "OAX", @@ -15281,7 +15268,7 @@ "links": { "Homepage": "http://www.ocnex.net" }, - "marketcap_usd": 2770646, + "marketcap_usd": 1248440, "name": "Odyssey", "network": "eth", "shortcut": "OCN", @@ -15301,7 +15288,7 @@ "Github": "https://github.com/odemio", "Homepage": "https://odem.io/" }, - "marketcap_usd": 10921769, + "marketcap_usd": 8739009, "name": "ODEM Token", "network": "eth", "shortcut": "ODE", @@ -15341,7 +15328,7 @@ "Github": "https://github.com/originprotocol", "Homepage": "https://www.originprotocol.com" }, - "marketcap_usd": 8251130, + "marketcap_usd": 5990869, "name": "OriginToken", "network": "eth", "shortcut": "OGN", @@ -15440,7 +15427,7 @@ "Github": "https://github.com/Oneledger", "Homepage": "https://oneledger.io" }, - "marketcap_usd": 2884903, + "marketcap_usd": 890025, "name": "OneLedger Token", "network": "eth", "shortcut": "OLT", @@ -15460,7 +15447,7 @@ "Github": "https://github.com/omisego", "Homepage": "https://omg.omise.co" }, - "marketcap_usd": 131036666, + "marketcap_usd": 70663513, "name": "OmiseGO", "network": "eth", "shortcut": "OMG", @@ -15499,7 +15486,7 @@ "links": { "Homepage": "https://shivom.io" }, - "marketcap_usd": 1571653, + "marketcap_usd": 543389, "name": "Shivom", "network": "eth", "shortcut": "OMX", @@ -15519,7 +15506,7 @@ "Github": "https://github.com/MenloOne/", "Homepage": "https://www.menlo.one" }, - "marketcap_usd": 45406, + "marketcap_usd": 62221, "name": "Menlo One", "network": "eth", "shortcut": "ONE", @@ -15558,7 +15545,7 @@ "Github": "https://github.com/onGsocial", "Homepage": "https://somee.social" }, - "marketcap_usd": 161555, + "marketcap_usd": 153331, "name": "SoMee.Social", "network": "eth", "shortcut": "ONG", @@ -15577,7 +15564,7 @@ "links": { "Homepage": "https://on.live" }, - "marketcap_usd": 305810, + "marketcap_usd": 156637, "name": "On.Live", "network": "eth", "shortcut": "ONL", @@ -15596,7 +15583,7 @@ "links": { "Homepage": "https://www.ono.chat" }, - "marketcap_usd": 127969, + "marketcap_usd": 70342, "name": "ONO Token", "network": "eth", "shortcut": "ONOT", @@ -15616,7 +15603,7 @@ "Github": "https://github.com/opacity", "Homepage": "https://opacity.io" }, - "marketcap_usd": 1401029, + "marketcap_usd": 793605, "name": "Opacity", "network": "eth", "shortcut": "OPQ", @@ -15635,7 +15622,7 @@ "links": { "Homepage": "https://opus-foundation.org" }, - "marketcap_usd": 71845, + "marketcap_usd": 149762, "name": "Opus Foundation", "network": "eth", "shortcut": "OPT", @@ -15654,7 +15641,7 @@ "links": { "Homepage": "https://optitoken.io" }, - "marketcap_usd": 220084, + "marketcap_usd": 93160, "name": "OptiToken", "network": "eth", "shortcut": "OPTI", @@ -15693,7 +15680,7 @@ "Github": "https://github.com/orbs-network", "Homepage": "https://orbs.com" }, - "marketcap_usd": 26216962, + "marketcap_usd": 17003090, "name": "Orbs", "network": "eth", "shortcut": "ORBS", @@ -15732,7 +15719,7 @@ "links": { "Homepage": "https://ori.network" }, - "marketcap_usd": 24423, + "marketcap_usd": 19004, "name": "Origami", "network": "eth", "shortcut": "ORI", @@ -15751,7 +15738,7 @@ "links": { "Homepage": "https://www.originsport.io" }, - "marketcap_usd": 1768951, + "marketcap_usd": 700506, "name": "Origin Sport", "network": "eth", "shortcut": "ORS", @@ -15810,7 +15797,7 @@ "Github": "https://github.com/OpenSTFoundation", "Homepage": "https://simpletoken.org" }, - "marketcap_usd": 8328457, + "marketcap_usd": 4266314, "name": "Simple Token 'OST'", "network": "eth", "shortcut": "OST", @@ -15829,7 +15816,7 @@ "links": { "Homepage": "https://otn.org" }, - "marketcap_usd": 18928, + "marketcap_usd": 10730, "name": "Open Trading Network", "network": "eth", "shortcut": "OTN", @@ -15869,7 +15856,7 @@ "Github": "https://github.com/owndata", "Homepage": "https://owndata.network" }, - "marketcap_usd": 629463, + "marketcap_usd": 329663, "name": "OWNDATA", "network": "eth", "shortcut": "OWN", @@ -15948,7 +15935,7 @@ "links": { "Homepage": "https://www.pchain.org" }, - "marketcap_usd": 1579232, + "marketcap_usd": 996448, "name": "PCHAIN", "network": "eth", "shortcut": "PAI", @@ -16007,7 +15994,7 @@ "links": { "Homepage": "https://patron-influencers.com" }, - "marketcap_usd": 25925, + "marketcap_usd": 25987, "name": "Patron", "network": "eth", "shortcut": "PAT", @@ -16086,7 +16073,7 @@ "Github": "https://github.com/paxosglobal", "Homepage": "https://www.paxos.com/standard" }, - "marketcap_usd": 201975161, + "marketcap_usd": 202403757, "name": "Paxos Standard (PAX)", "network": "eth", "shortcut": "PAX", @@ -16106,7 +16093,7 @@ "Github": "https://github.com/paxosglobal/paxos-gold-contract", "Homepage": "https://www.paxos.com/paxgold" }, - "marketcap_usd": 17355127, + "marketcap_usd": 17631648, "name": "Paxos Gold", "network": "eth", "shortcut": "PAXG", @@ -16125,7 +16112,7 @@ "links": { "Homepage": "http://www.tenx.tech" }, - "marketcap_usd": 7155124, + "marketcap_usd": 3478641, "name": "TenX", "network": "eth", "shortcut": "PAY", @@ -16183,7 +16170,7 @@ "Github": "https://github.com/Peculium-Dev/", "Homepage": "https://peculium.io" }, - "marketcap_usd": 3893050, + "marketcap_usd": 1820718, "name": "Peculium", "network": "eth", "shortcut": "PCL", @@ -16223,7 +16210,7 @@ "Github": "https://github.com/opiria-pdata/Pdata", "Homepage": "https://opiria.io" }, - "marketcap_usd": 186275, + "marketcap_usd": 106016, "name": "PDATA", "network": "eth", "shortcut": "PDATA", @@ -16358,7 +16345,7 @@ "links": { "Homepage": "https://www.phitoken.io" }, - "marketcap_usd": 379327, + "marketcap_usd": 428154, "name": "PHI Token", "network": "eth", "shortcut": "PHI", @@ -16377,7 +16364,7 @@ "links": { "Homepage": "https://piplcoin.com" }, - "marketcap_usd": 56854, + "marketcap_usd": 68315, "name": "PIPL Coin", "network": "eth", "shortcut": "PIPL", @@ -16453,7 +16440,7 @@ "links": { "Homepage": "https://playkey.io" }, - "marketcap_usd": 489724, + "marketcap_usd": 262571, "name": "Playkey", "network": "eth", "shortcut": "PKT", @@ -16491,7 +16478,7 @@ "links": { "Homepage": "https://polybius.io" }, - "marketcap_usd": 8294342, + "marketcap_usd": 4816218, "name": "Polybius", "network": "eth", "shortcut": "PLBT", @@ -16511,7 +16498,7 @@ "Github": "https://github.com/twentythirty/PillarToken", "Homepage": "https://www.pillarproject.io" }, - "marketcap_usd": 5958488, + "marketcap_usd": 3459390, "name": "Pillar Project", "network": "eth", "shortcut": "PLR", @@ -16550,7 +16537,7 @@ "links": { "Homepage": "https://plutus.it" }, - "marketcap_usd": 2192332, + "marketcap_usd": 849658, "name": "Pluton", "network": "eth", "shortcut": "PLU", @@ -16569,7 +16556,7 @@ "links": { "Homepage": "https://pumapay.io" }, - "marketcap_usd": 3639250, + "marketcap_usd": 2620197, "name": "PumaPay", "network": "eth", "shortcut": "PMA", @@ -16608,7 +16595,7 @@ "Github": "https://github.com/kleros", "Homepage": "https://kleros.io" }, - "marketcap_usd": 10608273, + "marketcap_usd": 5532335, "name": "Pinakion", "network": "eth", "shortcut": "PNK", @@ -16627,7 +16614,7 @@ "links": { "Homepage": "https://po.et" }, - "marketcap_usd": 5269171, + "marketcap_usd": 2584824, "name": "Po.et Tokens", "network": "eth", "shortcut": "POE", @@ -16665,7 +16652,7 @@ "links": { "Homepage": "https://clearpoll.com" }, - "marketcap_usd": 200560, + "marketcap_usd": 55838, "name": "ClearPoll", "network": "eth", "shortcut": "POLL", @@ -16684,7 +16671,7 @@ "links": { "Homepage": "https://polymath.network" }, - "marketcap_usd": 13346119, + "marketcap_usd": 7109290, "name": "Polymath Network", "network": "eth", "shortcut": "POLY", @@ -16762,7 +16749,7 @@ "links": { "Homepage": "https://powerledger.io" }, - "marketcap_usd": 39051938, + "marketcap_usd": 20405356, "name": "PowerLedger", "network": "eth", "shortcut": "POWR", @@ -16781,7 +16768,7 @@ "links": { "Homepage": "https://www.paypie.com" }, - "marketcap_usd": 4085076, + "marketcap_usd": 1679166, "name": "PayPie", "network": "eth", "shortcut": "PPP", @@ -16801,7 +16788,7 @@ "Github": "https://github.com/Bitpopulous", "Homepage": "https://populous.co" }, - "marketcap_usd": 21658655, + "marketcap_usd": 11815952, "name": "Populous", "network": "eth", "shortcut": "PPT", @@ -16820,7 +16807,7 @@ "links": { "Homepage": "https://presearch.io" }, - "marketcap_usd": 6386567, + "marketcap_usd": 1979013, "name": "Presearch", "network": "eth", "shortcut": "PRE", @@ -16840,7 +16827,7 @@ "Github": "https://github.com/paragon-coin/token", "Homepage": "https://paragoncoin.com" }, - "marketcap_usd": 618589, + "marketcap_usd": 250488, "name": "Paragon", "network": "eth", "shortcut": "PRG", @@ -16859,7 +16846,7 @@ "links": { "Homepage": "https://privatix.io" }, - "marketcap_usd": 264104, + "marketcap_usd": 145873, "name": "Privatix", "network": "eth", "shortcut": "PRIX", @@ -16995,7 +16982,7 @@ "links": { "Homepage": "https://primas.io" }, - "marketcap_usd": 1102785, + "marketcap_usd": 658257, "name": "Primas", "network": "eth", "shortcut": "PST", @@ -17034,7 +17021,7 @@ "links": { "Homepage": "https://patientory.com" }, - "marketcap_usd": 320011, + "marketcap_usd": 134648, "name": "Patientory", "network": "eth", "shortcut": "PTOY", @@ -17053,7 +17040,7 @@ "links": { "Homepage": "https://www.proton.global" }, - "marketcap_usd": 791127, + "marketcap_usd": 426921, "name": "Proton Token", "network": "eth", "shortcut": "PTT", @@ -17133,7 +17120,7 @@ "Github": "https://github.com/playgame-global", "Homepage": "https://its.playgame.com" }, - "marketcap_usd": 404306, + "marketcap_usd": 197600, "name": "PlayGame", "network": "eth", "shortcut": "PXG", @@ -17171,7 +17158,7 @@ "links": { "Homepage": "https://pylon-network.org" }, - "marketcap_usd": 289876, + "marketcap_usd": 172884, "name": "Pylon Network", "network": "eth", "shortcut": "PYLNT", @@ -17191,7 +17178,7 @@ "Github": "https://github.com/PaycentGlobal", "Homepage": "https://paycent.com/" }, - "marketcap_usd": 28064, + "marketcap_usd": 16327, "name": "Paycentos", "network": "eth", "shortcut": "PYN", @@ -17210,7 +17197,7 @@ "links": { "Homepage": "https://liquid.plus" }, - "marketcap_usd": 17833549, + "marketcap_usd": 10842999, "name": "QASH", "network": "eth", "shortcut": "QASH", @@ -17249,7 +17236,7 @@ "Github": "https://github.com/qiibee", "Homepage": "https://www.qiibee.com" }, - "marketcap_usd": 2302260, + "marketcap_usd": 1246652, "name": "qiibeeToken", "network": "eth", "shortcut": "QBX", @@ -17268,7 +17255,7 @@ "links": { "Homepage": "https://quarkchain.io" }, - "marketcap_usd": 8428431, + "marketcap_usd": 4538006, "name": "QuarkChain", "network": "eth", "shortcut": "QKC", @@ -17288,7 +17275,7 @@ "Github": "https://github.com/quantnetwork", "Homepage": "https://www.quant.network/" }, - "marketcap_usd": 41866489, + "marketcap_usd": 25159420, "name": "Quant", "network": "eth", "shortcut": "QNT", @@ -17347,7 +17334,7 @@ "Github": "https://github.com/quantstamp", "Homepage": "https://quantstamp.com/" }, - "marketcap_usd": 6597500, + "marketcap_usd": 3527370, "name": "Quantstamp Token", "network": "eth", "shortcut": "QSP", @@ -17406,7 +17393,7 @@ "links": { "Homepage": "https://qunqun.io" }, - "marketcap_usd": 3086887, + "marketcap_usd": 1886245, "name": "QunQun", "network": "eth", "shortcut": "QUN", @@ -17425,7 +17412,7 @@ "links": { "Homepage": "https://revain.org" }, - "marketcap_usd": 15693406, + "marketcap_usd": 7637446, "name": "Revain", "network": "eth", "shortcut": "R", @@ -17484,7 +17471,7 @@ "links": { "Homepage": "http://token.dprating.com" }, - "marketcap_usd": 368914, + "marketcap_usd": 217925, "name": "DPRating", "network": "eth", "shortcut": "RATING", @@ -17504,7 +17491,7 @@ "Github": "https://github.com/rublixdev", "Homepage": "https://rublix.io/" }, - "marketcap_usd": 3195701, + "marketcap_usd": 1939173, "name": "Rublix", "network": "eth", "shortcut": "RBLX", @@ -17524,7 +17511,7 @@ "Github": "https://github.com/ripio/rcn-token", "Homepage": "https://ripiocredit.network" }, - "marketcap_usd": 33042539, + "marketcap_usd": 17162411, "name": "Ripio Credit Network", "network": "eth", "shortcut": "RCN", @@ -17544,7 +17531,7 @@ "Github": "https://github.com/raiden-network/raiden/", "Homepage": "https://raiden.network" }, - "marketcap_usd": 6630111, + "marketcap_usd": 3274533, "name": "Raiden Network", "network": "eth", "shortcut": "RDN", @@ -17602,7 +17589,7 @@ "links": { "Homepage": "https://www.real.markets" }, - "marketcap_usd": 324934, + "marketcap_usd": 140472, "name": "Real Estate Asset Ledger", "network": "eth", "shortcut": "REAL", @@ -17621,7 +17608,7 @@ "links": { "Homepage": "https://www.rebellious.io" }, - "marketcap_usd": 28785, + "marketcap_usd": 23194, "name": "Rebellious", "network": "eth", "shortcut": "REBL", @@ -17641,7 +17628,7 @@ "Github": "https://github.com/red", "Homepage": "https://ico.red-lang.org" }, - "marketcap_usd": 439538, + "marketcap_usd": 248141, "name": "Red Community Token", "network": "eth", "shortcut": "RED", @@ -17680,7 +17667,7 @@ "links": { "Homepage": "https://reftoken.io" }, - "marketcap_usd": 356815, + "marketcap_usd": 147110, "name": "RefToken", "network": "eth", "shortcut": "REF", @@ -17699,7 +17686,7 @@ "links": { "Homepage": "https://remme.io" }, - "marketcap_usd": 2228385, + "marketcap_usd": 1489558, "name": "Remme", "network": "eth", "shortcut": "REM", @@ -17739,7 +17726,7 @@ "Github": "https://github.com/renproject", "Homepage": "https://renproject.io/" }, - "marketcap_usd": 48053396, + "marketcap_usd": 35975686, "name": "Republic Token", "network": "eth", "shortcut": "REN", @@ -17758,7 +17745,7 @@ "links": { "Homepage": "https://augur.net" }, - "marketcap_usd": 132268103, + "marketcap_usd": 81510747, "name": "Augur", "network": "eth", "shortcut": "REP", @@ -17777,7 +17764,7 @@ "links": { "Homepage": "https://request.network" }, - "marketcap_usd": 10876013, + "marketcap_usd": 4855973, "name": "Request Network", "network": "eth", "shortcut": "REQ", @@ -17797,7 +17784,7 @@ "Github": "https://github.com/rexmls/RexToken", "Homepage": "https://imbrex.io" }, - "marketcap_usd": 115490, + "marketcap_usd": 81753, "name": "imbrex", "network": "eth", "shortcut": "REX", @@ -17816,7 +17803,7 @@ "links": { "Homepage": "https://refereum.com" }, - "marketcap_usd": 3951507, + "marketcap_usd": 2401616, "name": "Refereum", "network": "eth", "shortcut": "RFR", @@ -17855,7 +17842,7 @@ "links": { "Homepage": "https://www.rchain.coop" }, - "marketcap_usd": 6689984, + "marketcap_usd": 4122320, "name": "RChain", "network": "eth", "shortcut": "RHOC", @@ -17913,7 +17900,7 @@ "links": { "Homepage": "http://iex.ec/" }, - "marketcap_usd": 44668305, + "marketcap_usd": 20331105, "name": "IEx.ec", "network": "eth", "shortcut": "RLC", @@ -17933,7 +17920,7 @@ "Github": "https://github.com/Smartroulette", "Homepage": "https://smartplay.tech" }, - "marketcap_usd": 9180, + "marketcap_usd": 8189, "name": "RouletteToken", "network": "eth", "shortcut": "RLT", @@ -17971,7 +17958,7 @@ "links": { "Homepage": "http://www.relex.io" }, - "marketcap_usd": 255164, + "marketcap_usd": 161472, "name": "Relex", "network": "eth", "shortcut": "RLX", @@ -17991,7 +17978,7 @@ "Github": "https://github.com/rightmesh", "Homepage": "https://www.rightmesh.io/" }, - "marketcap_usd": 115272, + "marketcap_usd": 62585, "name": "RightMesh Token", "network": "eth", "shortcut": "RMESH", @@ -18029,7 +18016,7 @@ "links": { "Homepage": "https://www.oneroot.io/en" }, - "marketcap_usd": 2538293, + "marketcap_usd": 1790870, "name": "OneRoot Network", "network": "eth", "shortcut": "RNT", @@ -18048,7 +18035,7 @@ "links": { "Homepage": "https://bitrent.io" }, - "marketcap_usd": 22494, + "marketcap_usd": 15494, "name": "BitRent", "network": "eth", "shortcut": "RNTB", @@ -18087,7 +18074,7 @@ "links": { "Homepage": "https://icerockmining.io" }, - "marketcap_usd": 1051383, + "marketcap_usd": 821321, "name": "ICE ROCK MINING", "network": "eth", "shortcut": "ROCK2", @@ -18164,7 +18151,7 @@ "links": { "Homepage": "https://www.rocketpool.net" }, - "marketcap_usd": 7232364, + "marketcap_usd": 3217359, "name": "Rocket Pool", "network": "eth", "shortcut": "RPL", @@ -18222,7 +18209,7 @@ "links": { "Homepage": "https://www.rotharium.io" }, - "marketcap_usd": 2353145, + "marketcap_usd": 1311968, "name": "Rotharium", "network": "eth", "shortcut": "RTH", @@ -18261,7 +18248,7 @@ "links": { "Homepage": "http://ruffchain.com" }, - "marketcap_usd": 6392795, + "marketcap_usd": 3026006, "name": "Ruff", "network": "eth", "shortcut": "RUFF", @@ -18319,7 +18306,7 @@ "links": { "Homepage": "https://rivetzintl.com" }, - "marketcap_usd": 137029, + "marketcap_usd": 89078, "name": "Rivetz", "network": "eth", "shortcut": "RVT", @@ -18416,7 +18403,7 @@ "Github": "https://github.com/makerdao", "Homepage": "https://makerdao.com" }, - "marketcap_usd": 21360558, + "marketcap_usd": 18072646, "name": "Dai Stablecoin v1.0", "network": "eth", "shortcut": "SAI", @@ -18435,7 +18422,7 @@ "links": { "Homepage": "https://saltlending.com" }, - "marketcap_usd": 5332518, + "marketcap_usd": 4715806, "name": "Salt Lending Token", "network": "eth", "shortcut": "SALT", @@ -18454,7 +18441,7 @@ "links": { "Homepage": "https://santiment.net" }, - "marketcap_usd": 10168270, + "marketcap_usd": 5055474, "name": "Santiment", "network": "eth", "shortcut": "SAN", @@ -18492,7 +18479,7 @@ "links": { "Homepage": "https://ico.nexus.social" }, - "marketcap_usd": 78238, + "marketcap_usd": 50999, "name": "SocialCoin", "network": "eth", "shortcut": "SCL", @@ -18530,7 +18517,7 @@ "links": { "Homepage": "http://seele.pro" }, - "marketcap_usd": 58828742, + "marketcap_usd": 36239567, "name": "Seele", "network": "eth", "shortcut": "SEELE", @@ -18569,7 +18556,7 @@ "links": { "Homepage": "https://www.sentinel-chain.org" }, - "marketcap_usd": 284125, + "marketcap_usd": 176118, "name": "Sentinel Chain", "network": "eth", "shortcut": "SENC", @@ -18607,7 +18594,7 @@ "links": { "Homepage": "https://sentinel.co" }, - "marketcap_usd": 2054131, + "marketcap_usd": 1161434, "name": "SENTinel", "network": "eth", "shortcut": "SENT", @@ -18742,7 +18729,7 @@ "links": { "Homepage": "https://www.shipchain.io" }, - "marketcap_usd": 2409562, + "marketcap_usd": 1008883, "name": "ShipChain", "network": "eth", "shortcut": "SHIP", @@ -18839,7 +18826,7 @@ "Github": "https://github.com/SpectivOfficial", "Homepage": "https://spectivvr.com" }, - "marketcap_usd": 17412, + "marketcap_usd": 13664, "name": "Signal", "network": "eth", "shortcut": "SIG", @@ -18858,7 +18845,7 @@ "links": { "Homepage": "https://www.skb-coin.jp/en" }, - "marketcap_usd": 1236815, + "marketcap_usd": 508019, "name": "Sakura Bloom", "network": "eth", "shortcut": "SKB", @@ -18897,7 +18884,7 @@ "Github": "https://github.com/Steamtradenet/smart-contract", "Homepage": "https://skincoin.org" }, - "marketcap_usd": 31351, + "marketcap_usd": 25386, "name": "SKIN", "network": "eth", "shortcut": "SKIN", @@ -19032,7 +19019,7 @@ "links": { "Homepage": "https://suncontract.org" }, - "marketcap_usd": 3328061, + "marketcap_usd": 1706282, "name": "SunContract", "network": "eth", "shortcut": "SNC", @@ -19090,7 +19077,7 @@ "links": { "Homepage": "https://singulardtv.com" }, - "marketcap_usd": 5052822, + "marketcap_usd": 2409697, "name": "SingularDTV", "network": "eth", "shortcut": "SNGLS", @@ -19129,7 +19116,7 @@ "Github": "https://github.com/sonm-io", "Homepage": "https://sonm.com" }, - "marketcap_usd": 4303519, + "marketcap_usd": 1825409, "name": "SONM", "network": "eth", "shortcut": "SNM", @@ -19148,7 +19135,7 @@ "links": { "Homepage": "https://snovian.space" }, - "marketcap_usd": 183693, + "marketcap_usd": 169663, "name": "Snovian.Space", "network": "eth", "shortcut": "SNOV", @@ -19168,7 +19155,7 @@ "Github": "https://github.com/status-im", "Homepage": "https://status.im" }, - "marketcap_usd": 52892687, + "marketcap_usd": 32675997, "name": "Status Network Token", "network": "eth", "shortcut": "SNT", @@ -19187,7 +19174,7 @@ "links": { "Homepage": "https://silentnotary.com" }, - "marketcap_usd": 199808, + "marketcap_usd": 105314, "name": "Silent Notary", "network": "eth", "shortcut": "SNTR", @@ -19225,7 +19212,7 @@ "links": { "Homepage": "https://www.allsportschain.com" }, - "marketcap_usd": 6393716, + "marketcap_usd": 3493483, "name": "All Sports", "network": "eth", "shortcut": "SOC", @@ -19283,7 +19270,7 @@ "Github": "https://github.com/cryptosoulgame", "Homepage": "https://cryptosoul.io/" }, - "marketcap_usd": 38996, + "marketcap_usd": 19360, "name": "CryptoSoul", "network": "eth", "shortcut": "SOUL", @@ -19302,7 +19289,7 @@ "links": { "Homepage": "https://spankchain.com" }, - "marketcap_usd": 1531419, + "marketcap_usd": 893520, "name": "SpankChain", "network": "eth", "shortcut": "SPANK", @@ -19360,7 +19347,7 @@ "Github": "https://github.com/SPZ-TOKEN", "Homepage": "https://swapcoinz.org" }, - "marketcap_usd": 14785, + "marketcap_usd": 3605, "name": "SWAPCOINZ", "network": "eth", "shortcut": "SPAZ", @@ -19399,7 +19386,7 @@ "links": { "Homepage": "https://spindle.zone" }, - "marketcap_usd": 313056, + "marketcap_usd": 187026, "name": "SPINDLE", "network": "eth", "shortcut": "SPD", @@ -19418,7 +19405,7 @@ "links": { "Homepage": "https://sportyfi.io" }, - "marketcap_usd": 90096, + "marketcap_usd": 36269, "name": "Sportify", "network": "eth", "shortcut": "SPF", @@ -19457,7 +19444,7 @@ "links": { "Homepage": "https://www.sapien.network/" }, - "marketcap_usd": 669390, + "marketcap_usd": 322155, "name": "Sapien", "network": "eth", "shortcut": "SPN", @@ -19476,7 +19463,7 @@ "links": { "Homepage": "https://sp8de.com" }, - "marketcap_usd": 109979, + "marketcap_usd": 39807, "name": "Sp8de", "network": "eth", "shortcut": "SPX", @@ -19496,7 +19483,7 @@ "Github": "https://github.com/sirin-labs/crowdsale-smart-contract", "Homepage": "https://sirinlabs.com" }, - "marketcap_usd": 3360798, + "marketcap_usd": 2606718, "name": "Sirin Labs", "network": "eth", "shortcut": "SRN", @@ -19554,7 +19541,7 @@ "links": { "Homepage": "https://smartshare.vip/#" }, - "marketcap_usd": 849242, + "marketcap_usd": 380259, "name": "Smartshare", "network": "eth", "shortcut": "SSP", @@ -19592,7 +19579,7 @@ "links": { "Homepage": "https://coinstarter.com" }, - "marketcap_usd": 17790, + "marketcap_usd": 13770, "name": "Starter Coin", "network": "eth", "shortcut": "STAC", @@ -19611,7 +19598,7 @@ "links": { "Homepage": "https://stacs.io" }, - "marketcap_usd": 2437497, + "marketcap_usd": 1436777, "name": "STACS", "network": "eth", "shortcut": "STACS", @@ -19630,7 +19617,7 @@ "links": { "Homepage": "http://starbase.co" }, - "marketcap_usd": 136854, + "marketcap_usd": 38301, "name": "Star Token", "network": "eth", "shortcut": "STAR", @@ -19689,7 +19676,7 @@ "links": { "Homepage": "https://stktoken.com" }, - "marketcap_usd": 737837, + "marketcap_usd": 357393, "name": "STK Token", "network": "eth", "shortcut": "STK", @@ -19766,7 +19753,7 @@ "Github": "https://github.com/Storj", "Homepage": "https://storj.io" }, - "marketcap_usd": 20598790, + "marketcap_usd": 9771011, "name": "STORJ", "network": "eth", "shortcut": "STORJ", @@ -19785,7 +19772,7 @@ "links": { "Homepage": "https://www.stormtoken.com" }, - "marketcap_usd": 10191682, + "marketcap_usd": 6177522, "name": "Storm Token", "network": "eth", "shortcut": "STORM", @@ -19844,7 +19831,7 @@ "links": { "Homepage": "https://staker.network" }, - "marketcap_usd": 1714, + "marketcap_usd": 967, "name": "Staker", "network": "eth", "shortcut": "STR", @@ -19883,7 +19870,7 @@ "links": { "Homepage": "https://bitjob.io" }, - "marketcap_usd": 25732, + "marketcap_usd": 14104, "name": "bitJob", "network": "eth", "shortcut": "STU", @@ -19903,7 +19890,7 @@ "Github": "https://github.com/stx-technologies/stox-token", "Homepage": "https://www.stox.com" }, - "marketcap_usd": 413134, + "marketcap_usd": 298132, "name": "StoxToken", "network": "eth", "shortcut": "STX", @@ -19923,7 +19910,7 @@ "Github": "https://github.com/SubstratumNetwork", "Homepage": "https://substratum.net" }, - "marketcap_usd": 1747312, + "marketcap_usd": 1119707, "name": "Substratum", "network": "eth", "shortcut": "SUB", @@ -19942,7 +19929,7 @@ "links": { "Homepage": "https://www.suretly.com" }, - "marketcap_usd": 74677, + "marketcap_usd": 52602, "name": "Suretly", "network": "eth", "shortcut": "SUR", @@ -19961,7 +19948,7 @@ "links": { "Homepage": "https://ico.savedroid.com" }, - "marketcap_usd": 192709, + "marketcap_usd": 526804, "name": "savedroid", "network": "eth", "shortcut": "SVD", @@ -20000,7 +19987,7 @@ "links": { "Homepage": "http://www.swftcoin.com" }, - "marketcap_usd": 4828798, + "marketcap_usd": 2326734, "name": "SwftCoin", "network": "eth", "shortcut": "SWFTC", @@ -20039,7 +20026,7 @@ "links": { "Homepage": "http://swarm.city" }, - "marketcap_usd": 364357, + "marketcap_usd": 88061, "name": "Swarm City Token", "network": "eth", "shortcut": "SWT", @@ -20058,7 +20045,7 @@ "links": { "Homepage": "http://www.spectre.ai" }, - "marketcap_usd": 10839687, + "marketcap_usd": 5861460, "name": "Spectre.ai D-Token", "network": "eth", "shortcut": "SXDT", @@ -20097,7 +20084,7 @@ "links": { "Homepage": "http://www.spectre.ai" }, - "marketcap_usd": 1732934, + "marketcap_usd": 903809, "name": "Spectre.ai U-Token", "network": "eth", "shortcut": "SXUT", @@ -20173,7 +20160,7 @@ "links": { "Homepage": "https://taklimakan.io" }, - "marketcap_usd": 71447, + "marketcap_usd": 44133, "name": "Taklimakan Network", "network": "eth", "shortcut": "TAN", @@ -20193,7 +20180,7 @@ "Github": "https://github.com/lamden", "Homepage": "https://www.lamden.io" }, - "marketcap_usd": 2281736, + "marketcap_usd": 936074, "name": "Lamden Tau", "network": "eth", "shortcut": "TAU", @@ -20311,7 +20298,7 @@ "links": { "Homepage": "https://tokenbox.io" }, - "marketcap_usd": 119020, + "marketcap_usd": 61537, "name": "Tokenbox", "network": "eth", "shortcut": "TBX", @@ -20370,7 +20357,7 @@ "links": { "Homepage": "https://www.thorecash.com" }, - "marketcap_usd": 54194, + "marketcap_usd": 30268, "name": "Thore Cash", "network": "eth", "shortcut": "TCH", @@ -20466,7 +20453,7 @@ "links": { "Homepage": "https://tokenstars.com/team" }, - "marketcap_usd": 128390, + "marketcap_usd": 123025, "name": "TEAM (TokenStars)", "network": "eth", "shortcut": "TEAM", @@ -20504,7 +20491,7 @@ "links": { "Homepage": "https://www.tokenomy.com" }, - "marketcap_usd": 5995495, + "marketcap_usd": 3352072, "name": "Tokenomy", "network": "eth", "shortcut": "TEN", @@ -20543,7 +20530,7 @@ "links": { "Homepage": "https://ico.tefoodint.com" }, - "marketcap_usd": 2610853, + "marketcap_usd": 1074722, "name": "TE-FOOD", "network": "eth", "shortcut": "TFD", @@ -20563,7 +20550,7 @@ "Github": "https://github.com/TrueFlip", "Homepage": "https://trueflip.io" }, - "marketcap_usd": 2673731, + "marketcap_usd": 846148, "name": "TrueFlip", "network": "eth", "shortcut": "TFL", @@ -20582,7 +20569,7 @@ "links": { "Homepage": "https://ico.truegame.io" }, - "marketcap_usd": 266247, + "marketcap_usd": 132206, "name": "Truegame", "network": "eth", "shortcut": "TGAME", @@ -20660,7 +20647,7 @@ "links": { "Homepage": "https://www.thorecoin.com" }, - "marketcap_usd": 149899386, + "marketcap_usd": 90124995, "name": "ThoreCoin", "network": "eth", "shortcut": "THR", @@ -20679,7 +20666,7 @@ "links": { "Homepage": "https://ico.thrivelabs.io" }, - "marketcap_usd": 254240, + "marketcap_usd": 58989, "name": "Thrive Token", "network": "eth", "shortcut": "THRT", @@ -20718,7 +20705,7 @@ "links": { "Homepage": "https://ties.network" }, - "marketcap_usd": 695831, + "marketcap_usd": 296064, "name": "Ties.DB", "network": "eth", "shortcut": "TIE", @@ -20756,7 +20743,7 @@ "links": { "Homepage": "https://chronobank.io" }, - "marketcap_usd": 742946, + "marketcap_usd": 364562, "name": "Chronobank", "network": "eth", "shortcut": "TIME", @@ -20794,7 +20781,7 @@ "links": { "Homepage": "https://www.blocktix.io" }, - "marketcap_usd": 238512, + "marketcap_usd": 79743, "name": "Blocktix", "network": "eth", "shortcut": "TIX", @@ -20851,7 +20838,7 @@ "links": { "Homepage": "https://etherscan.io/token/TokenCard" }, - "marketcap_usd": 6710571, + "marketcap_usd": 3495353, "name": "TokenCard", "network": "eth", "shortcut": "TKN", @@ -20928,7 +20915,7 @@ "links": { "Homepage": "https://transcodium.com" }, - "marketcap_usd": 101946, + "marketcap_usd": 53275, "name": "Transcodium", "network": "eth", "shortcut": "TNS", @@ -20948,7 +20935,7 @@ "Github": "https://github.com/tierion", "Homepage": "https://tierion.com" }, - "marketcap_usd": 18573735, + "marketcap_usd": 9997579, "name": "Tierion Network Token", "network": "eth", "shortcut": "TNT", @@ -21006,7 +20993,7 @@ "links": { "Homepage": "https://origintrail.io" }, - "marketcap_usd": 3477969, + "marketcap_usd": 1570450, "name": "OriginTrail", "network": "eth", "shortcut": "TRAC", @@ -21102,7 +21089,7 @@ "Github": "https://github.com/WeTrustPlatform", "Homepage": "https://www.wetrust.io" }, - "marketcap_usd": 992104, + "marketcap_usd": 516988, "name": "WeTrust", "network": "eth", "shortcut": "TRST", @@ -21199,7 +21186,7 @@ "Github": "https://github.com/tvtwocom", "Homepage": "https://tv-two.com" }, - "marketcap_usd": 361127, + "marketcap_usd": 355726, "name": "TV-TWO: Token for Television", "network": "eth", "shortcut": "TTV", @@ -21219,7 +21206,7 @@ "Github": "https://github.com/trusttoken", "Homepage": "https://www.trusttoken.com" }, - "marketcap_usd": 141037653, + "marketcap_usd": 129042923, "name": "TrueUSD", "network": "eth", "shortcut": "TUSD", @@ -21276,7 +21263,7 @@ "links": { "Homepage": "https://taas.fund" }, - "marketcap_usd": 5387080, + "marketcap_usd": 2858670, "name": "Token-as-a-Service", "network": "eth", "shortcut": "TaaS", @@ -21296,7 +21283,7 @@ "Github": "https://github.com/Thartoken", "Homepage": "https://thartoken.com" }, - "marketcap_usd": 42668, + "marketcap_usd": 11036, "name": "Thar token", "network": "eth", "shortcut": "Thar", @@ -21316,7 +21303,7 @@ "Github": "https://github.com/ubex-ai", "Homepage": "https://www.ubex.com/" }, - "marketcap_usd": 1348766, + "marketcap_usd": 662600, "name": "UBEX Token", "network": "eth", "shortcut": "UBEX", @@ -21335,7 +21322,7 @@ "links": { "Homepage": "https://unibright.io" }, - "marketcap_usd": 29532074, + "marketcap_usd": 17007577, "name": "Unibright", "network": "eth", "shortcut": "UBT", @@ -21354,7 +21341,7 @@ "links": { "Homepage": "https://u.cash" }, - "marketcap_usd": 1035194, + "marketcap_usd": 620330, "name": "U.CASH", "network": "eth", "shortcut": "UCASH", @@ -21393,7 +21380,7 @@ "links": { "Homepage": "https://uchain.world" }, - "marketcap_usd": 46527, + "marketcap_usd": 8801, "name": "UChain", "network": "eth", "shortcut": "UCN", @@ -21412,7 +21399,7 @@ "links": { "Homepage": "https://www.upfiring.com" }, - "marketcap_usd": 1362446, + "marketcap_usd": 619276, "name": "Upfiring", "network": "eth", "shortcut": "UFR", @@ -21432,7 +21419,7 @@ "Github": "https://github.com/unikoingold/UnikoinGold-UKG-Contract", "Homepage": "https://unikoingold.com" }, - "marketcap_usd": 1298844, + "marketcap_usd": 964092, "name": "UnikoinGold", "network": "eth", "shortcut": "UKG", @@ -21451,7 +21438,7 @@ "links": { "Homepage": "https://uptoken.org" }, - "marketcap_usd": 605422, + "marketcap_usd": 226038, "name": "UpToken", "network": "eth", "shortcut": "UP", @@ -21470,7 +21457,7 @@ "links": { "Homepage": "https://sentinelprotocol.io" }, - "marketcap_usd": 5119487, + "marketcap_usd": 3592357, "name": "Sentinel Protocol", "network": "eth", "shortcut": "UPP", @@ -21489,7 +21476,7 @@ "links": { "Homepage": "https://uquidcoin.com" }, - "marketcap_usd": 4021974, + "marketcap_usd": 4037279, "name": "Uquid Coin", "network": "eth", "shortcut": "UQC", @@ -21569,7 +21556,7 @@ "Github": "https://github.com/centrehq/centre-tokens", "Homepage": "https://www.centre.io" }, - "marketcap_usd": 424112004, + "marketcap_usd": 484792374, "name": "USD//Coin", "network": "eth", "shortcut": "USDC", @@ -21588,7 +21575,7 @@ "links": { "Homepage": "https://stably.io" }, - "marketcap_usd": 1447891, + "marketcap_usd": 1358919, "name": "StableUSD", "network": "eth", "shortcut": "USDS", @@ -21627,7 +21614,7 @@ "Github": "https://github.com/dforcenetwork", "Homepage": "https://dforce.network" }, - "marketcap_usd": 2536339, + "marketcap_usd": 2739274, "name": "dForce Stablecoin", "network": "eth", "shortcut": "USDx", @@ -21646,7 +21633,7 @@ "links": { "Homepage": "https://utrust.com" }, - "marketcap_usd": 6284087, + "marketcap_usd": 3192637, "name": "UTRUST", "network": "eth", "shortcut": "UTK", @@ -21666,7 +21653,7 @@ "Github": "https://github.com/UniversaBlockchain/universa", "Homepage": "https://www.universa.io" }, - "marketcap_usd": 3644177, + "marketcap_usd": 2788331, "name": "Universa", "network": "eth", "shortcut": "UTNP", @@ -21685,7 +21672,7 @@ "links": { "Homepage": "https://uttoken.io" }, - "marketcap_usd": 7443526, + "marketcap_usd": 7803603, "name": "United Traders Token", "network": "eth", "shortcut": "UTT", @@ -21704,7 +21691,7 @@ "links": { "Homepage": "https://u.network/" }, - "marketcap_usd": 7730525, + "marketcap_usd": 2818289, "name": "U Networks", "network": "eth", "shortcut": "UUU", @@ -21724,7 +21711,7 @@ "Github": "https://github.com/smartvalor/ValorToken", "Homepage": "https://smartvalor.com" }, - "marketcap_usd": 5154600, + "marketcap_usd": 2925977, "name": "ValorToken", "network": "eth", "shortcut": "VALOR", @@ -21764,7 +21751,7 @@ "Github": "https://github.com/VeriDocGlobal", "Homepage": "https://www.veridocglobal.com/" }, - "marketcap_usd": 2928495, + "marketcap_usd": 1280463, "name": "VeriDocGlobal", "network": "eth", "shortcut": "VDG", @@ -21804,7 +21791,7 @@ "Github": "https://github.com/blockv", "Homepage": "https://blockv.io" }, - "marketcap_usd": 3518785, + "marketcap_usd": 1711478, "name": "BLOCKv", "network": "eth", "shortcut": "VEE", @@ -21881,7 +21868,7 @@ "links": { "Homepage": "https://veritas.veritaseum.com" }, - "marketcap_usd": 22500128, + "marketcap_usd": 11163128, "name": "Veritaseum", "network": "eth", "shortcut": "VERI", @@ -21900,7 +21887,7 @@ "links": { "Homepage": "https://www.viberate.com" }, - "marketcap_usd": 3554034, + "marketcap_usd": 1668546, "name": "Viberate", "network": "eth", "shortcut": "VIB", @@ -21919,7 +21906,7 @@ "links": { "Homepage": "https://www.vibehub.io" }, - "marketcap_usd": 3515915, + "marketcap_usd": 1553189, "name": "VIBE Coin", "network": "eth", "shortcut": "VIBE", @@ -21959,7 +21946,7 @@ "Github": "https://github.com/videocoin", "Homepage": "https://www.videocoin.io" }, - "marketcap_usd": 2063771, + "marketcap_usd": 3023790, "name": "VideoCoin", "network": "eth", "shortcut": "VID", @@ -21979,7 +21966,7 @@ "Github": "https://github.com/V-ID/V-ID-Token", "Homepage": "https://www.v-id.org" }, - "marketcap_usd": 5129043, + "marketcap_usd": 2745119, "name": "V-ID Token", "network": "eth", "shortcut": "VIDT", @@ -21999,7 +21986,7 @@ "Github": "https://github.com/Viewly/", "Homepage": "https://view.ly/" }, - "marketcap_usd": 181214, + "marketcap_usd": 110831, "name": "Viewly", "network": "eth", "shortcut": "VIEW", @@ -22018,7 +22005,7 @@ "links": { "Homepage": "https://ico.vikky.io" }, - "marketcap_usd": 5880, + "marketcap_usd": 3145, "name": "VikkyToken", "network": "eth", "shortcut": "VIKKY", @@ -22097,7 +22084,7 @@ "Github": "https://github.com/vetri-global/", "Homepage": "https://vetri.global/" }, - "marketcap_usd": 1616028, + "marketcap_usd": 752429, "name": "VETRI", "network": "eth", "shortcut": "VLD", @@ -22174,7 +22161,7 @@ "links": { "Homepage": "https://vnx.io/" }, - "marketcap_usd": 2216134, + "marketcap_usd": 1497025, "name": "VNX Exchange", "network": "eth", "shortcut": "VNXLU", @@ -22213,7 +22200,7 @@ "links": { "Homepage": "https://voise.it" }, - "marketcap_usd": 107425, + "marketcap_usd": 84742, "name": "Voise", "network": "eth", "shortcut": "VOISE", @@ -22252,7 +22239,7 @@ "Github": "https://github.com/VeriSafe", "Homepage": "https://verisafe.io/" }, - "marketcap_usd": 106572, + "marketcap_usd": 81550, "name": "VeriSafe", "network": "eth", "shortcut": "VSF", @@ -22271,7 +22258,7 @@ "links": { "Homepage": "https://www.vdice.io" }, - "marketcap_usd": 58830, + "marketcap_usd": 35751, "name": "Vdice", "network": "eth", "shortcut": "VSL", @@ -22329,7 +22316,7 @@ "links": { "Homepage": "https://wab.network" }, - "marketcap_usd": 41380, + "marketcap_usd": 15249, "name": "WABnetwork", "network": "eth", "shortcut": "WAB", @@ -22348,7 +22335,7 @@ "links": { "Homepage": "https://taelpay.com" }, - "marketcap_usd": 9264155, + "marketcap_usd": 4515341, "name": "Tael", "network": "eth", "shortcut": "WABI", @@ -22467,7 +22454,7 @@ "Github": "https://github.com/WrappedBTC", "Homepage": "https://wbtc.network" }, - "marketcap_usd": 7919374, + "marketcap_usd": 4880256, "name": "Wrapped Bitcoin", "network": "eth", "shortcut": "WBTC", @@ -22525,7 +22512,7 @@ "links": { "Homepage": "https://webcoin.today" }, - "marketcap_usd": 49763, + "marketcap_usd": 33957, "name": "Webcoin", "network": "eth", "shortcut": "WEB", @@ -22623,7 +22610,7 @@ "links": { "Homepage": "https://wings.ai" }, - "marketcap_usd": 1516389, + "marketcap_usd": 932746, "name": "WINGS", "network": "eth", "shortcut": "WINGS", @@ -22720,7 +22707,7 @@ "links": { "Homepage": "https://wepower.network" }, - "marketcap_usd": 4695103, + "marketcap_usd": 2137685, "name": "WePower Token", "network": "eth", "shortcut": "WPR", @@ -22739,7 +22726,7 @@ "links": { "Homepage": "https://worldcore.eu" }, - "marketcap_usd": 33868, + "marketcap_usd": 28595, "name": "Worldcore", "network": "eth", "shortcut": "WRC", @@ -22799,7 +22786,7 @@ "Github": "https://github.com/waltonchain", "Homepage": "http://www.waltonchain.org" }, - "marketcap_usd": 31798260, + "marketcap_usd": 13920050, "name": "Waltonchain", "network": "eth", "shortcut": "WTC", @@ -22878,7 +22865,7 @@ "links": { "Homepage": "https://x8currency.com" }, - "marketcap_usd": 325954, + "marketcap_usd": 225495, "name": "X8X", "network": "eth", "shortcut": "X8X", @@ -22897,7 +22884,7 @@ "links": { "Homepage": "http://www.xaurum.org" }, - "marketcap_usd": 2873850, + "marketcap_usd": 1652341, "name": "Xaurum", "network": "eth", "shortcut": "XAUR", @@ -22936,7 +22923,7 @@ "Github": "https://github.com/blitzpredict", "Homepage": "https://www.blitzpredict.io" }, - "marketcap_usd": 104778, + "marketcap_usd": 60079, "name": "BlitzPredict", "network": "eth", "shortcut": "XBP", @@ -22975,7 +22962,7 @@ "links": { "Homepage": "https://www.swisscryptotokens.ch/" }, - "marketcap_usd": 8474166, + "marketcap_usd": 8649431, "name": "CryptoFranc", "network": "eth", "shortcut": "XCHF", @@ -23033,7 +23020,7 @@ "links": { "Homepage": "https://www.xinfin.io" }, - "marketcap_usd": 7705360, + "marketcap_usd": 3972797, "name": "XinFin Network", "network": "eth", "shortcut": "XDCE", @@ -23052,7 +23039,7 @@ "links": { "Homepage": "https://proxeus.com" }, - "marketcap_usd": 813643, + "marketcap_usd": 637170, "name": "Proxeus", "network": "eth", "shortcut": "XES", @@ -23071,7 +23058,7 @@ "links": { "Homepage": "https://www.atom-solutions.jp/en/xetchange.php" }, - "marketcap_usd": 143145268, + "marketcap_usd": 60013234, "name": "ETERNAL TOKEN", "network": "eth", "shortcut": "XET", @@ -23266,7 +23253,7 @@ "Github": "https://github.com/XMaxPlatform", "Homepage": "https://www.xmx.com" }, - "marketcap_usd": 18455037, + "marketcap_usd": 9011546, "name": "XMax", "network": "eth", "shortcut": "XMX", @@ -23286,7 +23273,7 @@ "Github": "https://github.com/InkProtocol/", "Homepage": "https://paywithink.com" }, - "marketcap_usd": 145611, + "marketcap_usd": 76378, "name": "Ink Protocol", "network": "eth", "shortcut": "XNK", @@ -23343,7 +23330,7 @@ "links": { "Homepage": "http://www.xov.io" }, - "marketcap_usd": 5117, + "marketcap_usd": 2683, "name": "XOVBank", "network": "eth", "shortcut": "XOV", @@ -23382,7 +23369,7 @@ "Github": "https://github.com/Bit-Nation/", "Homepage": "https://bitnation.co" }, - "marketcap_usd": 58355, + "marketcap_usd": 39782, "name": "Pangea Arbitration Token", "network": "eth", "shortcut": "XPAT", @@ -23478,7 +23465,7 @@ "links": { "Homepage": "https://xyo.network" }, - "marketcap_usd": 3262435, + "marketcap_usd": 1761234, "name": "XYO", "network": "eth", "shortcut": "XYO", @@ -23497,7 +23484,7 @@ "links": { "Homepage": "http://www.yeefoundation.com" }, - "marketcap_usd": 1412773, + "marketcap_usd": 553891, "name": "Yee Token", "network": "eth", "shortcut": "YEE", @@ -23537,7 +23524,7 @@ "Github": "https://github.com/zapproject", "Homepage": "https://zap.store" }, - "marketcap_usd": 1148121, + "marketcap_usd": 520372, "name": "ZAP", "network": "eth", "shortcut": "ZAP", @@ -23556,7 +23543,7 @@ "links": { "Homepage": "https://0chain.net" }, - "marketcap_usd": 3191698, + "marketcap_usd": 2069778, "name": "0chain", "network": "eth", "shortcut": "ZCN", @@ -23594,7 +23581,7 @@ "links": { "Homepage": "https://zsc.io/" }, - "marketcap_usd": 341729, + "marketcap_usd": 134235, "name": "Zeusshield", "network": "eth", "shortcut": "ZCS", @@ -23653,7 +23640,7 @@ "Github": "https://github.com/ZEUS-coin", "Homepage": "https://zeusfundme.com/" }, - "marketcap_usd": 24925, + "marketcap_usd": 11242, "name": "ZeusNetwork", "network": "eth", "shortcut": "ZEUS", @@ -23692,7 +23679,7 @@ "links": { "Homepage": "https://zinc.work" }, - "marketcap_usd": 27480, + "marketcap_usd": 13526, "name": "ZINC", "network": "eth", "shortcut": "ZINC", @@ -23711,7 +23698,7 @@ "links": { "Homepage": "http://zipper.io" }, - "marketcap_usd": 1902506, + "marketcap_usd": 767162, "name": "Zipper", "network": "eth", "shortcut": "ZIP", @@ -23730,7 +23717,7 @@ "links": { "Homepage": "https://zippie.org" }, - "marketcap_usd": 447681, + "marketcap_usd": 430584, "name": "Zippie", "network": "eth", "shortcut": "ZIPT", @@ -23769,7 +23756,7 @@ "links": { "Homepage": "https://zla.io" }, - "marketcap_usd": 391670, + "marketcap_usd": 170464, "name": "Zilla", "network": "eth", "shortcut": "ZLA", @@ -23808,7 +23795,7 @@ "links": { "Homepage": "https://www.zmine.com" }, - "marketcap_usd": 201911, + "marketcap_usd": 112725, "name": "ZMINE", "network": "eth", "shortcut": "ZMN", @@ -23827,7 +23814,7 @@ "links": { "Homepage": "https://zper.io" }, - "marketcap_usd": 770692, + "marketcap_usd": 724398, "name": "ZPER", "network": "eth", "shortcut": "ZPR", @@ -23847,7 +23834,7 @@ "Github": "https://github.com/0xProject", "Homepage": "https://0xproject.com" }, - "marketcap_usd": 158516655, + "marketcap_usd": 103586609, "name": "0x Project", "network": "eth", "shortcut": "ZRX", @@ -23885,7 +23872,7 @@ "links": { "Homepage": "https://0xcert.org" }, - "marketcap_usd": 1076392, + "marketcap_usd": 343052, "name": "0xcert Protocol Token", "network": "eth", "shortcut": "ZXC", @@ -24005,7 +23992,7 @@ "Github": "https://github.com/carVertical", "Homepage": "https://www.carvertical.com" }, - "marketcap_usd": 1373534, + "marketcap_usd": 601104, "name": "carVertical", "network": "eth", "shortcut": "cV", @@ -24963,7 +24950,7 @@ "Github": "https://github.com/eosdac", "Homepage": "https://eosdac.io/" }, - "marketcap_usd": 13346826, + "marketcap_usd": 12739218, "name": "eosDAC", "network": "eth", "shortcut": "eosDAC", @@ -26220,7 +26207,7 @@ "links": { "Homepage": "https://akroma.io" }, - "marketcap_usd": 6676, + "marketcap_usd": 2977, "name": "Akroma", "shortcut": "AKA", "t1_enabled": "yes", @@ -26283,7 +26270,7 @@ "links": { "Homepage": "https://atheios.com" }, - "marketcap_usd": 6248, + "marketcap_usd": 3756, "name": "Atheios", "shortcut": "ATH", "t1_enabled": "yes", @@ -26326,7 +26313,7 @@ "Github": "https://github.com/auxiliumglobal", "Homepage": "https://auxilium.global" }, - "marketcap_usd": 232527, + "marketcap_usd": 180515, "name": "Auxilium", "shortcut": "AUX", "t1_enabled": "soon", @@ -26344,7 +26331,7 @@ "links": { "Homepage": "https://callisto.network" }, - "marketcap_usd": 2484504, + "marketcap_usd": 1395923, "name": "Callisto", "shortcut": "CLO", "t1_enabled": "yes", @@ -26386,7 +26373,7 @@ "links": { "Homepage": "https://egem.io" }, - "marketcap_usd": 74246, + "marketcap_usd": 39033, "name": "EtherGem", "shortcut": "EGEM", "t1_enabled": "yes", @@ -26407,7 +26394,7 @@ "links": { "Homepage": "https://ellaism.org" }, - "marketcap_usd": 25863, + "marketcap_usd": 16586, "name": "Ellaism", "shortcut": "ELLA", "t1_enabled": "yes", @@ -26471,7 +26458,7 @@ "links": { "Homepage": "https://ethersocial.org" }, - "marketcap_usd": 145227, + "marketcap_usd": 92820, "name": "Ethersocial Network", "shortcut": "ESN", "t1_enabled": "yes", @@ -26492,7 +26479,7 @@ "links": { "Homepage": "https://ethereumclassic.github.io" }, - "marketcap_usd": 925416572, + "marketcap_usd": 480941947, "name": "Ethereum Classic", "shortcut": "ETC", "t1_enabled": "yes", @@ -26509,7 +26496,7 @@ "links": { "Homepage": "https://www.ethereum.org" }, - "marketcap_usd": 25920996137, + "marketcap_usd": 14093897282, "name": "Ethereum", "shortcut": "ETH", "t1_enabled": "yes", @@ -26526,7 +26513,7 @@ "links": { "Homepage": "https://ether1.org" }, - "marketcap_usd": 228370, + "marketcap_usd": 120130, "name": "Ether-1", "shortcut": "ETHO", "t1_enabled": "yes", @@ -26547,7 +26534,7 @@ "links": { "Homepage": "https://einc.io" }, - "marketcap_usd": 55116, + "marketcap_usd": 17012, "name": "EtherInc", "shortcut": "ETI", "t1_enabled": "yes", @@ -26589,7 +26576,7 @@ "links": { "Homepage": "https://expanse.tech" }, - "marketcap_usd": 744602, + "marketcap_usd": 410550, "name": "Expanse", "shortcut": "EXP", "t1_enabled": "yes", @@ -26610,7 +26597,7 @@ "links": { "Homepage": "https://gochain.io" }, - "marketcap_usd": 12549604, + "marketcap_usd": 5376782, "name": "GoChain", "shortcut": "GO", "t1_enabled": "yes", @@ -26631,7 +26618,7 @@ "links": { "Homepage": "https://hpb.io" }, - "marketcap_usd": 8673315, + "marketcap_usd": 2885749, "name": "High Performance Blockchain", "shortcut": "HPB", "t1_enabled": "yes", @@ -26652,7 +26639,7 @@ "links": { "Homepage": "https://metadium.com" }, - "marketcap_usd": 9001045, + "marketcap_usd": 5623842, "name": "Metadium", "shortcut": "META", "t1_enabled": "yes", @@ -26715,7 +26702,7 @@ "links": { "Homepage": "https://pirl.io" }, - "marketcap_usd": 474659, + "marketcap_usd": 330146, "name": "Pirl", "shortcut": "PIRL", "t1_enabled": "yes", @@ -26799,7 +26786,7 @@ "links": { "Homepage": "https://ubiqsmart.com" }, - "marketcap_usd": 4172282, + "marketcap_usd": 2055294, "name": "Ubiq", "shortcut": "UBQ", "t1_enabled": "yes", @@ -26842,7 +26829,7 @@ "Github": "https://github.com/input-output-hk/cardano-sl", "Homepage": "https://www.cardano.org" }, - "marketcap_usd": 1328814701, + "marketcap_usd": 693374675, "name": "Cardano", "shortcut": "ADA", "t1_enabled": "no", @@ -26876,7 +26863,7 @@ "Github": "https://github.com/EOSIO/eos", "Homepage": "https://eos.io" }, - "marketcap_usd": 3380617147, + "marketcap_usd": 1795140557, "name": "EOS", "shortcut": "EOS", "t1_enabled": "no", @@ -26894,7 +26881,7 @@ "Github": "https://github.com/LiskHQ/lisk", "Homepage": "https://lisk.io/" }, - "marketcap_usd": 171754397, + "marketcap_usd": 99606558, "name": "Lisk", "shortcut": "LSK", "t1_enabled": "yes", @@ -26912,7 +26899,7 @@ "Github": "https://github.com/maidsafe", "Homepage": "https://maidsafe.net" }, - "marketcap_usd": 38621521, + "marketcap_usd": 22489071, "name": "MaidSafeCoin", "shortcut": "MAID", "t1_enabled": "yes", @@ -26925,7 +26912,7 @@ "Github": "https://github.com/OmniLayer", "Homepage": "https://www.omnilayer.org" }, - "marketcap_usd": 806799, + "marketcap_usd": 599046, "name": "Omni", "shortcut": "OMNI", "t1_enabled": "yes", @@ -26938,7 +26925,7 @@ "Github": "https://github.com/ontio/ontology", "Homepage": "https://ont.io" }, - "marketcap_usd": 457438616, + "marketcap_usd": 217649017, "name": "Ontology", "shortcut": "ONT", "t1_enabled": "no", @@ -26950,7 +26937,7 @@ "links": { "Homepage": "https://tether.to" }, - "marketcap_usd": 4637165054, + "marketcap_usd": 4662069662, "name": "Tether", "shortcut": "USDT", "t1_enabled": "yes", @@ -26963,7 +26950,7 @@ "Github": "https://github.com/wanchain/go-wanchain", "Homepage": "https://wanchain.org" }, - "marketcap_usd": 26073873, + "marketcap_usd": 11477245, "name": "Wanchain", "shortcut": "WAN", "t1_enabled": "yes", @@ -26981,7 +26968,7 @@ "Github": "https://github.com/stellar/stellar-core", "Homepage": "https://www.stellar.org" }, - "marketcap_usd": 1254569540, + "marketcap_usd": 751445270, "name": "Stellar", "shortcut": "XLM", "t1_enabled": "yes", @@ -27003,7 +26990,7 @@ "Github": "https://github.com/monero-project/monero", "Homepage": "https://getmonero.org" }, - "marketcap_usd": 1254051585, + "marketcap_usd": 641816771, "name": "Monero", "shortcut": "XMR", "t1_enabled": "no", @@ -27021,7 +27008,7 @@ "Github": "https://github.com/ripple/rippled", "Homepage": "https://ripple.com" }, - "marketcap_usd": 10732323902, + "marketcap_usd": 6726080882, "name": "Ripple", "shortcut": "XRP", "t1_enabled": "no", @@ -27047,7 +27034,7 @@ "Github": "https://github.com/tezos/tezos", "Homepage": "https://tezos.com" }, - "marketcap_usd": 2045788875, + "marketcap_usd": 1113915736, "name": "Tezos", "shortcut": "XTZ", "t1_enabled": "no", @@ -27089,7 +27076,7 @@ "links": { "Homepage": "https://www.dimcoin.io" }, - "marketcap_usd": 295457, + "marketcap_usd": 317088, "name": "DIMCOIN", "shortcut": "DIM", "t1_enabled": "yes", @@ -27111,7 +27098,7 @@ "links": { "Homepage": "https://www.dimcoin.io" }, - "marketcap_usd": 295457, + "marketcap_usd": 317088, "name": "DIM TOKEN", "shortcut": "DIMTOK", "t1_enabled": "yes", @@ -27174,7 +27161,7 @@ "links": { "Homepage": "https://nem.io" }, - "marketcap_usd": 466507162, + "marketcap_usd": 312070279, "name": "NEM", "shortcut": "XEM", "t1_enabled": "yes", @@ -27193,12 +27180,12 @@ } }, "info": { - "marketcap_supported": "92.35 %", - "marketcap_usd": 235723762431, + "marketcap_supported": "91.40 %", + "marketcap_usd": 142354540726, "t1_coins": 1049, - "t2_coins": 1162, - "total_marketcap_usd": 255254453733, - "updated_at": 1582827094, - "updated_at_readable": "Thu Feb 27 19:11:34 2020" + "t2_coins": 1160, + "total_marketcap_usd": 155740870138, + "updated_at": 1584097947, + "updated_at_readable": "Fri Mar 13 12:12:27 2020" } } diff --git a/common/protob/messages-bitcoin.proto b/common/protob/messages-bitcoin.proto index 55ac743bd..af45d4236 100644 --- a/common/protob/messages-bitcoin.proto +++ b/common/protob/messages-bitcoin.proto @@ -214,8 +214,8 @@ message TxAck { optional uint64 amount = 8; // amount of previous transaction output (for segwit only) optional uint32 decred_tree = 9; // only for Decred optional uint32 decred_script_version = 10; // only for Decred - optional bytes prev_block_hash_bip115 = 11; // block hash of previous transaction output (for bip115 implementation) - optional uint32 prev_block_height_bip115 = 12; // block height of previous transaction output (for bip115 implementation) + // optional bytes prev_block_hash_bip115 = 11; // BIP-115 support dropped + // optional uint32 prev_block_height_bip115 = 12; // BIP-115 support dropped } /** * Structure representing compiled transaction output @@ -236,8 +236,8 @@ message TxAck { optional MultisigRedeemScriptType multisig = 5; // defines multisig address; script_type must be PAYTOMULTISIG optional bytes op_return_data = 6; // defines op_return data; script_type must be PAYTOOPRETURN, amount must be 0 optional uint32 decred_script_version = 7; // only for Decred - optional bytes block_hash_bip115 = 8; // block hash of existing block (recommended current_block - 300) (for bip115 implementation) - optional uint32 block_height_bip115 = 9; // block height of existing block (recommended current_block - 300) (for bip115 implementation) + // optional bytes block_hash_bip115 = 8; // BIP-115 support dropped + // optional uint32 block_height_bip115 = 9; // BIP-115 support dropped enum OutputScriptType { PAYTOADDRESS = 0; // used for all addresses (bitcoin, p2sh, witness) PAYTOSCRIPTHASH = 1; // p2sh address (deprecated; use PAYTOADDRESS) diff --git a/common/tools/coin_info.py b/common/tools/coin_info.py index 6a9d6840f..38f6ef180 100755 --- a/common/tools/coin_info.py +++ b/common/tools/coin_info.py @@ -136,7 +136,6 @@ BTC_CHECKS = [ check_key("decred", bool), check_key("fork_id", int, nullable=True), check_key("force_bip143", bool), - check_key("bip115", bool), check_key("default_fee_b", dict), check_key("dust_limit", int), check_key("blocktime_seconds", int), diff --git a/common/tools/coindef.py b/common/tools/coindef.py index 50eb50c79..207601387 100644 --- a/common/tools/coindef.py +++ b/common/tools/coindef.py @@ -33,7 +33,6 @@ class CoinDef(p.MessageType): 29: ("github", p.UnicodeType, 0), 30: ("maintainer", p.UnicodeType, 0), 31: ("blocktime_seconds", p.UVarintType, 0), - 32: ("bip115", p.BoolType, 0), 33: ("cooldown", p.UVarintType, 0), } @@ -60,7 +59,6 @@ class CoinDef(p.MessageType): decred: bool = None, fork_id: int = None, force_bip143: bool = None, - bip115: bool = None, dust_limit: int = None, uri_prefix: str = None, min_address_length: int = None, @@ -96,7 +94,6 @@ class CoinDef(p.MessageType): self.decred = decred self.fork_id = fork_id self.force_bip143 = force_bip143 - self.bip115 = bip115 self.dust_limit = dust_limit self.uri_prefix = uri_prefix self.min_address_length = min_address_length diff --git a/core/src/apps/common/coininfo.py b/core/src/apps/common/coininfo.py index 05ccb5150..37e92ec8d 100644 --- a/core/src/apps/common/coininfo.py +++ b/core/src/apps/common/coininfo.py @@ -26,7 +26,6 @@ class CoinInfo: segwit: bool, fork_id: int, force_bip143: bool, - bip115: bool, decred: bool, negative_fee: bool, curve_name: str, @@ -51,7 +50,6 @@ class CoinInfo: self.segwit = segwit self.fork_id = fork_id self.force_bip143 = force_bip143 - self.bip115 = bip115 self.decred = decred self.negative_fee = negative_fee self.curve_name = curve_name @@ -104,7 +102,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -131,7 +128,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -158,7 +154,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -188,7 +183,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -215,7 +209,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -242,7 +235,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -269,7 +261,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -296,7 +287,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=0, force_bip143=True, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -323,7 +313,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=0, force_bip143=True, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -350,7 +339,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=79, force_bip143=True, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -377,7 +365,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=79, force_bip143=True, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -404,7 +391,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=42, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -431,7 +417,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -458,7 +443,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -485,7 +469,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -512,7 +495,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -539,7 +521,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -566,7 +547,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -593,7 +573,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -620,7 +599,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=True, negative_fee=False, curve_name='secp256k1-decred', @@ -647,7 +625,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=True, negative_fee=False, curve_name='secp256k1-decred', @@ -674,7 +651,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -701,7 +677,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -728,7 +703,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -755,7 +729,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -782,7 +755,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -809,7 +781,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -836,7 +807,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -863,7 +833,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -890,7 +859,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1-groestl', @@ -917,7 +885,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1-groestl', @@ -944,7 +911,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -971,34 +937,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, - decred=False, - negative_fee=False, - curve_name='secp256k1', - extra_data=False, - timestamp=False, - overwintered=False, - confidential_assets=None, - ) - elif name == "Horizen": - return CoinInfo( - coin_name=name, - coin_shortcut="ZEN", - decimals=8, - address_type=8329, - address_type_p2sh=8342, - maxfee_kb=2000000, - signed_message_header="Zcash Signed Message:\n", - xpub_magic=0x0488b21e, - xpub_magic_segwit_p2sh=None, - xpub_magic_segwit_native=None, - bech32_prefix=None, - cashaddr_prefix=None, - slip44=121, - segwit=False, - fork_id=None, - force_bip143=False, - bip115=True, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1025,7 +963,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=True, curve_name='secp256k1', @@ -1052,7 +989,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1079,7 +1015,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1106,7 +1041,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1133,7 +1067,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1160,7 +1093,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1187,7 +1119,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1214,7 +1145,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1241,7 +1171,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1268,7 +1197,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1295,7 +1223,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1322,7 +1249,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1349,7 +1275,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1376,7 +1301,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1403,7 +1327,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1430,7 +1353,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1457,7 +1379,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1484,7 +1405,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1511,7 +1431,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1538,7 +1457,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1565,7 +1483,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1592,7 +1509,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1619,7 +1535,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1-smart', @@ -1646,7 +1561,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1-smart', @@ -1673,7 +1587,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1700,7 +1613,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1727,7 +1639,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1754,7 +1665,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1781,7 +1691,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1808,7 +1717,6 @@ def by_name(name: str) -> CoinInfo: segwit=True, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1835,7 +1743,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1862,7 +1769,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1889,7 +1795,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1916,7 +1821,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1943,7 +1847,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', @@ -1970,7 +1873,6 @@ def by_name(name: str) -> CoinInfo: segwit=False, fork_id=None, force_bip143=False, - bip115=False, decred=False, negative_fee=False, curve_name='secp256k1', diff --git a/core/src/apps/common/coininfo.py.mako b/core/src/apps/common/coininfo.py.mako index 81a3ea731..53effc64c 100644 --- a/core/src/apps/common/coininfo.py.mako +++ b/core/src/apps/common/coininfo.py.mako @@ -26,7 +26,6 @@ class CoinInfo: segwit: bool, fork_id: int, force_bip143: bool, - bip115: bool, decred: bool, negative_fee: bool, curve_name: str, @@ -51,7 +50,6 @@ class CoinInfo: self.segwit = segwit self.fork_id = fork_id self.force_bip143 = force_bip143 - self.bip115 = bip115 self.decred = decred self.negative_fee = negative_fee self.curve_name = curve_name @@ -112,7 +110,6 @@ ATTRIBUTES = ( ("segwit", bool), ("fork_id", black_repr), ("force_bip143", bool), - ("bip115", bool), ("decred", bool), ("negative_fee", bool), ("curve_name", lambda r: repr(r.replace("_", "-"))), diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index 2964ccc47..5ff66a414 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -223,11 +223,6 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: FailureType.DataError, "Decred details provided but Decred coin not specified.", ) - if (txi.prev_block_hash_bip115 or txi.prev_block_height_bip115) and not coin.bip115: - raise SigningError( - FailureType.DataError, - "BIP-115 details provided, but the specified coin is unaware of BIP-115.", - ) return txi diff --git a/core/src/apps/wallet/sign_tx/scripts.py b/core/src/apps/wallet/sign_tx/scripts.py index fcf3cedf9..c6f71b1cf 100644 --- a/core/src/apps/wallet/sign_tx/scripts.py +++ b/core/src/apps/wallet/sign_tx/scripts.py @@ -4,12 +4,7 @@ from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType from apps.common.coininfo import CoinInfo from apps.common.writers import empty_bytearray from apps.wallet.sign_tx.multisig import multisig_get_pubkey_count, multisig_get_pubkeys -from apps.wallet.sign_tx.writers import ( - write_bytes, - write_op_push, - write_scriptnum, - write_varint, -) +from apps.wallet.sign_tx.writers import write_bytes, write_op_push, write_varint class ScriptsError(ValueError): @@ -53,20 +48,6 @@ def output_script_p2sh(scripthash: bytes) -> bytearray: return s -def script_replay_protection_bip115( - block_hash: bytes, block_height: bytes -) -> bytearray: - if block_hash is None or block_height is None: - return bytearray() - utils.ensure(len(block_hash) == 32) - s = bytearray(33) - s[0] = 0x20 # 32 bytes for block hash - s[1:33] = block_hash # block hash - write_scriptnum(s, block_height) - s.append(0xB4) # OP_CHECKBLOCKATHEIGHT - return s - - # SegWit: Native P2WPKH or P2WSH # === # https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wpkh diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index ccc044894..eba73e089 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -439,11 +439,6 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): txi_sign.script_sig = scripts.output_script_p2pkh( addresses.ecdsa_hash_pubkey(key_sign_pub, coin) ) - if coin.bip115: - txi_sign.script_sig += scripts.script_replay_protection_bip115( - txi_sign.prev_block_hash_bip115, - txi_sign.prev_block_height_bip115, - ) else: raise SigningError( FailureType.ProcessError, "Unknown transaction type" @@ -744,20 +739,12 @@ def output_derive_script( # p2pkh pubkeyhash = address_type.strip(coin.address_type, raw_address) script = scripts.output_script_p2pkh(pubkeyhash) - if coin.bip115: - script += scripts.script_replay_protection_bip115( - o.block_hash_bip115, o.block_height_bip115 - ) return script elif address_type.check(coin.address_type_p2sh, raw_address): # p2sh scripthash = address_type.strip(coin.address_type_p2sh, raw_address) script = scripts.output_script_p2sh(scripthash) - if coin.bip115: - script += scripts.script_replay_protection_bip115( - o.block_hash_bip115, o.block_height_bip115 - ) return script raise SigningError(FailureType.DataError, "Invalid address type") diff --git a/core/src/apps/wallet/sign_tx/writers.py b/core/src/apps/wallet/sign_tx/writers.py index e8214cd6b..5a0d0d29d 100644 --- a/core/src/apps/wallet/sign_tx/writers.py +++ b/core/src/apps/wallet/sign_tx/writers.py @@ -95,28 +95,6 @@ def write_varint(w, n: int): w.append((n >> 24) & 0xFF) -def write_scriptnum(w, n: int): - ensure(n >= 0 and n <= 0xFFFFFFFF) - if n < 0x100: - w.append(1) - w.append(n & 0xFF) - elif n < 0x10000: - w.append(2) - w.append(n & 0xFF) - w.append((n >> 8) & 0xFF) - elif n < 0x1000000: - w.append(3) - w.append(n & 0xFF) - w.append((n >> 8) & 0xFF) - w.append((n >> 16) & 0xFF) - else: - w.append(4) - w.append(n & 0xFF) - w.append((n >> 8) & 0xFF) - w.append((n >> 16) & 0xFF) - w.append((n >> 24) & 0xFF) - - def get_tx_hash(w, double: bool = False, reverse: bool = False) -> bytes: d = w.get_digest() if double: diff --git a/core/src/trezor/messages/TxInputType.py b/core/src/trezor/messages/TxInputType.py index ebe66e776..bd7d4c6f2 100644 --- a/core/src/trezor/messages/TxInputType.py +++ b/core/src/trezor/messages/TxInputType.py @@ -27,8 +27,6 @@ class TxInputType(p.MessageType): amount: int = None, decred_tree: int = None, decred_script_version: int = None, - prev_block_hash_bip115: bytes = None, - prev_block_height_bip115: int = None, ) -> None: self.address_n = address_n if address_n is not None else [] self.prev_hash = prev_hash @@ -40,8 +38,6 @@ class TxInputType(p.MessageType): self.amount = amount self.decred_tree = decred_tree self.decred_script_version = decred_script_version - self.prev_block_hash_bip115 = prev_block_hash_bip115 - self.prev_block_height_bip115 = prev_block_height_bip115 @classmethod def get_fields(cls) -> Dict: @@ -56,6 +52,4 @@ class TxInputType(p.MessageType): 8: ('amount', p.UVarintType, 0), 9: ('decred_tree', p.UVarintType, 0), 10: ('decred_script_version', p.UVarintType, 0), - 11: ('prev_block_hash_bip115', p.BytesType, 0), - 12: ('prev_block_height_bip115', p.UVarintType, 0), } diff --git a/core/src/trezor/messages/TxOutputType.py b/core/src/trezor/messages/TxOutputType.py index bac572506..20edacf61 100644 --- a/core/src/trezor/messages/TxOutputType.py +++ b/core/src/trezor/messages/TxOutputType.py @@ -24,8 +24,6 @@ class TxOutputType(p.MessageType): multisig: MultisigRedeemScriptType = None, op_return_data: bytes = None, decred_script_version: int = None, - block_hash_bip115: bytes = None, - block_height_bip115: int = None, ) -> None: self.address = address self.address_n = address_n if address_n is not None else [] @@ -34,8 +32,6 @@ class TxOutputType(p.MessageType): self.multisig = multisig self.op_return_data = op_return_data self.decred_script_version = decred_script_version - self.block_hash_bip115 = block_hash_bip115 - self.block_height_bip115 = block_height_bip115 @classmethod def get_fields(cls) -> Dict: @@ -47,6 +43,4 @@ class TxOutputType(p.MessageType): 5: ('multisig', MultisigRedeemScriptType, 0), 6: ('op_return_data', p.BytesType, 0), 7: ('decred_script_version', p.UVarintType, 0), - 8: ('block_hash_bip115', p.BytesType, 0), - 9: ('block_height_bip115', p.UVarintType, 0), } diff --git a/core/tests/test_apps.wallet.signtx.scripts.py b/core/tests/test_apps.wallet.signtx.scripts.py deleted file mode 100644 index 9ec833cfc..000000000 --- a/core/tests/test_apps.wallet.signtx.scripts.py +++ /dev/null @@ -1,20 +0,0 @@ -from common import * - -from apps.wallet.sign_tx.scripts import script_replay_protection_bip115 - -class TestSigntxScripts(unittest.TestCase): - # pylint: disable=C0301 - - def test_script_replay_protection_bip115(self): - vectors=[ - ('206ec9b310745775c20cbe5bae8751daeb7f086cf913399d4f7634ef2a0000000003122005b4', '6ec9b310745775c20cbe5bae8751daeb7f086cf913399d4f7634ef2a00000000', 335890), - ('20caaa71b60cf893c1604b38e5af1bdc322dbb31818239088647272d1400000000030e2005b4', 'caaa71b60cf893c1604b38e5af1bdc322dbb31818239088647272d1400000000', 335886), - ] - for out, hsh, height in vectors: - hsh = unhexlify(hsh) - res = hexlify(script_replay_protection_bip115(hsh, height)).decode() - self.assertEqual(out, res) - - -if __name__ == '__main__': - unittest.main() diff --git a/legacy/firmware/protob/messages-bitcoin.options b/legacy/firmware/protob/messages-bitcoin.options index f04d01f93..e444b86c3 100644 --- a/legacy/firmware/protob/messages-bitcoin.options +++ b/legacy/firmware/protob/messages-bitcoin.options @@ -31,12 +31,10 @@ TransactionType.extra_data max_size:1024 TxInputType.address_n max_count:8 TxInputType.prev_hash max_size:32 TxInputType.script_sig max_size:1650 -TxInputType.prev_block_hash_bip115 max_size:32 TxOutputType.address max_size:130 TxOutputType.address_n max_count:8 TxOutputType.op_return_data max_size:80 -TxOutputType.block_hash_bip115 max_size:32 TxOutputBinType.script_pubkey max_size:520 diff --git a/python/docs/transaction-format.md b/python/docs/transaction-format.md index 126761bfe..c7e2cf5e8 100644 --- a/python/docs/transaction-format.md +++ b/python/docs/transaction-format.md @@ -60,8 +60,6 @@ message TxInputType { optional uint64 amount = 8; // amount of previous transaction output optional uint32 decred_tree = 9; // only for Decred optional uint32 decred_script_version = 10; // only for Decred - optional bytes prev_block_hash_bip115 = 11; // block hash of previous transaction output (for bip115 implementation) - optional uint32 prev_block_height_bip115 = 12; // block height of previous transaction output (for bip115 implementation) } ``` @@ -73,7 +71,7 @@ The field `script_sig` must not be set. The field `multisig` can be used for multisig inputs. Documenting the multisig structure is TBD. With regular inputs, `multisig` must not be set. -`decred` and `bip115` fields must only be set when relevant to your currency. +`decred` fields must only be set when relevant to your currency. ### Outputs @@ -94,8 +92,6 @@ message TxOutputType { optional MultisigRedeemScriptType multisig = 5; // multisig output definition optional bytes op_return_data = 6; // defines op_return data optional uint32 decred_script_version = 7; // only for Decred - optional bytes block_hash_bip115 = 8; // block hash of existing block (recommended current_block - 300) (for bip115 implementation) - optional uint32 block_height_bip115 = 9; // block height of existing block (recommended current_block - 300) (for bip115 implementation) ``` @@ -112,7 +108,7 @@ For `OP_RETURN` outputs, `script_type` must be set to `"PAYTOOPRETURN"` and `op_return_data` must be filled appropriately. `address_n` and `address` must not be set. -`decred` and `bip115` fields must only be set when relevant to your currency. +`decred` fields must only be set when relevant to your currency. ### Transaction metadata diff --git a/python/src/trezorlib/coins.json b/python/src/trezorlib/coins.json index c9f99bb64..c3ed5a7d9 100644 --- a/python/src/trezorlib/coins.json +++ b/python/src/trezorlib/coins.json @@ -1 +1 @@ -[{"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": "bc", "bip115": false, "bitcore": [], "blockbook": ["https://btc1.trezor.io", "https://btc2.trezor.io", "https://btc3.trezor.io", "https://btc4.trezor.io", "https://btc5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin", "coin_name": "Bitcoin", "coin_shortcut": "BTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin", "negative_fee": false, "segwit": true, "shortcut": "BTC", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 0, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "bcrt", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Regtest", "coin_name": "Regtest", "coin_shortcut": "REGTEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", "key": "bitcoin:REGTEST", "maintainer": "Thomas Kerin ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Regtest", "negative_fee": false, "segwit": true, "shortcut": "REGTEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tb", "bip115": false, "bitcore": [], "blockbook": ["https://tbtc1.trezor.io", "https://tbtc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Testnet", "coin_name": "Testnet", "coin_shortcut": "TEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TEST", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Testnet", "negative_fee": false, "segwit": true, "shortcut": "TEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 53, "address_type_p2sh": 55, "bech32_prefix": "acm", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Actinium", "coin_name": "Actinium", "coin_shortcut": "ACM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Actinium-project/Actinium", "hash_genesis_block": "28d77872e23714562f49a1be792c276623c1bbe3fdcf21b6035cfde78b00b824", "key": "bitcoin:ACM", "maintainer": "Harris Brakmic ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Actinium", "negative_fee": false, "segwit": true, "shortcut": "ACM", "signed_message_header": "Actinium Signed Message:\n", "slip44": 228, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "actinium", "website": "https://actinium.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 55, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Axe", "coin_name": "Axe", "coin_shortcut": "AXE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/axerunners/axe", "hash_genesis_block": "00000c33631ca6f2f61368991ce2dc03306b5bb50bf7cede5cfbba6db38e52e6", "key": "bitcoin:AXE", "maintainer": "Kirill Orlov ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Axe", "negative_fee": false, "segwit": false, "shortcut": "AXE", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 4242, "support": {"connect": true, "trezor1": "1.7.3", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "axe", "website": "https://axerunners.com", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 85, "bech32_prefix": "bm", "bip115": false, "bitcore": [], "blockbook": ["https://bellcoin-blockbook.ilmango.work", "https://bell.blockbook.ovh"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Bellcoin", "coin_name": "Bellcoin", "coin_shortcut": "BELL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bellcoin-org/bellcoin", "hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603", "key": "bitcoin:BELL", "maintainer": "ilmango-doge ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bellcoin", "negative_fee": false, "segwit": true, "shortcut": "BELL", "signed_message_header": "Bellcoin Signed Message:\n", "slip44": 25252, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bellcoin", "website": "https://bellcoin.web4u.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 81, "address_type_p2sh": 5, "bech32_prefix": "bz", "bip115": false, "bitcore": ["https://insight.bitzeny.jp", "https://zeny.insight.monaco-ex.org"], "blockbook": ["https://zny.blockbook.ovh"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "BitZeny", "coin_name": "BitZeny", "coin_shortcut": "ZNY", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "hash_genesis_block": "000009f7e55e9e3b4781e22bd87a7cfa4acada9e4340d43ca738bf4e9fb8f5ce", "key": "bitcoin:ZNY", "maintainer": "y-chan ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "BitZeny", "negative_fee": false, "segwit": true, "shortcut": "ZNY", "signed_message_header": "BitZeny Signed Message:\n", "slip44": 123, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitzeny", "website": "https://bitzeny.tech", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://bch1.trezor.io", "https://bch2.trezor.io", "https://bch3.trezor.io", "https://bch4.trezor.io", "https://bch5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": "bitcoincash", "coin_label": "Bitcoin Cash", "coin_name": "Bcash", "coin_shortcut": "BCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash", "negative_fee": false, "segwit": false, "shortcut": "BCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 145, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": "bchtest", "coin_label": "Bitcoin Cash Testnet", "coin_name": "Bcash Testnet", "coin_shortcut": "TBCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TBCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TBCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 23, "bech32_prefix": "btg", "bip115": false, "bitcore": [], "blockbook": ["https://btg1.trezor.io", "https://btg2.trezor.io", "https://btg3.trezor.io", "https://btg4.trezor.io", "https://btg5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold", "coin_name": "Bgold", "coin_shortcut": "BTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTG", "maintainer": "Saleem Rashid ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold", "negative_fee": false, "segwit": true, "shortcut": "BTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tbtg", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold Testnet", "coin_name": "Bgold Testnet", "coin_shortcut": "TBTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "00000000e0781ebe24b91eedc293adfea2f557b53ec379e78959de3853e6f9f6", "key": "bitcoin:TBTG", "maintainer": "The Bitcoin Gold Developers ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold Testnet", "negative_fee": false, "segwit": true, "shortcut": "TBTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 4901, "address_type_p2sh": 5039, "bech32_prefix": null, "bip115": false, "bitcore": ["https://explorer.btcprivate.org"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcoin Private", "coin_name": "Bprivate", "coin_shortcut": "BTCP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": 42, "github": "https://github.com/BTCPrivate/BitcoinPrivate", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:BTCP", "maintainer": "Chris Sulmone ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Bitcoin Private", "negative_fee": false, "segwit": false, "shortcut": "BTCP", "signed_message_header": "BitcoinPrivate Signed Message:\n", "slip44": 183, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoinprivate", "website": "https://btcprivate.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 61, "address_type_p2sh": 123, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook1.bitcoinrh.org", "https://blockbook2.bitcoinrh.org"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Rhodium", "coin_name": "Brhodium", "coin_shortcut": "XRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "hash_genesis_block": "baff5bfd9dc43fb672d003ec20fd21428f9282ca46bfa1730d73e1f2c75f5fdd", "key": "bitcoin:XRC", "maintainer": "baff5b ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Rhodium", "negative_fee": false, "segwit": false, "shortcut": "XRC", "signed_message_header": "BitCoin Rhodium Signed Message:\n", "slip44": 10291, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin-rhodium", "website": "https://www.bitcoinrh.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3, "address_type_p2sh": 125, "bech32_prefix": "btx", "bip115": false, "bitcore": ["https://insight.bitcore.cc"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcore", "coin_name": "Bitcore", "coin_shortcut": "BTX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/LIMXTEC/BitCore", "hash_genesis_block": "604148281e5c4b7f2487e5d03cd60d8e6f69411d613f6448034508cea52e9574", "key": "bitcoin:BTX", "maintainer": "limxdev ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcore", "negative_fee": false, "segwit": true, "shortcut": "BTX", "signed_message_header": "BitCore Signed Message:\n", "slip44": 160, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcore", "website": "https://bitcore.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 30, "bech32_prefix": "cpu", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.cpuchain.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "CPUchain", "coin_name": "CPUchain", "coin_shortcut": "CPU", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/cpuchain/cpuchain", "hash_genesis_block": "000024d8766043ea0e1c9ad42e7ea4b5fdb459887bd80b8f9756f3d87e128f12", "key": "bitcoin:CPU", "maintainer": "Min Khang Aung ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "CPUchain", "negative_fee": false, "segwit": true, "shortcut": "CPU", "signed_message_header": "CPUchain Signed Message:\n", "slip44": 363, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "cpuchain", "website": "https://cpuchain.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 35, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.capricoin.org", "https://blockbook2.capricoin.org", "https://blockbook3.capricoin.org", "https://blockbook4.capricoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Capricoin", "coin_name": "Capricoin", "coin_shortcut": "CPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7, "High": 20, "Low": 1, "Normal": 14}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Capricoinofficial/Capricoin", "hash_genesis_block": "00000d23fa0fc52c90893adb1181c9ddffb6c797a3e41864b9a23aa2f2981fe3", "key": "bitcoin:CPC", "maintainer": "Jozef Knaperek ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Capricoin", "negative_fee": false, "segwit": false, "shortcut": "CPC", "signed_message_header": "Capricoin Signed Message:\n", "slip44": 289, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.10", "webwallet": false}, "timestamp": true, "uri_prefix": "capricoin", "website": "https://capricoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 95495, "address_type_p2sh": 95473, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight-01.crownplatform.com", "https://insight-02.crownplatform.com", "https://insight-03.crownplatform.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Crown", "coin_name": "Crown", "coin_shortcut": "CRW", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Crowndev/crowncoin", "hash_genesis_block": "0000000085370d5e122f64f4ab19c68614ff3df78c8d13cb814fd7e69a1dc6da", "key": "bitcoin:CRW", "maintainer": "Ashot ", "max_address_length": 40, "maxfee_kb": 2000000, "min_address_length": 36, "minfee_kb": 1000, "name": "Crown", "negative_fee": false, "segwit": false, "shortcut": "CRW", "signed_message_header": "Crown Signed Message:\n", "slip44": 72, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": false}, "timestamp": false, "uri_prefix": "crown", "website": "https://crownplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://dash1.trezor.io", "https://dash2.trezor.io", "https://dash3.trezor.io", "https://dash4.trezor.io", "https://dash5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash", "coin_name": "Dash", "coin_shortcut": "DASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", "key": "bitcoin:DASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dash", "negative_fee": false, "segwit": false, "shortcut": "DASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 5, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash Testnet", "coin_name": "Dash Testnet", "coin_shortcut": "tDASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", "key": "bitcoin:tDASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Dash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tDASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 1855, "address_type_p2sh": 1818, "bech32_prefix": null, "bip115": false, "bitcore": ["https://mainnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred", "coin_name": "Decred", "coin_shortcut": "DCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "298e5cc3d985bfe7f81dc135f360abe089edd4396b86d2de66b0cef42b21d980", "key": "bitcoin:DCR", "maintainer": "Alex Yocom-Piatt ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 10000, "name": "Decred", "negative_fee": false, "segwit": false, "shortcut": "DCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 42, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 50177256, "xpub_magic": 50178342, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3873, "address_type_p2sh": 3836, "bech32_prefix": null, "bip115": false, "bitcore": ["https://testnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred Testnet", "coin_name": "Decred Testnet", "coin_shortcut": "TDCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "a649dce53918caf422e9c711c858837e08d626ecfcd198969b24f7b634a49bac", "key": "bitcoin:TDCR", "maintainer": "Saleem Rashid ", "max_address_length": 35, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Decred Testnet", "negative_fee": false, "segwit": false, "shortcut": "TDCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 70615959, "xpub_magic": 70617041, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 63, "bech32_prefix": "dgb", "bip115": false, "bitcore": [], "blockbook": ["https://dgb1.trezor.io", "https://dgb2.trezor.io"], "blocktime_seconds": 15, "cashaddr_prefix": null, "coin_label": "DigiByte", "coin_name": "DigiByte", "coin_shortcut": "DGB", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/digibyte/digibyte", "hash_genesis_block": "7497ea1b465eb39f1c8f507bc877078fe016d6fcb6dfad3a64c98dcc6e1e8496", "key": "bitcoin:DGB", "maintainer": "DigiByte ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "DigiByte", "negative_fee": false, "segwit": true, "shortcut": "DGB", "signed_message_header": "DigiByte Signed Message:\n", "slip44": 20, "support": {"connect": true, "trezor1": "1.6.3", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "digibyte", "website": "https://digibyte.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 30, "address_type_p2sh": 22, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://doge1.trezor.io", "https://doge2.trezor.io", "https://doge3.trezor.io", "https://doge4.trezor.io", "https://doge5.trezor.io"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Dogecoin", "coin_name": "Dogecoin", "coin_shortcut": "DOGE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 100000}, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/dogecoin/dogecoin", "hash_genesis_block": "1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691", "key": "bitcoin:DOGE", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dogecoin", "negative_fee": false, "segwit": false, "shortcut": "DOGE", "signed_message_header": "Dogecoin Signed Message:\n", "slip44": 3, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dogecoin", "website": "https://dogecoin.com", "xprv_magic": 49988504, "xpub_magic": 49990397, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 235, "address_type_p2sh": 75, "bech32_prefix": "ert", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Elements", "coin_name": "Elements", "coin_shortcut": "ELEMENTS", "confidential_assets": {"address_prefix": 4, "blech32_prefix": "el"}, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ElementsProject/elements", "hash_genesis_block": "209577bda6bf4b5804bd46f8621580dd6d4e8bfa2d190e1c50e932492baca07d", "key": "bitcoin:ELEMENTS", "maintainer": "Roman Zeyde ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Elements", "negative_fee": false, "segwit": true, "shortcut": "ELEMENTS", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "elements", "website": "https://elementsproject.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 14, "address_type_p2sh": 5, "bech32_prefix": "fc", "bip115": false, "bitcore": ["https://bitcore.feathercoin.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Feathercoin", "coin_name": "Feathercoin", "coin_shortcut": "FTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "duplicate": true, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FeatherCoin/Feathercoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:FTC", "maintainer": "Lucas Betschart ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Feathercoin", "negative_fee": false, "segwit": true, "shortcut": "FTC", "signed_message_header": "Feathercoin Signed Message:\n", "slip44": 8, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "feathercoin", "website": "https://feathercoin.com", "xprv_magic": 76077806, "xpub_magic": 76069926, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 35, "address_type_p2sh": 94, "bech32_prefix": "flo", "bip115": false, "bitcore": ["https://livenet.flocha.in"], "blockbook": [], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "Flo", "coin_name": "Florincoin", "coin_shortcut": "FLO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/floblockchain/flo", "hash_genesis_block": "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea", "key": "bitcoin:FLO", "maintainer": "Robert English ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Flo", "negative_fee": false, "segwit": true, "shortcut": "FLO", "signed_message_header": "Florincoin Signed Message:\n", "slip44": 216, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "florincoin", "website": "https://flo.cash", "xprv_magic": 15264107, "xpub_magic": 1526049, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 16, "bech32_prefix": "fc", "bip115": false, "bitcore": [], "blockbook": ["https://explorer.fujicoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Fujicoin", "coin_name": "Fujicoin", "coin_shortcut": "FJC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 20000, "High": 100000, "Low": 10000, "Normal": 50000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/fujicoin/fujicoin", "hash_genesis_block": "adb6d9cfd74075e7f91608add4bd2a2ea636f70856183086842667a1597714a0", "key": "bitcoin:FJC", "maintainer": "motty ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 10000000, "name": "Fujicoin", "negative_fee": false, "segwit": true, "shortcut": "FJC", "signed_message_header": "FujiCoin Signed Message:\n", "slip44": 75, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "fujicoin", "website": "https://fujicoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 38, "address_type_p2sh": 10, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.gincoin.io"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "GIN", "coin_name": "Gincoin", "coin_shortcut": "GIN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gincoin-dev/gincoin-core", "hash_genesis_block": "00000cd6bde619b2c3b23ad2e384328a450a37fa28731debf748c3b17f91f97d", "key": "bitcoin:GIN", "maintainer": "Dragos Badea ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "GIN", "negative_fee": false, "segwit": false, "shortcut": "GIN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 2000, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "gincoin", "website": "https://gincoin.io", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 62, "bech32_prefix": "game", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.gamecredits.network"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "GameCredits", "coin_name": "GameCredits", "coin_shortcut": "GAME", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gamecredits-project/gamecredits", "hash_genesis_block": "91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee", "key": "bitcoin:GAME", "maintainer": "Samad Sajanlal ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "GameCredits", "negative_fee": false, "segwit": true, "shortcut": "GAME", "signed_message_header": "GameCredits Signed Message:\n", "slip44": 101, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "gamecredits", "website": "https://gamecredits.org", "xprv_magic": 27108450, "xpub_magic": 27106558, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 5, "bech32_prefix": "grs", "bip115": false, "bitcore": ["https://groestlsight.groestlcoin.org", "https://grsblocks.com"], "blockbook": ["https://blockbook.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin", "coin_name": "Groestlcoin", "coin_shortcut": "GRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023", "key": "bitcoin:GRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin", "negative_fee": false, "segwit": true, "shortcut": "GRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 17, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tgrs", "bip115": false, "bitcore": ["https://groestlsight-test.groestlcoin.org"], "blockbook": ["https://blockbook-test.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin Testnet", "coin_name": "Groestlcoin Testnet", "coin_shortcut": "tGRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "000000ffbb50fc9898cdd36ec163e6ba23230164c0052a28876255b7dcf2cd36", "key": "bitcoin:tGRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tGRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch", "coin_name": "Hatch", "coin_shortcut": "HATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "000000fa6116f5d6c6ce9b60bd431469e40b4fe55feeeda59e33cd2f0b863196", "key": "bitcoin:HATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Hatch", "negative_fee": false, "segwit": false, "shortcut": "HATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 88888888, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch Testnet", "coin_name": "Hatch Testnet", "coin_shortcut": "tHATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "00000bf8b02180fa3860e3f4fbfaab76db14fbfd1323d1d3ad06d83b828b6644", "key": "bitcoin:tHATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Hatch Testnet", "negative_fee": false, "segwit": false, "shortcut": "tHATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 8329, "address_type_p2sh": 8342, "bech32_prefix": null, "bip115": true, "bitcore": ["https://explorer.horizen.global"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Horizen", "coin_name": "Horizen", "coin_shortcut": "ZEN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ZencashOfficial/zen", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:ZEN", "maintainer": "Power_VANO ", "max_address_length": 95, "maxfee_kb": 2000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Horizen", "negative_fee": false, "segwit": false, "shortcut": "ZEN", "signed_message_header": "Zcash Signed Message:\n", "slip44": 121, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "horizen", "website": "https://www.horizen.global", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 60, "address_type_p2sh": 85, "bech32_prefix": null, "bip115": false, "bitcore": ["https://api.kmd.dev"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Komodo", "coin_name": "Komodo", "coin_shortcut": "KMD", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 1991772603}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/komodoplatform/komodo", "hash_genesis_block": "027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71", "key": "bitcoin:KMD", "maintainer": "Kadan Stadelmann ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Komodo", "negative_fee": true, "segwit": false, "shortcut": "KMD", "signed_message_header": "Komodo Signed Message:\n", "slip44": 141, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "komodo", "website": "https://komodoplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 6198, "address_type_p2sh": 6203, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.kotocoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Koto", "coin_name": "Koto", "coin_shortcut": "KOTO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/KotoDevelopers/koto", "hash_genesis_block": "6d424c350729ae633275d51dc3496e16cd1b1d195c164da00f39c499a2e9959e", "key": "bitcoin:KOTO", "maintainer": "WO ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Koto", "negative_fee": false, "segwit": false, "shortcut": "KOTO", "signed_message_header": "Koto Signed Message:\n", "slip44": 510, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "koto", "website": "https://ko-to.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 48, "address_type_p2sh": 50, "bech32_prefix": "ltc", "bip115": false, "bitcore": [], "blockbook": ["https://ltc1.trezor.io", "https://ltc2.trezor.io", "https://ltc3.trezor.io", "https://ltc4.trezor.io", "https://ltc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin", "coin_name": "Litecoin", "coin_shortcut": "LTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:LTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Litecoin", "negative_fee": false, "segwit": true, "shortcut": "LTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 2, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 27106558, "xpub_magic": 27108450, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 111, "address_type_p2sh": 58, "bech32_prefix": "tltc", "bip115": false, "bitcore": ["https://testnet.litecore.io"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin Testnet", "coin_name": "Litecoin Testnet", "coin_shortcut": "tLTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0", "key": "bitcoin:tLTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Litecoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tLTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 50, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Metaverse ETP", "coin_name": "MetaverseETP", "coin_shortcut": "ETP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/mvs-org/metaverse", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "key": "bitcoin:ETP", "maintainer": "Sven Mutzl ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 100, "name": "Metaverse ETP", "negative_fee": false, "segwit": false, "shortcut": "ETP", "signed_message_header": "Metaverse Signed Message:\n", "slip44": 2302, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "etp", "website": "https://mvs.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 50, "address_type_p2sh": 55, "bech32_prefix": "mona", "bip115": false, "bitcore": ["https://mona.chainsight.info", "https://insight.electrum-mona.org"], "blockbook": ["https://blockbook.electrum-mona.org"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "Monacoin", "coin_name": "Monacoin", "coin_shortcut": "MONA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/monacoinproject/monacoin", "hash_genesis_block": "ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6", "key": "bitcoin:MONA", "maintainer": "cryptcoin-junkey ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Monacoin", "negative_fee": false, "segwit": true, "shortcut": "MONA", "signed_message_header": "Monacoin Signed Message:\n", "slip44": 22, "support": {"connect": true, "trezor1": "1.6.0", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "monacoin", "website": "https://monacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 16, "address_type_p2sh": 76, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.monetaryunit.org"], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "MonetaryUnit", "coin_name": "MonetaryUnit", "coin_shortcut": "MUE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/muecoin/MUE", "hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f", "key": "bitcoin:MUE", "maintainer": "Sotiris Blad ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "MonetaryUnit", "negative_fee": false, "segwit": false, "shortcut": "MUE", "signed_message_header": "MonetaryUnit Signed Message:\n", "slip44": 31, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "monetaryunit", "website": "https://www.monetaryunit.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 53, "bech32_prefix": "nix", "bip115": false, "bitcore": ["https://blockchain.nixplatform.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "NIX", "coin_name": "NIX", "coin_shortcut": "NIX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/nixplatform/nixcore", "hash_genesis_block": "dd28ad86def767c3cfc34267a950d871fc7462bc57ea4a929fc3596d9b598e41", "key": "bitcoin:NIX", "maintainer": "mattt21 ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 0, "name": "NIX", "negative_fee": false, "segwit": true, "shortcut": "NIX", "signed_message_header": "NIX Signed Message:\n", "slip44": 400, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "nix", "website": "https://nixplatform.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 52, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://nmc1.trezor.io", "https://nmc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Namecoin", "coin_name": "Namecoin", "coin_shortcut": "NMC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 2940, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/namecoin/namecoin-core", "hash_genesis_block": "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770", "key": "bitcoin:NMC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Namecoin", "negative_fee": false, "segwit": false, "shortcut": "NMC", "signed_message_header": "Namecoin Signed Message:\n", "slip44": 7, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "namecoin", "website": "https://namecoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 13, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX", "coin_name": "PIVX", "coin_shortcut": "PIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:PIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX", "negative_fee": false, "segwit": false, "shortcut": "PIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 119, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 35729707, "xpub_magic": 36513075, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 139, "address_type_p2sh": 19, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook-testnet.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX Testnet", "coin_name": "PIVX Testnet", "coin_shortcut": "tPIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:tPIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX Testnet", "negative_fee": false, "segwit": false, "shortcut": "tPIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 981489719, "xpub_magic": 981492128, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 56, "address_type_p2sh": 60, "bech32_prefix": "bc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl", "coin_name": "Particl", "coin_shortcut": "PART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000ee0784c195317ac95623e22fddb8c7b8825dc3998e0bb924d66866eccf4c", "key": "bitcoin:PART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl", "negative_fee": false, "segwit": true, "shortcut": "PART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 44, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 1768850129, "xpub_magic": 2401087160, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 118, "address_type_p2sh": 122, "bech32_prefix": "tb", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl Testnet", "coin_name": "Particl Testnet", "coin_shortcut": "tPART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000594ada5310b367443ee0afd4fa3d0bbd5850ea4e33cdc7d6a904a7ec7c90", "key": "bitcoin:tPART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 3779229696, "xpub_magic": 76059768, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 55, "address_type_p2sh": 117, "bech32_prefix": "pc", "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin", "coin_name": "Peercoin", "coin_shortcut": "PPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3", "key": "bitcoin:PPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin", "negative_fee": false, "segwit": true, "shortcut": "PPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 6, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tpc", "bip115": false, "bitcore": [], "blockbook": ["https://tblockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin Testnet", "coin_name": "Peercoin Testnet", "coin_shortcut": "tPPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06", "key": "bitcoin:tPPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 47, "address_type_p2sh": 22, "bech32_prefix": null, "bip115": false, "bitcore": ["https://live.pesetacoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Pesetacoin", "coin_name": "Pesetacoin", "coin_shortcut": "PTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "hash_genesis_block": "edfe5830b53251bfff733600b1cd5c192e761c011b055f07924634818c906438", "key": "bitcoin:PTC", "maintainer": "Rw ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Pesetacoin", "negative_fee": false, "segwit": false, "shortcut": "PTC", "signed_message_header": "Pesetacoin Signed Message:\n", "slip44": 109, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "pesetacoin", "website": "https://pesetacoin.info", "xprv_magic": 76079604, "xpub_magic": 76071982, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 55, "address_type_p2sh": 56, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.polispay.org"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Polis", "coin_name": "Polis", "coin_shortcut": "POLIS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/polispay/polis", "hash_genesis_block": "000009701eb781a8113b1af1d814e2f060f6408a2c990db291bc5108a1345c1e", "key": "bitcoin:POLIS", "maintainer": "Cronos ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Polis", "negative_fee": false, "segwit": false, "shortcut": "POLIS", "signed_message_header": "Polis Signed Message:\n", "slip44": 1997, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "polis", "website": "https://www.polispay.org", "xprv_magic": 65165637, "xpub_magic": 65166718, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 23, "address_type_p2sh": 83, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Primecoin", "coin_name": "Primecoin", "coin_shortcut": "XPM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/primecoin/primecoin", "hash_genesis_block": "963d17ba4dc753138078a2f56afb3af9674e2546822badff26837db9a0152106", "key": "bitcoin:XPM", "maintainer": "James Skrowvedeht ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 26, "minfee_kb": 1000, "name": "Primecoin", "negative_fee": false, "segwit": false, "shortcut": "XPM", "signed_message_header": "Primecoin Signed Message:\n", "slip44": 24, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "primecoin", "website": "https://primecoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 58, "address_type_p2sh": 50, "bech32_prefix": "qc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum", "coin_name": "Qtum", "coin_shortcut": "QTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "duplicate": true, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c", "key": "bitcoin:QTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum", "negative_fee": false, "segwit": true, "shortcut": "QTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 2301, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": true}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 120, "address_type_p2sh": 110, "bech32_prefix": "tq", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum Testnet", "coin_name": "Qtum Testnet", "coin_shortcut": "tQTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222", "key": "bitcoin:tQTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum Testnet", "negative_fee": false, "segwit": true, "shortcut": "tQTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 60, "address_type_p2sh": 122, "bech32_prefix": null, "bip115": false, "bitcore": ["https://ravencoin.network"], "blockbook": ["https://blockbook.ravencoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ravencoin", "coin_name": "Ravencoin", "coin_shortcut": "RVN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RavenProject/Ravencoin", "hash_genesis_block": "0000006b444bc2f2ffe627be9d9e7e7a0730000870ef6eb6da46c8eae389df90", "key": "bitcoin:RVN", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ravencoin", "negative_fee": false, "segwit": false, "shortcut": "RVN", "signed_message_header": "Raven Signed Message:\n", "slip44": 175, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "raven", "website": "https://ravencoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 105, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.ritocoin.org"], "blockbook": ["https://blockbook.ritocoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ritocoin", "coin_name": "Ritocoin", "coin_shortcut": "RITO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RitoProject", "hash_genesis_block": "00000075e344bdf1c0e433f453764b1830a7aa19b2a5213e707502a22b779c1b", "key": "bitcoin:RITO", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ritocoin", "negative_fee": false, "segwit": false, "shortcut": "RITO", "signed_message_header": "Rito Signed Message:\n", "slip44": 19169, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "rito", "website": "https://ritocoin.org", "xprv_magic": 87326380, "xpub_magic": 87353290, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 63, "address_type_p2sh": 18, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.smartcash.cc"], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash", "coin_name": "SmartCash", "coin_shortcut": "SMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "000007acc6970b812948d14ea5a0a13db0fdd07d5047c7e69101fa8b361e05a4", "key": "bitcoin:SMART", "maintainer": "Leandro Reinaux ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash", "negative_fee": false, "segwit": false, "shortcut": "SMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "smart", "website": "https://smartcash.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 21, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash Testnet", "coin_name": "SmartCash Testnet", "coin_shortcut": "tSMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "0000027235b5679bcd28c90d03d4bf1a9ba4c07c4efcc1c87d6c68cce25e6e5d", "key": "bitcoin:tSMART", "maintainer": "Leandro Reinaux ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tSMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "testsmart", "website": "https://smartcash.cc", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": "xc", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Stakenet", "coin_name": "Stakenet", "coin_shortcut": "XSN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 1000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/X9Developers/XSN", "hash_genesis_block": "00000c822abdbb23e28f79a49d29b41429737c6c7e15df40d1b1f1b35907ae34", "key": "bitcoin:XSN", "maintainer": "Alexis Hernandez ", "max_address_length": 47, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Stakenet", "negative_fee": false, "segwit": true, "shortcut": "XSN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 199, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "stakenet", "website": "https://stakenet.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 63, "address_type_p2sh": 5, "bech32_prefix": "sys", "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Syscoin", "coin_name": "Syscoin", "coin_shortcut": "SYS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 200, "High": 2000, "Low": 100, "Normal": 400}, "dust_limit": 1820, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/syscoin/syscoin", "hash_genesis_block": "0000022642db0346b6e01c2a397471f4f12e65d4f4251ec96c1f85367a61a7ab", "key": "bitcoin:SYS", "maintainer": "Jagdeep Sidhu ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Syscoin", "negative_fee": false, "segwit": true, "shortcut": "SYS", "signed_message_header": "Syscoin Signed Message:\n", "slip44": 57, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "syscoin", "website": "https://syscoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.terracoin.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Terracoin", "coin_name": "Terracoin", "coin_shortcut": "TRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/terracoin/terracoin", "hash_genesis_block": "00000000804bbc6a621a9dbb564ce469f492e1ccf2d70f8a6b241e26a277afa2", "key": "bitcoin:TRC", "maintainer": "The Terracoin Foundation ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Terracoin", "negative_fee": false, "segwit": false, "shortcut": "TRC", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 83, "support": {"connect": false, "trezor1": false, "trezor2": false, "webwallet": false}, "timestamp": false, "uri_prefix": "terracoin", "website": "https://terracoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 130, "address_type_p2sh": 30, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno"], "blocktime_seconds": 30, "cashaddr_prefix": null, "coin_label": "Unobtanium", "coin_name": "Unobtanium", "coin_shortcut": "UNO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 50, "High": 160, "Low": 10, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/unobtanium-official/unobtanium", "hash_genesis_block": "000004c2fc5fffb810dccc197d603690099a68305232e552d96ccbe8e2c52b75", "key": "bitcoin:UNO", "maintainer": "choicesz ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Unobtanium", "negative_fee": false, "segwit": false, "shortcut": "UNO", "signed_message_header": "Unobtanium Signed Message:\n", "slip44": 92, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "unobtanium", "website": "https://unobtanium.uno", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 70, "address_type_p2sh": 50, "bech32_prefix": "vips", "bip115": false, "bitcore": ["https://insight.vipstarco.in"], "blockbook": ["https://vips.blockbook.japanesecoin-pool.work"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "VIPSTARCOIN", "coin_name": "VIPSTARCOIN", "coin_shortcut": "VIPS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/VIPSTARCOIN/VIPSTARCOIN", "hash_genesis_block": "0000d068e1d30f79fb64446137106be9c6ee69a6a722295c131506b1ee09b77c", "key": "bitcoin:VIPS", "maintainer": "y-chan ", "max_address_length": 36, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "VIPSTARCOIN", "negative_fee": false, "segwit": true, "shortcut": "VIPS", "signed_message_header": "VIPSTARCOIN Signed Message:\n", "slip44": 1919, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "vipstarcoin", "website": "https://vipstarcoin.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 5, "bech32_prefix": "vtc", "bip115": false, "bitcore": [], "blockbook": ["https://vtc1.trezor.io", "https://vtc2.trezor.io", "https://vtc3.trezor.io", "https://vtc4.trezor.io", "https://vtc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Vertcoin", "coin_name": "Vertcoin", "coin_shortcut": "VTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/vertcoin-project/vertcoin-core", "hash_genesis_block": "4d96a915f49d40b1e5c2844d1ee2dccb90013a990ccea12c492d22110489f0c4", "key": "bitcoin:VTC", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Vertcoin", "negative_fee": false, "segwit": true, "shortcut": "VTC", "signed_message_header": "Vertcoin Signed Message:\n", "slip44": 28, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "vertcoin", "website": "https://vertcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 33, "bech32_prefix": "via", "bip115": false, "bitcore": ["https://explorer.viacoin.org"], "blockbook": [], "blocktime_seconds": 24, "cashaddr_prefix": null, "coin_label": "Viacoin", "coin_name": "Viacoin", "coin_shortcut": "VIA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7000, "High": 20000, "Low": 1000, "Normal": 14000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/viacoin", "hash_genesis_block": "4e9b54001f9976049830128ec0331515eaabe35a70970d79971da1539a400ba1", "key": "bitcoin:VIA", "maintainer": "romanornr ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Viacoin", "negative_fee": false, "segwit": true, "shortcut": "VIA", "signed_message_header": "Viacoin Signed Message:\n", "slip44": 14, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "viacoin", "website": "https://viacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 142, "address_type_p2sh": 145, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.zcore.cash"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "ZCore", "coin_name": "ZCore", "coin_shortcut": "ZCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcore-coin/zcore-2.0", "hash_genesis_block": "695b79c8c234b45b2eeb4722f33373e471c9b686ff78efeb39da95f824a9f81b", "key": "bitcoin:ZCR", "maintainer": "Erick Costa ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 34, "minfee_kb": 1000, "name": "ZCore", "negative_fee": false, "segwit": false, "shortcut": "ZCR", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 428, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcore", "website": "https://zcore.cash", "xprv_magic": 78791432, "xpub_magic": 78792518, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://zec1.trezor.io", "https://zec2.trezor.io", "https://zec3.trezor.io", "https://zec4.trezor.io", "https://zec5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash", "coin_name": "Zcash", "coin_shortcut": "ZEC", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08", "key": "bitcoin:ZEC", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash", "negative_fee": false, "segwit": false, "shortcut": "ZEC", "signed_message_header": "Zcash Signed Message:\n", "slip44": 133, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7461, "address_type_p2sh": 7354, "bech32_prefix": null, "bip115": false, "bitcore": ["https://explorer.testnet.z.cash"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash Testnet", "coin_name": "Zcash Testnet", "coin_shortcut": "TAZ", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38", "key": "bitcoin:TAZ", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TAZ", "signed_message_header": "Zcash Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 82, "address_type_p2sh": 7, "bech32_prefix": null, "bip115": false, "bitcore": ["https://insight.zcoin.io"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin", "coin_name": "Zcoin", "coin_shortcut": "XZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "4381deb85b1b2c9843c222944b616d997516dcbd6a964e1eaf0def0830695233", "key": "bitcoin:XZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin", "negative_fee": false, "segwit": false, "shortcut": "XZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 136, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcoin", "website": "https://zcoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 178, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin Testnet", "coin_name": "Zcoin Testnet", "coin_shortcut": "tXZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "7ac038c193c2158c428c59f9ae0c02a07115141c6e9dc244ae96132e99b4e642", "key": "bitcoin:tXZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin Testnet", "negative_fee": false, "segwit": false, "shortcut": "tXZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "testzcoin", "website": "https://zcoin.io", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bip115": false, "bitcore": [], "blockbook": ["https://blockbook.zel.network"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Zel", "coin_name": "ZelCash", "coin_shortcut": "ZEL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zelcash", "hash_genesis_block": "00052461a5006c2e3b74ce48992a08695607912d5604c3eb8da25749b0900444", "key": "bitcoin:ZEL", "maintainer": "Cabecinha84 ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zel", "negative_fee": false, "segwit": false, "shortcut": "ZEL", "signed_message_header": "Zcash Signed Message:\n", "slip44": 19167, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "zelcash", "website": "https://zel.network", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}] +[{"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": "bc", "bitcore": [], "blockbook": ["https://btc1.trezor.io", "https://btc2.trezor.io", "https://btc3.trezor.io", "https://btc4.trezor.io", "https://btc5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin", "coin_name": "Bitcoin", "coin_shortcut": "BTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin", "negative_fee": false, "segwit": true, "shortcut": "BTC", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 0, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "bcrt", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Regtest", "coin_name": "Regtest", "coin_shortcut": "REGTEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", "key": "bitcoin:REGTEST", "maintainer": "Thomas Kerin ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Regtest", "negative_fee": false, "segwit": true, "shortcut": "REGTEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tb", "bitcore": [], "blockbook": ["https://tbtc1.trezor.io", "https://tbtc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Testnet", "coin_name": "Testnet", "coin_shortcut": "TEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TEST", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Testnet", "negative_fee": false, "segwit": true, "shortcut": "TEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 53, "address_type_p2sh": 55, "bech32_prefix": "acm", "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Actinium", "coin_name": "Actinium", "coin_shortcut": "ACM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Actinium-project/Actinium", "hash_genesis_block": "28d77872e23714562f49a1be792c276623c1bbe3fdcf21b6035cfde78b00b824", "key": "bitcoin:ACM", "maintainer": "Harris Brakmic ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Actinium", "negative_fee": false, "segwit": true, "shortcut": "ACM", "signed_message_header": "Actinium Signed Message:\n", "slip44": 228, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "actinium", "website": "https://actinium.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 55, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Axe", "coin_name": "Axe", "coin_shortcut": "AXE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/axerunners/axe", "hash_genesis_block": "00000c33631ca6f2f61368991ce2dc03306b5bb50bf7cede5cfbba6db38e52e6", "key": "bitcoin:AXE", "maintainer": "Kirill Orlov ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Axe", "negative_fee": false, "segwit": false, "shortcut": "AXE", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 4242, "support": {"connect": true, "trezor1": "1.7.3", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "axe", "website": "https://axerunners.com", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 85, "bech32_prefix": "bm", "bitcore": [], "blockbook": ["https://bellcoin-blockbook.ilmango.work", "https://bell.blockbook.ovh"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Bellcoin", "coin_name": "Bellcoin", "coin_shortcut": "BELL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bellcoin-org/bellcoin", "hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603", "key": "bitcoin:BELL", "maintainer": "ilmango-doge ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bellcoin", "negative_fee": false, "segwit": true, "shortcut": "BELL", "signed_message_header": "Bellcoin Signed Message:\n", "slip44": 25252, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bellcoin", "website": "https://bellcoin.web4u.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 81, "address_type_p2sh": 5, "bech32_prefix": "bz", "bitcore": ["https://insight.bitzeny.jp", "https://zeny.insight.monaco-ex.org"], "blockbook": ["https://zny.blockbook.ovh"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "BitZeny", "coin_name": "BitZeny", "coin_shortcut": "ZNY", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "hash_genesis_block": "000009f7e55e9e3b4781e22bd87a7cfa4acada9e4340d43ca738bf4e9fb8f5ce", "key": "bitcoin:ZNY", "maintainer": "y-chan ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "BitZeny", "negative_fee": false, "segwit": true, "shortcut": "ZNY", "signed_message_header": "BitZeny Signed Message:\n", "slip44": 123, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitzeny", "website": "https://bitzeny.tech", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://bch1.trezor.io", "https://bch2.trezor.io", "https://bch3.trezor.io", "https://bch4.trezor.io", "https://bch5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": "bitcoincash", "coin_label": "Bitcoin Cash", "coin_name": "Bcash", "coin_shortcut": "BCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash", "negative_fee": false, "segwit": false, "shortcut": "BCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 145, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": "bchtest", "coin_label": "Bitcoin Cash Testnet", "coin_name": "Bcash Testnet", "coin_shortcut": "TBCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TBCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TBCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 23, "bech32_prefix": "btg", "bitcore": [], "blockbook": ["https://btg1.trezor.io", "https://btg2.trezor.io", "https://btg3.trezor.io", "https://btg4.trezor.io", "https://btg5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold", "coin_name": "Bgold", "coin_shortcut": "BTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTG", "maintainer": "Saleem Rashid ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold", "negative_fee": false, "segwit": true, "shortcut": "BTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tbtg", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold Testnet", "coin_name": "Bgold Testnet", "coin_shortcut": "TBTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "00000000e0781ebe24b91eedc293adfea2f557b53ec379e78959de3853e6f9f6", "key": "bitcoin:TBTG", "maintainer": "The Bitcoin Gold Developers ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold Testnet", "negative_fee": false, "segwit": true, "shortcut": "TBTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 4901, "address_type_p2sh": 5039, "bech32_prefix": null, "bitcore": ["https://explorer.btcprivate.org"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcoin Private", "coin_name": "Bprivate", "coin_shortcut": "BTCP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": 42, "github": "https://github.com/BTCPrivate/BitcoinPrivate", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:BTCP", "maintainer": "Chris Sulmone ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Bitcoin Private", "negative_fee": false, "segwit": false, "shortcut": "BTCP", "signed_message_header": "BitcoinPrivate Signed Message:\n", "slip44": 183, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoinprivate", "website": "https://btcprivate.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 61, "address_type_p2sh": 123, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook1.bitcoinrh.org", "https://blockbook2.bitcoinrh.org"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Rhodium", "coin_name": "Brhodium", "coin_shortcut": "XRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "hash_genesis_block": "baff5bfd9dc43fb672d003ec20fd21428f9282ca46bfa1730d73e1f2c75f5fdd", "key": "bitcoin:XRC", "maintainer": "baff5b ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Rhodium", "negative_fee": false, "segwit": false, "shortcut": "XRC", "signed_message_header": "BitCoin Rhodium Signed Message:\n", "slip44": 10291, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin-rhodium", "website": "https://www.bitcoinrh.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3, "address_type_p2sh": 125, "bech32_prefix": "btx", "bitcore": ["https://insight.bitcore.cc"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcore", "coin_name": "Bitcore", "coin_shortcut": "BTX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/LIMXTEC/BitCore", "hash_genesis_block": "604148281e5c4b7f2487e5d03cd60d8e6f69411d613f6448034508cea52e9574", "key": "bitcoin:BTX", "maintainer": "limxdev ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcore", "negative_fee": false, "segwit": true, "shortcut": "BTX", "signed_message_header": "BitCore Signed Message:\n", "slip44": 160, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcore", "website": "https://bitcore.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 30, "bech32_prefix": "cpu", "bitcore": [], "blockbook": ["https://blockbook.cpuchain.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "CPUchain", "coin_name": "CPUchain", "coin_shortcut": "CPU", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/cpuchain/cpuchain", "hash_genesis_block": "000024d8766043ea0e1c9ad42e7ea4b5fdb459887bd80b8f9756f3d87e128f12", "key": "bitcoin:CPU", "maintainer": "Min Khang Aung ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "CPUchain", "negative_fee": false, "segwit": true, "shortcut": "CPU", "signed_message_header": "CPUchain Signed Message:\n", "slip44": 363, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "cpuchain", "website": "https://cpuchain.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 35, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.capricoin.org", "https://blockbook2.capricoin.org", "https://blockbook3.capricoin.org", "https://blockbook4.capricoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Capricoin", "coin_name": "Capricoin", "coin_shortcut": "CPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7, "High": 20, "Low": 1, "Normal": 14}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Capricoinofficial/Capricoin", "hash_genesis_block": "00000d23fa0fc52c90893adb1181c9ddffb6c797a3e41864b9a23aa2f2981fe3", "key": "bitcoin:CPC", "maintainer": "Jozef Knaperek ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Capricoin", "negative_fee": false, "segwit": false, "shortcut": "CPC", "signed_message_header": "Capricoin Signed Message:\n", "slip44": 289, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.10", "webwallet": false}, "timestamp": true, "uri_prefix": "capricoin", "website": "https://capricoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 95495, "address_type_p2sh": 95473, "bech32_prefix": null, "bitcore": ["https://insight-01.crownplatform.com", "https://insight-02.crownplatform.com", "https://insight-03.crownplatform.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Crown", "coin_name": "Crown", "coin_shortcut": "CRW", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Crowndev/crowncoin", "hash_genesis_block": "0000000085370d5e122f64f4ab19c68614ff3df78c8d13cb814fd7e69a1dc6da", "key": "bitcoin:CRW", "maintainer": "Ashot ", "max_address_length": 40, "maxfee_kb": 2000000, "min_address_length": 36, "minfee_kb": 1000, "name": "Crown", "negative_fee": false, "segwit": false, "shortcut": "CRW", "signed_message_header": "Crown Signed Message:\n", "slip44": 72, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": false}, "timestamp": false, "uri_prefix": "crown", "website": "https://crownplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://dash1.trezor.io", "https://dash2.trezor.io", "https://dash3.trezor.io", "https://dash4.trezor.io", "https://dash5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash", "coin_name": "Dash", "coin_shortcut": "DASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", "key": "bitcoin:DASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dash", "negative_fee": false, "segwit": false, "shortcut": "DASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 5, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash Testnet", "coin_name": "Dash Testnet", "coin_shortcut": "tDASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", "key": "bitcoin:tDASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Dash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tDASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 1855, "address_type_p2sh": 1818, "bech32_prefix": null, "bitcore": ["https://mainnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred", "coin_name": "Decred", "coin_shortcut": "DCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "298e5cc3d985bfe7f81dc135f360abe089edd4396b86d2de66b0cef42b21d980", "key": "bitcoin:DCR", "maintainer": "Alex Yocom-Piatt ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 10000, "name": "Decred", "negative_fee": false, "segwit": false, "shortcut": "DCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 42, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 50177256, "xpub_magic": 50178342, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3873, "address_type_p2sh": 3836, "bech32_prefix": null, "bitcore": ["https://testnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred Testnet", "coin_name": "Decred Testnet", "coin_shortcut": "TDCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "a649dce53918caf422e9c711c858837e08d626ecfcd198969b24f7b634a49bac", "key": "bitcoin:TDCR", "maintainer": "Saleem Rashid ", "max_address_length": 35, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Decred Testnet", "negative_fee": false, "segwit": false, "shortcut": "TDCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 70615959, "xpub_magic": 70617041, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 63, "bech32_prefix": "dgb", "bitcore": [], "blockbook": ["https://dgb1.trezor.io", "https://dgb2.trezor.io"], "blocktime_seconds": 15, "cashaddr_prefix": null, "coin_label": "DigiByte", "coin_name": "DigiByte", "coin_shortcut": "DGB", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/digibyte/digibyte", "hash_genesis_block": "7497ea1b465eb39f1c8f507bc877078fe016d6fcb6dfad3a64c98dcc6e1e8496", "key": "bitcoin:DGB", "maintainer": "DigiByte ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "DigiByte", "negative_fee": false, "segwit": true, "shortcut": "DGB", "signed_message_header": "DigiByte Signed Message:\n", "slip44": 20, "support": {"connect": true, "trezor1": "1.6.3", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "digibyte", "website": "https://digibyte.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 30, "address_type_p2sh": 22, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://doge1.trezor.io", "https://doge2.trezor.io", "https://doge3.trezor.io", "https://doge4.trezor.io", "https://doge5.trezor.io"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Dogecoin", "coin_name": "Dogecoin", "coin_shortcut": "DOGE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 100000}, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/dogecoin/dogecoin", "hash_genesis_block": "1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691", "key": "bitcoin:DOGE", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dogecoin", "negative_fee": false, "segwit": false, "shortcut": "DOGE", "signed_message_header": "Dogecoin Signed Message:\n", "slip44": 3, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dogecoin", "website": "https://dogecoin.com", "xprv_magic": 49988504, "xpub_magic": 49990397, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 235, "address_type_p2sh": 75, "bech32_prefix": "ert", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Elements", "coin_name": "Elements", "coin_shortcut": "ELEMENTS", "confidential_assets": {"address_prefix": 4, "blech32_prefix": "el"}, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ElementsProject/elements", "hash_genesis_block": "209577bda6bf4b5804bd46f8621580dd6d4e8bfa2d190e1c50e932492baca07d", "key": "bitcoin:ELEMENTS", "maintainer": "Roman Zeyde ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Elements", "negative_fee": false, "segwit": true, "shortcut": "ELEMENTS", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "elements", "website": "https://elementsproject.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 14, "address_type_p2sh": 5, "bech32_prefix": "fc", "bitcore": ["https://bitcore.feathercoin.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Feathercoin", "coin_name": "Feathercoin", "coin_shortcut": "FTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "duplicate": true, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FeatherCoin/Feathercoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:FTC", "maintainer": "Lucas Betschart ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Feathercoin", "negative_fee": false, "segwit": true, "shortcut": "FTC", "signed_message_header": "Feathercoin Signed Message:\n", "slip44": 8, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "feathercoin", "website": "https://feathercoin.com", "xprv_magic": 76077806, "xpub_magic": 76069926, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 35, "address_type_p2sh": 94, "bech32_prefix": "flo", "bitcore": ["https://livenet.flocha.in"], "blockbook": [], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "Flo", "coin_name": "Florincoin", "coin_shortcut": "FLO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/floblockchain/flo", "hash_genesis_block": "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea", "key": "bitcoin:FLO", "maintainer": "Robert English ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Flo", "negative_fee": false, "segwit": true, "shortcut": "FLO", "signed_message_header": "Florincoin Signed Message:\n", "slip44": 216, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "florincoin", "website": "https://flo.cash", "xprv_magic": 15264107, "xpub_magic": 1526049, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 16, "bech32_prefix": "fc", "bitcore": [], "blockbook": ["https://explorer.fujicoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Fujicoin", "coin_name": "Fujicoin", "coin_shortcut": "FJC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 20000, "High": 100000, "Low": 10000, "Normal": 50000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/fujicoin/fujicoin", "hash_genesis_block": "adb6d9cfd74075e7f91608add4bd2a2ea636f70856183086842667a1597714a0", "key": "bitcoin:FJC", "maintainer": "motty ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 10000000, "name": "Fujicoin", "negative_fee": false, "segwit": true, "shortcut": "FJC", "signed_message_header": "FujiCoin Signed Message:\n", "slip44": 75, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "fujicoin", "website": "https://fujicoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 38, "address_type_p2sh": 10, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.gincoin.io"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "GIN", "coin_name": "Gincoin", "coin_shortcut": "GIN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gincoin-dev/gincoin-core", "hash_genesis_block": "00000cd6bde619b2c3b23ad2e384328a450a37fa28731debf748c3b17f91f97d", "key": "bitcoin:GIN", "maintainer": "Dragos Badea ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "GIN", "negative_fee": false, "segwit": false, "shortcut": "GIN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 2000, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "gincoin", "website": "https://gincoin.io", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 62, "bech32_prefix": "game", "bitcore": [], "blockbook": ["https://blockbook.gamecredits.network"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "GameCredits", "coin_name": "GameCredits", "coin_shortcut": "GAME", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gamecredits-project/gamecredits", "hash_genesis_block": "91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee", "key": "bitcoin:GAME", "maintainer": "Samad Sajanlal ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "GameCredits", "negative_fee": false, "segwit": true, "shortcut": "GAME", "signed_message_header": "GameCredits Signed Message:\n", "slip44": 101, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "gamecredits", "website": "https://gamecredits.org", "xprv_magic": 27108450, "xpub_magic": 27106558, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 5, "bech32_prefix": "grs", "bitcore": ["https://groestlsight.groestlcoin.org", "https://grsblocks.com"], "blockbook": ["https://blockbook.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin", "coin_name": "Groestlcoin", "coin_shortcut": "GRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023", "key": "bitcoin:GRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin", "negative_fee": false, "segwit": true, "shortcut": "GRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 17, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tgrs", "bitcore": ["https://groestlsight-test.groestlcoin.org"], "blockbook": ["https://blockbook-test.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin Testnet", "coin_name": "Groestlcoin Testnet", "coin_shortcut": "tGRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "000000ffbb50fc9898cdd36ec163e6ba23230164c0052a28876255b7dcf2cd36", "key": "bitcoin:tGRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tGRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch", "coin_name": "Hatch", "coin_shortcut": "HATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "000000fa6116f5d6c6ce9b60bd431469e40b4fe55feeeda59e33cd2f0b863196", "key": "bitcoin:HATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Hatch", "negative_fee": false, "segwit": false, "shortcut": "HATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 88888888, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch Testnet", "coin_name": "Hatch Testnet", "coin_shortcut": "tHATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "00000bf8b02180fa3860e3f4fbfaab76db14fbfd1323d1d3ad06d83b828b6644", "key": "bitcoin:tHATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Hatch Testnet", "negative_fee": false, "segwit": false, "shortcut": "tHATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 60, "address_type_p2sh": 85, "bech32_prefix": null, "bitcore": ["https://api.kmd.dev"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Komodo", "coin_name": "Komodo", "coin_shortcut": "KMD", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 1991772603}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/komodoplatform/komodo", "hash_genesis_block": "027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71", "key": "bitcoin:KMD", "maintainer": "Kadan Stadelmann ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Komodo", "negative_fee": true, "segwit": false, "shortcut": "KMD", "signed_message_header": "Komodo Signed Message:\n", "slip44": 141, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "komodo", "website": "https://komodoplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 6198, "address_type_p2sh": 6203, "bech32_prefix": null, "bitcore": ["https://insight.kotocoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Koto", "coin_name": "Koto", "coin_shortcut": "KOTO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/KotoDevelopers/koto", "hash_genesis_block": "6d424c350729ae633275d51dc3496e16cd1b1d195c164da00f39c499a2e9959e", "key": "bitcoin:KOTO", "maintainer": "WO ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Koto", "negative_fee": false, "segwit": false, "shortcut": "KOTO", "signed_message_header": "Koto Signed Message:\n", "slip44": 510, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "koto", "website": "https://ko-to.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 48, "address_type_p2sh": 50, "bech32_prefix": "ltc", "bitcore": [], "blockbook": ["https://ltc1.trezor.io", "https://ltc2.trezor.io", "https://ltc3.trezor.io", "https://ltc4.trezor.io", "https://ltc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin", "coin_name": "Litecoin", "coin_shortcut": "LTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:LTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Litecoin", "negative_fee": false, "segwit": true, "shortcut": "LTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 2, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 27106558, "xpub_magic": 27108450, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 111, "address_type_p2sh": 58, "bech32_prefix": "tltc", "bitcore": ["https://testnet.litecore.io"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin Testnet", "coin_name": "Litecoin Testnet", "coin_shortcut": "tLTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0", "key": "bitcoin:tLTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Litecoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tLTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 50, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Metaverse ETP", "coin_name": "MetaverseETP", "coin_shortcut": "ETP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/mvs-org/metaverse", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "key": "bitcoin:ETP", "maintainer": "Sven Mutzl ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 100, "name": "Metaverse ETP", "negative_fee": false, "segwit": false, "shortcut": "ETP", "signed_message_header": "Metaverse Signed Message:\n", "slip44": 2302, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "etp", "website": "https://mvs.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 50, "address_type_p2sh": 55, "bech32_prefix": "mona", "bitcore": ["https://mona.chainsight.info", "https://insight.electrum-mona.org"], "blockbook": ["https://blockbook.electrum-mona.org"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "Monacoin", "coin_name": "Monacoin", "coin_shortcut": "MONA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/monacoinproject/monacoin", "hash_genesis_block": "ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6", "key": "bitcoin:MONA", "maintainer": "cryptcoin-junkey ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Monacoin", "negative_fee": false, "segwit": true, "shortcut": "MONA", "signed_message_header": "Monacoin Signed Message:\n", "slip44": 22, "support": {"connect": true, "trezor1": "1.6.0", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "monacoin", "website": "https://monacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 16, "address_type_p2sh": 76, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.monetaryunit.org"], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "MonetaryUnit", "coin_name": "MonetaryUnit", "coin_shortcut": "MUE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/muecoin/MUE", "hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f", "key": "bitcoin:MUE", "maintainer": "Sotiris Blad ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "MonetaryUnit", "negative_fee": false, "segwit": false, "shortcut": "MUE", "signed_message_header": "MonetaryUnit Signed Message:\n", "slip44": 31, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "monetaryunit", "website": "https://www.monetaryunit.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 53, "bech32_prefix": "nix", "bitcore": ["https://blockchain.nixplatform.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "NIX", "coin_name": "NIX", "coin_shortcut": "NIX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/nixplatform/nixcore", "hash_genesis_block": "dd28ad86def767c3cfc34267a950d871fc7462bc57ea4a929fc3596d9b598e41", "key": "bitcoin:NIX", "maintainer": "mattt21 ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 0, "name": "NIX", "negative_fee": false, "segwit": true, "shortcut": "NIX", "signed_message_header": "NIX Signed Message:\n", "slip44": 400, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "nix", "website": "https://nixplatform.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 52, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://nmc1.trezor.io", "https://nmc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Namecoin", "coin_name": "Namecoin", "coin_shortcut": "NMC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 2940, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/namecoin/namecoin-core", "hash_genesis_block": "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770", "key": "bitcoin:NMC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Namecoin", "negative_fee": false, "segwit": false, "shortcut": "NMC", "signed_message_header": "Namecoin Signed Message:\n", "slip44": 7, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "namecoin", "website": "https://namecoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 13, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX", "coin_name": "PIVX", "coin_shortcut": "PIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:PIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX", "negative_fee": false, "segwit": false, "shortcut": "PIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 119, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 35729707, "xpub_magic": 36513075, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 139, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook-testnet.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX Testnet", "coin_name": "PIVX Testnet", "coin_shortcut": "tPIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:tPIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX Testnet", "negative_fee": false, "segwit": false, "shortcut": "tPIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 981489719, "xpub_magic": 981492128, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 56, "address_type_p2sh": 60, "bech32_prefix": "bc", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl", "coin_name": "Particl", "coin_shortcut": "PART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000ee0784c195317ac95623e22fddb8c7b8825dc3998e0bb924d66866eccf4c", "key": "bitcoin:PART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl", "negative_fee": false, "segwit": true, "shortcut": "PART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 44, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 1768850129, "xpub_magic": 2401087160, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 118, "address_type_p2sh": 122, "bech32_prefix": "tb", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl Testnet", "coin_name": "Particl Testnet", "coin_shortcut": "tPART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000594ada5310b367443ee0afd4fa3d0bbd5850ea4e33cdc7d6a904a7ec7c90", "key": "bitcoin:tPART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 3779229696, "xpub_magic": 76059768, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 55, "address_type_p2sh": 117, "bech32_prefix": "pc", "bitcore": [], "blockbook": ["https://blockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin", "coin_name": "Peercoin", "coin_shortcut": "PPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3", "key": "bitcoin:PPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin", "negative_fee": false, "segwit": true, "shortcut": "PPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 6, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tpc", "bitcore": [], "blockbook": ["https://tblockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin Testnet", "coin_name": "Peercoin Testnet", "coin_shortcut": "tPPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06", "key": "bitcoin:tPPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 47, "address_type_p2sh": 22, "bech32_prefix": null, "bitcore": ["https://live.pesetacoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Pesetacoin", "coin_name": "Pesetacoin", "coin_shortcut": "PTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "hash_genesis_block": "edfe5830b53251bfff733600b1cd5c192e761c011b055f07924634818c906438", "key": "bitcoin:PTC", "maintainer": "Rw ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Pesetacoin", "negative_fee": false, "segwit": false, "shortcut": "PTC", "signed_message_header": "Pesetacoin Signed Message:\n", "slip44": 109, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "pesetacoin", "website": "https://pesetacoin.info", "xprv_magic": 76079604, "xpub_magic": 76071982, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 55, "address_type_p2sh": 56, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.polispay.org"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Polis", "coin_name": "Polis", "coin_shortcut": "POLIS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/polispay/polis", "hash_genesis_block": "000009701eb781a8113b1af1d814e2f060f6408a2c990db291bc5108a1345c1e", "key": "bitcoin:POLIS", "maintainer": "Cronos ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Polis", "negative_fee": false, "segwit": false, "shortcut": "POLIS", "signed_message_header": "Polis Signed Message:\n", "slip44": 1997, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "polis", "website": "https://www.polispay.org", "xprv_magic": 65165637, "xpub_magic": 65166718, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 23, "address_type_p2sh": 83, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Primecoin", "coin_name": "Primecoin", "coin_shortcut": "XPM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/primecoin/primecoin", "hash_genesis_block": "963d17ba4dc753138078a2f56afb3af9674e2546822badff26837db9a0152106", "key": "bitcoin:XPM", "maintainer": "James Skrowvedeht ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 26, "minfee_kb": 1000, "name": "Primecoin", "negative_fee": false, "segwit": false, "shortcut": "XPM", "signed_message_header": "Primecoin Signed Message:\n", "slip44": 24, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "primecoin", "website": "https://primecoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 58, "address_type_p2sh": 50, "bech32_prefix": "qc", "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum", "coin_name": "Qtum", "coin_shortcut": "QTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "duplicate": true, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c", "key": "bitcoin:QTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum", "negative_fee": false, "segwit": true, "shortcut": "QTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 2301, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": true}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 120, "address_type_p2sh": 110, "bech32_prefix": "tq", "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum Testnet", "coin_name": "Qtum Testnet", "coin_shortcut": "tQTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222", "key": "bitcoin:tQTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum Testnet", "negative_fee": false, "segwit": true, "shortcut": "tQTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 60, "address_type_p2sh": 122, "bech32_prefix": null, "bitcore": ["https://ravencoin.network"], "blockbook": ["https://blockbook.ravencoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ravencoin", "coin_name": "Ravencoin", "coin_shortcut": "RVN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RavenProject/Ravencoin", "hash_genesis_block": "0000006b444bc2f2ffe627be9d9e7e7a0730000870ef6eb6da46c8eae389df90", "key": "bitcoin:RVN", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ravencoin", "negative_fee": false, "segwit": false, "shortcut": "RVN", "signed_message_header": "Raven Signed Message:\n", "slip44": 175, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "raven", "website": "https://ravencoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 105, "bech32_prefix": null, "bitcore": ["https://insight.ritocoin.org"], "blockbook": ["https://blockbook.ritocoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ritocoin", "coin_name": "Ritocoin", "coin_shortcut": "RITO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RitoProject", "hash_genesis_block": "00000075e344bdf1c0e433f453764b1830a7aa19b2a5213e707502a22b779c1b", "key": "bitcoin:RITO", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ritocoin", "negative_fee": false, "segwit": false, "shortcut": "RITO", "signed_message_header": "Rito Signed Message:\n", "slip44": 19169, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "rito", "website": "https://ritocoin.org", "xprv_magic": 87326380, "xpub_magic": 87353290, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 63, "address_type_p2sh": 18, "bech32_prefix": null, "bitcore": ["https://insight.smartcash.cc"], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash", "coin_name": "SmartCash", "coin_shortcut": "SMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "000007acc6970b812948d14ea5a0a13db0fdd07d5047c7e69101fa8b361e05a4", "key": "bitcoin:SMART", "maintainer": "Leandro Reinaux ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash", "negative_fee": false, "segwit": false, "shortcut": "SMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "smart", "website": "https://smartcash.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 21, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash Testnet", "coin_name": "SmartCash Testnet", "coin_shortcut": "tSMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "0000027235b5679bcd28c90d03d4bf1a9ba4c07c4efcc1c87d6c68cce25e6e5d", "key": "bitcoin:tSMART", "maintainer": "Leandro Reinaux ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tSMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "testsmart", "website": "https://smartcash.cc", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": "xc", "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Stakenet", "coin_name": "Stakenet", "coin_shortcut": "XSN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 1000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/X9Developers/XSN", "hash_genesis_block": "00000c822abdbb23e28f79a49d29b41429737c6c7e15df40d1b1f1b35907ae34", "key": "bitcoin:XSN", "maintainer": "Alexis Hernandez ", "max_address_length": 47, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Stakenet", "negative_fee": false, "segwit": true, "shortcut": "XSN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 199, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "stakenet", "website": "https://stakenet.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 63, "address_type_p2sh": 5, "bech32_prefix": "sys", "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Syscoin", "coin_name": "Syscoin", "coin_shortcut": "SYS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 200, "High": 2000, "Low": 100, "Normal": 400}, "dust_limit": 1820, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/syscoin/syscoin", "hash_genesis_block": "0000022642db0346b6e01c2a397471f4f12e65d4f4251ec96c1f85367a61a7ab", "key": "bitcoin:SYS", "maintainer": "Jagdeep Sidhu ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Syscoin", "negative_fee": false, "segwit": true, "shortcut": "SYS", "signed_message_header": "Syscoin Signed Message:\n", "slip44": 57, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "syscoin", "website": "https://syscoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": ["https://insight.terracoin.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Terracoin", "coin_name": "Terracoin", "coin_shortcut": "TRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/terracoin/terracoin", "hash_genesis_block": "00000000804bbc6a621a9dbb564ce469f492e1ccf2d70f8a6b241e26a277afa2", "key": "bitcoin:TRC", "maintainer": "The Terracoin Foundation ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Terracoin", "negative_fee": false, "segwit": false, "shortcut": "TRC", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 83, "support": {"connect": false, "trezor1": false, "trezor2": false, "webwallet": false}, "timestamp": false, "uri_prefix": "terracoin", "website": "https://terracoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 130, "address_type_p2sh": 30, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno"], "blocktime_seconds": 30, "cashaddr_prefix": null, "coin_label": "Unobtanium", "coin_name": "Unobtanium", "coin_shortcut": "UNO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 50, "High": 160, "Low": 10, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/unobtanium-official/unobtanium", "hash_genesis_block": "000004c2fc5fffb810dccc197d603690099a68305232e552d96ccbe8e2c52b75", "key": "bitcoin:UNO", "maintainer": "choicesz ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Unobtanium", "negative_fee": false, "segwit": false, "shortcut": "UNO", "signed_message_header": "Unobtanium Signed Message:\n", "slip44": 92, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "unobtanium", "website": "https://unobtanium.uno", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 70, "address_type_p2sh": 50, "bech32_prefix": "vips", "bitcore": ["https://insight.vipstarco.in"], "blockbook": ["https://vips.blockbook.japanesecoin-pool.work"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "VIPSTARCOIN", "coin_name": "VIPSTARCOIN", "coin_shortcut": "VIPS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/VIPSTARCOIN/VIPSTARCOIN", "hash_genesis_block": "0000d068e1d30f79fb64446137106be9c6ee69a6a722295c131506b1ee09b77c", "key": "bitcoin:VIPS", "maintainer": "y-chan ", "max_address_length": 36, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "VIPSTARCOIN", "negative_fee": false, "segwit": true, "shortcut": "VIPS", "signed_message_header": "VIPSTARCOIN Signed Message:\n", "slip44": 1919, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "vipstarcoin", "website": "https://vipstarcoin.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 5, "bech32_prefix": "vtc", "bitcore": [], "blockbook": ["https://vtc1.trezor.io", "https://vtc2.trezor.io", "https://vtc3.trezor.io", "https://vtc4.trezor.io", "https://vtc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Vertcoin", "coin_name": "Vertcoin", "coin_shortcut": "VTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/vertcoin-project/vertcoin-core", "hash_genesis_block": "4d96a915f49d40b1e5c2844d1ee2dccb90013a990ccea12c492d22110489f0c4", "key": "bitcoin:VTC", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Vertcoin", "negative_fee": false, "segwit": true, "shortcut": "VTC", "signed_message_header": "Vertcoin Signed Message:\n", "slip44": 28, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "vertcoin", "website": "https://vertcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 33, "bech32_prefix": "via", "bitcore": ["https://explorer.viacoin.org"], "blockbook": [], "blocktime_seconds": 24, "cashaddr_prefix": null, "coin_label": "Viacoin", "coin_name": "Viacoin", "coin_shortcut": "VIA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7000, "High": 20000, "Low": 1000, "Normal": 14000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/viacoin", "hash_genesis_block": "4e9b54001f9976049830128ec0331515eaabe35a70970d79971da1539a400ba1", "key": "bitcoin:VIA", "maintainer": "romanornr ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Viacoin", "negative_fee": false, "segwit": true, "shortcut": "VIA", "signed_message_header": "Viacoin Signed Message:\n", "slip44": 14, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "viacoin", "website": "https://viacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 142, "address_type_p2sh": 145, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.zcore.cash"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "ZCore", "coin_name": "ZCore", "coin_shortcut": "ZCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcore-coin/zcore-2.0", "hash_genesis_block": "695b79c8c234b45b2eeb4722f33373e471c9b686ff78efeb39da95f824a9f81b", "key": "bitcoin:ZCR", "maintainer": "Erick Costa ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 34, "minfee_kb": 1000, "name": "ZCore", "negative_fee": false, "segwit": false, "shortcut": "ZCR", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 428, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcore", "website": "https://zcore.cash", "xprv_magic": 78791432, "xpub_magic": 78792518, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://zec1.trezor.io", "https://zec2.trezor.io", "https://zec3.trezor.io", "https://zec4.trezor.io", "https://zec5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash", "coin_name": "Zcash", "coin_shortcut": "ZEC", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08", "key": "bitcoin:ZEC", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash", "negative_fee": false, "segwit": false, "shortcut": "ZEC", "signed_message_header": "Zcash Signed Message:\n", "slip44": 133, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7461, "address_type_p2sh": 7354, "bech32_prefix": null, "bitcore": ["https://explorer.testnet.z.cash"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash Testnet", "coin_name": "Zcash Testnet", "coin_shortcut": "TAZ", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38", "key": "bitcoin:TAZ", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TAZ", "signed_message_header": "Zcash Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 82, "address_type_p2sh": 7, "bech32_prefix": null, "bitcore": ["https://insight.zcoin.io"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin", "coin_name": "Zcoin", "coin_shortcut": "XZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "4381deb85b1b2c9843c222944b616d997516dcbd6a964e1eaf0def0830695233", "key": "bitcoin:XZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin", "negative_fee": false, "segwit": false, "shortcut": "XZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 136, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcoin", "website": "https://zcoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 178, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin Testnet", "coin_name": "Zcoin Testnet", "coin_shortcut": "tXZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "7ac038c193c2158c428c59f9ae0c02a07115141c6e9dc244ae96132e99b4e642", "key": "bitcoin:tXZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin Testnet", "negative_fee": false, "segwit": false, "shortcut": "tXZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "testzcoin", "website": "https://zcoin.io", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.zel.network"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Zel", "coin_name": "ZelCash", "coin_shortcut": "ZEL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zelcash", "hash_genesis_block": "00052461a5006c2e3b74ce48992a08695607912d5604c3eb8da25749b0900444", "key": "bitcoin:ZEL", "maintainer": "Cabecinha84 ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zel", "negative_fee": false, "segwit": false, "shortcut": "ZEL", "signed_message_header": "Zcash Signed Message:\n", "slip44": 19167, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "zelcash", "website": "https://zel.network", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}] diff --git a/python/src/trezorlib/messages/TxInputType.py b/python/src/trezorlib/messages/TxInputType.py index 8050e2284..baf95b572 100644 --- a/python/src/trezorlib/messages/TxInputType.py +++ b/python/src/trezorlib/messages/TxInputType.py @@ -27,8 +27,6 @@ class TxInputType(p.MessageType): amount: int = None, decred_tree: int = None, decred_script_version: int = None, - prev_block_hash_bip115: bytes = None, - prev_block_height_bip115: int = None, ) -> None: self.address_n = address_n if address_n is not None else [] self.prev_hash = prev_hash @@ -40,8 +38,6 @@ class TxInputType(p.MessageType): self.amount = amount self.decred_tree = decred_tree self.decred_script_version = decred_script_version - self.prev_block_hash_bip115 = prev_block_hash_bip115 - self.prev_block_height_bip115 = prev_block_height_bip115 @classmethod def get_fields(cls) -> Dict: @@ -56,6 +52,4 @@ class TxInputType(p.MessageType): 8: ('amount', p.UVarintType, 0), 9: ('decred_tree', p.UVarintType, 0), 10: ('decred_script_version', p.UVarintType, 0), - 11: ('prev_block_hash_bip115', p.BytesType, 0), - 12: ('prev_block_height_bip115', p.UVarintType, 0), } diff --git a/python/src/trezorlib/messages/TxOutputType.py b/python/src/trezorlib/messages/TxOutputType.py index 466a6ce62..e6bf62d57 100644 --- a/python/src/trezorlib/messages/TxOutputType.py +++ b/python/src/trezorlib/messages/TxOutputType.py @@ -24,8 +24,6 @@ class TxOutputType(p.MessageType): multisig: MultisigRedeemScriptType = None, op_return_data: bytes = None, decred_script_version: int = None, - block_hash_bip115: bytes = None, - block_height_bip115: int = None, ) -> None: self.address = address self.address_n = address_n if address_n is not None else [] @@ -34,8 +32,6 @@ class TxOutputType(p.MessageType): self.multisig = multisig self.op_return_data = op_return_data self.decred_script_version = decred_script_version - self.block_hash_bip115 = block_hash_bip115 - self.block_height_bip115 = block_height_bip115 @classmethod def get_fields(cls) -> Dict: @@ -47,6 +43,4 @@ class TxOutputType(p.MessageType): 5: ('multisig', MultisigRedeemScriptType, 0), 6: ('op_return_data', p.BytesType, 0), 7: ('decred_script_version', p.UVarintType, 0), - 8: ('block_hash_bip115', p.BytesType, 0), - 9: ('block_height_bip115', p.UVarintType, 0), } diff --git a/python/src/trezorlib/tx_api.py b/python/src/trezorlib/tx_api.py index 51be146c8..04d7f2371 100644 --- a/python/src/trezorlib/tx_api.py +++ b/python/src/trezorlib/tx_api.py @@ -79,13 +79,6 @@ def _json_to_bin_output(coin, vout): DECIMALS = 6 if is_peercoin(coin) else 8 o.amount = int(Decimal(vout["value"]) * (10 ** DECIMALS)) o.script_pubkey = bytes.fromhex(vout["scriptPubKey"]["hex"]) - if coin["bip115"] and o.script_pubkey[-1] == 0xB4: - # Verify if coin implements replay protection bip115 and script includes - # checkblockatheight opcode. 0xb4 - is op_code (OP_CHECKBLOCKATHEIGHT) - # <32-byte block hash> <3-byte block height> - tail = o.script_pubkey[-38:] - o.block_hash = tail[1:33] # <32-byte block hash> - o.block_height = int.from_bytes(tail[34:37], "little") # <3-byte block height> if coin["decred"]: o.decred_script_version = vout["version"] diff --git a/python/tests/test_tx_api.py b/python/tests/test_tx_api.py index 4d9125688..40250b36c 100644 --- a/python/tests/test_tx_api.py +++ b/python/tests/test_tx_api.py @@ -23,7 +23,6 @@ from trezorlib import coins, tx_api CACHE_PATH = os.path.join(os.path.dirname(__file__), "../../tests/txcache") TxApiBitcoin = coins.tx_api["Bitcoin"] -TxApiZencash = coins.tx_api["Horizen"] def load_tx_json(coin_name, txhash): @@ -68,18 +67,6 @@ def test_tx_api_gettx(): ) -def test_tx_api_current_block(): - height = TxApiZencash.current_height() - assert height > 347041 - - -def test_tx_api_get_block_hash(): - hash = TxApiZencash.get_block_hash(110000) - assert ( - hash.hex() == "000000003f5d6ba1385c6cd2d4f836dfc5adf7f98834309ad67e26faef462454" - ) - - def test_tx_api_dash_dip2(): dash_data = coins.by_name["Dash"] From adea7d6b3506f6b46e002910173a6baf936bf10e Mon Sep 17 00:00:00 2001 From: matejcik Date: Fri, 13 Mar 2020 13:09:02 +0100 Subject: [PATCH 25/45] all: make timestamp mandatory on timestamp-enabled coins --- core/src/apps/wallet/sign_tx/helpers.py | 12 +-- legacy/firmware/fsm_msg_coin.h | 1 + legacy/firmware/signing.c | 6 ++ .../device_tests/test_msg_signtx_capricoin.py | 94 +++++++++++++++++-- .../device_tests/test_msg_signtx_peercoin.py | 91 ++++++++++++++++-- 5 files changed, 185 insertions(+), 19 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index 5ff66a414..e70bf5001 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -175,9 +175,9 @@ def sanitize_sign_tx(tx: SignTx, coin: CoinInfo) -> SignTx: tx.expiry = tx.expiry if tx.expiry is not None else 0 elif tx.expiry: raise SigningError(FailureType.DataError, "Expiry not enabled on this coin.") - if coin.timestamp: - tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 - elif tx.timestamp: + if coin.timestamp and not tx.timestamp: + raise SigningError(FailureType.DataError, "Timestamp must be set.") + elif not coin.timestamp and tx.timestamp: raise SigningError(FailureType.DataError, "Timestamp not enabled on this coin.") return tx @@ -197,9 +197,9 @@ def sanitize_tx_meta(tx: TransactionType, coin: CoinInfo) -> TransactionType: tx.expiry = tx.expiry if tx.expiry is not None else 0 elif tx.expiry: raise SigningError(FailureType.DataError, "Expiry not enabled on this coin.") - if coin.timestamp: - tx.timestamp = tx.timestamp if tx.timestamp is not None else 0 - elif tx.timestamp: + if coin.timestamp and not tx.timestamp: + raise SigningError(FailureType.DataError, "Timestamp must be set.") + elif not coin.timestamp and tx.timestamp: raise SigningError(FailureType.DataError, "Timestamp not enabled on this coin.") return tx diff --git a/legacy/firmware/fsm_msg_coin.h b/legacy/firmware/fsm_msg_coin.h index 24ccee89d..b3b662019 100644 --- a/legacy/firmware/fsm_msg_coin.h +++ b/legacy/firmware/fsm_msg_coin.h @@ -107,6 +107,7 @@ void fsm_msgSignTx(const SignTx *msg) { _("Expiry not enabled on this coin.")) CHECK_PARAM(coin->timestamp || !msg->has_timestamp, _("Timestamp not enabled on this coin.")) + CHECK_PARAM(!coin->timestamp || msg->timestamp, _("Timestamp must be set.")) const HDNode *node = fsm_getDerivedNode(coin->curve_name, NULL, 0, NULL); if (!node) return; diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 4205f22b5..01d93f885 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -1250,6 +1250,12 @@ void signing_txack(TransactionType *tx) { signing_abort(); return; } + if (coin->timestamp && !tx->timestamp) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Timestamp must be set.")); + signing_abort(); + return; + } if (tx->inputs_cnt + tx->outputs_cnt < tx->inputs_cnt) { fsm_sendFailure(FailureType_Failure_DataError, _("Value overflow")); signing_abort(); diff --git a/tests/device_tests/test_msg_signtx_capricoin.py b/tests/device_tests/test_msg_signtx_capricoin.py index 20bd4f7d1..a761e2b39 100644 --- a/tests/device_tests/test_msg_signtx_capricoin.py +++ b/tests/device_tests/test_msg_signtx_capricoin.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path from ..tx_cache import tx_cache @@ -53,17 +54,96 @@ def test_timestamp_included(client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) - with client: - details = messages.SignTx(version=1, timestamp=0x5BCF5C66) - _, timestamp_tx = btc.sign_tx( + details = messages.SignTx(version=1, timestamp=0x5BCF5C66) + _, timestamp_tx = btc.sign_tx( + client, + "Capricoin", + [inp1, inp2], + [out1], + details=details, + prev_txes=tx_cache("Capricoin"), + ) + + # Accepted by network https://insight.capricoin.org/tx/1bf227e6e24fe1f8ac98849fe06a2c5b77762e906fcf7e82787675f7f3a10bb8 + accepted_txhex = "01000000665ccf5b025f23e76913e3e53bc20a6c5db1607cc162d197c7dd791689da4ee81cc806f53b000000006b483045022100fce7ccbeb9524f36d118ebcfebcb133a05c236c4478e2051cfd5c9632920aee602206921b7be1a81f30cce3d8e7dba4597fc16a2761c42321c49d65eeacdfe3781250121021fcf98aee04939ec7df5762f426dc2d1db8026e3a73c3bbe44749dacfbb61230ffffffff8c5e2c3ff2a6758e423f6d99f8ecf9f856e0e8ba29276dd7ff2d1b1f41e6a6f3010000006a473044022015d967166fe9f89fbed8747328b1c4658aa1d7163e731c5fd5908feafe08e9a6022028af30801098418bd298cc60b143c52c48466f5791256721304b6eba4fdf0b3c0121021fcf98aee04939ec7df5762f426dc2d1db8026e3a73c3bbe44749dacfbb61230ffffffff01a0782d00000000001976a914818437acfd15780debd31f3fd21d4ca678bb36d188ac00000000" + assert timestamp_tx.hex() == accepted_txhex + + +@pytest.mark.altcoin +@pytest.mark.capricoin +@pytest.mark.skip_ui +@pytest.mark.skip_t1 # T1 support is not planned +def test_timestamp_missing(client): + inp1 = messages.TxInputType( + address_n=parse_path("m/44'/289'/0'/0/0"), prev_hash=TXHASH_3bf506, prev_index=0 + ) + out1 = messages.TxOutputType( + address="CUGi8RGPWxbHM6FxF4eMEfqmQ6Bs5VjCdr", + amount=3000000 - 20000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + details = messages.SignTx(version=1, timestamp=None) + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( client, "Capricoin", - [inp1, inp2], + [inp1], [out1], details=details, prev_txes=tx_cache("Capricoin"), ) + assert e.value.failure.message.endswith("Timestamp must be set.") - # Accepted by network https://insight.capricoin.org/tx/1bf227e6e24fe1f8ac98849fe06a2c5b77762e906fcf7e82787675f7f3a10bb8 - accepted_txhex = "01000000665ccf5b025f23e76913e3e53bc20a6c5db1607cc162d197c7dd791689da4ee81cc806f53b000000006b483045022100fce7ccbeb9524f36d118ebcfebcb133a05c236c4478e2051cfd5c9632920aee602206921b7be1a81f30cce3d8e7dba4597fc16a2761c42321c49d65eeacdfe3781250121021fcf98aee04939ec7df5762f426dc2d1db8026e3a73c3bbe44749dacfbb61230ffffffff8c5e2c3ff2a6758e423f6d99f8ecf9f856e0e8ba29276dd7ff2d1b1f41e6a6f3010000006a473044022015d967166fe9f89fbed8747328b1c4658aa1d7163e731c5fd5908feafe08e9a6022028af30801098418bd298cc60b143c52c48466f5791256721304b6eba4fdf0b3c0121021fcf98aee04939ec7df5762f426dc2d1db8026e3a73c3bbe44749dacfbb61230ffffffff01a0782d00000000001976a914818437acfd15780debd31f3fd21d4ca678bb36d188ac00000000" - assert timestamp_tx.hex() == accepted_txhex + details = messages.SignTx(version=1, timestamp=0) + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, + "Capricoin", + [inp1], + [out1], + details=details, + prev_txes=tx_cache("Capricoin"), + ) + assert e.value.failure.message.endswith("Timestamp must be set.") + + +@pytest.mark.altcoin +@pytest.mark.capricoin +@pytest.mark.skip_ui +@pytest.mark.skip_t1 # T1 support is not planned +def test_timestamp_missing_prevtx(client): + inp1 = messages.TxInputType( + address_n=parse_path("m/44'/289'/0'/0/0"), prev_hash=TXHASH_3bf506, prev_index=0 + ) + out1 = messages.TxOutputType( + address="CUGi8RGPWxbHM6FxF4eMEfqmQ6Bs5VjCdr", + amount=3000000 - 20000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + details = messages.SignTx(version=1, timestamp=0x5BCF5C66) + + prevtx = tx_cache("Capricoin")[TXHASH_3bf506] + prevtx.timestamp = 0 + + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, + "Capricoin", + [inp1], + [out1], + details=details, + prev_txes={TXHASH_3bf506: prevtx}, + ) + assert e.value.failure.message.endswith("Timestamp must be set.") + + prevtx.timestamp = None + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, + "Capricoin", + [inp1], + [out1], + details=details, + prev_txes={TXHASH_3bf506: prevtx}, + ) + assert e.value.failure.message.endswith("Timestamp must be set.") diff --git a/tests/device_tests/test_msg_signtx_peercoin.py b/tests/device_tests/test_msg_signtx_peercoin.py index 1d258a356..8118147b7 100644 --- a/tests/device_tests/test_msg_signtx_peercoin.py +++ b/tests/device_tests/test_msg_signtx_peercoin.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path from ..tx_cache import tx_cache @@ -42,9 +43,37 @@ def test_timestamp_included(client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) - with client: - details = messages.SignTx(version=1, timestamp=0x5DC5448A) - _, timestamp_tx = btc.sign_tx( + details = messages.SignTx(version=1, timestamp=0x5DC5448A) + _, timestamp_tx = btc.sign_tx( + client, + "Peercoin", + [inp1], + [out1], + details=details, + prev_txes=tx_cache("Peercoin", allow_fetch=False), + ) + + # Accepted by network https://explorer.peercoin.net/api/getrawtransaction?txid=f7e3624c143b6a170cc44f9337d0fa8ea8564a211de9c077c6889d8c78f80909&decrypt=1 + accepted_txhex = "010000008a44c55d013d7d3531b0881f244d1f353c208fd00cb18bd152a054460aa4eed815d69ab241000000006a473044022025c0ea702390c702c7ae8b5ea469820bea8d942c8c16439f8f0ba2e91e699efc02200db9b0a48fa2861695fa91df4831a4c7306587e5d2dc85419647f462717bc8f001210274cb0ee652d9457fbb0f3872d43155a6bc16f77bd5749d8826b53db443b1b278ffffffff01905f0100000000001976a914ff9a05654150fdc92b1655f49d7f2a8aaf6a3a2a88ac00000000" + assert timestamp_tx.hex() == accepted_txhex + + +@pytest.mark.altcoin +@pytest.mark.peercoin +@pytest.mark.skip_ui +def test_timestamp_missing(client): + inp1 = messages.TxInputType( + address_n=parse_path("m/44'/6'/0'/0/0"), prev_hash=TXHASH_41b29a, prev_index=0 + ) + out1 = messages.TxOutputType( + address="PXtfyTjzgXSgTwK5AbszdHQSSxyQN3BLM5", + amount=100000 - 10000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + + details = messages.SignTx(version=1, timestamp=None) + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( client, "Peercoin", [inp1], @@ -52,7 +81,57 @@ def test_timestamp_included(client): details=details, prev_txes=tx_cache("Peercoin", allow_fetch=False), ) + assert e.value.failure.message.endswith("Timestamp must be set.") - # Accepted by network https://explorer.peercoin.net/api/getrawtransaction?txid=f7e3624c143b6a170cc44f9337d0fa8ea8564a211de9c077c6889d8c78f80909&decrypt=1 - accepted_txhex = "010000008a44c55d013d7d3531b0881f244d1f353c208fd00cb18bd152a054460aa4eed815d69ab241000000006a473044022025c0ea702390c702c7ae8b5ea469820bea8d942c8c16439f8f0ba2e91e699efc02200db9b0a48fa2861695fa91df4831a4c7306587e5d2dc85419647f462717bc8f001210274cb0ee652d9457fbb0f3872d43155a6bc16f77bd5749d8826b53db443b1b278ffffffff01905f0100000000001976a914ff9a05654150fdc92b1655f49d7f2a8aaf6a3a2a88ac00000000" - assert timestamp_tx.hex() == accepted_txhex + details = messages.SignTx(version=1, timestamp=0) + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, + "Peercoin", + [inp1], + [out1], + details=details, + prev_txes=tx_cache("Peercoin", allow_fetch=False), + ) + assert e.value.failure.message.endswith("Timestamp must be set.") + + +@pytest.mark.altcoin +@pytest.mark.peercoin +@pytest.mark.skip_ui +def test_timestamp_missing_prevtx(client): + inp1 = messages.TxInputType( + address_n=parse_path("m/44'/6'/0'/0/0"), prev_hash=TXHASH_41b29a, prev_index=0 + ) + out1 = messages.TxOutputType( + address="PXtfyTjzgXSgTwK5AbszdHQSSxyQN3BLM5", + amount=100000 - 10000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + details = messages.SignTx(version=1, timestamp=0x5DC5448A) + + prevtx = tx_cache("Peercoin", allow_fetch=False)[TXHASH_41b29a] + prevtx.timestamp = 0 + + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, + "Peercoin", + [inp1], + [out1], + details=details, + prev_txes={TXHASH_41b29a: prevtx}, + ) + assert e.value.failure.message.endswith("Timestamp must be set.") + + prevtx.timestamp = None + with pytest.raises(TrezorFailure) as e: + btc.sign_tx( + client, + "Peercoin", + [inp1], + [out1], + details=details, + prev_txes={TXHASH_41b29a: prevtx}, + ) + assert e.value.failure.message.endswith("Timestamp must be set.") From ffdb299c613d12186afeb96d718643e6e155f1b2 Mon Sep 17 00:00:00 2001 From: matejcik Date: Tue, 17 Mar 2020 11:40:28 +0100 Subject: [PATCH 26/45] all: drop Capricoin support [NO BACKPORT] --- common/defs/bitcoin/capricoin.json | 51 - common/defs/bitcoin/capricoin.png | Bin 13847 -> 0 bytes common/defs/coins_details.json | 1228 ++++++++--------- common/defs/support.json | 5 - common/defs/wallets.json | 3 - common/protob/messages-bitcoin.proto | 4 +- core/src/apps/common/coininfo.py | 26 - core/src/apps/ethereum/tokens.py | 2 + python/docs/transaction-format.md | 4 +- python/src/trezorlib/coins.json | 2 +- python/src/trezorlib/tx_api.py | 6 +- python/tools/build_tx.py | 2 +- tests/REGISTERED_MARKERS | 1 - .../device_tests/test_msg_signtx_capricoin.py | 149 -- tests/ui_tests/fixtures.json | 1 - 15 files changed, 614 insertions(+), 870 deletions(-) delete mode 100644 common/defs/bitcoin/capricoin.json delete mode 100644 common/defs/bitcoin/capricoin.png delete mode 100644 tests/device_tests/test_msg_signtx_capricoin.py diff --git a/common/defs/bitcoin/capricoin.json b/common/defs/bitcoin/capricoin.json deleted file mode 100644 index fb59cd931..000000000 --- a/common/defs/bitcoin/capricoin.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "coin_name": "Capricoin", - "coin_shortcut": "CPC", - "coin_label": "Capricoin", - "website": "https://capricoin.org", - "github": "https://github.com/Capricoinofficial/Capricoin", - "maintainer": "Jozef Knaperek ", - "curve_name": "secp256k1", - "decimals": 8, - "address_type": 28, - "address_type_p2sh": 35, - "maxfee_kb": 2000000, - "minfee_kb": 1000, - "signed_message_header": "Capricoin Signed Message:\n", - "hash_genesis_block": "00000d23fa0fc52c90893adb1181c9ddffb6c797a3e41864b9a23aa2f2981fe3", - "xprv_magic": 76066276, - "xpub_magic": 76067358, - "xpub_magic_segwit_p2sh": null, - "xpub_magic_segwit_native": null, - "bech32_prefix": null, - "cashaddr_prefix": null, - "slip44": 289, - "segwit": false, - "decred": false, - "fork_id": null, - "force_bip143": false, - "default_fee_b": { - "Low": 1, - "Economy": 7, - "Normal": 14, - "High": 20 - }, - "dust_limit": 546, - "blocktime_seconds": 60, - "uri_prefix": "capricoin", - "min_address_length": 27, - "max_address_length": 34, - "bitcore": [], - "blockbook": [ - "https://blockbook.capricoin.org", - "https://blockbook2.capricoin.org", - "https://blockbook3.capricoin.org", - "https://blockbook4.capricoin.org" - ], - "negative_fee": false, - "cooldown": 100, - "consensus_branch_id": null, - "extra_data": false, - "timestamp": true, - "confidential_assets": null -} diff --git a/common/defs/bitcoin/capricoin.png b/common/defs/bitcoin/capricoin.png deleted file mode 100644 index 005e907bc6ce8084ca4101a629d59bee78711c8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13847 zcmV+yHt5NTP)uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00v@9M??Vs0RI60puMM)00009a7bBm z000XU000XU0RWnu7ytkO2XskIMF-*r6c8;Ff6<))001BWNklj&b^y0H@i25@-m;#B-z}(=bZUH^Ymw)Blrr8C66A&s1sl6@_&mTnl2H- z0$~FN=m=U*1f~L`fc`)v`|BxS6R;R~7a`_@NC7@*2d&-FC%>Wky62ZM#Fu&VrH>uL z$P-@J4EnZqcw;O=p^tQaP!FHpPSSD8NXHpSo-9V zLJB*owSNHUtAO1$KZ5S%@$?Q@VnNrR4dQAcj8~O*k|U3OM*qJiz=~(T$M7Tm1;FyB zPaFUoskQnsFtN}*Duuu>z%m3<3N+yR8c%6_rO{cnDkVrMFr~mS1VVuFHLkDmeNb9& z4R6g8Lf!#9GvcU6*LPpbSDpYXpFb0PpJ7M*gZGYtsvmv#=fGK@$M*_&_D_kRC}t1| z88o+htgg+ld_#tH^$v|~9;vh@<0>3aqm<4PKwz7KkR^$P1?5F111oJt3ZISovcVTbAVuH{fjjE%HA$7 zWgsS`fcCV{({I=D^jn*#ZFGo+3?gBPAp_ebpD*9n2UqLFZNM?Mh%WaO{ zw~B91>qjhX1ftFmDAhZEiaceIAGxWTpO_G46)xtUlR!es`h zT(OQ-n>;L|k3|beI|`*VgQ}uT9#hKq4jaL+nivgDX~>GRJfjiBjZGi^^TzR)Y}8*G z2dw|^Zy7N4N|rx)k_h$N>2JXIx3udGLlTZ!-2C@>Jp0xf3>n;dTdaPqp*(JI%LP@8 ztu{L>A+5nEH#q*1wXE3aVVPTZP0;uXj+i!xi_e-wI^p8`syBr0OK)0sW~8Q6!ypDs zy>gpy+-h%gUQk(ym+3OTeW2YwElFN6a& z&ida`8t-9XQWgWz*`$m{ELPUG^7spjdEh?_DJcqJNU=je&vC$*{#`}TwsJrZ1+O&C zZ5h6M)Gi!<@Mwlr7n4l6-NDMOd5*w5x&NM*Ecx6ypl<%%0BoB5hcUu19+yUFk~Bg{ zBP6naBaIO8l44$(wT{bfdYwm~TTEqXWQTw+I(BRCztrdN^aY9(RF+0~bmn3%yXkda znzf#INim(**lEp^g<(9tY4#sRcgCpDQSd%#T=XF2V@{!N?u<%=@l-Y>+;vO%ig0m+ zzdSOF`yQEvZ5b5BER@#UB_04Wt|sj$(izZx;0gDLGDtyFtIwt;kD{m~5|Y^FW>K|O zT%a{YF^h(#B-h;jI;%G(Ir}?%kZw&Oj2`=T9Po7A+!^2KH{qQ699BC_1huYunc|@b z(!TOVJDsfkFz{+c7r7vWz=(#p?)GPS{NEo^Ravynz$+D)ltOD<1!Zx;#E}v99vx!m z;UQ`&O)5=+(A^g!Xi$nZn>;>QlHtD#Qq2D>P1*z76nLKAChm|zu&KU{6OP$~%P%+_ zKbZ+EyDk^ffcQ8Zt=>I8>|iH{*>)44z4pJvtEbYk>a{3d;t9})bpM)ZnKUI*{ObDq zdFQ=PsVpzT@7=S>I}#~{Z3>1BvKcwZ;v2g}*n3=rs{U5sd1W+Y6k37mMWzZVAS@s( z!PhKWp5gU5Nj_SZ;j^_4we=q1P@r@R-6MvS)Hk*X}gb^nS$)0pzO?AJ3`@aamzAuHG&1R_E`B(7nyB|u}R;`Jik?h>79SQ7dy;7EFLl%L+mz!^yO7lKAbf0sD3N zk`zcY%oSJN%o9&OO+`gHssNcU1URlD7Bx8epi+KvObH|vo~sK_K{p(M+;MgY}qFvq?9x?G;-XrM{(WN7o)s1x+e?0i4osF6t7Y_ zObhY@lybBGNL+)E`ynKqr)5X@^SzJq-19F|QBhV9_)-d*S{z0UjxggF!}-aP6{t3i z@Amf$M2JU-x0DDJm+;c<%WZ`SZPxV%ZV8{~*XrY|u8YuFg*W-;^ld+$~0Rr2*|4-%*8eh7`=+ z;PSKotwsB~Apb!K!L2v{j@`x&&trP)77z!AOLv-;!?sTml&JmCly>Yf;OOqVG3^P? zz2Mg@Ua}P1whJOaD&=s(@%wP)IeVfS)`8c8cH2Ouz;`+kK_Rlql(Z>$Z%LYeJk`wm z3sZm~8kU5tARMi`De7E=Q)_TNO){-$cw#HuL`eQ_4x45UbwZD@X^l*Umm%2p$y>?Z94XqD683aQ7q3 zxZ@x6tE}jg1EiEB5=l-v@d$qTlcSKSI+RlnnFeqg(Ow()3Gf}H_7PE7x;o9v^OHRC zVk;}xyOft0fj7IAmQl_}QW_eXeM;hz;}0t4(A{E89v(t^f%w~^f({Edv@3peV=XJ! zI>e%Ki}x2oP*>N$`9JwS7oKw>$+q^*`YE_vQfp3(SMN5nR{}IGeG)TPZEHXCgg_k8 z`Lj^SX8yAEeD{oBQC3!55cu`=4V-fF30!sA4>435+Gz);1?@C|Qx8rPxGhMLBI#$i z_0jdbF}t00n_R-Sz%;}TF-L_6yz4|tQBi8J*Z2rOKcSp~#Rh&xZJ7v`U~Rk4C3kFM z$qEO{61|F{rlwXNxbGS!>@<)}#_4uB{j4xT$9aibr)=c0TjqeKWl!xRgnXxa{x4o$ z#9=4>me#gppWq82Xl+X{ecDv+oN+B=TG7e}?Sj`1ZY$bpf=oTqZ{pMXdM>*9L+YDd z5QUk7+cSI>m`Ycl+m9p0Mese{YZ&6?RcS82Wh1hW2NOb2QXJ*Ehpwcxv8@Xi1ip=$ zR<`re@APT~`I)vG{B#SQr)i|Q?}6uOYHlw`@w%?Zkb%|w;pVH+>88M2lm^HUm_=Zh zBSZb6co46w5`6p2SE+Ayg7T6A!PhzvFS)rjoMK2p+EKjyQ35Q{tMM?q(dDPt))r*j zYOQH(YUjQOp2srMbjQ)pwEaG>8M^N6-vCfM>y{~grg@s5ZYDQXrkTe2T4ug7r@$bV z#sWxEreZ!W0mu#hiCJHbN@+YMYPx5B}A}m6DdW?QAh*IiX_$L zCIkAJ)Kr*MmPkUDz;QM0DTV8AAukMMJk420m2v$!Rd`92_kKoL^7Mivr(L#|qL}QG z?C(q5&3t7JjrFyt%w`<@bTfXYd0OqPTc&iz+yrQ?n-fSHFMYM}(mldUA1$n9`RWEN zQ}$_CD_?Wu!IRm0dVq?m&tBvDbLBa^kte{^q*1#Ko__s`E;>N_ znd7yeifcbbZu(w|WP3X=&ss+~Wb{e-rdF5#Icp?gRgX$-fJ_}Yjo`I`pGFAH>+dh* z=38#3s3_j6m+5+%-(5O^SMJ%3Z;dJaj4L*{`_chCeElE< zg5O## z`_GxCX@~v|9MM_H6~#<$dvpblyt2=UW5$=?TMVOL*Ny-LsyPIcBGC|IIT4 z>iZ*=n;O&cWFpY$+BJFVty+p>X0KL;5YW=D_|s+8=#4EPY_y{h$^+#gw2NbCF1+M+ zN=ozl5YmurSig}gF29h|j@gZ{Za}pe5c0sunK?O=XDgCD0(@5^Tpc8FL{F)emV)2> zvw@j!wK1sw_Ja>l95Z?9%?(^|On;Q?1tw|7vh^4t^hn@S6F|9{kwP${^95{E@ZXP{ zNMojnFzEnwKSj@DN%dg${&hmL{rqM#v-UK*uG&xwoE~Z?zH$Nwy)8x5bgn zX#P9Dj!8R3aojFXFhXkr0xW&(NK>oyo}D8Yf%q|a{Ov~KQKL^AJC)HKzF#~zu%*@J z!cDCJpXJMvy!y^(Y$;OQ*4EB1F1>^!4%i)(gO*{if@~WowDOSnXcP{bl&e@%@35-Y zA(>FvAwf-*#m@bLs_L-TeU>;1K*bDx^|wtt`eF-JWoE$%nL_=Pc+}vDw;S1a7n4ot zE*6&n_FVedkuy!@IX19o_cFXhQm|lE2HT+52h$oViVY?W4cfsP#Wba-uS4E zH5*by^C&j0HB+bV!D%NSiqQUMr;SjM1JVj<3R*pvcbC@k;_K^p=c8uooBhq6OqSM> zh+y|I5f0ub&H=kds3|q@(>;S@h9PKCnqS?yk>}rPrGL5ECAzw!hHb!tRT+}WBy@|c zYOVJKY*YKL4SGuFY?NgPK3$nje#^coJ*38BL}h0^vDq}qnDEGpb$R0`hLj{y4wqkY z2C;}hdw$j&k%8H&H6mKZr%Ri-;g7E~cm6tj6+}h*l^Q+M;R5C_OEY^>iU$YS{P5^f zj{asbUY*zB4+@}JX)e3Fj`!v#sVMz?z|RE&m4*eYQjF*?aXSb9G*bXuDnDJLe5XQt zF4}X@o`Z?Q$Ez|0RhJotV5b_J(jp^|Y}YJUlV;)abdO5rz-&!%_UQ*Od~gJvZUyaS zg>}|xv!l#i*20OWU&+ExYYEv#2N&sXGq)LRQxFSFHZ^$s`pFfr?5l zynQ3@f1D(2i_b0hym>RjCo40UI34(E&qeu8h4M2s66K9Td+6XeEn2%M-(_vRUywo) z0>+Q9^JlVR1`o|_qNFH~9?^o3WpKgw$D!-jWPOE9kk3XT49TY}>N)C|Gbk=9+Ui;! zAs`kK{QHd-{`f!xMp&YXBxhW=p7%aU5w^dW1hi5FSo&@UzFIrMW>em1Q!8&=cNv+^ zKx4asuSKuHv0Pkb(#~OUbzb@O(uc`Fyy&jrG`2Wga^@&#*?`uWY-K@^$`hd&we=~! zciImbIH3PF)fnX#AF?D5zSzRBAt4@`+049UX-eZe*4pVc@~WXRp-E@Fe4h6%rdIwg zUDUIHLNA6pUYOaH@LJI>SOb{lR zHh;MN&q!%>oCDjQT!8PxjrZ1($|#DXUmWIM$5RL)DL`w^4*nIryMn3pp&Xx{H zZ1s>5JYR2BCESi00!TQJax@XUN0I6vlc489SI^KDq@BJO?8r)wY3ct6-W6xjI<+2yJEAMzIjxcAd0(_%=N+X z`p!Z4zNTM=8R*UKb*d89*14EQe$h3!%0vnkWXb$A+HFH%;utn_KU{#hl~s0M*&)F7 z0!%x~@;XH3S}V{F_yUc@ zb1XjlYy-2!UL57FM;kj z&;B(U!U(Kv-8Bp&g|u9xNp4DMVo0M;$43*Sd()1}A9*wcwvnHVzOQjy)irdX6lf2j z(o`0k+jXkuD~G)RLmJ3VI3rDjv|K3-GbyD-ZVJP~vMkJObBtcY5K_?8s`6Ku3MeZw z@&@u;U$ZHpdfMaK$5t*Qhla^GUk?K4tj@En0Nc)3OT$b`q}?iv;6q_p2x()7ENrW9 zDP%}NU85Hi`s?noUKmtm;d%LG;@VAKw_P4Ybxf_9G&Z{Bs%L0$1n|8Q=h-;7e_H=REV^zddTvSCHQDj3dfY)h#Z_Bo-{m4 zO+TBjixdjml1Rt`BSdGcr4iaBG3<3+Ilv+s4HFB?K1GlK8rv04!tYsPo>EMm5G9@I z8IQM3!MtT@nle73oA%dQGImg$sT0d~m>$p?GLHUIl)46DVM#O+Mo6nG2N?ERDUHy= z&gWl+5h5N9QyjDUuC338{a37WdlXjrK8zh|6OYQg-Fc)GJo!o+GA0ANSBR{oU?B+c z^RsrtlzO|v5gG`E1ScO}LUX&H*D?IODNr15Joxtu*i_$) z+{XTWQbH=DIPI`fesOXIGk!UM)f?Q7@|G`R7*bGCY!i({>5j8BL!U???Il6)gK)<* ztT02XV+GY|DlPbAWu_;$2+&ENlMXATHIb(RO$S|gZg`*pqr?tOGb4mB<6xJgtO|x# zRP+2ZcaY9F1)aj_e*N~8;*29o`O&duc+EZsj*alQYX;HS_Qi!mrGO#Tv24$Y&NGCN z_7W-V=mu$q8-m6Z!SuAvgi)1UQ)s=!gO+V@X>9TH#^Xm-TTC1o?p_su28yGC2VZL8 z(=|RuD3S%g3__KNP$gOxGiqQpPd@rrcHeypzVc~L1l8H1Q%ize3xgo=rAcKJ1FJ3m zcwsdcpIV7mAEYGxl;XhA5pKSy`U?q3i>%2#VN@j^Hk~n+X1GDv(GA8$XYMbhw5JPc z?L&5l1M1_nh;??iP7UTQ-QVxZ_Q0%nWAT2zz{56<8Z(} zg9wMpAlwfTu7XenSaBdkSy`L|zd4m%$4?{@4O6?JmW_2Sv?W{;DW612lX4WcZ7^+O zlrxVm=YnsSvg<$_zg=~y57xeBbdAOE5n-Nwqb*2Fer~%z*d3RgHifh+$>E!w?+9t$ zZyHwAL5NwvK{@|lYly_7Oc+_ooF#Rby;Uv)jcq<3EzdA%kljPw3IWr1jqp&7#m0KC zN0qSvK3dSsJ>s$P`T9VF%c$?CN$NHo@A zn@I*1JJb|=giwUCK85e(KVIa!nuErMx&PWh9DU(x23A|2i{Ih+ipit<5s8=3?j!>) z-5g_?h1QN7xbKyoFru@h8P(E?BF!j<6{S6G@SVfP)7F;mGb|AaNoKy$Mk-H>POV{Z zwap=W#VJb%|P+S>gc?sEtMt!-&eI&?hkX#*pRZ5CrKjOeU^ z`(Eiu0BMGoN;9%tnh|o-RTkgaV>Gd7-*I`%gpZeJnDbc%!{~{!YWMl^QKby5vhe(# z_PA1-fieml*+dtl*-H#yba3^h{f|^i24PF~M(}Z@LQEm&qo5WWcH2zix5Pe@W zwpen{uLcka%N<&n1rU$g?6b#cTxHQ2+W_nEQpiSev@n(mBebZSl0X_^jyYs9t?lVP z{ejXV$#4Er2jxbO{D2l%EWi^IzP+iZ#uMNIU>ux!@;* zqfMCxa2mjELc8tYr$FUSTIRQg3|nH9nRyw|_hGN$A#S;_f4+m(+dNv^(;R!qB%~4U z=p2@t!U!$W!q`lJn%&R!gkirf%#hn*qgo-_Q;O41*q3zL?b9K$Ou@z`kAFVhj8W9n z(Dpse(2(Sw-wvU^$;)fvDy4`W1VTFq;Rjb1s)MMW zhO{kscb&tDm#^WcH*H|v(lp0ix|&px%p1H_8V30A(p|#{Z)cHiI_+}se&dNnV@SiM zGo}cuT^QEmU6NPp=iI@7$v>uH;p6`Sj_itt=AF6Ax$35eunO?wmC_uvSDfq4=!fcZ z1T-6JFl>kvaq|=P{PXd}#N(kY?l>U?T5Ia-TPQ1wGkxk%CXS9Uq}Zn@>JhgTrVM&S zBppp#N>SJ3F>h6xw`M2#Y^_5@nc0z-NIRP93X{7ot6^BNfuEPt^%pNS*L(}Cofid~NXb`EnBAQbAC!{{myM|K54vfKFKj2KqUsx_Me z+qPHtU-0q=2@ahaXWFn(_TfdgcR~{&D(Mmgenoo;yd-uU{!j zDPDYY1uwiVh=fhz5lO_(Huct!aTV=pO)?!+^o2u`>TJDgj=o__u&K%8XMd>W=ATuw zb6nEh`t%iyEHRjIX*CzzSj*~-F0rsESV1eT88N(uDdR>UgweAOBIq37fq4%!8$NyF zEnr%gaB9Tn;b;EK9e;m5Z+(9cnW{9=kYMKR!-%x2Tzm75W2z!l0g(YvG?@37y8Pfr zmlFwxFwLz?#OrQ3h(g15p06p18~p960SvbDM}4J$L`ZVdiXWeG z7$+UMH|dnq{o}VQ#vZqCm;3Zwl=_9%iq12cNb$X6_ob{fh7jG$VtYD?l3wIsRrmnV}>BoJEB8N&cm@5B0qkM)QI^cb7w-+wspD7j`GB52l8R21Q^ z2VY~x-(R9%d2s4EF9eH0$tuO?|V^z$%Lq4=mwZlVXe?VuPc$d@ewP5tS^h^Z3dC zZlJc#AsX(ZSw~|l=bv#f=brLS+S*dx&V-Q!POO@6YVXZDIuXFszT2~14H{nxF8u97 zEM8t)aPd?sqd0VWH8)(mFFI3>C>jEGC7AIb4Be3ub`dItO4pO|HuCYJ1>FDe9A19E zo{Xc3h6SPQ;p{ENr91_W8=R^a0w(Sh;ml)8nK~vyOa*DwKHJrVBy-j}ocsHA1v%G_ z>oIDlYHt1YDH!?NuRkRW>x8Nar}o{hX5*Z{(|__A)Xu(pPvAwMq&u}2uWsOfu79HN zhD}1y(41!9sY94?!w-mv3bb7o?Eaw9WZ+Es8E~5+vk{$Gi_C0R`#F#cNN;EE^O$7}(L;<1-!MkfRTyo0>3Oyq) zgy5#jk7e}W%6yo#00&p^cFwFEwtaHI#yR)UfAZOEcz?!qpfB%{WDcAB>)E;d<>B{< zh70SAE2W^dJ;UGu75w(93)pkYWbnPsY^_}I5|F7wr`AJiJvvhdZY#piAPp6~w#^ox zz)LEU>7XZsAq5dz5Q+!IPxwH}M`iTp12=snZ;Y^{HKTaw?KW<^zn*YNV#vNXRx<7K zqm%dM)Wau|PJ8*t^She8&c7muX^+B&ycU2Pc)eO>eyz2dhGxIci%2Elltag|dVK>= zy}XF>(nz1~yHc8>m`z=MGe5iJMvgh^P%in|IT)skP9=i&WqvAX;^ejlZEgG%Xb+9T z_Y|~kF7K8>H#3AG1O4D@RFl^g@IpEuYLF!+?=46&lCEyI@vcpRybU*E;_5W?RtA zMHHss+Y&BQCk)`Gi}xqd?&OWfA;rYO`(Cj!hvilg0ATIg*OOeemT*nkcR}}P-0J&^ zcu|<2T>m;t*EAOts_3HZ49TWV^?YO6UR-hMX$&b&5=yN`r)treM(~nB`MTb5`9mQC z8{d(FnR60cbJs?E4MowdXx!@gj2c|ZpMLpG+S}3?J!O>-;`H=}rU#-!2Qg^cFMCaB z^*L6~{HY;K>vj$2b^mfM3~<$7=dx&J3n5!>6(>k3NF>v^j>m!Dn!usc`m<~Q3`0vZ z2pn)+d{=G7({|nELVz@b*2T%BVo9ybtfgrlf2D=xYaGf;jDlYmCj?|1#n_=G{O0UQ zge;k-po;)oSg^Q>^>^Q)Nv7Z8e#?IkB)}40#CE0l^GCp!3s$T2~=7$ zZ)u7*<|UcGBE#~v4t0$lk#Jzn7T&yD(9q&AbzC{WJZ%?ZVH4NyZgOgX7eF01;;=s@ zbJ%Sc0RUD!|1*Xk`bU;O|5IDL&WFJGeA_J=F}eBC&v@eX4OErd+upuj2eQ}@g0!cJ zgal)U*i0N5Ve(EPs%tC;$BZ5pgb=Vgp;)=jVcxPdA1q9Ka>_jrP#p6Tsg%#do#G$u3In1`319IcDXU=1%BkyF{(`QwJcn9>T9`SyqDTh`5D5NC5uX?0nR{_1bfe z)}HrCaJt^hP8Xp(+FDbbx_>_|J81~z#U}0P?ThK;66~fSh=(PW#RgTSCV9K3DJU;7 zs4OvwWlc%7jo=Fb?J1w~B9lu`9>S^n_oJ;fg;2p-JFh#y!Z~W^qwZ~3_Vn2WgTF0m ztz#^C{JW#HR(W6I0}u^K)-^ah^Ijtlzu81_RPNxH`1EH?f2-R|d`ynNWYu=R#K%{f z)}-R3eardw)G`KC*d%-Q7v204A0ba3b^HUL|4V!V;70@u@D*c*elRouCr#xw-CoimWrzg0?ERFg=i>At?~nx9AO z={fLo*nF-87^ZGQHNcM&b`V|bm3B+O)pjyo2;pGdE}i0^H({nZ&DaS6Uvq> z7Wyi~(wM;&XI3(zUsn+nDK$9zn)R%$cY7^E&plnn({`F$VXuXlV5U z;&zcV9Z%SZ5I2g?p1X0(m3(=xGR%!n??0Te*)aFQe;zbVYkdRgeR^Cz>$OQC2-|}7 zjXn$4y1e#@!>pwqwh8fYu%r93UZsTcVgpOcPB~YBG&CC zs4Y-hV+hf=&mzRt0^<+6p7Cl+_ced%1jsi&zIWPwpzj0Q1vMRotx9j1D7o$}xdLP52U@OwiD2r^l5g&6Ftnc}<7yI_u71WAh6^kOao+f| z-u~*o(7E&YCMC|VBsGlxOe$W@85dN z!!Y;WX_&ycv)=w{6QIK3l=wZ-1ASnF!?77zr66rS3&sBnK6dR=P&B= ze;?g8QX+%}*aUf&C|XYdJrx)YR1wrkkQF7HfF&UQixBgG6hVE2gVyeppDtB>-Sf*B Z{|D5EO|{J|ki`H1002ovPDHLkV1i|P#nb=* diff --git a/common/defs/coins_details.json b/common/defs/coins_details.json index fc98df485..2b5776356 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": 284448, + "marketcap_usd": 171465, "name": "Actinium", "shortcut": "ACM", "t1_enabled": "yes", @@ -23,7 +23,7 @@ "Github": "https://github.com/axerunners/axe", "Homepage": "https://axerunners.com" }, - "marketcap_usd": 1472918, + "marketcap_usd": 1393141, "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": 3069782791, + "marketcap_usd": 3329289416, "name": "Bitcoin Cash", "shortcut": "BCH", "t1_enabled": "yes", @@ -85,7 +85,7 @@ "Github": "https://github.com/bitcoin/bitcoin", "Homepage": "https://bitcoin.org" }, - "marketcap_usd": 99181552329, + "marketcap_usd": 96809902563, "name": "Bitcoin", "shortcut": "BTC", "t1_enabled": "yes", @@ -115,7 +115,7 @@ "Github": "https://github.com/BTCPrivate/BitcoinPrivate", "Homepage": "https://btcprivate.org" }, - "marketcap_usd": 261002, + "marketcap_usd": 317022, "name": "Bitcoin Private", "shortcut": "BTCP", "t1_enabled": "yes", @@ -133,7 +133,7 @@ "Github": "https://github.com/BTCGPU/BTCGPU", "Homepage": "https://bitcoingold.org" }, - "marketcap_usd": 109620606, + "marketcap_usd": 107887499, "name": "Bitcoin Gold", "shortcut": "BTG", "t1_enabled": "yes", @@ -159,7 +159,7 @@ "Github": "https://github.com/LIMXTEC/BitCore", "Homepage": "https://bitcore.cc" }, - "marketcap_usd": 3517763, + "marketcap_usd": 3327660, "name": "Bitcore", "shortcut": "BTX", "t1_enabled": "yes", @@ -176,30 +176,12 @@ } ] }, - "bitcoin:CPC": { - "links": { - "Github": "https://github.com/Capricoinofficial/Capricoin", - "Homepage": "https://capricoin.org" - }, - "marketcap_usd": 6206, - "name": "Capricoin", - "shortcut": "CPC", - "t1_enabled": "no", - "t2_enabled": "yes", - "type": "coin", - "wallet": [ - { - "name": "Capricoin Mobile Wallet", - "url": "https://wallet.capricoin.org" - } - ] - }, "bitcoin:CPU": { "links": { "Github": "https://github.com/cpuchain/cpuchain", "Homepage": "https://cpuchain.org" }, - "marketcap_usd": 4021, + "marketcap_usd": 4854, "name": "CPUchain", "shortcut": "CPU", "t1_enabled": "yes", @@ -217,7 +199,7 @@ "Github": "https://github.com/Crowndev/crowncoin", "Homepage": "https://crownplatform.com" }, - "marketcap_usd": 857639, + "marketcap_usd": 936306, "name": "Crown", "shortcut": "CRW", "t1_enabled": "soon", @@ -230,7 +212,7 @@ "Github": "https://github.com/dashpay/dash", "Homepage": "https://www.dash.org" }, - "marketcap_usd": 441924648, + "marketcap_usd": 425104492, "name": "Dash", "shortcut": "DASH", "t1_enabled": "yes", @@ -264,7 +246,7 @@ "Github": "https://github.com/decred/dcrd", "Homepage": "https://www.decred.org" }, - "marketcap_usd": 110067303, + "marketcap_usd": 104441440, "name": "Decred", "shortcut": "DCR", "t1_enabled": "yes", @@ -282,7 +264,7 @@ "Github": "https://github.com/digibyte/digibyte", "Homepage": "https://digibyte.io" }, - "marketcap_usd": 45707355, + "marketcap_usd": 40644560, "name": "DigiByte", "shortcut": "DGB", "t1_enabled": "yes", @@ -304,7 +286,7 @@ "Github": "https://github.com/dogecoin/dogecoin", "Homepage": "https://dogecoin.com" }, - "marketcap_usd": 200000251, + "marketcap_usd": 203883098, "name": "Dogecoin", "shortcut": "DOGE", "t1_enabled": "yes", @@ -356,7 +338,7 @@ "Github": "https://github.com/fujicoin/fujicoin", "Homepage": "https://fujicoin.org" }, - "marketcap_usd": 133330, + "marketcap_usd": 138375, "name": "Fujicoin", "shortcut": "FJC", "t1_enabled": "yes", @@ -374,7 +356,7 @@ "Github": "https://github.com/floblockchain/flo", "Homepage": "https://flo.cash" }, - "marketcap_usd": 2359449, + "marketcap_usd": 2228729, "name": "Flo", "shortcut": "FLO", "t1_enabled": "yes", @@ -392,7 +374,7 @@ "Github": "https://github.com/FeatherCoin/Feathercoin", "Homepage": "https://feathercoin.com" }, - "marketcap_usd": 1378933, + "marketcap_usd": 1320494, "name": "Feathercoin", "shortcut": "FTC", "t1_enabled": "yes", @@ -410,7 +392,7 @@ "Github": "https://github.com/gamecredits-project/gamecredits", "Homepage": "https://gamecredits.org" }, - "marketcap_usd": 2233426, + "marketcap_usd": 2360947, "name": "GameCredits", "shortcut": "GAME", "t1_enabled": "yes", @@ -441,7 +423,7 @@ "Github": "https://github.com/Groestlcoin/groestlcoin", "Homepage": "https://www.groestlcoin.org" }, - "marketcap_usd": 8641210, + "marketcap_usd": 8944515, "name": "Groestlcoin", "shortcut": "GRS", "t1_enabled": "yes", @@ -477,7 +459,7 @@ "Github": "https://github.com/komodoplatform/komodo", "Homepage": "https://komodoplatform.com" }, - "marketcap_usd": 37694869, + "marketcap_usd": 34657826, "name": "Komodo", "shortcut": "KMD", "t1_enabled": "yes", @@ -513,7 +495,7 @@ "Github": "https://github.com/litecoin-project/litecoin", "Homepage": "https://litecoin.org" }, - "marketcap_usd": 2197821105, + "marketcap_usd": 2233396068, "name": "Litecoin", "shortcut": "LTC", "t1_enabled": "yes", @@ -539,7 +521,7 @@ "Github": "https://github.com/monacoinproject/monacoin", "Homepage": "https://monacoin.org" }, - "marketcap_usd": 72775511, + "marketcap_usd": 69099669, "name": "Monacoin", "shortcut": "MONA", "t1_enabled": "yes", @@ -557,7 +539,7 @@ "Github": "https://github.com/muecoin/MUE", "Homepage": "https://www.monetaryunit.org" }, - "marketcap_usd": 454980, + "marketcap_usd": 450799, "name": "MonetaryUnit", "shortcut": "MUE", "t1_enabled": "yes", @@ -575,7 +557,7 @@ "Github": "https://github.com/nixplatform/nixcore", "Homepage": "https://nixplatform.io" }, - "marketcap_usd": 1580424, + "marketcap_usd": 1331028, "name": "NIX", "shortcut": "NIX", "t1_enabled": "yes", @@ -593,7 +575,7 @@ "Github": "https://github.com/namecoin/namecoin-core", "Homepage": "https://namecoin.org" }, - "marketcap_usd": 4337849, + "marketcap_usd": 3086751, "name": "Namecoin", "shortcut": "NMC", "t1_enabled": "yes", @@ -615,7 +597,7 @@ "Github": "https://github.com/particl/particl-core", "Homepage": "https://particl.io" }, - "marketcap_usd": 2814792, + "marketcap_usd": 2905464, "name": "Particl", "shortcut": "PART", "t1_enabled": "yes", @@ -633,7 +615,7 @@ "Github": "https://github.com/PIVX-Project/PIVX", "Homepage": "https://pivx.org" }, - "marketcap_usd": 12637347, + "marketcap_usd": 11226931, "name": "PIVX", "shortcut": "PIVX", "t1_enabled": "yes", @@ -655,7 +637,7 @@ "Github": "https://github.com/polispay/polis", "Homepage": "https://www.polispay.org" }, - "marketcap_usd": 4290843, + "marketcap_usd": 3633088, "name": "Polis", "shortcut": "POLIS", "t1_enabled": "yes", @@ -673,7 +655,7 @@ "Github": "https://github.com/peercoin/peercoin", "Homepage": "https://peercoin.net" }, - "marketcap_usd": 3512377, + "marketcap_usd": 4052101, "name": "Peercoin", "shortcut": "PPC", "t1_enabled": "soon", @@ -691,7 +673,7 @@ "Github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "Homepage": "https://pesetacoin.info" }, - "marketcap_usd": 100908, + "marketcap_usd": 60308, "name": "Pesetacoin", "shortcut": "PTC", "t1_enabled": "yes", @@ -704,7 +686,7 @@ "Github": "https://github.com/qtumproject/qtum", "Homepage": "https://qtum.org" }, - "marketcap_usd": 116575156, + "marketcap_usd": 107343806, "name": "Qtum", "shortcut": "QTUM", "t1_enabled": "yes", @@ -740,7 +722,7 @@ "Github": "https://github.com/RavenProject/Ravencoin", "Homepage": "https://ravencoin.org" }, - "marketcap_usd": 79119711, + "marketcap_usd": 73885389, "name": "Ravencoin", "shortcut": "RVN", "t1_enabled": "yes", @@ -766,7 +748,7 @@ "Github": "https://github.com/SmartCash/Core-Smart", "Homepage": "https://smartcash.cc" }, - "marketcap_usd": 3055243, + "marketcap_usd": 2908956, "name": "SmartCash", "shortcut": "SMART", "t1_enabled": "yes", @@ -784,7 +766,7 @@ "Github": "https://github.com/syscoin/syscoin", "Homepage": "https://syscoin.org" }, - "marketcap_usd": 8654383, + "marketcap_usd": 8033487, "name": "Syscoin", "shortcut": "SYS", "t1_enabled": "soon", @@ -802,7 +784,7 @@ "Github": "https://github.com/unobtanium-official/unobtanium", "Homepage": "https://unobtanium.uno" }, - "marketcap_usd": 8570650, + "marketcap_usd": 8301430, "name": "Unobtanium", "shortcut": "UNO", "t1_enabled": "soon", @@ -820,7 +802,7 @@ "Github": "https://github.com/viacoin", "Homepage": "https://viacoin.org" }, - "marketcap_usd": 2114325, + "marketcap_usd": 2079822, "name": "Viacoin", "shortcut": "VIA", "t1_enabled": "yes", @@ -856,7 +838,7 @@ "Github": "https://github.com/vertcoin-project/vertcoin-core", "Homepage": "https://vertcoin.org" }, - "marketcap_usd": 9081381, + "marketcap_usd": 10097905, "name": "Vertcoin", "shortcut": "VTC", "t1_enabled": "yes", @@ -874,7 +856,7 @@ "Github": "https://github.com/primecoin/primecoin", "Homepage": "https://primecoin.io" }, - "marketcap_usd": 684009, + "marketcap_usd": 731056, "name": "Primecoin", "shortcut": "XPM", "t1_enabled": "yes", @@ -892,7 +874,7 @@ "Github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "Homepage": "https://www.bitcoinrh.org" }, - "marketcap_usd": 3061085, + "marketcap_usd": 3040730, "name": "Bitcoin Rhodium", "shortcut": "XRC", "t1_enabled": "yes", @@ -910,7 +892,7 @@ "Github": "https://github.com/X9Developers/XSN", "Homepage": "https://stakenet.io" }, - "marketcap_usd": 2994219, + "marketcap_usd": 2911316, "name": "Stakenet", "shortcut": "XSN", "t1_enabled": "yes", @@ -928,7 +910,7 @@ "Github": "https://github.com/zcoinofficial/zcoin", "Homepage": "https://zcoin.io" }, - "marketcap_usd": 27363348, + "marketcap_usd": 29503204, "name": "Zcoin", "shortcut": "XZC", "t1_enabled": "yes", @@ -950,7 +932,7 @@ "Github": "https://github.com/zcore-coin/zcore-2.0", "Homepage": "https://zcore.cash" }, - "marketcap_usd": 115337, + "marketcap_usd": 112528, "name": "ZCore", "shortcut": "ZCR", "t1_enabled": "soon", @@ -968,7 +950,7 @@ "Github": "https://github.com/zcash/zcash", "Homepage": "https://z.cash" }, - "marketcap_usd": 249527758, + "marketcap_usd": 234840969, "name": "Zcash", "shortcut": "ZEC", "t1_enabled": "yes", @@ -994,7 +976,7 @@ "Github": "https://github.com/zelcash", "Homepage": "https://zel.network" }, - "marketcap_usd": 2166477, + "marketcap_usd": 2159018, "name": "Zel", "shortcut": "ZEL", "t1_enabled": "yes", @@ -1125,7 +1107,7 @@ "links": { "Homepage": "https://0xbitcoin.org/" }, - "marketcap_usd": 442343, + "marketcap_usd": 430161, "name": "0xBitcoin", "network": "eth", "shortcut": "0xBTC", @@ -1145,7 +1127,7 @@ "Github": "https://github.com/MarsBlockchain/1sg-contract", "Homepage": "https://www.1.sg" }, - "marketcap_usd": 1568093, + "marketcap_usd": 1458486, "name": "1SG", "network": "eth", "shortcut": "1SG", @@ -1164,7 +1146,7 @@ "links": { "Homepage": "https://firstblood.io" }, - "marketcap_usd": 3954091, + "marketcap_usd": 3814373, "name": "FirstBlood", "network": "eth", "shortcut": "1ST", @@ -1183,7 +1165,7 @@ "links": { "Homepage": "https://ico.1worldonline.com" }, - "marketcap_usd": 2444333, + "marketcap_usd": 2192365, "name": "1World", "network": "eth", "shortcut": "1WO", @@ -1261,7 +1243,7 @@ "Github": "https://github.com/crypt04dvisor/AlphaWallet", "Homepage": "https://alphaplatform.co/" }, - "marketcap_usd": 192703, + "marketcap_usd": 594214, "name": "Alpha", "network": "eth", "shortcut": "A", @@ -1340,7 +1322,7 @@ "links": { "Homepage": "https://www.arcblock.io" }, - "marketcap_usd": 6486069, + "marketcap_usd": 6625937, "name": "ArcBlock Token", "network": "eth", "shortcut": "ABT", @@ -1360,7 +1342,7 @@ "Github": "https://github.com/theabyssportal", "Homepage": "https://www.theabyss.com" }, - "marketcap_usd": 1156289, + "marketcap_usd": 1076792, "name": "The Abyss", "network": "eth", "shortcut": "ABYSS", @@ -1398,7 +1380,7 @@ "links": { "Homepage": "https://tokenstars.com/en/ace" }, - "marketcap_usd": 87960, + "marketcap_usd": 35206, "name": "ACE (TokenStars)", "network": "eth", "shortcut": "ACE", @@ -1417,7 +1399,7 @@ "links": { "Homepage": "https://adbank.network" }, - "marketcap_usd": 254635, + "marketcap_usd": 241178, "name": "adbank", "network": "eth", "shortcut": "ADB", @@ -1456,7 +1438,7 @@ "links": { "Homepage": "https://adhive.tv" }, - "marketcap_usd": 74915, + "marketcap_usd": 65925, "name": "AdHive Token", "network": "eth", "shortcut": "ADH", @@ -1476,7 +1458,7 @@ "Github": "https://github.com/aditus", "Homepage": "https://aditus.net" }, - "marketcap_usd": 77711, + "marketcap_usd": 66469, "name": "Aditus", "network": "eth", "shortcut": "ADI", @@ -1496,7 +1478,7 @@ "Github": "https://github.com/adelecosystem", "Homepage": "https://adel.io" }, - "marketcap_usd": 110938, + "marketcap_usd": 105279, "name": "Adelphoi", "network": "eth", "shortcut": "ADL", @@ -1535,7 +1517,7 @@ "Github": "https://github.com/adchain", "Homepage": "https://adtoken.com" }, - "marketcap_usd": 2765692, + "marketcap_usd": 3205726, "name": "AdToken", "network": "eth", "shortcut": "ADT", @@ -1555,7 +1537,7 @@ "Github": "https://github.com/AdExBlockchain", "Homepage": "https://www.adex.network" }, - "marketcap_usd": 4364178, + "marketcap_usd": 4077495, "name": "AdEx Network", "network": "eth", "shortcut": "ADX", @@ -1635,7 +1617,7 @@ "Github": "https://github.com/singnet/singnet", "Homepage": "https://singularitynet.io" }, - "marketcap_usd": 6087581, + "marketcap_usd": 5843809, "name": "SingularityNET", "network": "eth", "shortcut": "AGI", @@ -1693,7 +1675,7 @@ "links": { "Homepage": "https://www.aidcoin.co" }, - "marketcap_usd": 213226, + "marketcap_usd": 214895, "name": "AidCoin", "network": "eth", "shortcut": "AID", @@ -1752,7 +1734,7 @@ "Github": "https://github.com/AigangNetwork", "Homepage": "https://aigang.network/" }, - "marketcap_usd": 6550, + "marketcap_usd": 6770, "name": "Aigang", "network": "eth", "shortcut": "AIX", @@ -1810,7 +1792,7 @@ "links": { "Homepage": "http://ailink.in" }, - "marketcap_usd": 28786, + "marketcap_usd": 35124, "name": "AiLink Token", "network": "eth", "shortcut": "ALI", @@ -1888,7 +1870,7 @@ "Github": "https://github.com/ambrosus", "Homepage": "https://ambrosus.com/index.html" }, - "marketcap_usd": 2455928, + "marketcap_usd": 2308049, "name": "Amber Token", "network": "eth", "shortcut": "AMB", @@ -1948,7 +1930,7 @@ "Github": "https://github.com/amlt-by-coinfirm", "Homepage": "https://amlt.coinfirm.io/" }, - "marketcap_usd": 1119988, + "marketcap_usd": 1143641, "name": "AMLT", "network": "eth", "shortcut": "AMLT", @@ -1968,7 +1950,7 @@ "Github": "https://github.com/amontech", "Homepage": "https://amon.tech" }, - "marketcap_usd": 432186, + "marketcap_usd": 321852, "name": "Amon", "network": "eth", "shortcut": "AMN", @@ -1988,7 +1970,7 @@ "Github": "https://github.com/AMO-Project/", "Homepage": "https://amo.foundation" }, - "marketcap_usd": 2932723, + "marketcap_usd": 3021713, "name": "AMO Coin", "network": "eth", "shortcut": "AMO", @@ -2007,7 +1989,7 @@ "links": { "Homepage": "https://ados.foundation/" }, - "marketcap_usd": 423308, + "marketcap_usd": 368397, "name": "Token AmonD", "network": "eth", "shortcut": "AMON", @@ -2027,7 +2009,7 @@ "Github": "https://github.com/ampleforth", "Homepage": "https://ampleforth.org" }, - "marketcap_usd": 2378809, + "marketcap_usd": 1672317, "name": "Ampleforth", "network": "eth", "shortcut": "AMPL", @@ -2105,7 +2087,7 @@ "links": { "Homepage": "https://aragon.org" }, - "marketcap_usd": 19341082, + "marketcap_usd": 16333319, "name": "Aragon", "network": "eth", "shortcut": "ANT", @@ -2124,7 +2106,7 @@ "links": { "Homepage": "https://www.aurorachain.io" }, - "marketcap_usd": 6407814, + "marketcap_usd": 5783128, "name": "Aurora", "network": "eth", "shortcut": "AOA", @@ -2144,7 +2126,7 @@ "Github": "https://github.com/Oxchild/crowdsale", "Homepage": "https://apisplatform.io" }, - "marketcap_usd": 2641646, + "marketcap_usd": 2617824, "name": "APIS", "network": "eth", "shortcut": "APIS", @@ -2164,7 +2146,7 @@ "Github": "https://github.com/Aptoide/AppCoins-ethereumj", "Homepage": "https://appcoins.io" }, - "marketcap_usd": 1925559, + "marketcap_usd": 1836877, "name": "AppCoins", "network": "eth", "shortcut": "APPC", @@ -2222,7 +2204,7 @@ "links": { "Homepage": "https://www.arbitragect.com" }, - "marketcap_usd": 8227, + "marketcap_usd": 11077, "name": "ArbitrageCT", "network": "eth", "shortcut": "ARCT", @@ -2281,7 +2263,7 @@ "links": { "Homepage": "https://aeron.aero" }, - "marketcap_usd": 1412033, + "marketcap_usd": 1378725, "name": "Aeron", "network": "eth", "shortcut": "ARN", @@ -2300,7 +2282,7 @@ "links": { "Homepage": "http://www.maecenas.co" }, - "marketcap_usd": 763675, + "marketcap_usd": 709742, "name": "Maecenas", "network": "eth", "shortcut": "ART", @@ -2378,7 +2360,7 @@ "links": { "Homepage": "https://airswap.io" }, - "marketcap_usd": 1450755, + "marketcap_usd": 1408200, "name": "Airswap", "network": "eth", "shortcut": "AST", @@ -2417,7 +2399,7 @@ "links": { "Homepage": "https://atlant.io" }, - "marketcap_usd": 375514, + "marketcap_usd": 736734, "name": "ATLANT", "network": "eth", "shortcut": "ATL", @@ -2456,7 +2438,7 @@ "Github": "https://github.com/atonomi", "Homepage": "https://atonomi.io" }, - "marketcap_usd": 73909, + "marketcap_usd": 74402, "name": "Atonomi", "network": "eth", "shortcut": "ATMI", @@ -2514,7 +2496,7 @@ "links": { "Homepage": "https://www.aston.company" }, - "marketcap_usd": 74312, + "marketcap_usd": 70163, "name": "Aston", "network": "eth", "shortcut": "ATX", @@ -2533,7 +2515,7 @@ "links": { "Homepage": "https://auctus.org" }, - "marketcap_usd": 228271, + "marketcap_usd": 231778, "name": "Auctus", "network": "eth", "shortcut": "AUC", @@ -2591,7 +2573,7 @@ "links": { "Homepage": "https://cubeint.io" }, - "marketcap_usd": 1801191, + "marketcap_usd": 1852909, "name": "Cube", "network": "eth", "shortcut": "AUTO", @@ -2630,7 +2612,7 @@ "links": { "Homepage": "https://aventus.io" }, - "marketcap_usd": 493443, + "marketcap_usd": 422230, "name": "Aventus", "network": "eth", "shortcut": "AVT", @@ -2689,7 +2671,7 @@ "Github": "https://www.github.com/axpire", "Homepage": "https://www.axpire.io" }, - "marketcap_usd": 545523, + "marketcap_usd": 572663, "name": "aXpire", "network": "eth", "shortcut": "AXPR", @@ -2708,7 +2690,7 @@ "links": { "Homepage": "https://www.b2bx.exchange" }, - "marketcap_usd": 9447140, + "marketcap_usd": 9921344, "name": "B2BX", "network": "eth", "shortcut": "B2BX", @@ -2767,7 +2749,7 @@ "links": { "Homepage": "https://www.banca.world" }, - "marketcap_usd": 271042, + "marketcap_usd": 291998, "name": "Banca", "network": "eth", "shortcut": "BANCA", @@ -2825,7 +2807,7 @@ "links": { "Homepage": "https://basicattentiontoken.org" }, - "marketcap_usd": 182919029, + "marketcap_usd": 172751013, "name": "Basic Attention Token", "network": "eth", "shortcut": "BAT", @@ -2844,7 +2826,7 @@ "links": { "Homepage": "https://getbabb.com" }, - "marketcap_usd": 3323761, + "marketcap_usd": 3284301, "name": "BABB", "network": "eth", "shortcut": "BAX", @@ -2863,7 +2845,7 @@ "links": { "Homepage": "http://bbcoin.tradove.com" }, - "marketcap_usd": 282970, + "marketcap_usd": 286237, "name": "TraDove B2BCoin", "network": "eth", "shortcut": "BBC", @@ -2883,7 +2865,7 @@ "Github": "https://github.com/brickblock-io", "Homepage": "https://www.brickblock.io/" }, - "marketcap_usd": 1976430, + "marketcap_usd": 889679, "name": "BRICKBLOCK TOKEN", "network": "eth", "shortcut": "BBK", @@ -2921,7 +2903,7 @@ "links": { "Homepage": "https://bigbom.com" }, - "marketcap_usd": 105351, + "marketcap_usd": 95101, "name": "Bigbom", "network": "eth", "shortcut": "BBO", @@ -2940,7 +2922,7 @@ "links": { "Homepage": "https://block-chain.com" }, - "marketcap_usd": 432305, + "marketcap_usd": 381580, "name": "Block-Chain.com", "network": "eth", "shortcut": "BC", @@ -3019,7 +3001,7 @@ "Github": "https://github.com/VinceBCD/BCDiploma", "Homepage": "https://www.bcdiploma.com" }, - "marketcap_usd": 749994, + "marketcap_usd": 772468, "name": "Blockchain Certified Data Token", "network": "eth", "shortcut": "BCDT", @@ -3058,7 +3040,7 @@ "Github": "https://github.com/blockmason", "Homepage": "https://blockmason.io" }, - "marketcap_usd": 1283744, + "marketcap_usd": 1229357, "name": "BlockMason Credit Protocol Token", "network": "eth", "shortcut": "BCPT", @@ -3078,7 +3060,7 @@ "Github": "https://github.com/bitcv", "Homepage": "https://bitcv.one/" }, - "marketcap_usd": 2544533, + "marketcap_usd": 4476912, "name": "BitCapitalVendor Token", "network": "eth", "shortcut": "BCV", @@ -3098,7 +3080,7 @@ "Github": "https://github.com/bitdegree", "Homepage": "https://bitdegree.org" }, - "marketcap_usd": 270423, + "marketcap_usd": 225885, "name": "BitDegree Token", "network": "eth", "shortcut": "BDG", @@ -3177,7 +3159,7 @@ "Github": "https://github.com/Rentberry", "Homepage": "https://rentberry.com" }, - "marketcap_usd": 32136, + "marketcap_usd": 34123, "name": "Berry", "network": "eth", "shortcut": "BERRY", @@ -3197,7 +3179,7 @@ "Github": "https://github.com/daocasino", "Homepage": "https://dao.casino" }, - "marketcap_usd": 1634707, + "marketcap_usd": 1192242, "name": "DAO.Casino", "network": "eth", "shortcut": "BET", @@ -3217,7 +3199,7 @@ "Github": "https://github.com/bethereumproject", "Homepage": "https://www.bethereum.com/" }, - "marketcap_usd": 103653, + "marketcap_usd": 76748, "name": "Bethereum", "network": "eth", "shortcut": "BETHER", @@ -3237,7 +3219,7 @@ "Github": "https://github.com/betterbetting", "Homepage": "https://www.betterbetting.org" }, - "marketcap_usd": 46586, + "marketcap_usd": 45054, "name": "BetterBetting", "network": "eth", "shortcut": "BETR", @@ -3275,7 +3257,7 @@ "links": { "Homepage": "https://bnktothefuture.com" }, - "marketcap_usd": 4420022, + "marketcap_usd": 2834991, "name": "BnkToTheFuture", "network": "eth", "shortcut": "BFT", @@ -3372,7 +3354,7 @@ "Github": "https://github.com/BitScreenerTech", "Homepage": "https://tokensale.bitscreener.com/" }, - "marketcap_usd": 122426, + "marketcap_usd": 112265, "name": "Token BitScreenerToken", "network": "eth", "shortcut": "BITX", @@ -3391,7 +3373,7 @@ "links": { "Homepage": "https://www.bibox.com" }, - "marketcap_usd": 7002462, + "marketcap_usd": 7325833, "name": "Bibox Token", "network": "eth", "shortcut": "BIX", @@ -3469,7 +3451,7 @@ "Github": "https://github.com/BankEx", "Homepage": "https://bankex.com/" }, - "marketcap_usd": 375987, + "marketcap_usd": 378892, "name": "BANKEX", "network": "eth", "shortcut": "BKX", @@ -3528,7 +3510,7 @@ "Github": "https://github.com/hellobloom", "Homepage": "https://hellobloom.io" }, - "marketcap_usd": 1363945, + "marketcap_usd": 1255657, "name": "Bloom", "network": "eth", "shortcut": "BLT", @@ -3548,7 +3530,7 @@ "Github": "https://github.com/BlueCrypto", "Homepage": "https://blueprotocol.com/" }, - "marketcap_usd": 141539, + "marketcap_usd": 228656, "name": "Ethereum Blue", "network": "eth", "shortcut": "BLUE", @@ -3606,7 +3588,7 @@ "links": { "Homepage": "https://bluzelle.com" }, - "marketcap_usd": 1357060, + "marketcap_usd": 1900372, "name": "Bluzelle", "network": "eth", "shortcut": "BLZ", @@ -3626,7 +3608,7 @@ "Github": "https://github.com/blackmoonfg", "Homepage": "https://blackmooncrypto.com" }, - "marketcap_usd": 3671847, + "marketcap_usd": 3120015, "name": "Blackmoon Crypto BMC Token", "network": "eth", "shortcut": "BMC", @@ -3665,7 +3647,7 @@ "links": { "Homepage": "https://www.bitmart.com" }, - "marketcap_usd": 1601069, + "marketcap_usd": 1580027, "name": "BitMart Token", "network": "eth", "shortcut": "BMX", @@ -3743,7 +3725,7 @@ "Github": "https://github.com/bancorprotocol", "Homepage": "https://www.bancor.network" }, - "marketcap_usd": 10754604, + "marketcap_usd": 10148139, "name": "Bancor Network Token", "network": "eth", "shortcut": "BNT", @@ -3762,7 +3744,7 @@ "links": { "Homepage": "https://bounty0x.io" }, - "marketcap_usd": 123615, + "marketcap_usd": 97527, "name": "Bounty0x Token", "network": "eth", "shortcut": "BNTY", @@ -3781,7 +3763,7 @@ "links": { "Homepage": "https://bobsrepair.com" }, - "marketcap_usd": 261925, + "marketcap_usd": 246114, "name": "Bob's repair", "network": "eth", "shortcut": "BOB", @@ -3839,7 +3821,7 @@ "links": { "Homepage": "https://www.bolt.global" }, - "marketcap_usd": 611010, + "marketcap_usd": 634636, "name": "BOLT Token", "network": "eth", "shortcut": "BOLT", @@ -3858,7 +3840,7 @@ "links": { "Homepage": "https://bonpay.com" }, - "marketcap_usd": 93083, + "marketcap_usd": 95002, "name": "Bonpay", "network": "eth", "shortcut": "BON", @@ -3915,7 +3897,7 @@ "links": { "Homepage": "https://www.bouts.pro" }, - "marketcap_usd": 66130, + "marketcap_usd": 68206, "name": "BoutsPro", "network": "eth", "shortcut": "BOUTS", @@ -3954,7 +3936,7 @@ "Github": "https://github.com/Blockport/tokensale", "Homepage": "https://blockport.io" }, - "marketcap_usd": 917956, + "marketcap_usd": 791010, "name": "Blockport Token", "network": "eth", "shortcut": "BPT", @@ -3973,7 +3955,7 @@ "links": { "Homepage": "https://www.bitquence.com" }, - "marketcap_usd": 6300468, + "marketcap_usd": 5071128, "name": "Bitquence", "network": "eth", "shortcut": "BQX", @@ -4012,7 +3994,7 @@ "Github": "https://github.com/breadwallet", "Homepage": "https://token.breadapp.com/en" }, - "marketcap_usd": 9027685, + "marketcap_usd": 9237297, "name": "Bread", "network": "eth", "shortcut": "BRD", @@ -4127,7 +4109,7 @@ "links": { "Homepage": "http://btclite.org" }, - "marketcap_usd": 25028, + "marketcap_usd": 25730, "name": "BTC Lite", "network": "eth", "shortcut": "BTCL", @@ -4342,7 +4324,7 @@ "links": { "Homepage": "https://biotron.io" }, - "marketcap_usd": 7063, + "marketcap_usd": 6900, "name": "Biotron", "network": "eth", "shortcut": "BTRN", @@ -4362,7 +4344,7 @@ "Github": "https://github.com/btuprotocol", "Homepage": "https://btu-protocol.com" }, - "marketcap_usd": 7753161, + "marketcap_usd": 6941380, "name": "BTU Protocol", "network": "eth", "shortcut": "BTU", @@ -4421,7 +4403,7 @@ "Github": "https://github.com/paxosglobal/busd-contract", "Homepage": "https://www.paxos.com/busd" }, - "marketcap_usd": 112173300, + "marketcap_usd": 142356258, "name": "Binance USD (BUSD)", "network": "eth", "shortcut": "BUSD", @@ -4479,7 +4461,7 @@ "links": { "Homepage": "https://www.bitz.com" }, - "marketcap_usd": 16717551, + "marketcap_usd": 16101674, "name": "Bit-Z Token", "network": "eth", "shortcut": "BZ", @@ -4498,7 +4480,7 @@ "links": { "Homepage": "https://bezant.io" }, - "marketcap_usd": 2389383, + "marketcap_usd": 2751531, "name": "Bezant", "network": "eth", "shortcut": "BZNT", @@ -4538,7 +4520,7 @@ "Github": "https://github.com/cryptotwenty", "Homepage": "https://crypto20.com" }, - "marketcap_usd": 11689528, + "marketcap_usd": 12857556, "name": "Crypto20's Token", "network": "eth", "shortcut": "C20", @@ -4557,7 +4539,7 @@ "links": { "Homepage": "https://www.carboneum.io" }, - "marketcap_usd": 198339, + "marketcap_usd": 198974, "name": "Carboneum", "network": "eth", "shortcut": "C8", @@ -4576,7 +4558,7 @@ "links": { "Homepage": "https://change-bank.com" }, - "marketcap_usd": 765576, + "marketcap_usd": 653149, "name": "Change Bank", "network": "eth", "shortcut": "CAG", @@ -4596,7 +4578,7 @@ "Github": "https://github.com/Global-Crypto-Alliance/call-token", "Homepage": "https://gcalliance.io" }, - "marketcap_usd": 28406, + "marketcap_usd": 45304, "name": "CALL token", "network": "eth", "shortcut": "CALL", @@ -4615,7 +4597,7 @@ "links": { "Homepage": "https://canya.io" }, - "marketcap_usd": 1010375, + "marketcap_usd": 1173365, "name": "CanYaCoin", "network": "eth", "shortcut": "CAN", @@ -4634,7 +4616,7 @@ "links": { "Homepage": "https://cappasity.com/tech/" }, - "marketcap_usd": 391078, + "marketcap_usd": 379135, "name": "Cappasity", "network": "eth", "shortcut": "CAPP", @@ -4710,7 +4692,7 @@ "links": { "Homepage": "https://coin.cashbet.com" }, - "marketcap_usd": 745540, + "marketcap_usd": 786504, "name": "CashBet Coin", "network": "eth", "shortcut": "CBC", @@ -4749,7 +4731,7 @@ "links": { "Homepage": "https://www.commerceblock.com" }, - "marketcap_usd": 1993829, + "marketcap_usd": 1562018, "name": "CommerceBlock", "network": "eth", "shortcut": "CBT", @@ -4826,7 +4808,7 @@ "links": { "Homepage": "https://ccore.io" }, - "marketcap_usd": 7676, + "marketcap_usd": 9429, "name": "Ccore", "network": "eth", "shortcut": "CCO", @@ -4865,7 +4847,7 @@ "links": { "Homepage": "http://crystal-clear.io" }, - "marketcap_usd": 4950, + "marketcap_usd": 3160, "name": "Crystal Clear Token", "network": "eth", "shortcut": "CCT", @@ -4904,7 +4886,7 @@ "links": { "Homepage": "https://www.coindash.io" }, - "marketcap_usd": 1654124, + "marketcap_usd": 1707144, "name": "CoinDash", "network": "eth", "shortcut": "CDT", @@ -4923,7 +4905,7 @@ "links": { "Homepage": "https://www.ceek.com/" }, - "marketcap_usd": 630294, + "marketcap_usd": 805853, "name": "CEEK VR Token", "network": "eth", "shortcut": "CEEK", @@ -4943,7 +4925,7 @@ "Github": "https://github.com/celer-network", "Homepage": "https://www.celer.network/" }, - "marketcap_usd": 5060405, + "marketcap_usd": 4502558, "name": "CelerToken", "network": "eth", "shortcut": "CELR", @@ -4963,7 +4945,7 @@ "Github": "https://github.com/coinsuperapi", "Homepage": "https://www.coinsuper.com" }, - "marketcap_usd": 294381, + "marketcap_usd": 297844, "name": "CEN", "network": "eth", "shortcut": "CEN", @@ -4982,7 +4964,7 @@ "links": { "Homepage": "https://www.centrality.ai" }, - "marketcap_usd": 38331916, + "marketcap_usd": 39108740, "name": "Centrality", "network": "eth", "shortcut": "CENNZ", @@ -5099,7 +5081,7 @@ "links": { "Homepage": "https://coinpoker.com" }, - "marketcap_usd": 1198505, + "marketcap_usd": 1109175, "name": "CoinPoker", "network": "eth", "shortcut": "CHP", @@ -5118,7 +5100,7 @@ "links": { "Homepage": "https://swissborg.com" }, - "marketcap_usd": 10240798, + "marketcap_usd": 11944917, "name": "SwissBorg", "network": "eth", "shortcut": "CHSB", @@ -5195,7 +5177,7 @@ "links": { "Homepage": "https://www.connectjob.io" }, - "marketcap_usd": 24164, + "marketcap_usd": 11943, "name": "ConnectJob", "network": "eth", "shortcut": "CJT", @@ -5233,7 +5215,7 @@ "links": { "Homepage": "https://www.coinlancer.io" }, - "marketcap_usd": 84909, + "marketcap_usd": 21110, "name": "Coinlancer", "network": "eth", "shortcut": "CL", @@ -5253,7 +5235,7 @@ "Github": "https://github.com/Cloudbric-Project", "Homepage": "https://www.cloudbric.io/" }, - "marketcap_usd": 354513, + "marketcap_usd": 364509, "name": "Cloudbric", "network": "eth", "shortcut": "CLB", @@ -5369,7 +5351,7 @@ "links": { "Homepage": "https://crowdmachine.com" }, - "marketcap_usd": 123419, + "marketcap_usd": 123024, "name": "Crowd Machine Compute Token", "network": "eth", "shortcut": "CMCT", @@ -5427,7 +5409,7 @@ "links": { "Homepage": "https://cindicator.com" }, - "marketcap_usd": 5764069, + "marketcap_usd": 5078273, "name": "Cindicator", "network": "eth", "shortcut": "CND", @@ -5446,7 +5428,7 @@ "links": { "Homepage": "https://cnntoken.io" }, - "marketcap_usd": 1475345, + "marketcap_usd": 1378042, "name": "Content Neutrality Network", "network": "eth", "shortcut": "CNN", @@ -5505,7 +5487,7 @@ "Github": "https://github.com/cobinhood", "Homepage": "https://cobinhood.com" }, - "marketcap_usd": 62269, + "marketcap_usd": 87003, "name": "Cobinhood Token", "network": "eth", "shortcut": "COB", @@ -5545,7 +5527,7 @@ "Github": "https://github.com/coinfi", "Homepage": "https://www.coinfi.com" }, - "marketcap_usd": 156442, + "marketcap_usd": 147175, "name": "CoinFi Token", "network": "eth", "shortcut": "COFI", @@ -5622,7 +5604,7 @@ "links": { "Homepage": "https://covesting.io/" }, - "marketcap_usd": 1234715, + "marketcap_usd": 1145377, "name": "Covesting", "network": "eth", "shortcut": "COV", @@ -5661,7 +5643,7 @@ "links": { "Homepage": "https://cryptopay.me" }, - "marketcap_usd": 985692, + "marketcap_usd": 1053537, "name": "Cryptopay", "network": "eth", "shortcut": "CPAY", @@ -5798,7 +5780,7 @@ "links": { "Homepage": "https://crycash.io" }, - "marketcap_usd": 378249, + "marketcap_usd": 419332, "name": "CryCash", "network": "eth", "shortcut": "CRC", @@ -5818,7 +5800,7 @@ "Github": "https://github.com/verifyas", "Homepage": "https://token.verify.as" }, - "marketcap_usd": 88889, + "marketcap_usd": 58832, "name": "Verify", "network": "eth", "shortcut": "CRED", @@ -5895,7 +5877,7 @@ "links": { "Homepage": "https://crypterium.io" }, - "marketcap_usd": 19423335, + "marketcap_usd": 18714645, "name": "CrypteriumToken", "network": "eth", "shortcut": "CRPT", @@ -5933,7 +5915,7 @@ "links": { "Homepage": "https://credits.com/en" }, - "marketcap_usd": 4752011, + "marketcap_usd": 4522781, "name": "Credits", "network": "eth", "shortcut": "CS", @@ -6127,7 +6109,7 @@ "links": { "Homepage": "https://www.civic.com" }, - "marketcap_usd": 10304109, + "marketcap_usd": 10943803, "name": "Civic", "network": "eth", "shortcut": "CVC", @@ -6166,7 +6148,7 @@ "links": { "Homepage": "http://www.cybervein.org" }, - "marketcap_usd": 6631808, + "marketcap_usd": 5856346, "name": "CyberVein", "network": "eth", "shortcut": "CVT", @@ -6206,7 +6188,7 @@ "Github": "https://github.com/cargoxio", "Homepage": "https://cargox.io" }, - "marketcap_usd": 1502773, + "marketcap_usd": 1031377, "name": "CargoX", "network": "eth", "shortcut": "CXO", @@ -6245,7 +6227,7 @@ "links": { "Homepage": "https://cyberfmradio.com" }, - "marketcap_usd": 14401, + "marketcap_usd": 9897, "name": "CyberFM", "network": "eth", "shortcut": "CYFM", @@ -6264,7 +6246,7 @@ "links": { "Homepage": "https://cybermusic.io" }, - "marketcap_usd": 8880, + "marketcap_usd": 9052, "name": "CyberMusic", "network": "eth", "shortcut": "CYMT", @@ -6283,7 +6265,7 @@ "links": { "Homepage": "http://www.canonchain.com" }, - "marketcap_usd": 744368, + "marketcap_usd": 362326, "name": "CanonChain", "network": "eth", "shortcut": "CZR", @@ -6359,7 +6341,7 @@ "links": { "Homepage": "https://dadi.cloud" }, - "marketcap_usd": 1122050, + "marketcap_usd": 1126742, "name": "DADI", "network": "eth", "shortcut": "DADI", @@ -6379,7 +6361,7 @@ "Github": "https://github.com/makerdao", "Homepage": "https://makerdao.com" }, - "marketcap_usd": 104540630, + "marketcap_usd": 94662749, "name": "Dai Stablecoin v2.0", "network": "eth", "shortcut": "DAI", @@ -6398,7 +6380,7 @@ "links": { "Homepage": "http://www.dalecoin.org" }, - "marketcap_usd": 3585, + "marketcap_usd": 2658, "name": "DaleCoin", "network": "eth", "shortcut": "DALC", @@ -6418,7 +6400,7 @@ "Github": "https://github.com/project-daneel", "Homepage": "https://daneel.io" }, - "marketcap_usd": 22743, + "marketcap_usd": 11866, "name": "DaneelToken", "network": "eth", "shortcut": "DAN", @@ -6456,7 +6438,7 @@ "links": { "Homepage": "https://datum.org" }, - "marketcap_usd": 491531, + "marketcap_usd": 512196, "name": "Datum Token", "network": "eth", "shortcut": "DAT", @@ -6476,7 +6458,7 @@ "Github": "https://github.com/streamr-dev", "Homepage": "https://www.streamr.com" }, - "marketcap_usd": 4509266, + "marketcap_usd": 4220036, "name": "Streamr DATAcoin", "network": "eth", "shortcut": "DATA", @@ -6515,7 +6497,7 @@ "links": { "Homepage": "https://www.datx.co" }, - "marketcap_usd": 240206, + "marketcap_usd": 213013, "name": "DATx", "network": "eth", "shortcut": "DATX", @@ -6535,7 +6517,7 @@ "Github": "https://github.com/DAVFoundation", "Homepage": "https://dav.network/" }, - "marketcap_usd": 57485, + "marketcap_usd": 52714, "name": "DAV Token", "network": "eth", "shortcut": "DAV", @@ -6554,7 +6536,7 @@ "links": { "Homepage": "https://www.daex.io" }, - "marketcap_usd": 659141, + "marketcap_usd": 725191, "name": "DAEX", "network": "eth", "shortcut": "DAX", @@ -6593,7 +6575,7 @@ "Github": "https://github.com/chronologic", "Homepage": "https://chronologic.network" }, - "marketcap_usd": 121393, + "marketcap_usd": 113155, "name": "ChronoLogic DAY", "network": "eth", "shortcut": "DAY", @@ -6691,7 +6673,7 @@ "Github": "https://github.com/Dentacoin", "Homepage": "https://dentacoin.com" }, - "marketcap_usd": 8238825, + "marketcap_usd": 9603876, "name": "Dentacoin", "network": "eth", "shortcut": "DCN", @@ -6769,7 +6751,7 @@ "links": { "Homepage": "https://deltachain.tech" }, - "marketcap_usd": 15478, + "marketcap_usd": 9275, "name": "DeltaChain", "network": "eth", "shortcut": "DELTA", @@ -6788,7 +6770,7 @@ "links": { "Homepage": "https://www.dentwireless.com" }, - "marketcap_usd": 8165561, + "marketcap_usd": 7155384, "name": "DENT", "network": "eth", "shortcut": "DENT", @@ -6826,7 +6808,7 @@ "links": { "Homepage": "https://www.coinbit.co.kr/" }, - "marketcap_usd": 901947, + "marketcap_usd": 871761, "name": "DEX", "network": "eth", "shortcut": "DEX", @@ -6865,7 +6847,7 @@ "links": { "Homepage": "https://digix.global/" }, - "marketcap_usd": 46753156, + "marketcap_usd": 42984796, "name": "Digix DAO", "network": "eth", "shortcut": "DGD", @@ -6925,7 +6907,7 @@ "Github": "https://github.com/DigitexFutures", "Homepage": "https://digitexfutures.com/" }, - "marketcap_usd": 17768056, + "marketcap_usd": 19637857, "name": "DigitexFutures", "network": "eth", "shortcut": "DGTX", @@ -6945,7 +6927,7 @@ "Github": "https://github.com/DigixGlobal", "Homepage": "https://digix.global" }, - "marketcap_usd": 5944889, + "marketcap_usd": 5679864, "name": "Digix Gold Token", "network": "eth", "shortcut": "DGX", @@ -6984,7 +6966,7 @@ "links": { "Homepage": "https://etheroll.com" }, - "marketcap_usd": 1874198, + "marketcap_usd": 1499560, "name": "Etheroll", "network": "eth", "shortcut": "DICE", @@ -7003,7 +6985,7 @@ "links": { "Homepage": "https://inmediate.io" }, - "marketcap_usd": 354413, + "marketcap_usd": 289244, "name": "Digital Insurance Token", "network": "eth", "shortcut": "DIT", @@ -7041,7 +7023,7 @@ "links": { "Homepage": "https://www.agrello.org" }, - "marketcap_usd": 2050873, + "marketcap_usd": 2034417, "name": "Agrello", "network": "eth", "shortcut": "DLT", @@ -7061,7 +7043,7 @@ "Github": "https://github.com/suntechsoft/dmarket-smartcontract", "Homepage": "https://dmarket.com" }, - "marketcap_usd": 4333808, + "marketcap_usd": 5814957, "name": "DMarket Token", "network": "eth", "shortcut": "DMT", @@ -7080,7 +7062,7 @@ "links": { "Homepage": "https://www.encrypgen.com" }, - "marketcap_usd": 599172, + "marketcap_usd": 570793, "name": "EncrypGen", "network": "eth", "shortcut": "DNA", @@ -7100,7 +7082,7 @@ "Github": "https://github.com/district0x", "Homepage": "https://district0x.io" }, - "marketcap_usd": 1885462, + "marketcap_usd": 1920002, "name": "District0x Network Token", "network": "eth", "shortcut": "DNT", @@ -7139,7 +7121,7 @@ "links": { "Homepage": "https://dock.io" }, - "marketcap_usd": 1949841, + "marketcap_usd": 1859367, "name": "Dock", "network": "eth", "shortcut": "DOCK", @@ -7177,7 +7159,7 @@ "links": { "Homepage": "https://dovu.io" }, - "marketcap_usd": 165559, + "marketcap_usd": 160675, "name": "Dovu", "network": "eth", "shortcut": "DOV", @@ -7236,7 +7218,7 @@ "links": { "Homepage": "https://dreamteam.gg" }, - "marketcap_usd": 1567688, + "marketcap_usd": 1427231, "name": "DREAM", "network": "eth", "shortcut": "DREAM", @@ -7256,7 +7238,7 @@ "Github": "https://github.com/dragonchain/dragonchain", "Homepage": "https://dragonchain.com" }, - "marketcap_usd": 6372370, + "marketcap_usd": 6340951, "name": "Dragon", "network": "eth", "shortcut": "DRGN", @@ -7294,7 +7276,7 @@ "links": { "Homepage": "https://token.domraider.com" }, - "marketcap_usd": 357613, + "marketcap_usd": 339135, "name": "DomRaider", "network": "eth", "shortcut": "DRT", @@ -7393,7 +7375,7 @@ "Github": "https://github.com/dethertech", "Homepage": "https://dether.io" }, - "marketcap_usd": 87693, + "marketcap_usd": 88079, "name": "dether", "network": "eth", "shortcut": "DTH", @@ -7412,7 +7394,7 @@ "links": { "Homepage": "https://www.tokens.net" }, - "marketcap_usd": 16038581, + "marketcap_usd": 15705361, "name": "Dynamic Trading Rights", "network": "eth", "shortcut": "DTR", @@ -7431,7 +7413,7 @@ "links": { "Homepage": "https://datarius.io" }, - "marketcap_usd": 30870, + "marketcap_usd": 19126, "name": "Datarius Credit", "network": "eth", "shortcut": "DTRC", @@ -7470,7 +7452,7 @@ "links": { "Homepage": "https://datawallet.com" }, - "marketcap_usd": 238508, + "marketcap_usd": 218343, "name": "Datawallet", "network": "eth", "shortcut": "DXT", @@ -7547,7 +7529,7 @@ "links": { "Homepage": "https://ebcoin.io" }, - "marketcap_usd": 275245, + "marketcap_usd": 216912, "name": "EBCoin", "network": "eth", "shortcut": "EBC", @@ -7624,7 +7606,7 @@ "links": { "Homepage": "https://omnitude.tech" }, - "marketcap_usd": 239776, + "marketcap_usd": 394246, "name": "Omnitude", "network": "eth", "shortcut": "ECOM", @@ -7662,7 +7644,7 @@ "links": { "Homepage": "https://edgeless.io" }, - "marketcap_usd": 782614, + "marketcap_usd": 699657, "name": "Edgeless", "network": "eth", "shortcut": "EDG", @@ -7681,7 +7663,7 @@ "links": { "Homepage": "https://eidoo.io" }, - "marketcap_usd": 5683099, + "marketcap_usd": 5634483, "name": "Eidoo", "network": "eth", "shortcut": "EDO", @@ -7701,7 +7683,7 @@ "Github": "https://github.com/EndorCoin", "Homepage": "https://www.endor.com" }, - "marketcap_usd": 2572376, + "marketcap_usd": 3174626, "name": "Endor Protocol Token", "network": "eth", "shortcut": "EDR", @@ -7761,7 +7743,7 @@ "Github": "https://github.com/egretia", "Homepage": "https://www.egretia.io" }, - "marketcap_usd": 3078001, + "marketcap_usd": 2626521, "name": "Egretia Token", "network": "eth", "shortcut": "EGT", @@ -7819,7 +7801,7 @@ "links": { "Homepage": "https://echolink.info" }, - "marketcap_usd": 334185, + "marketcap_usd": 378423, "name": "EchoLink", "network": "eth", "shortcut": "EKO", @@ -7857,7 +7839,7 @@ "links": { "Homepage": "https://electrify.asia" }, - "marketcap_usd": 381289, + "marketcap_usd": 205848, "name": "Electrify.Asia", "network": "eth", "shortcut": "ELEC", @@ -7877,7 +7859,7 @@ "Github": "https://github.com/aelfProject", "Homepage": "https://aelf.io/" }, - "marketcap_usd": 27753087, + "marketcap_usd": 26864693, "name": "ELF Token", "network": "eth", "shortcut": "ELF", @@ -7916,7 +7898,7 @@ "Github": "https://github.com/eltcoin", "Homepage": "http://www.eltcoin.tech/" }, - "marketcap_usd": 5638, + "marketcap_usd": 7597, "name": "ELTCOIN", "network": "eth", "shortcut": "ELTCOIN", @@ -7936,7 +7918,7 @@ "Github": "https://github.com/Elysian-ELY", "Homepage": "https://elycoin.io" }, - "marketcap_usd": 31307, + "marketcap_usd": 34619, "name": "ELYCOIN", "network": "eth", "shortcut": "ELY", @@ -8074,7 +8056,7 @@ "Github": "https://github.com/enigmampc", "Homepage": "https://enigma.co/" }, - "marketcap_usd": 7341792, + "marketcap_usd": 6249722, "name": "Enigma", "network": "eth", "shortcut": "ENG", @@ -8093,7 +8075,7 @@ "links": { "Homepage": "https://engagementtoken.com" }, - "marketcap_usd": 9580, + "marketcap_usd": 5356, "name": "Engagement Token", "network": "eth", "shortcut": "ENGT", @@ -8113,7 +8095,7 @@ "Github": "https://github.com/enjin/contracts", "Homepage": "https://enjincoin.io" }, - "marketcap_usd": 42680782, + "marketcap_usd": 39544487, "name": "ENJIN", "network": "eth", "shortcut": "ENJ", @@ -8212,7 +8194,7 @@ "links": { "Homepage": "https://emphy.io" }, - "marketcap_usd": 62827, + "marketcap_usd": 17779, "name": "Emphy", "network": "eth", "shortcut": "EPY", @@ -8250,7 +8232,7 @@ "links": { "Homepage": "https://eroscoin.org" }, - "marketcap_usd": 149963, + "marketcap_usd": 148242, "name": "Eroscoin", "network": "eth", "shortcut": "ERO", @@ -8270,7 +8252,7 @@ "Github": "https://github.com/Krishtopa/ContractEristica", "Homepage": "https://eristica.com/" }, - "marketcap_usd": 203131, + "marketcap_usd": 173418, "name": "Eristica", "network": "eth", "shortcut": "ERT", @@ -8310,7 +8292,7 @@ "Github": "https://github.com/EtherSportz/ESZCoin", "Homepage": "https://ethersportz.com" }, - "marketcap_usd": 111718, + "marketcap_usd": 35533, "name": "ESZCoin", "network": "eth", "shortcut": "ESZ", @@ -8504,7 +8486,7 @@ "Github": "https://github.com/stasisnet", "Homepage": "https://stasis.net" }, - "marketcap_usd": 34623560, + "marketcap_usd": 35013779, "name": "STASIS EURS", "network": "eth", "shortcut": "EURS", @@ -8542,7 +8524,7 @@ "links": { "Homepage": "https://eventchain.io" }, - "marketcap_usd": 54142, + "marketcap_usd": 42586, "name": "EventChain", "network": "eth", "shortcut": "EVC", @@ -8581,7 +8563,7 @@ "Github": "https://github.com/devery", "Homepage": "https://devery.io" }, - "marketcap_usd": 72031, + "marketcap_usd": 64645, "name": "Devery", "network": "eth", "shortcut": "EVE", @@ -8601,7 +8583,7 @@ "Github": "https://github.com/evedo-co", "Homepage": "https://www.evedo.co" }, - "marketcap_usd": 50283, + "marketcap_usd": 38421, "name": "Evedo Token", "network": "eth", "shortcut": "EVED", @@ -8660,7 +8642,7 @@ "links": { "Homepage": "https://everex.io " }, - "marketcap_usd": 2988501, + "marketcap_usd": 2533880, "name": "EVX Token", "network": "eth", "shortcut": "EVX", @@ -8758,7 +8740,7 @@ "links": { "Homepage": "https://exrnchain.com" }, - "marketcap_usd": 779269, + "marketcap_usd": 651617, "name": "EXRNchain", "network": "eth", "shortcut": "EXRN", @@ -8797,7 +8779,7 @@ "links": { "Homepage": "https://experty.io/en" }, - "marketcap_usd": 461082, + "marketcap_usd": 444845, "name": "Experty", "network": "eth", "shortcut": "EXY", @@ -8874,7 +8856,7 @@ "links": { "Homepage": "https://tokensale.faceter.io" }, - "marketcap_usd": 298155, + "marketcap_usd": 280564, "name": "Faceter", "network": "eth", "shortcut": "FACE", @@ -8972,7 +8954,7 @@ "links": { "Homepage": "https://friendz.io" }, - "marketcap_usd": 428889, + "marketcap_usd": 400550, "name": "Friendz", "network": "eth", "shortcut": "FDZ", @@ -9091,7 +9073,7 @@ "Github": "https://github.com/FortKnoxster", "Homepage": "https://fortknoxster.com" }, - "marketcap_usd": 192176, + "marketcap_usd": 168669, "name": "Knoxstertoken", "network": "eth", "shortcut": "FKX", @@ -9110,7 +9092,7 @@ "links": { "Homepage": "https://www.flixxo.com" }, - "marketcap_usd": 284358, + "marketcap_usd": 306243, "name": "Flixxo", "network": "eth", "shortcut": "FLIXX", @@ -9129,7 +9111,7 @@ "links": { "Homepage": "https://firelotto.io" }, - "marketcap_usd": 70620, + "marketcap_usd": 63992, "name": "Fire Lotto", "network": "eth", "shortcut": "FLOT", @@ -9149,7 +9131,7 @@ "Github": "https://github.com/gameflip", "Homepage": "https://gameflip.com" }, - "marketcap_usd": 319671, + "marketcap_usd": 296123, "name": "FLIP Token", "network": "eth", "shortcut": "FLP", @@ -9265,7 +9247,7 @@ "links": { "Homepage": "https://www.foglink.io" }, - "marketcap_usd": 399755, + "marketcap_usd": 299650, "name": "FNKOS", "network": "eth", "shortcut": "FNKOS", @@ -9284,7 +9266,7 @@ "links": { "Homepage": "https://fintab.io/ico" }, - "marketcap_usd": 8391, + "marketcap_usd": 4173, "name": "Fintab", "network": "eth", "shortcut": "FNTB", @@ -9304,7 +9286,7 @@ "Github": "https://github.com/f-o-a-m", "Homepage": "http://foam.space" }, - "marketcap_usd": 3315362, + "marketcap_usd": 3578841, "name": "FOAM Token", "network": "eth", "shortcut": "FOAM", @@ -9362,7 +9344,7 @@ "links": { "Homepage": "https://www.fota.io" }, - "marketcap_usd": 130565, + "marketcap_usd": 127351, "name": "Fortuna", "network": "eth", "shortcut": "FOTA", @@ -9498,7 +9480,7 @@ "links": { "Homepage": "https://fusion.org" }, - "marketcap_usd": 3854545, + "marketcap_usd": 3824255, "name": "Fusion", "network": "eth", "shortcut": "FSN", @@ -9536,7 +9518,7 @@ "links": { "Homepage": "https://fanstime.org" }, - "marketcap_usd": 304559, + "marketcap_usd": 286702, "name": "FansTime", "network": "eth", "shortcut": "FTI", @@ -9575,7 +9557,7 @@ "Github": "https://github.com/farmatrust", "Homepage": "https://www.farmatrust.io" }, - "marketcap_usd": 204430, + "marketcap_usd": 88062, "name": "FarmaTrust Token", "network": "eth", "shortcut": "FTT", @@ -9594,7 +9576,7 @@ "links": { "Homepage": "https://www.fintrux.com" }, - "marketcap_usd": 453084, + "marketcap_usd": 668929, "name": "FintruX Network", "network": "eth", "shortcut": "FTX", @@ -9614,7 +9596,7 @@ "Github": "https://github.com/futuraxproject", "Homepage": "https://futurax.global" }, - "marketcap_usd": 2177, + "marketcap_usd": 2436, "name": "FUTURAX", "network": "eth", "shortcut": "FTXT", @@ -9634,7 +9616,7 @@ "Github": "https://github.com/etherparty", "Homepage": "https://etherparty.io" }, - "marketcap_usd": 1231850, + "marketcap_usd": 1323055, "name": "Etherparty FUEL", "network": "eth", "shortcut": "FUEL", @@ -9653,7 +9635,7 @@ "links": { "Homepage": "https://funfair.io" }, - "marketcap_usd": 10092832, + "marketcap_usd": 9411593, "name": "Funfair", "network": "eth", "shortcut": "FUN", @@ -9672,7 +9654,7 @@ "links": { "Homepage": "https://fuzex.co" }, - "marketcap_usd": 234563, + "marketcap_usd": 290739, "name": "FuzeX", "network": "eth", "shortcut": "FXT", @@ -9730,7 +9712,7 @@ "links": { "Homepage": "https://flyp.me" }, - "marketcap_usd": 148227, + "marketcap_usd": 84458, "name": "FlypMe", "network": "eth", "shortcut": "FYP", @@ -10043,7 +10025,7 @@ "links": { "Homepage": "https://gems.org" }, - "marketcap_usd": 126313, + "marketcap_usd": 90733, "name": "Gems", "network": "eth", "shortcut": "GEM", @@ -10063,7 +10045,7 @@ "Github": "https://github.com/daostack", "Homepage": "https://daostack.io" }, - "marketcap_usd": 1818231, + "marketcap_usd": 1231815, "name": "DAOstack", "network": "eth", "shortcut": "GEN", @@ -10082,7 +10064,7 @@ "links": { "Homepage": "https://parkgene.io" }, - "marketcap_usd": 30210, + "marketcap_usd": 46793, "name": "Parkgene", "network": "eth", "shortcut": "GENE", @@ -10102,7 +10084,7 @@ "Github": "https://github.com/Getprotocol", "Homepage": "http://www.get-protocol.io" }, - "marketcap_usd": 2534277, + "marketcap_usd": 2335321, "name": "GET Protocol", "network": "eth", "shortcut": "GET", @@ -10257,7 +10239,7 @@ "links": { "Homepage": "https://gnosis.pm" }, - "marketcap_usd": 10381125, + "marketcap_usd": 10653346, "name": "Gnosis", "network": "eth", "shortcut": "GNO", @@ -10277,7 +10259,7 @@ "Github": "https://github.com/golemfactory/golem", "Homepage": "https://golem.network" }, - "marketcap_usd": 28596156, + "marketcap_usd": 29748309, "name": "Golem", "network": "eth", "shortcut": "GNT", @@ -10296,7 +10278,7 @@ "links": { "Homepage": "https://genaro.network" }, - "marketcap_usd": 1177438, + "marketcap_usd": 1024350, "name": "Genaro Network", "network": "eth", "shortcut": "GNX", @@ -10316,7 +10298,7 @@ "Github": "https://github.com/GNYIO", "Homepage": "https://www.gny.io/" }, - "marketcap_usd": 3744826, + "marketcap_usd": 3808510, "name": "GNY", "network": "eth", "shortcut": "GNY", @@ -10355,7 +10337,7 @@ "links": { "Homepage": "https://gonetwork.co/index.html" }, - "marketcap_usd": 161449, + "marketcap_usd": 137896, "name": "GoNetwork", "network": "eth", "shortcut": "GOT", @@ -10374,7 +10356,7 @@ "links": { "Homepage": "http://gridplus.io" }, - "marketcap_usd": 1055301, + "marketcap_usd": 1032100, "name": "Grid+", "network": "eth", "shortcut": "GRID", @@ -10452,7 +10434,7 @@ "links": { "Homepage": "https://www.gsc.social" }, - "marketcap_usd": 1486255, + "marketcap_usd": 1532501, "name": "Global Social Chain", "network": "eth", "shortcut": "GSC", @@ -10491,7 +10473,7 @@ "Github": "https://github.com/GameLeLe", "Homepage": "https://game.com" }, - "marketcap_usd": 2458053, + "marketcap_usd": 2502172, "name": "GTC Token", "network": "eth", "shortcut": "GTC", @@ -10531,7 +10513,7 @@ "Github": "https://github.com/GIFTO-io", "Homepage": "https://gifto.io/" }, - "marketcap_usd": 3543856, + "marketcap_usd": 8111679, "name": "Gifto", "network": "eth", "shortcut": "GTO", @@ -10550,7 +10532,7 @@ "links": { "Homepage": "https://peerguess.com" }, - "marketcap_usd": 6473, + "marketcap_usd": 5902, "name": "Peerguess", "network": "eth", "shortcut": "GUESS", @@ -10589,7 +10571,7 @@ "links": { "Homepage": "https://matchpool.co" }, - "marketcap_usd": 120456, + "marketcap_usd": 103995, "name": "Matchpool", "network": "eth", "shortcut": "GUP", @@ -10609,7 +10591,7 @@ "Github": "https://github.com/GenesisVision", "Homepage": "https://genesis.vision" }, - "marketcap_usd": 2379464, + "marketcap_usd": 2241543, "name": "Genesis Vision", "network": "eth", "shortcut": "GVT", @@ -10765,7 +10747,7 @@ "links": { "Homepage": "https://www.showhand.io" }, - "marketcap_usd": 4749, + "marketcap_usd": 5807, "name": "ShowHand", "network": "eth", "shortcut": "HAND", @@ -10822,7 +10804,7 @@ "links": { "Homepage": "https://heartbout.com" }, - "marketcap_usd": 43423, + "marketcap_usd": 45749, "name": "HeartBout", "network": "eth", "shortcut": "HB", @@ -10841,7 +10823,7 @@ "links": { "Homepage": "https://www.hubii.network" }, - "marketcap_usd": 1315823, + "marketcap_usd": 1110745, "name": "Hubii Network", "network": "eth", "shortcut": "HBT", @@ -10860,7 +10842,7 @@ "links": { "Homepage": "https://www.hbzcoin.com/#" }, - "marketcap_usd": 209649, + "marketcap_usd": 369286, "name": "HBZ coin", "network": "eth", "shortcut": "HBZ", @@ -10938,7 +10920,7 @@ "links": { "Homepage": "https://heronode.io" }, - "marketcap_usd": 35981, + "marketcap_usd": 29438, "name": "HeroNode", "network": "eth", "shortcut": "HER", @@ -10978,7 +10960,7 @@ "Github": "https://github.com/myHelloGold/Foundation", "Homepage": "https://www.hellogold.org" }, - "marketcap_usd": 157580, + "marketcap_usd": 146531, "name": "HelloGold", "network": "eth", "shortcut": "HGT", @@ -11074,7 +11056,7 @@ "links": { "Homepage": "https://hacken.io" }, - "marketcap_usd": 574868, + "marketcap_usd": 565065, "name": "Hacken", "network": "eth", "shortcut": "HKN", @@ -11132,7 +11114,7 @@ "links": { "Homepage": "https://humaniq.com" }, - "marketcap_usd": 472296, + "marketcap_usd": 469360, "name": "Humaniq", "network": "eth", "shortcut": "HMQ", @@ -11210,7 +11192,7 @@ "Github": "https://github.com/ethorse", "Homepage": "https://ethorse.com" }, - "marketcap_usd": 37548, + "marketcap_usd": 14380, "name": "Ethorse", "network": "eth", "shortcut": "HORSE", @@ -11230,7 +11212,7 @@ "Github": "https://github.com/Holo-Host", "Homepage": "https://holo.host/" }, - "marketcap_usd": 52604427, + "marketcap_usd": 50042585, "name": "Holo Token", "network": "eth", "shortcut": "HOT (Holo)", @@ -11249,7 +11231,7 @@ "links": { "Homepage": "https://thehydrofoundation.com/" }, - "marketcap_usd": 784254, + "marketcap_usd": 811270, "name": "Hydro Protocol", "network": "eth", "shortcut": "HOT (Hydro)", @@ -11287,7 +11269,7 @@ "links": { "Homepage": "https://www.hbg.com" }, - "marketcap_usd": 604118139, + "marketcap_usd": 660966773, "name": "Huobi Token", "network": "eth", "shortcut": "HT", @@ -11386,7 +11368,7 @@ "Github": "https://github.com/HiveProjectLTD", "Homepage": "https://www.hiveterminal.com" }, - "marketcap_usd": 836973, + "marketcap_usd": 780298, "name": "Hiveterminal Token", "network": "eth", "shortcut": "HVN", @@ -11406,7 +11388,7 @@ "Github": "https://github.com/hydrogen-dev", "Homepage": "https://www.hydrogenplatform.com/hydro" }, - "marketcap_usd": 3449994, + "marketcap_usd": 2764215, "name": "Hydro", "network": "eth", "shortcut": "HYDRO", @@ -11579,7 +11561,7 @@ "links": { "Homepage": "https://indahash.com" }, - "marketcap_usd": 728210, + "marketcap_usd": 529592, "name": "indaHash", "network": "eth", "shortcut": "IDH", @@ -11599,7 +11581,7 @@ "Github": "https://github.com/rupiah-token/", "Homepage": "https://www.rupiahtoken.com" }, - "marketcap_usd": 86785, + "marketcap_usd": 84730, "name": "Rupiah Token", "network": "eth", "shortcut": "IDRT", @@ -11618,7 +11600,7 @@ "links": { "Homepage": "https://investfeed.com" }, - "marketcap_usd": 44898, + "marketcap_usd": 30384, "name": "InvestFeed", "network": "eth", "shortcut": "IFT", @@ -11637,7 +11619,7 @@ "links": { "Homepage": "http://igtoken.net" }, - "marketcap_usd": 12382, + "marketcap_usd": 15917, "name": "IGToken", "network": "eth", "shortcut": "IG", @@ -11676,7 +11658,7 @@ "links": { "Homepage": "https://ihtcoin.com" }, - "marketcap_usd": 737407, + "marketcap_usd": 711096, "name": "I HOUSE TOKEN", "network": "eth", "shortcut": "IHT", @@ -11753,7 +11735,7 @@ "links": { "Homepage": "https://indorse.io" }, - "marketcap_usd": 71404, + "marketcap_usd": 40693, "name": "Indorse", "network": "eth", "shortcut": "IND", @@ -11773,7 +11755,7 @@ "Github": "https://github.com/InfinitusToken/InfinitusToken", "Homepage": "https://inftech.io/ " }, - "marketcap_usd": 101350, + "marketcap_usd": 75660, "name": "InfinitusTokens", "network": "eth", "shortcut": "INF", @@ -11792,7 +11774,7 @@ "links": { "Homepage": "https://iungo.network" }, - "marketcap_usd": 32106, + "marketcap_usd": 16934, "name": "Iungo", "network": "eth", "shortcut": "ING", @@ -11830,7 +11812,7 @@ "links": { "Homepage": "https://insights.network" }, - "marketcap_usd": 917830, + "marketcap_usd": 1119908, "name": "Insights Network", "network": "eth", "shortcut": "INSTAR", @@ -11888,7 +11870,7 @@ "Github": "https://github.com/InMax-Exchange", "Homepage": "https://inmax.live/ " }, - "marketcap_usd": 53733, + "marketcap_usd": 53507, "name": "Token INMAX", "network": "eth", "shortcut": "INX", @@ -11908,7 +11890,7 @@ "Github": "https://github.com/Internxt/", "Homepage": "https://internxt.com/" }, - "marketcap_usd": 378565, + "marketcap_usd": 378615, "name": "Internxt", "network": "eth", "shortcut": "INXT", @@ -11947,7 +11929,7 @@ "Github": "https://github.com/iotexproject/iotex-core", "Homepage": "http://iotex.io/" }, - "marketcap_usd": 9787130, + "marketcap_usd": 9654982, "name": "IoTeX Network", "network": "eth", "shortcut": "IOTX", @@ -11967,7 +11949,7 @@ "Github": "https://github.com/InsurePal", "Homepage": "https://insurepal.io/" }, - "marketcap_usd": 587921, + "marketcap_usd": 484526, "name": "InsurePal token", "network": "eth", "shortcut": "IPL", @@ -11986,7 +11968,7 @@ "links": { "Homepage": "https://ip.sx" }, - "marketcap_usd": 170299, + "marketcap_usd": 99924, "name": "IP Exchange", "network": "eth", "shortcut": "IPSX", @@ -12006,7 +11988,7 @@ "Github": "https://github.com/iqeon", "Homepage": "https://iqeon.io/" }, - "marketcap_usd": 5928112, + "marketcap_usd": 5378154, "name": "IQeon", "network": "eth", "shortcut": "IQN", @@ -12066,7 +12048,7 @@ "Github": "https://github.com/IoTChainCode", "Homepage": "https://iotchain.io/" }, - "marketcap_usd": 5398160, + "marketcap_usd": 5725576, "name": "IoT Chain", "network": "eth", "shortcut": "ITC", @@ -12125,7 +12107,7 @@ "links": { "Homepage": "https://www.ivykoin.com" }, - "marketcap_usd": 5753867, + "marketcap_usd": 3319792, "name": "IvyKoin Public Network Tokens", "network": "eth", "shortcut": "IVY", @@ -12144,7 +12126,7 @@ "links": { "Homepage": "https://www.insurex.co" }, - "marketcap_usd": 148860, + "marketcap_usd": 101118, "name": "InsureX", "network": "eth", "shortcut": "IXT", @@ -12183,7 +12165,7 @@ "Github": "https://github.com/jet8", "Homepage": "https://jet8.io" }, - "marketcap_usd": 179995, + "marketcap_usd": 118739, "name": "J8T Token", "network": "eth", "shortcut": "J8T", @@ -12260,7 +12242,7 @@ "Github": "https://github.com/jibrelnetwork", "Homepage": "https://jibrel.network" }, - "marketcap_usd": 4379930, + "marketcap_usd": 3738211, "name": "Jibrel Network", "network": "eth", "shortcut": "JNT", @@ -12338,7 +12320,7 @@ "Github": "https://github.com/jsecoin", "Homepage": "https://jsecoin.com" }, - "marketcap_usd": 39691, + "marketcap_usd": 36715, "name": "JSE Token", "network": "eth", "shortcut": "JSE", @@ -12357,7 +12339,7 @@ "links": { "Homepage": "http://www.kan.land" }, - "marketcap_usd": 10399559, + "marketcap_usd": 9459837, "name": "BitKan", "network": "eth", "shortcut": "KAN", @@ -12435,7 +12417,7 @@ "links": { "Homepage": "https://kindads.io" }, - "marketcap_usd": 23098, + "marketcap_usd": 24059, "name": "Kind Ads Token", "network": "eth", "shortcut": "KIND", @@ -12474,7 +12456,7 @@ "Github": "https://github.com/KyberNetwork", "Homepage": "https://kyber.network" }, - "marketcap_usd": 89338878, + "marketcap_usd": 80325528, "name": "Kyber Network", "network": "eth", "shortcut": "KNC", @@ -12493,7 +12475,7 @@ "links": { "Homepage": "https://kanadecoin.com" }, - "marketcap_usd": 49915, + "marketcap_usd": 57730, "name": "KanadeCoin", "network": "eth", "shortcut": "KNDC", @@ -12512,7 +12494,7 @@ "links": { "Homepage": "https://kora.network" }, - "marketcap_usd": 7294, + "marketcap_usd": 6689, "name": "Kora Network Token", "network": "eth", "shortcut": "KNT", @@ -12571,7 +12553,7 @@ "Github": "https://github.com/Cryptense/", "Homepage": "https://kryll.io/" }, - "marketcap_usd": 829283, + "marketcap_usd": 833690, "name": "Kryll", "network": "eth", "shortcut": "KRL", @@ -12630,7 +12612,7 @@ "links": { "Homepage": "https://ico.kuende.com" }, - "marketcap_usd": 33002, + "marketcap_usd": 26502, "name": "Kuende Token", "network": "eth", "shortcut": "KUE", @@ -12649,7 +12631,7 @@ "links": { "Homepage": "https://4new.io" }, - "marketcap_usd": 7818, + "marketcap_usd": 7098, "name": "4NEW", "network": "eth", "shortcut": "KWATT", @@ -12707,7 +12689,7 @@ "Github": "https://github.com/latoken", "Homepage": "https://latoken.com/" }, - "marketcap_usd": 13024208, + "marketcap_usd": 11657299, "name": "LATOKEN", "network": "eth", "shortcut": "LA", @@ -12746,7 +12728,7 @@ "Github": "https://github.com/LambdaIM", "Homepage": "https://www.lambda.im/" }, - "marketcap_usd": 7984277, + "marketcap_usd": 7447987, "name": "Lambda", "network": "eth", "shortcut": "LAMB", @@ -12784,7 +12766,7 @@ "links": { "Homepage": "https://www.mycred.io" }, - "marketcap_usd": 8486695, + "marketcap_usd": 7803185, "name": "Cred", "network": "eth", "shortcut": "LBA", @@ -12803,7 +12785,7 @@ "links": { "Homepage": "https://www.localcoinswap.com" }, - "marketcap_usd": 173359, + "marketcap_usd": 129229, "name": "LocalCoinSwap", "network": "eth", "shortcut": "LCS", @@ -12822,7 +12804,7 @@ "links": { "Homepage": "https://www.leadcoin.network/" }, - "marketcap_usd": 38025, + "marketcap_usd": 24646, "name": "LEADCOIN", "network": "eth", "shortcut": "LDC", @@ -12862,7 +12844,7 @@ "Github": "https://github.com/livecodingtvofficial", "Homepage": "https://ledu.education-ecosystem.com" }, - "marketcap_usd": 859083, + "marketcap_usd": 0, "name": "Education Ecosystem", "network": "eth", "shortcut": "LEDU", @@ -12882,7 +12864,7 @@ "Github": "https://github.com/ETHLend", "Homepage": "https://ethlend.io/" }, - "marketcap_usd": 27814644, + "marketcap_usd": 22834921, "name": "EHTLend", "network": "eth", "shortcut": "LEND", @@ -12901,7 +12883,7 @@ "links": { "Homepage": "https://www.leocoin.org/" }, - "marketcap_usd": 180915, + "marketcap_usd": 238753, "name": "LEOcoin", "network": "eth", "shortcut": "LEO", @@ -12977,7 +12959,7 @@ "links": { "Homepage": "http://legendsroomlv.com" }, - "marketcap_usd": 23448, + "marketcap_usd": 24344, "name": "Legends", "network": "eth", "shortcut": "LGD", @@ -13055,7 +13037,7 @@ "Github": "https://github.com/windingtree", "Homepage": "https://windingtree.com/" }, - "marketcap_usd": 1956044, + "marketcap_usd": 1342912, "name": "Winding Tree", "network": "eth", "shortcut": "LIF", @@ -13074,7 +13056,7 @@ "links": { "Homepage": "http://www.lifelabs.io" }, - "marketcap_usd": 680281, + "marketcap_usd": 646610, "name": "LIFE", "network": "eth", "shortcut": "LIFE", @@ -13113,7 +13095,7 @@ "links": { "Homepage": "https://link.smartcontract.com" }, - "marketcap_usd": 784063483, + "marketcap_usd": 692178756, "name": "Chainlink", "network": "eth", "shortcut": "LINK (Chainlink)", @@ -13151,7 +13133,7 @@ "links": { "Homepage": "https://www.linkey.info" }, - "marketcap_usd": 759870, + "marketcap_usd": 723937, "name": "Linkey", "network": "eth", "shortcut": "LKY", @@ -13171,7 +13153,7 @@ "Github": "https://github.com/GNYIO", "Homepage": "https://www.gny.io/lisk" }, - "marketcap_usd": 562243, + "marketcap_usd": 571390, "name": "Lisk Machine Learning", "network": "eth", "shortcut": "LML", @@ -13191,7 +13173,7 @@ "Github": "https://github.com/lendingblock", "Homepage": "https://lendingblock.com" }, - "marketcap_usd": 647639, + "marketcap_usd": 637885, "name": "Lendingblock", "network": "eth", "shortcut": "LND", @@ -13210,7 +13192,7 @@ "links": { "Homepage": "https://LockChain.co" }, - "marketcap_usd": 3431651, + "marketcap_usd": 3240705, "name": "LockChain", "network": "eth", "shortcut": "LOC", @@ -13230,7 +13212,7 @@ "Github": "http://github.com/locipro/loci-coin-sale", "Homepage": "https://locipro.com" }, - "marketcap_usd": 25445, + "marketcap_usd": 15440, "name": "LOCIcoin", "network": "eth", "shortcut": "LOCI", @@ -13249,7 +13231,7 @@ "links": { "Homepage": "https://www.locuschain.com" }, - "marketcap_usd": 2813143, + "marketcap_usd": 2814817, "name": "Locus Chain", "network": "eth", "shortcut": "LOCUS", @@ -13307,7 +13289,7 @@ "Github": "github.com/loomnetwork/", "Homepage": "https://loomx.io" }, - "marketcap_usd": 11020593, + "marketcap_usd": 11898376, "name": "Loom Network", "network": "eth", "shortcut": "LOOM", @@ -13346,7 +13328,7 @@ "links": { "Homepage": "https://liquidity.network/" }, - "marketcap_usd": 395131, + "marketcap_usd": 698724, "name": "Liquidity Network Token", "network": "eth", "shortcut": "LQD", @@ -13366,7 +13348,7 @@ "Github": "https://github.com/loopring", "Homepage": "https://loopring.org" }, - "marketcap_usd": 30549035, + "marketcap_usd": 27018877, "name": "Loopring", "network": "eth", "shortcut": "LRC", @@ -13444,7 +13426,7 @@ "Github": "https://github.com/lunyr", "Homepage": "https://lunyr.com" }, - "marketcap_usd": 1066858, + "marketcap_usd": 1031403, "name": "Lunyr", "network": "eth", "shortcut": "LUN", @@ -13562,7 +13544,7 @@ "Github": "https://github.com/decentraland", "Homepage": "https://decentraland.org" }, - "marketcap_usd": 21478146, + "marketcap_usd": 23397464, "name": "Decentraland MANA", "network": "eth", "shortcut": "MANA", @@ -13600,7 +13582,7 @@ "links": { "Homepage": "https://midasprotocol.io/" }, - "marketcap_usd": 431249, + "marketcap_usd": 489394, "name": "MIDAS PROTOCOL", "network": "eth", "shortcut": "MAS", @@ -13678,7 +13660,7 @@ "links": { "Homepage": "https://crypto.com" }, - "marketcap_usd": 41224593, + "marketcap_usd": 46366740, "name": "Crypto.com", "network": "eth", "shortcut": "MCO", @@ -13697,7 +13679,7 @@ "links": { "Homepage": "https://moedaseeds.com" }, - "marketcap_usd": 5756106, + "marketcap_usd": 5317121, "name": "Moeda Loyalty Points", "network": "eth", "shortcut": "MDA", @@ -13716,7 +13698,7 @@ "links": { "Homepage": "https://www.mdt.co" }, - "marketcap_usd": 2209024, + "marketcap_usd": 2168486, "name": "Measurable Data Token", "network": "eth", "shortcut": "MDT", @@ -13755,7 +13737,7 @@ "Github": "https://github.com/mesg-foundation", "Homepage": "https://mesg.com" }, - "marketcap_usd": 358744, + "marketcap_usd": 319711, "name": "MESG", "network": "eth", "shortcut": "MESG", @@ -13794,7 +13776,7 @@ "links": { "Homepage": "https://www.metronome.io" }, - "marketcap_usd": 2936206, + "marketcap_usd": 2886954, "name": "Metronome", "network": "eth", "shortcut": "MET", @@ -13813,7 +13795,7 @@ "links": { "Homepage": "https://metamorph.pro" }, - "marketcap_usd": 54765, + "marketcap_usd": 48740, "name": "MetaMorph", "network": "eth", "shortcut": "METM", @@ -13833,7 +13815,7 @@ "Github": "https://github.com/syncfab", "Homepage": "https://syncfab.com/" }, - "marketcap_usd": 442810, + "marketcap_usd": 340599, "name": "SyncFab Smart Manufacturing Blockchain", "network": "eth", "shortcut": "MFG", @@ -13853,7 +13835,7 @@ "Github": "https://github.com/MainframeHQ", "Homepage": "https://mainframe.com" }, - "marketcap_usd": 4797054, + "marketcap_usd": 5093143, "name": "Mainframe Token", "network": "eth", "shortcut": "MFT", @@ -13872,7 +13854,7 @@ "links": { "Homepage": "https://mftu.net" }, - "marketcap_usd": 4571, + "marketcap_usd": 10620, "name": "Mainstream For The Underground", "network": "eth", "shortcut": "MFTU", @@ -13891,7 +13873,7 @@ "links": { "Homepage": "https://mobilego.io" }, - "marketcap_usd": 944876, + "marketcap_usd": 644879, "name": "MobileGo", "network": "eth", "shortcut": "MGO", @@ -13968,7 +13950,7 @@ "links": { "Homepage": "https://token.morpheuslabs.io" }, - "marketcap_usd": 1114859, + "marketcap_usd": 857823, "name": "Morpheus Infrastructure Token", "network": "eth", "shortcut": "MITX", @@ -13988,7 +13970,7 @@ "Github": "https://github.com/makerdao", "Homepage": "https://makerdao.com" }, - "marketcap_usd": 257434224, + "marketcap_usd": 207551876, "name": "MakerDAO", "network": "eth", "shortcut": "MKR", @@ -14027,7 +14009,7 @@ "links": { "Homepage": "https://melonport.com" }, - "marketcap_usd": 3187168, + "marketcap_usd": 2863138, "name": "Melonport", "network": "eth", "shortcut": "MLN (new)", @@ -14046,7 +14028,7 @@ "links": { "Homepage": "https://minereum.com" }, - "marketcap_usd": 54826, + "marketcap_usd": 62899, "name": "Minereum", "network": "eth", "shortcut": "MNE", @@ -14105,7 +14087,7 @@ "links": { "Homepage": "https://moss.land" }, - "marketcap_usd": 4706819, + "marketcap_usd": 5108535, "name": "Moss Coin", "network": "eth", "shortcut": "MOC", @@ -14182,7 +14164,7 @@ "links": { "Homepage": "https://mark.space" }, - "marketcap_usd": 248617, + "marketcap_usd": 204803, "name": "MARK.SPACE", "network": "eth", "shortcut": "MRK", @@ -14278,7 +14260,7 @@ "links": { "Homepage": "http://www.monetha.io" }, - "marketcap_usd": 1829313, + "marketcap_usd": 1715981, "name": "Monetha", "network": "eth", "shortcut": "MTH", @@ -14297,7 +14279,7 @@ "links": { "Homepage": "https://www.metalpay.com" }, - "marketcap_usd": 11093388, + "marketcap_usd": 10465618, "name": "Metal", "network": "eth", "shortcut": "MTL", @@ -14316,7 +14298,7 @@ "links": { "Homepage": "https://medicalchain.com" }, - "marketcap_usd": 587341, + "marketcap_usd": 638158, "name": "MedToken", "network": "eth", "shortcut": "MTN", @@ -14373,7 +14355,7 @@ "links": { "Homepage": "https://www.matryx.ai" }, - "marketcap_usd": 278040, + "marketcap_usd": 290868, "name": "Matryx", "network": "eth", "shortcut": "MTX", @@ -14450,7 +14432,7 @@ "links": { "Homepage": "http://mvlchain.io" }, - "marketcap_usd": 1343646, + "marketcap_usd": 1548054, "name": "Mass Vehicle Ledger Token", "network": "eth", "shortcut": "MVL", @@ -14470,7 +14452,7 @@ "Github": "https://github.com/Merculet", "Homepage": "https://www.merculet.io" }, - "marketcap_usd": 262704, + "marketcap_usd": 213871, "name": "Merculet", "network": "eth", "shortcut": "MVP", @@ -14489,7 +14471,7 @@ "links": { "Homepage": "https://www.restartenergy.io" }, - "marketcap_usd": 1111127, + "marketcap_usd": 974808, "name": "RED MWAT", "network": "eth", "shortcut": "MWAT", @@ -14508,7 +14490,7 @@ "links": { "Homepage": "https://mysterium.network" }, - "marketcap_usd": 860519, + "marketcap_usd": 750846, "name": "Mysterium", "network": "eth", "shortcut": "MYST", @@ -14547,7 +14529,7 @@ "Github": "https://github.com/NANJ-COIN", "Homepage": "https://nanjcoin.com/" }, - "marketcap_usd": 175178, + "marketcap_usd": 158899, "name": "NANJCOIN", "network": "eth", "shortcut": "NANJ", @@ -14625,7 +14607,7 @@ "links": { "Homepage": "https://niobiumcoin.io" }, - "marketcap_usd": 510437, + "marketcap_usd": 499433, "name": "Niobium Coin", "network": "eth", "shortcut": "NBC", @@ -14644,7 +14626,7 @@ "links": { "Homepage": "https://nucleus.vision" }, - "marketcap_usd": 2659551, + "marketcap_usd": 2204199, "name": "Nucleus Vision", "network": "eth", "shortcut": "NCASH", @@ -14664,7 +14646,7 @@ "Github": "https://github.com/polyswarm", "Homepage": "https://polyswarm.io" }, - "marketcap_usd": 1583235, + "marketcap_usd": 1163433, "name": "Nectar", "network": "eth", "shortcut": "NCT", @@ -14703,7 +14685,7 @@ "Github": "https://github.com/ndexnetwork/NDX", "Homepage": "https://ndexnetwork.com" }, - "marketcap_usd": 2683, + "marketcap_usd": 1757, "name": "nDEX", "network": "eth", "shortcut": "NDX", @@ -14723,7 +14705,7 @@ "Github": "https://github.com/ethfinex/", "Homepage": "https://nectar.community" }, - "marketcap_usd": 4951690, + "marketcap_usd": 4298026, "name": "Ethfinex Nectar Token", "network": "eth", "shortcut": "NEC", @@ -14781,7 +14763,7 @@ "Github": "https://github.com/neufund", "Homepage": "https://neufund.org" }, - "marketcap_usd": 3815760, + "marketcap_usd": 3814019, "name": "NEU Fund", "network": "eth", "shortcut": "NEU", @@ -14800,7 +14782,7 @@ "links": { "Homepage": "http://nexo.io" }, - "marketcap_usd": 55571220, + "marketcap_usd": 49477157, "name": "Nexo", "network": "eth", "shortcut": "NEXO", @@ -14819,7 +14801,7 @@ "links": { "Homepage": "https://www.nagaico.com" }, - "marketcap_usd": 640282, + "marketcap_usd": 628217, "name": "NAGA Coin", "network": "eth", "shortcut": "NGC", @@ -14899,7 +14881,7 @@ "Github": "https://github.com/numerai", "Homepage": "https://numer.ai" }, - "marketcap_usd": 11932661, + "marketcap_usd": 11908902, "name": "Numerai", "network": "eth", "shortcut": "NMR", @@ -14938,7 +14920,7 @@ "links": { "Homepage": "https://nobscrypto.com" }, - "marketcap_usd": 26439, + "marketcap_usd": 31897, "name": "No BS Crypto", "network": "eth", "shortcut": "NOBS", @@ -14958,7 +14940,7 @@ "Github": "https://github.com/nitrotoken/nitro-crowdsale", "Homepage": "https://nitro.live" }, - "marketcap_usd": 15559, + "marketcap_usd": 15940, "name": "Nitro", "network": "eth", "shortcut": "NOX", @@ -14997,7 +14979,7 @@ "links": { "Homepage": "https://napoleonx.ai" }, - "marketcap_usd": 1564712, + "marketcap_usd": 2081551, "name": "NaPoleonX", "network": "eth", "shortcut": "NPX", @@ -15017,7 +14999,7 @@ "Github": "https://github.com/pundix", "Homepage": "https://pundix.com" }, - "marketcap_usd": 23078077, + "marketcap_usd": 24104830, "name": "Pundi X Token", "network": "eth", "shortcut": "NPXS", @@ -15075,7 +15057,7 @@ "links": { "Homepage": "https://nuggets.life/" }, - "marketcap_usd": 1212913, + "marketcap_usd": 1193135, "name": "Nuggets Token", "network": "eth", "shortcut": "NUG", @@ -15153,7 +15135,7 @@ "Github": "https://github.com/NeutralGroup", "Homepage": "https://neutralproject.com" }, - "marketcap_usd": 80872, + "marketcap_usd": 80187, "name": "Neutral Dollar", "network": "eth", "shortcut": "NUSD", @@ -15229,7 +15211,7 @@ "links": { "Homepage": "https://www.openanx.org/en" }, - "marketcap_usd": 1845008, + "marketcap_usd": 1715100, "name": "OAX", "network": "eth", "shortcut": "OAX", @@ -15268,7 +15250,7 @@ "links": { "Homepage": "http://www.ocnex.net" }, - "marketcap_usd": 1248440, + "marketcap_usd": 1417923, "name": "Odyssey", "network": "eth", "shortcut": "OCN", @@ -15288,7 +15270,7 @@ "Github": "https://github.com/odemio", "Homepage": "https://odem.io/" }, - "marketcap_usd": 8739009, + "marketcap_usd": 7488539, "name": "ODEM Token", "network": "eth", "shortcut": "ODE", @@ -15328,7 +15310,7 @@ "Github": "https://github.com/originprotocol", "Homepage": "https://www.originprotocol.com" }, - "marketcap_usd": 5990869, + "marketcap_usd": 6182250, "name": "OriginToken", "network": "eth", "shortcut": "OGN", @@ -15427,7 +15409,7 @@ "Github": "https://github.com/Oneledger", "Homepage": "https://oneledger.io" }, - "marketcap_usd": 890025, + "marketcap_usd": 832612, "name": "OneLedger Token", "network": "eth", "shortcut": "OLT", @@ -15447,7 +15429,7 @@ "Github": "https://github.com/omisego", "Homepage": "https://omg.omise.co" }, - "marketcap_usd": 70663513, + "marketcap_usd": 64992556, "name": "OmiseGO", "network": "eth", "shortcut": "OMG", @@ -15506,7 +15488,7 @@ "Github": "https://github.com/MenloOne/", "Homepage": "https://www.menlo.one" }, - "marketcap_usd": 62221, + "marketcap_usd": 22040, "name": "Menlo One", "network": "eth", "shortcut": "ONE", @@ -15545,7 +15527,7 @@ "Github": "https://github.com/onGsocial", "Homepage": "https://somee.social" }, - "marketcap_usd": 153331, + "marketcap_usd": 150904, "name": "SoMee.Social", "network": "eth", "shortcut": "ONG", @@ -15564,7 +15546,7 @@ "links": { "Homepage": "https://on.live" }, - "marketcap_usd": 156637, + "marketcap_usd": 151066, "name": "On.Live", "network": "eth", "shortcut": "ONL", @@ -15583,7 +15565,7 @@ "links": { "Homepage": "https://www.ono.chat" }, - "marketcap_usd": 70342, + "marketcap_usd": 132317, "name": "ONO Token", "network": "eth", "shortcut": "ONOT", @@ -15603,7 +15585,7 @@ "Github": "https://github.com/opacity", "Homepage": "https://opacity.io" }, - "marketcap_usd": 793605, + "marketcap_usd": 697874, "name": "Opacity", "network": "eth", "shortcut": "OPQ", @@ -15622,7 +15604,7 @@ "links": { "Homepage": "https://opus-foundation.org" }, - "marketcap_usd": 149762, + "marketcap_usd": 177771, "name": "Opus Foundation", "network": "eth", "shortcut": "OPT", @@ -15641,7 +15623,7 @@ "links": { "Homepage": "https://optitoken.io" }, - "marketcap_usd": 93160, + "marketcap_usd": 118913, "name": "OptiToken", "network": "eth", "shortcut": "OPTI", @@ -15680,7 +15662,7 @@ "Github": "https://github.com/orbs-network", "Homepage": "https://orbs.com" }, - "marketcap_usd": 17003090, + "marketcap_usd": 16216809, "name": "Orbs", "network": "eth", "shortcut": "ORBS", @@ -15719,7 +15701,7 @@ "links": { "Homepage": "https://ori.network" }, - "marketcap_usd": 19004, + "marketcap_usd": 10405, "name": "Origami", "network": "eth", "shortcut": "ORI", @@ -15738,7 +15720,7 @@ "links": { "Homepage": "https://www.originsport.io" }, - "marketcap_usd": 700506, + "marketcap_usd": 610909, "name": "Origin Sport", "network": "eth", "shortcut": "ORS", @@ -15797,7 +15779,7 @@ "Github": "https://github.com/OpenSTFoundation", "Homepage": "https://simpletoken.org" }, - "marketcap_usd": 4266314, + "marketcap_usd": 5435820, "name": "Simple Token 'OST'", "network": "eth", "shortcut": "OST", @@ -15816,7 +15798,7 @@ "links": { "Homepage": "https://otn.org" }, - "marketcap_usd": 10730, + "marketcap_usd": 9428, "name": "Open Trading Network", "network": "eth", "shortcut": "OTN", @@ -15856,7 +15838,7 @@ "Github": "https://github.com/owndata", "Homepage": "https://owndata.network" }, - "marketcap_usd": 329663, + "marketcap_usd": 304494, "name": "OWNDATA", "network": "eth", "shortcut": "OWN", @@ -15935,7 +15917,7 @@ "links": { "Homepage": "https://www.pchain.org" }, - "marketcap_usd": 996448, + "marketcap_usd": 899509, "name": "PCHAIN", "network": "eth", "shortcut": "PAI", @@ -15994,7 +15976,7 @@ "links": { "Homepage": "https://patron-influencers.com" }, - "marketcap_usd": 25987, + "marketcap_usd": 34363, "name": "Patron", "network": "eth", "shortcut": "PAT", @@ -16073,7 +16055,7 @@ "Github": "https://github.com/paxosglobal", "Homepage": "https://www.paxos.com/standard" }, - "marketcap_usd": 202403757, + "marketcap_usd": 222473810, "name": "Paxos Standard (PAX)", "network": "eth", "shortcut": "PAX", @@ -16093,7 +16075,7 @@ "Github": "https://github.com/paxosglobal/paxos-gold-contract", "Homepage": "https://www.paxos.com/paxgold" }, - "marketcap_usd": 17631648, + "marketcap_usd": 17357920, "name": "Paxos Gold", "network": "eth", "shortcut": "PAXG", @@ -16112,7 +16094,7 @@ "links": { "Homepage": "http://www.tenx.tech" }, - "marketcap_usd": 3478641, + "marketcap_usd": 3487114, "name": "TenX", "network": "eth", "shortcut": "PAY", @@ -16170,7 +16152,7 @@ "Github": "https://github.com/Peculium-Dev/", "Homepage": "https://peculium.io" }, - "marketcap_usd": 1820718, + "marketcap_usd": 1650003, "name": "Peculium", "network": "eth", "shortcut": "PCL", @@ -16210,7 +16192,7 @@ "Github": "https://github.com/opiria-pdata/Pdata", "Homepage": "https://opiria.io" }, - "marketcap_usd": 106016, + "marketcap_usd": 128088, "name": "PDATA", "network": "eth", "shortcut": "PDATA", @@ -16345,7 +16327,7 @@ "links": { "Homepage": "https://www.phitoken.io" }, - "marketcap_usd": 428154, + "marketcap_usd": 717182, "name": "PHI Token", "network": "eth", "shortcut": "PHI", @@ -16364,7 +16346,7 @@ "links": { "Homepage": "https://piplcoin.com" }, - "marketcap_usd": 68315, + "marketcap_usd": 71752, "name": "PIPL Coin", "network": "eth", "shortcut": "PIPL", @@ -16440,7 +16422,7 @@ "links": { "Homepage": "https://playkey.io" }, - "marketcap_usd": 262571, + "marketcap_usd": 246649, "name": "Playkey", "network": "eth", "shortcut": "PKT", @@ -16478,7 +16460,7 @@ "links": { "Homepage": "https://polybius.io" }, - "marketcap_usd": 4816218, + "marketcap_usd": 5556060, "name": "Polybius", "network": "eth", "shortcut": "PLBT", @@ -16498,7 +16480,7 @@ "Github": "https://github.com/twentythirty/PillarToken", "Homepage": "https://www.pillarproject.io" }, - "marketcap_usd": 3459390, + "marketcap_usd": 3407401, "name": "Pillar Project", "network": "eth", "shortcut": "PLR", @@ -16537,7 +16519,7 @@ "links": { "Homepage": "https://plutus.it" }, - "marketcap_usd": 849658, + "marketcap_usd": 846834, "name": "Pluton", "network": "eth", "shortcut": "PLU", @@ -16556,7 +16538,7 @@ "links": { "Homepage": "https://pumapay.io" }, - "marketcap_usd": 2620197, + "marketcap_usd": 2574128, "name": "PumaPay", "network": "eth", "shortcut": "PMA", @@ -16595,7 +16577,7 @@ "Github": "https://github.com/kleros", "Homepage": "https://kleros.io" }, - "marketcap_usd": 5532335, + "marketcap_usd": 4167708, "name": "Pinakion", "network": "eth", "shortcut": "PNK", @@ -16614,7 +16596,7 @@ "links": { "Homepage": "https://po.et" }, - "marketcap_usd": 2584824, + "marketcap_usd": 2511805, "name": "Po.et Tokens", "network": "eth", "shortcut": "POE", @@ -16652,7 +16634,7 @@ "links": { "Homepage": "https://clearpoll.com" }, - "marketcap_usd": 55838, + "marketcap_usd": 50130, "name": "ClearPoll", "network": "eth", "shortcut": "POLL", @@ -16671,7 +16653,7 @@ "links": { "Homepage": "https://polymath.network" }, - "marketcap_usd": 7109290, + "marketcap_usd": 7948877, "name": "Polymath Network", "network": "eth", "shortcut": "POLY", @@ -16749,7 +16731,7 @@ "links": { "Homepage": "https://powerledger.io" }, - "marketcap_usd": 20405356, + "marketcap_usd": 20945756, "name": "PowerLedger", "network": "eth", "shortcut": "POWR", @@ -16768,7 +16750,7 @@ "links": { "Homepage": "https://www.paypie.com" }, - "marketcap_usd": 1679166, + "marketcap_usd": 1234763, "name": "PayPie", "network": "eth", "shortcut": "PPP", @@ -16788,7 +16770,7 @@ "Github": "https://github.com/Bitpopulous", "Homepage": "https://populous.co" }, - "marketcap_usd": 11815952, + "marketcap_usd": 10276137, "name": "Populous", "network": "eth", "shortcut": "PPT", @@ -16807,7 +16789,7 @@ "links": { "Homepage": "https://presearch.io" }, - "marketcap_usd": 1979013, + "marketcap_usd": 1880549, "name": "Presearch", "network": "eth", "shortcut": "PRE", @@ -16827,7 +16809,7 @@ "Github": "https://github.com/paragon-coin/token", "Homepage": "https://paragoncoin.com" }, - "marketcap_usd": 250488, + "marketcap_usd": 136941, "name": "Paragon", "network": "eth", "shortcut": "PRG", @@ -16846,7 +16828,7 @@ "links": { "Homepage": "https://privatix.io" }, - "marketcap_usd": 145873, + "marketcap_usd": 122633, "name": "Privatix", "network": "eth", "shortcut": "PRIX", @@ -16982,7 +16964,7 @@ "links": { "Homepage": "https://primas.io" }, - "marketcap_usd": 658257, + "marketcap_usd": 612387, "name": "Primas", "network": "eth", "shortcut": "PST", @@ -17021,7 +17003,7 @@ "links": { "Homepage": "https://patientory.com" }, - "marketcap_usd": 134648, + "marketcap_usd": 129385, "name": "Patientory", "network": "eth", "shortcut": "PTOY", @@ -17040,7 +17022,7 @@ "links": { "Homepage": "https://www.proton.global" }, - "marketcap_usd": 426921, + "marketcap_usd": 432229, "name": "Proton Token", "network": "eth", "shortcut": "PTT", @@ -17120,7 +17102,7 @@ "Github": "https://github.com/playgame-global", "Homepage": "https://its.playgame.com" }, - "marketcap_usd": 197600, + "marketcap_usd": 189398, "name": "PlayGame", "network": "eth", "shortcut": "PXG", @@ -17158,7 +17140,7 @@ "links": { "Homepage": "https://pylon-network.org" }, - "marketcap_usd": 172884, + "marketcap_usd": 170701, "name": "Pylon Network", "network": "eth", "shortcut": "PYLNT", @@ -17178,7 +17160,7 @@ "Github": "https://github.com/PaycentGlobal", "Homepage": "https://paycent.com/" }, - "marketcap_usd": 16327, + "marketcap_usd": 18506, "name": "Paycentos", "network": "eth", "shortcut": "PYN", @@ -17197,7 +17179,7 @@ "links": { "Homepage": "https://liquid.plus" }, - "marketcap_usd": 10842999, + "marketcap_usd": 11055876, "name": "QASH", "network": "eth", "shortcut": "QASH", @@ -17236,7 +17218,7 @@ "Github": "https://github.com/qiibee", "Homepage": "https://www.qiibee.com" }, - "marketcap_usd": 1246652, + "marketcap_usd": 1144210, "name": "qiibeeToken", "network": "eth", "shortcut": "QBX", @@ -17255,7 +17237,7 @@ "links": { "Homepage": "https://quarkchain.io" }, - "marketcap_usd": 4538006, + "marketcap_usd": 4845781, "name": "QuarkChain", "network": "eth", "shortcut": "QKC", @@ -17275,7 +17257,7 @@ "Github": "https://github.com/quantnetwork", "Homepage": "https://www.quant.network/" }, - "marketcap_usd": 25159420, + "marketcap_usd": 22606832, "name": "Quant", "network": "eth", "shortcut": "QNT", @@ -17334,7 +17316,7 @@ "Github": "https://github.com/quantstamp", "Homepage": "https://quantstamp.com/" }, - "marketcap_usd": 3527370, + "marketcap_usd": 3403647, "name": "Quantstamp Token", "network": "eth", "shortcut": "QSP", @@ -17393,7 +17375,7 @@ "links": { "Homepage": "https://qunqun.io" }, - "marketcap_usd": 1886245, + "marketcap_usd": 1885144, "name": "QunQun", "network": "eth", "shortcut": "QUN", @@ -17412,7 +17394,7 @@ "links": { "Homepage": "https://revain.org" }, - "marketcap_usd": 7637446, + "marketcap_usd": 6162073, "name": "Revain", "network": "eth", "shortcut": "R", @@ -17471,7 +17453,7 @@ "links": { "Homepage": "http://token.dprating.com" }, - "marketcap_usd": 217925, + "marketcap_usd": 207270, "name": "DPRating", "network": "eth", "shortcut": "RATING", @@ -17491,7 +17473,7 @@ "Github": "https://github.com/rublixdev", "Homepage": "https://rublix.io/" }, - "marketcap_usd": 1939173, + "marketcap_usd": 1674968, "name": "Rublix", "network": "eth", "shortcut": "RBLX", @@ -17511,7 +17493,7 @@ "Github": "https://github.com/ripio/rcn-token", "Homepage": "https://ripiocredit.network" }, - "marketcap_usd": 17162411, + "marketcap_usd": 16192971, "name": "Ripio Credit Network", "network": "eth", "shortcut": "RCN", @@ -17531,7 +17513,7 @@ "Github": "https://github.com/raiden-network/raiden/", "Homepage": "https://raiden.network" }, - "marketcap_usd": 3274533, + "marketcap_usd": 3053336, "name": "Raiden Network", "network": "eth", "shortcut": "RDN", @@ -17589,7 +17571,7 @@ "links": { "Homepage": "https://www.real.markets" }, - "marketcap_usd": 140472, + "marketcap_usd": 140746, "name": "Real Estate Asset Ledger", "network": "eth", "shortcut": "REAL", @@ -17608,7 +17590,7 @@ "links": { "Homepage": "https://www.rebellious.io" }, - "marketcap_usd": 23194, + "marketcap_usd": 9140, "name": "Rebellious", "network": "eth", "shortcut": "REBL", @@ -17628,7 +17610,7 @@ "Github": "https://github.com/red", "Homepage": "https://ico.red-lang.org" }, - "marketcap_usd": 248141, + "marketcap_usd": 221836, "name": "Red Community Token", "network": "eth", "shortcut": "RED", @@ -17686,7 +17668,7 @@ "links": { "Homepage": "https://remme.io" }, - "marketcap_usd": 1489558, + "marketcap_usd": 1423991, "name": "Remme", "network": "eth", "shortcut": "REM", @@ -17726,7 +17708,7 @@ "Github": "https://github.com/renproject", "Homepage": "https://renproject.io/" }, - "marketcap_usd": 35975686, + "marketcap_usd": 28332420, "name": "Republic Token", "network": "eth", "shortcut": "REN", @@ -17745,7 +17727,7 @@ "links": { "Homepage": "https://augur.net" }, - "marketcap_usd": 81510747, + "marketcap_usd": 79533206, "name": "Augur", "network": "eth", "shortcut": "REP", @@ -17764,7 +17746,7 @@ "links": { "Homepage": "https://request.network" }, - "marketcap_usd": 4855973, + "marketcap_usd": 4997460, "name": "Request Network", "network": "eth", "shortcut": "REQ", @@ -17784,7 +17766,7 @@ "Github": "https://github.com/rexmls/RexToken", "Homepage": "https://imbrex.io" }, - "marketcap_usd": 81753, + "marketcap_usd": 110005, "name": "imbrex", "network": "eth", "shortcut": "REX", @@ -17803,7 +17785,7 @@ "links": { "Homepage": "https://refereum.com" }, - "marketcap_usd": 2401616, + "marketcap_usd": 2563386, "name": "Refereum", "network": "eth", "shortcut": "RFR", @@ -17842,7 +17824,7 @@ "links": { "Homepage": "https://www.rchain.coop" }, - "marketcap_usd": 4122320, + "marketcap_usd": 4134359, "name": "RChain", "network": "eth", "shortcut": "RHOC", @@ -17900,7 +17882,7 @@ "links": { "Homepage": "http://iex.ec/" }, - "marketcap_usd": 20331105, + "marketcap_usd": 18492032, "name": "IEx.ec", "network": "eth", "shortcut": "RLC", @@ -17920,7 +17902,7 @@ "Github": "https://github.com/Smartroulette", "Homepage": "https://smartplay.tech" }, - "marketcap_usd": 8189, + "marketcap_usd": 4865, "name": "RouletteToken", "network": "eth", "shortcut": "RLT", @@ -17958,7 +17940,7 @@ "links": { "Homepage": "http://www.relex.io" }, - "marketcap_usd": 161472, + "marketcap_usd": 139000, "name": "Relex", "network": "eth", "shortcut": "RLX", @@ -17978,7 +17960,7 @@ "Github": "https://github.com/rightmesh", "Homepage": "https://www.rightmesh.io/" }, - "marketcap_usd": 62585, + "marketcap_usd": 57391, "name": "RightMesh Token", "network": "eth", "shortcut": "RMESH", @@ -18016,7 +17998,7 @@ "links": { "Homepage": "https://www.oneroot.io/en" }, - "marketcap_usd": 1790870, + "marketcap_usd": 1645398, "name": "OneRoot Network", "network": "eth", "shortcut": "RNT", @@ -18035,7 +18017,7 @@ "links": { "Homepage": "https://bitrent.io" }, - "marketcap_usd": 15494, + "marketcap_usd": 23685, "name": "BitRent", "network": "eth", "shortcut": "RNTB", @@ -18074,7 +18056,7 @@ "links": { "Homepage": "https://icerockmining.io" }, - "marketcap_usd": 821321, + "marketcap_usd": 615386, "name": "ICE ROCK MINING", "network": "eth", "shortcut": "ROCK2", @@ -18151,7 +18133,7 @@ "links": { "Homepage": "https://www.rocketpool.net" }, - "marketcap_usd": 3217359, + "marketcap_usd": 3007680, "name": "Rocket Pool", "network": "eth", "shortcut": "RPL", @@ -18209,7 +18191,7 @@ "links": { "Homepage": "https://www.rotharium.io" }, - "marketcap_usd": 1311968, + "marketcap_usd": 1220391, "name": "Rotharium", "network": "eth", "shortcut": "RTH", @@ -18248,7 +18230,7 @@ "links": { "Homepage": "http://ruffchain.com" }, - "marketcap_usd": 3026006, + "marketcap_usd": 2774074, "name": "Ruff", "network": "eth", "shortcut": "RUFF", @@ -18306,7 +18288,7 @@ "links": { "Homepage": "https://rivetzintl.com" }, - "marketcap_usd": 89078, + "marketcap_usd": 82702, "name": "Rivetz", "network": "eth", "shortcut": "RVT", @@ -18403,7 +18385,7 @@ "Github": "https://github.com/makerdao", "Homepage": "https://makerdao.com" }, - "marketcap_usd": 18072646, + "marketcap_usd": 16319278, "name": "Dai Stablecoin v1.0", "network": "eth", "shortcut": "SAI", @@ -18422,7 +18404,7 @@ "links": { "Homepage": "https://saltlending.com" }, - "marketcap_usd": 4715806, + "marketcap_usd": 5100012, "name": "Salt Lending Token", "network": "eth", "shortcut": "SALT", @@ -18441,7 +18423,7 @@ "links": { "Homepage": "https://santiment.net" }, - "marketcap_usd": 5055474, + "marketcap_usd": 5408283, "name": "Santiment", "network": "eth", "shortcut": "SAN", @@ -18479,7 +18461,7 @@ "links": { "Homepage": "https://ico.nexus.social" }, - "marketcap_usd": 50999, + "marketcap_usd": 40688, "name": "SocialCoin", "network": "eth", "shortcut": "SCL", @@ -18517,7 +18499,7 @@ "links": { "Homepage": "http://seele.pro" }, - "marketcap_usd": 36239567, + "marketcap_usd": 31466901, "name": "Seele", "network": "eth", "shortcut": "SEELE", @@ -18556,7 +18538,7 @@ "links": { "Homepage": "https://www.sentinel-chain.org" }, - "marketcap_usd": 176118, + "marketcap_usd": 163548, "name": "Sentinel Chain", "network": "eth", "shortcut": "SENC", @@ -18594,7 +18576,7 @@ "links": { "Homepage": "https://sentinel.co" }, - "marketcap_usd": 1161434, + "marketcap_usd": 944448, "name": "SENTinel", "network": "eth", "shortcut": "SENT", @@ -18729,7 +18711,7 @@ "links": { "Homepage": "https://www.shipchain.io" }, - "marketcap_usd": 1008883, + "marketcap_usd": 1129501, "name": "ShipChain", "network": "eth", "shortcut": "SHIP", @@ -18826,7 +18808,7 @@ "Github": "https://github.com/SpectivOfficial", "Homepage": "https://spectivvr.com" }, - "marketcap_usd": 13664, + "marketcap_usd": 8778, "name": "Signal", "network": "eth", "shortcut": "SIG", @@ -18845,7 +18827,7 @@ "links": { "Homepage": "https://www.skb-coin.jp/en" }, - "marketcap_usd": 508019, + "marketcap_usd": 448199, "name": "Sakura Bloom", "network": "eth", "shortcut": "SKB", @@ -18884,7 +18866,7 @@ "Github": "https://github.com/Steamtradenet/smart-contract", "Homepage": "https://skincoin.org" }, - "marketcap_usd": 25386, + "marketcap_usd": 24256, "name": "SKIN", "network": "eth", "shortcut": "SKIN", @@ -19019,7 +19001,7 @@ "links": { "Homepage": "https://suncontract.org" }, - "marketcap_usd": 1706282, + "marketcap_usd": 1627083, "name": "SunContract", "network": "eth", "shortcut": "SNC", @@ -19077,7 +19059,7 @@ "links": { "Homepage": "https://singulardtv.com" }, - "marketcap_usd": 2409697, + "marketcap_usd": 2297728, "name": "SingularDTV", "network": "eth", "shortcut": "SNGLS", @@ -19116,7 +19098,7 @@ "Github": "https://github.com/sonm-io", "Homepage": "https://sonm.com" }, - "marketcap_usd": 1825409, + "marketcap_usd": 1725686, "name": "SONM", "network": "eth", "shortcut": "SNM", @@ -19135,7 +19117,7 @@ "links": { "Homepage": "https://snovian.space" }, - "marketcap_usd": 169663, + "marketcap_usd": 209251, "name": "Snovian.Space", "network": "eth", "shortcut": "SNOV", @@ -19155,7 +19137,7 @@ "Github": "https://github.com/status-im", "Homepage": "https://status.im" }, - "marketcap_usd": 32675997, + "marketcap_usd": 31861338, "name": "Status Network Token", "network": "eth", "shortcut": "SNT", @@ -19174,7 +19156,7 @@ "links": { "Homepage": "https://silentnotary.com" }, - "marketcap_usd": 105314, + "marketcap_usd": 94246, "name": "Silent Notary", "network": "eth", "shortcut": "SNTR", @@ -19212,7 +19194,7 @@ "links": { "Homepage": "https://www.allsportschain.com" }, - "marketcap_usd": 3493483, + "marketcap_usd": 3480697, "name": "All Sports", "network": "eth", "shortcut": "SOC", @@ -19270,7 +19252,7 @@ "Github": "https://github.com/cryptosoulgame", "Homepage": "https://cryptosoul.io/" }, - "marketcap_usd": 19360, + "marketcap_usd": 18607, "name": "CryptoSoul", "network": "eth", "shortcut": "SOUL", @@ -19289,7 +19271,7 @@ "links": { "Homepage": "https://spankchain.com" }, - "marketcap_usd": 893520, + "marketcap_usd": 370869, "name": "SpankChain", "network": "eth", "shortcut": "SPANK", @@ -19347,7 +19329,7 @@ "Github": "https://github.com/SPZ-TOKEN", "Homepage": "https://swapcoinz.org" }, - "marketcap_usd": 3605, + "marketcap_usd": 4818, "name": "SWAPCOINZ", "network": "eth", "shortcut": "SPAZ", @@ -19386,7 +19368,7 @@ "links": { "Homepage": "https://spindle.zone" }, - "marketcap_usd": 187026, + "marketcap_usd": 159173, "name": "SPINDLE", "network": "eth", "shortcut": "SPD", @@ -19405,7 +19387,7 @@ "links": { "Homepage": "https://sportyfi.io" }, - "marketcap_usd": 36269, + "marketcap_usd": 40960, "name": "Sportify", "network": "eth", "shortcut": "SPF", @@ -19444,7 +19426,7 @@ "links": { "Homepage": "https://www.sapien.network/" }, - "marketcap_usd": 322155, + "marketcap_usd": 309992, "name": "Sapien", "network": "eth", "shortcut": "SPN", @@ -19463,7 +19445,7 @@ "links": { "Homepage": "https://sp8de.com" }, - "marketcap_usd": 39807, + "marketcap_usd": 27378, "name": "Sp8de", "network": "eth", "shortcut": "SPX", @@ -19483,7 +19465,7 @@ "Github": "https://github.com/sirin-labs/crowdsale-smart-contract", "Homepage": "https://sirinlabs.com" }, - "marketcap_usd": 2606718, + "marketcap_usd": 4169489, "name": "Sirin Labs", "network": "eth", "shortcut": "SRN", @@ -19541,7 +19523,7 @@ "links": { "Homepage": "https://smartshare.vip/#" }, - "marketcap_usd": 380259, + "marketcap_usd": 354685, "name": "Smartshare", "network": "eth", "shortcut": "SSP", @@ -19579,7 +19561,7 @@ "links": { "Homepage": "https://coinstarter.com" }, - "marketcap_usd": 13770, + "marketcap_usd": 8560, "name": "Starter Coin", "network": "eth", "shortcut": "STAC", @@ -19598,7 +19580,7 @@ "links": { "Homepage": "https://stacs.io" }, - "marketcap_usd": 1436777, + "marketcap_usd": 1448695, "name": "STACS", "network": "eth", "shortcut": "STACS", @@ -19617,7 +19599,7 @@ "links": { "Homepage": "http://starbase.co" }, - "marketcap_usd": 38301, + "marketcap_usd": 82785, "name": "Star Token", "network": "eth", "shortcut": "STAR", @@ -19676,7 +19658,7 @@ "links": { "Homepage": "https://stktoken.com" }, - "marketcap_usd": 357393, + "marketcap_usd": 412585, "name": "STK Token", "network": "eth", "shortcut": "STK", @@ -19753,7 +19735,7 @@ "Github": "https://github.com/Storj", "Homepage": "https://storj.io" }, - "marketcap_usd": 9771011, + "marketcap_usd": 9615687, "name": "STORJ", "network": "eth", "shortcut": "STORJ", @@ -19772,7 +19754,7 @@ "links": { "Homepage": "https://www.stormtoken.com" }, - "marketcap_usd": 6177522, + "marketcap_usd": 6440580, "name": "Storm Token", "network": "eth", "shortcut": "STORM", @@ -19831,7 +19813,7 @@ "links": { "Homepage": "https://staker.network" }, - "marketcap_usd": 967, + "marketcap_usd": 944, "name": "Staker", "network": "eth", "shortcut": "STR", @@ -19870,7 +19852,7 @@ "links": { "Homepage": "https://bitjob.io" }, - "marketcap_usd": 14104, + "marketcap_usd": 9294, "name": "bitJob", "network": "eth", "shortcut": "STU", @@ -19890,7 +19872,7 @@ "Github": "https://github.com/stx-technologies/stox-token", "Homepage": "https://www.stox.com" }, - "marketcap_usd": 298132, + "marketcap_usd": 288441, "name": "StoxToken", "network": "eth", "shortcut": "STX", @@ -19910,7 +19892,7 @@ "Github": "https://github.com/SubstratumNetwork", "Homepage": "https://substratum.net" }, - "marketcap_usd": 1119707, + "marketcap_usd": 1189624, "name": "Substratum", "network": "eth", "shortcut": "SUB", @@ -19929,7 +19911,7 @@ "links": { "Homepage": "https://www.suretly.com" }, - "marketcap_usd": 52602, + "marketcap_usd": 57803, "name": "Suretly", "network": "eth", "shortcut": "SUR", @@ -19987,7 +19969,7 @@ "links": { "Homepage": "http://www.swftcoin.com" }, - "marketcap_usd": 2326734, + "marketcap_usd": 2488544, "name": "SwftCoin", "network": "eth", "shortcut": "SWFTC", @@ -20026,7 +20008,7 @@ "links": { "Homepage": "http://swarm.city" }, - "marketcap_usd": 88061, + "marketcap_usd": 110132, "name": "Swarm City Token", "network": "eth", "shortcut": "SWT", @@ -20045,7 +20027,7 @@ "links": { "Homepage": "http://www.spectre.ai" }, - "marketcap_usd": 5861460, + "marketcap_usd": 8899373, "name": "Spectre.ai D-Token", "network": "eth", "shortcut": "SXDT", @@ -20160,7 +20142,7 @@ "links": { "Homepage": "https://taklimakan.io" }, - "marketcap_usd": 44133, + "marketcap_usd": 42813, "name": "Taklimakan Network", "network": "eth", "shortcut": "TAN", @@ -20180,7 +20162,7 @@ "Github": "https://github.com/lamden", "Homepage": "https://www.lamden.io" }, - "marketcap_usd": 936074, + "marketcap_usd": 1077389, "name": "Lamden Tau", "network": "eth", "shortcut": "TAU", @@ -20298,7 +20280,7 @@ "links": { "Homepage": "https://tokenbox.io" }, - "marketcap_usd": 61537, + "marketcap_usd": 46121, "name": "Tokenbox", "network": "eth", "shortcut": "TBX", @@ -20357,7 +20339,7 @@ "links": { "Homepage": "https://www.thorecash.com" }, - "marketcap_usd": 30268, + "marketcap_usd": 25627, "name": "Thore Cash", "network": "eth", "shortcut": "TCH", @@ -20453,7 +20435,7 @@ "links": { "Homepage": "https://tokenstars.com/team" }, - "marketcap_usd": 123025, + "marketcap_usd": 87972, "name": "TEAM (TokenStars)", "network": "eth", "shortcut": "TEAM", @@ -20491,7 +20473,7 @@ "links": { "Homepage": "https://www.tokenomy.com" }, - "marketcap_usd": 3352072, + "marketcap_usd": 3185261, "name": "Tokenomy", "network": "eth", "shortcut": "TEN", @@ -20530,7 +20512,7 @@ "links": { "Homepage": "https://ico.tefoodint.com" }, - "marketcap_usd": 1074722, + "marketcap_usd": 1173026, "name": "TE-FOOD", "network": "eth", "shortcut": "TFD", @@ -20550,7 +20532,7 @@ "Github": "https://github.com/TrueFlip", "Homepage": "https://trueflip.io" }, - "marketcap_usd": 846148, + "marketcap_usd": 921956, "name": "TrueFlip", "network": "eth", "shortcut": "TFL", @@ -20569,7 +20551,7 @@ "links": { "Homepage": "https://ico.truegame.io" }, - "marketcap_usd": 132206, + "marketcap_usd": 121217, "name": "Truegame", "network": "eth", "shortcut": "TGAME", @@ -20647,7 +20629,7 @@ "links": { "Homepage": "https://www.thorecoin.com" }, - "marketcap_usd": 90124995, + "marketcap_usd": 89090776, "name": "ThoreCoin", "network": "eth", "shortcut": "THR", @@ -20666,7 +20648,7 @@ "links": { "Homepage": "https://ico.thrivelabs.io" }, - "marketcap_usd": 58989, + "marketcap_usd": 60103, "name": "Thrive Token", "network": "eth", "shortcut": "THRT", @@ -20705,7 +20687,7 @@ "links": { "Homepage": "https://ties.network" }, - "marketcap_usd": 296064, + "marketcap_usd": 180161, "name": "Ties.DB", "network": "eth", "shortcut": "TIE", @@ -20743,7 +20725,7 @@ "links": { "Homepage": "https://chronobank.io" }, - "marketcap_usd": 364562, + "marketcap_usd": 477359, "name": "Chronobank", "network": "eth", "shortcut": "TIME", @@ -20781,7 +20763,7 @@ "links": { "Homepage": "https://www.blocktix.io" }, - "marketcap_usd": 79743, + "marketcap_usd": 74090, "name": "Blocktix", "network": "eth", "shortcut": "TIX", @@ -20838,7 +20820,7 @@ "links": { "Homepage": "https://etherscan.io/token/TokenCard" }, - "marketcap_usd": 3495353, + "marketcap_usd": 3339169, "name": "TokenCard", "network": "eth", "shortcut": "TKN", @@ -20915,7 +20897,7 @@ "links": { "Homepage": "https://transcodium.com" }, - "marketcap_usd": 53275, + "marketcap_usd": 57216, "name": "Transcodium", "network": "eth", "shortcut": "TNS", @@ -20935,7 +20917,7 @@ "Github": "https://github.com/tierion", "Homepage": "https://tierion.com" }, - "marketcap_usd": 9997579, + "marketcap_usd": 10306349, "name": "Tierion Network Token", "network": "eth", "shortcut": "TNT", @@ -20993,7 +20975,7 @@ "links": { "Homepage": "https://origintrail.io" }, - "marketcap_usd": 1570450, + "marketcap_usd": 2029334, "name": "OriginTrail", "network": "eth", "shortcut": "TRAC", @@ -21089,7 +21071,7 @@ "Github": "https://github.com/WeTrustPlatform", "Homepage": "https://www.wetrust.io" }, - "marketcap_usd": 516988, + "marketcap_usd": 565686, "name": "WeTrust", "network": "eth", "shortcut": "TRST", @@ -21186,7 +21168,7 @@ "Github": "https://github.com/tvtwocom", "Homepage": "https://tv-two.com" }, - "marketcap_usd": 355726, + "marketcap_usd": 192167, "name": "TV-TWO: Token for Television", "network": "eth", "shortcut": "TTV", @@ -21206,7 +21188,7 @@ "Github": "https://github.com/trusttoken", "Homepage": "https://www.trusttoken.com" }, - "marketcap_usd": 129042923, + "marketcap_usd": 137742047, "name": "TrueUSD", "network": "eth", "shortcut": "TUSD", @@ -21263,7 +21245,7 @@ "links": { "Homepage": "https://taas.fund" }, - "marketcap_usd": 2858670, + "marketcap_usd": 3200492, "name": "Token-as-a-Service", "network": "eth", "shortcut": "TaaS", @@ -21283,7 +21265,7 @@ "Github": "https://github.com/Thartoken", "Homepage": "https://thartoken.com" }, - "marketcap_usd": 11036, + "marketcap_usd": 19664, "name": "Thar token", "network": "eth", "shortcut": "Thar", @@ -21303,7 +21285,7 @@ "Github": "https://github.com/ubex-ai", "Homepage": "https://www.ubex.com/" }, - "marketcap_usd": 662600, + "marketcap_usd": 635983, "name": "UBEX Token", "network": "eth", "shortcut": "UBEX", @@ -21322,7 +21304,7 @@ "links": { "Homepage": "https://unibright.io" }, - "marketcap_usd": 17007577, + "marketcap_usd": 12023716, "name": "Unibright", "network": "eth", "shortcut": "UBT", @@ -21341,7 +21323,7 @@ "links": { "Homepage": "https://u.cash" }, - "marketcap_usd": 620330, + "marketcap_usd": 542549, "name": "U.CASH", "network": "eth", "shortcut": "UCASH", @@ -21380,7 +21362,7 @@ "links": { "Homepage": "https://uchain.world" }, - "marketcap_usd": 8801, + "marketcap_usd": 9127, "name": "UChain", "network": "eth", "shortcut": "UCN", @@ -21399,7 +21381,7 @@ "links": { "Homepage": "https://www.upfiring.com" }, - "marketcap_usd": 619276, + "marketcap_usd": 579978, "name": "Upfiring", "network": "eth", "shortcut": "UFR", @@ -21419,7 +21401,7 @@ "Github": "https://github.com/unikoingold/UnikoinGold-UKG-Contract", "Homepage": "https://unikoingold.com" }, - "marketcap_usd": 964092, + "marketcap_usd": 969736, "name": "UnikoinGold", "network": "eth", "shortcut": "UKG", @@ -21438,7 +21420,7 @@ "links": { "Homepage": "https://uptoken.org" }, - "marketcap_usd": 226038, + "marketcap_usd": 186176, "name": "UpToken", "network": "eth", "shortcut": "UP", @@ -21457,7 +21439,7 @@ "links": { "Homepage": "https://sentinelprotocol.io" }, - "marketcap_usd": 3592357, + "marketcap_usd": 5220163, "name": "Sentinel Protocol", "network": "eth", "shortcut": "UPP", @@ -21476,7 +21458,7 @@ "links": { "Homepage": "https://uquidcoin.com" }, - "marketcap_usd": 4037279, + "marketcap_usd": 4102221, "name": "Uquid Coin", "network": "eth", "shortcut": "UQC", @@ -21556,7 +21538,7 @@ "Github": "https://github.com/centrehq/centre-tokens", "Homepage": "https://www.centre.io" }, - "marketcap_usd": 484792374, + "marketcap_usd": 600948908, "name": "USD//Coin", "network": "eth", "shortcut": "USDC", @@ -21575,7 +21557,7 @@ "links": { "Homepage": "https://stably.io" }, - "marketcap_usd": 1358919, + "marketcap_usd": 1552212, "name": "StableUSD", "network": "eth", "shortcut": "USDS", @@ -21614,7 +21596,7 @@ "Github": "https://github.com/dforcenetwork", "Homepage": "https://dforce.network" }, - "marketcap_usd": 2739274, + "marketcap_usd": 2718232, "name": "dForce Stablecoin", "network": "eth", "shortcut": "USDx", @@ -21633,7 +21615,7 @@ "links": { "Homepage": "https://utrust.com" }, - "marketcap_usd": 3192637, + "marketcap_usd": 2874676, "name": "UTRUST", "network": "eth", "shortcut": "UTK", @@ -21653,7 +21635,7 @@ "Github": "https://github.com/UniversaBlockchain/universa", "Homepage": "https://www.universa.io" }, - "marketcap_usd": 2788331, + "marketcap_usd": 2383521, "name": "Universa", "network": "eth", "shortcut": "UTNP", @@ -21672,7 +21654,7 @@ "links": { "Homepage": "https://uttoken.io" }, - "marketcap_usd": 7803603, + "marketcap_usd": 7121772, "name": "United Traders Token", "network": "eth", "shortcut": "UTT", @@ -21691,7 +21673,7 @@ "links": { "Homepage": "https://u.network/" }, - "marketcap_usd": 2818289, + "marketcap_usd": 2823965, "name": "U Networks", "network": "eth", "shortcut": "UUU", @@ -21711,7 +21693,7 @@ "Github": "https://github.com/smartvalor/ValorToken", "Homepage": "https://smartvalor.com" }, - "marketcap_usd": 2925977, + "marketcap_usd": 3080799, "name": "ValorToken", "network": "eth", "shortcut": "VALOR", @@ -21751,7 +21733,7 @@ "Github": "https://github.com/VeriDocGlobal", "Homepage": "https://www.veridocglobal.com/" }, - "marketcap_usd": 1280463, + "marketcap_usd": 2085058, "name": "VeriDocGlobal", "network": "eth", "shortcut": "VDG", @@ -21791,7 +21773,7 @@ "Github": "https://github.com/blockv", "Homepage": "https://blockv.io" }, - "marketcap_usd": 1711478, + "marketcap_usd": 1594929, "name": "BLOCKv", "network": "eth", "shortcut": "VEE", @@ -21868,7 +21850,7 @@ "links": { "Homepage": "https://veritas.veritaseum.com" }, - "marketcap_usd": 11163128, + "marketcap_usd": 10232961, "name": "Veritaseum", "network": "eth", "shortcut": "VERI", @@ -21887,7 +21869,7 @@ "links": { "Homepage": "https://www.viberate.com" }, - "marketcap_usd": 1668546, + "marketcap_usd": 1587085, "name": "Viberate", "network": "eth", "shortcut": "VIB", @@ -21906,7 +21888,7 @@ "links": { "Homepage": "https://www.vibehub.io" }, - "marketcap_usd": 1553189, + "marketcap_usd": 1540293, "name": "VIBE Coin", "network": "eth", "shortcut": "VIBE", @@ -21946,7 +21928,7 @@ "Github": "https://github.com/videocoin", "Homepage": "https://www.videocoin.io" }, - "marketcap_usd": 3023790, + "marketcap_usd": 3338825, "name": "VideoCoin", "network": "eth", "shortcut": "VID", @@ -21966,7 +21948,7 @@ "Github": "https://github.com/V-ID/V-ID-Token", "Homepage": "https://www.v-id.org" }, - "marketcap_usd": 2745119, + "marketcap_usd": 2291968, "name": "V-ID Token", "network": "eth", "shortcut": "VIDT", @@ -21986,7 +21968,7 @@ "Github": "https://github.com/Viewly/", "Homepage": "https://view.ly/" }, - "marketcap_usd": 110831, + "marketcap_usd": 111416, "name": "Viewly", "network": "eth", "shortcut": "VIEW", @@ -22005,7 +21987,7 @@ "links": { "Homepage": "https://ico.vikky.io" }, - "marketcap_usd": 3145, + "marketcap_usd": 2884, "name": "VikkyToken", "network": "eth", "shortcut": "VIKKY", @@ -22084,7 +22066,7 @@ "Github": "https://github.com/vetri-global/", "Homepage": "https://vetri.global/" }, - "marketcap_usd": 752429, + "marketcap_usd": 774323, "name": "VETRI", "network": "eth", "shortcut": "VLD", @@ -22161,7 +22143,7 @@ "links": { "Homepage": "https://vnx.io/" }, - "marketcap_usd": 1497025, + "marketcap_usd": 2700131, "name": "VNX Exchange", "network": "eth", "shortcut": "VNXLU", @@ -22239,7 +22221,7 @@ "Github": "https://github.com/VeriSafe", "Homepage": "https://verisafe.io/" }, - "marketcap_usd": 81550, + "marketcap_usd": 63339, "name": "VeriSafe", "network": "eth", "shortcut": "VSF", @@ -22258,7 +22240,7 @@ "links": { "Homepage": "https://www.vdice.io" }, - "marketcap_usd": 35751, + "marketcap_usd": 32561, "name": "Vdice", "network": "eth", "shortcut": "VSL", @@ -22316,7 +22298,7 @@ "links": { "Homepage": "https://wab.network" }, - "marketcap_usd": 15249, + "marketcap_usd": 15237, "name": "WABnetwork", "network": "eth", "shortcut": "WAB", @@ -22335,7 +22317,7 @@ "links": { "Homepage": "https://taelpay.com" }, - "marketcap_usd": 4515341, + "marketcap_usd": 4344189, "name": "Tael", "network": "eth", "shortcut": "WABI", @@ -22454,7 +22436,7 @@ "Github": "https://github.com/WrappedBTC", "Homepage": "https://wbtc.network" }, - "marketcap_usd": 4880256, + "marketcap_usd": 4685643, "name": "Wrapped Bitcoin", "network": "eth", "shortcut": "WBTC", @@ -22512,7 +22494,7 @@ "links": { "Homepage": "https://webcoin.today" }, - "marketcap_usd": 33957, + "marketcap_usd": 31291, "name": "Webcoin", "network": "eth", "shortcut": "WEB", @@ -22610,7 +22592,7 @@ "links": { "Homepage": "https://wings.ai" }, - "marketcap_usd": 932746, + "marketcap_usd": 982826, "name": "WINGS", "network": "eth", "shortcut": "WINGS", @@ -22707,7 +22689,7 @@ "links": { "Homepage": "https://wepower.network" }, - "marketcap_usd": 2137685, + "marketcap_usd": 2371102, "name": "WePower Token", "network": "eth", "shortcut": "WPR", @@ -22726,7 +22708,7 @@ "links": { "Homepage": "https://worldcore.eu" }, - "marketcap_usd": 28595, + "marketcap_usd": 15788, "name": "Worldcore", "network": "eth", "shortcut": "WRC", @@ -22786,7 +22768,7 @@ "Github": "https://github.com/waltonchain", "Homepage": "http://www.waltonchain.org" }, - "marketcap_usd": 13920050, + "marketcap_usd": 12497973, "name": "Waltonchain", "network": "eth", "shortcut": "WTC", @@ -22865,7 +22847,7 @@ "links": { "Homepage": "https://x8currency.com" }, - "marketcap_usd": 225495, + "marketcap_usd": 179816, "name": "X8X", "network": "eth", "shortcut": "X8X", @@ -22884,7 +22866,7 @@ "links": { "Homepage": "http://www.xaurum.org" }, - "marketcap_usd": 1652341, + "marketcap_usd": 2325315, "name": "Xaurum", "network": "eth", "shortcut": "XAUR", @@ -22923,7 +22905,7 @@ "Github": "https://github.com/blitzpredict", "Homepage": "https://www.blitzpredict.io" }, - "marketcap_usd": 60079, + "marketcap_usd": 57032, "name": "BlitzPredict", "network": "eth", "shortcut": "XBP", @@ -22962,7 +22944,7 @@ "links": { "Homepage": "https://www.swisscryptotokens.ch/" }, - "marketcap_usd": 8649431, + "marketcap_usd": 8838079, "name": "CryptoFranc", "network": "eth", "shortcut": "XCHF", @@ -23020,7 +23002,7 @@ "links": { "Homepage": "https://www.xinfin.io" }, - "marketcap_usd": 3972797, + "marketcap_usd": 3779547, "name": "XinFin Network", "network": "eth", "shortcut": "XDCE", @@ -23039,7 +23021,7 @@ "links": { "Homepage": "https://proxeus.com" }, - "marketcap_usd": 637170, + "marketcap_usd": 416236, "name": "Proxeus", "network": "eth", "shortcut": "XES", @@ -23058,7 +23040,7 @@ "links": { "Homepage": "https://www.atom-solutions.jp/en/xetchange.php" }, - "marketcap_usd": 60013234, + "marketcap_usd": 59329506, "name": "ETERNAL TOKEN", "network": "eth", "shortcut": "XET", @@ -23253,7 +23235,7 @@ "Github": "https://github.com/XMaxPlatform", "Homepage": "https://www.xmx.com" }, - "marketcap_usd": 9011546, + "marketcap_usd": 6136193, "name": "XMax", "network": "eth", "shortcut": "XMX", @@ -23273,7 +23255,7 @@ "Github": "https://github.com/InkProtocol/", "Homepage": "https://paywithink.com" }, - "marketcap_usd": 76378, + "marketcap_usd": 84689, "name": "Ink Protocol", "network": "eth", "shortcut": "XNK", @@ -23330,7 +23312,7 @@ "links": { "Homepage": "http://www.xov.io" }, - "marketcap_usd": 2683, + "marketcap_usd": 2922, "name": "XOVBank", "network": "eth", "shortcut": "XOV", @@ -23369,7 +23351,7 @@ "Github": "https://github.com/Bit-Nation/", "Homepage": "https://bitnation.co" }, - "marketcap_usd": 39782, + "marketcap_usd": 29066, "name": "Pangea Arbitration Token", "network": "eth", "shortcut": "XPAT", @@ -23465,7 +23447,7 @@ "links": { "Homepage": "https://xyo.network" }, - "marketcap_usd": 1761234, + "marketcap_usd": 2130075, "name": "XYO", "network": "eth", "shortcut": "XYO", @@ -23484,7 +23466,7 @@ "links": { "Homepage": "http://www.yeefoundation.com" }, - "marketcap_usd": 553891, + "marketcap_usd": 572572, "name": "Yee Token", "network": "eth", "shortcut": "YEE", @@ -23524,7 +23506,7 @@ "Github": "https://github.com/zapproject", "Homepage": "https://zap.store" }, - "marketcap_usd": 520372, + "marketcap_usd": 477216, "name": "ZAP", "network": "eth", "shortcut": "ZAP", @@ -23543,7 +23525,7 @@ "links": { "Homepage": "https://0chain.net" }, - "marketcap_usd": 2069778, + "marketcap_usd": 1562937, "name": "0chain", "network": "eth", "shortcut": "ZCN", @@ -23581,7 +23563,7 @@ "links": { "Homepage": "https://zsc.io/" }, - "marketcap_usd": 134235, + "marketcap_usd": 138817, "name": "Zeusshield", "network": "eth", "shortcut": "ZCS", @@ -23640,7 +23622,7 @@ "Github": "https://github.com/ZEUS-coin", "Homepage": "https://zeusfundme.com/" }, - "marketcap_usd": 11242, + "marketcap_usd": 11113, "name": "ZeusNetwork", "network": "eth", "shortcut": "ZEUS", @@ -23698,7 +23680,7 @@ "links": { "Homepage": "http://zipper.io" }, - "marketcap_usd": 767162, + "marketcap_usd": 832717, "name": "Zipper", "network": "eth", "shortcut": "ZIP", @@ -23717,7 +23699,7 @@ "links": { "Homepage": "https://zippie.org" }, - "marketcap_usd": 430584, + "marketcap_usd": 247680, "name": "Zippie", "network": "eth", "shortcut": "ZIPT", @@ -23756,7 +23738,7 @@ "links": { "Homepage": "https://zla.io" }, - "marketcap_usd": 170464, + "marketcap_usd": 173715, "name": "Zilla", "network": "eth", "shortcut": "ZLA", @@ -23795,7 +23777,7 @@ "links": { "Homepage": "https://www.zmine.com" }, - "marketcap_usd": 112725, + "marketcap_usd": 119170, "name": "ZMINE", "network": "eth", "shortcut": "ZMN", @@ -23814,7 +23796,7 @@ "links": { "Homepage": "https://zper.io" }, - "marketcap_usd": 724398, + "marketcap_usd": 875263, "name": "ZPER", "network": "eth", "shortcut": "ZPR", @@ -23834,7 +23816,7 @@ "Github": "https://github.com/0xProject", "Homepage": "https://0xproject.com" }, - "marketcap_usd": 103586609, + "marketcap_usd": 93561343, "name": "0x Project", "network": "eth", "shortcut": "ZRX", @@ -23872,7 +23854,7 @@ "links": { "Homepage": "https://0xcert.org" }, - "marketcap_usd": 343052, + "marketcap_usd": 345228, "name": "0xcert Protocol Token", "network": "eth", "shortcut": "ZXC", @@ -23992,7 +23974,7 @@ "Github": "https://github.com/carVertical", "Homepage": "https://www.carvertical.com" }, - "marketcap_usd": 601104, + "marketcap_usd": 646814, "name": "carVertical", "network": "eth", "shortcut": "cV", @@ -24950,7 +24932,7 @@ "Github": "https://github.com/eosdac", "Homepage": "https://eosdac.io/" }, - "marketcap_usd": 12739218, + "marketcap_usd": 3605923, "name": "eosDAC", "network": "eth", "shortcut": "eosDAC", @@ -26207,7 +26189,7 @@ "links": { "Homepage": "https://akroma.io" }, - "marketcap_usd": 2977, + "marketcap_usd": 3044, "name": "Akroma", "shortcut": "AKA", "t1_enabled": "yes", @@ -26270,7 +26252,7 @@ "links": { "Homepage": "https://atheios.com" }, - "marketcap_usd": 3756, + "marketcap_usd": 3713, "name": "Atheios", "shortcut": "ATH", "t1_enabled": "yes", @@ -26313,7 +26295,7 @@ "Github": "https://github.com/auxiliumglobal", "Homepage": "https://auxilium.global" }, - "marketcap_usd": 180515, + "marketcap_usd": 170925, "name": "Auxilium", "shortcut": "AUX", "t1_enabled": "soon", @@ -26331,7 +26313,7 @@ "links": { "Homepage": "https://callisto.network" }, - "marketcap_usd": 1395923, + "marketcap_usd": 1219815, "name": "Callisto", "shortcut": "CLO", "t1_enabled": "yes", @@ -26373,7 +26355,7 @@ "links": { "Homepage": "https://egem.io" }, - "marketcap_usd": 39033, + "marketcap_usd": 42310, "name": "EtherGem", "shortcut": "EGEM", "t1_enabled": "yes", @@ -26394,7 +26376,7 @@ "links": { "Homepage": "https://ellaism.org" }, - "marketcap_usd": 16586, + "marketcap_usd": 17421, "name": "Ellaism", "shortcut": "ELLA", "t1_enabled": "yes", @@ -26458,7 +26440,7 @@ "links": { "Homepage": "https://ethersocial.org" }, - "marketcap_usd": 92820, + "marketcap_usd": 94783, "name": "Ethersocial Network", "shortcut": "ESN", "t1_enabled": "yes", @@ -26479,7 +26461,7 @@ "links": { "Homepage": "https://ethereumclassic.github.io" }, - "marketcap_usd": 480941947, + "marketcap_usd": 539764555, "name": "Ethereum Classic", "shortcut": "ETC", "t1_enabled": "yes", @@ -26496,7 +26478,7 @@ "links": { "Homepage": "https://www.ethereum.org" }, - "marketcap_usd": 14093897282, + "marketcap_usd": 12903677844, "name": "Ethereum", "shortcut": "ETH", "t1_enabled": "yes", @@ -26513,7 +26495,7 @@ "links": { "Homepage": "https://ether1.org" }, - "marketcap_usd": 120130, + "marketcap_usd": 143343, "name": "Ether-1", "shortcut": "ETHO", "t1_enabled": "yes", @@ -26534,7 +26516,7 @@ "links": { "Homepage": "https://einc.io" }, - "marketcap_usd": 17012, + "marketcap_usd": 16821, "name": "EtherInc", "shortcut": "ETI", "t1_enabled": "yes", @@ -26576,7 +26558,7 @@ "links": { "Homepage": "https://expanse.tech" }, - "marketcap_usd": 410550, + "marketcap_usd": 371204, "name": "Expanse", "shortcut": "EXP", "t1_enabled": "yes", @@ -26597,7 +26579,7 @@ "links": { "Homepage": "https://gochain.io" }, - "marketcap_usd": 5376782, + "marketcap_usd": 4848386, "name": "GoChain", "shortcut": "GO", "t1_enabled": "yes", @@ -26618,7 +26600,7 @@ "links": { "Homepage": "https://hpb.io" }, - "marketcap_usd": 2885749, + "marketcap_usd": 2644553, "name": "High Performance Blockchain", "shortcut": "HPB", "t1_enabled": "yes", @@ -26639,7 +26621,7 @@ "links": { "Homepage": "https://metadium.com" }, - "marketcap_usd": 5623842, + "marketcap_usd": 7497948, "name": "Metadium", "shortcut": "META", "t1_enabled": "yes", @@ -26702,7 +26684,7 @@ "links": { "Homepage": "https://pirl.io" }, - "marketcap_usd": 330146, + "marketcap_usd": 301462, "name": "Pirl", "shortcut": "PIRL", "t1_enabled": "yes", @@ -26786,7 +26768,7 @@ "links": { "Homepage": "https://ubiqsmart.com" }, - "marketcap_usd": 2055294, + "marketcap_usd": 1968570, "name": "Ubiq", "shortcut": "UBQ", "t1_enabled": "yes", @@ -26829,7 +26811,7 @@ "Github": "https://github.com/input-output-hk/cardano-sl", "Homepage": "https://www.cardano.org" }, - "marketcap_usd": 693374675, + "marketcap_usd": 672071442, "name": "Cardano", "shortcut": "ADA", "t1_enabled": "no", @@ -26863,7 +26845,7 @@ "Github": "https://github.com/EOSIO/eos", "Homepage": "https://eos.io" }, - "marketcap_usd": 1795140557, + "marketcap_usd": 1817735198, "name": "EOS", "shortcut": "EOS", "t1_enabled": "no", @@ -26881,7 +26863,7 @@ "Github": "https://github.com/LiskHQ/lisk", "Homepage": "https://lisk.io/" }, - "marketcap_usd": 99606558, + "marketcap_usd": 106336194, "name": "Lisk", "shortcut": "LSK", "t1_enabled": "yes", @@ -26899,7 +26881,7 @@ "Github": "https://github.com/maidsafe", "Homepage": "https://maidsafe.net" }, - "marketcap_usd": 22489071, + "marketcap_usd": 21706202, "name": "MaidSafeCoin", "shortcut": "MAID", "t1_enabled": "yes", @@ -26912,7 +26894,7 @@ "Github": "https://github.com/OmniLayer", "Homepage": "https://www.omnilayer.org" }, - "marketcap_usd": 599046, + "marketcap_usd": 558309, "name": "Omni", "shortcut": "OMNI", "t1_enabled": "yes", @@ -26925,7 +26907,7 @@ "Github": "https://github.com/ontio/ontology", "Homepage": "https://ont.io" }, - "marketcap_usd": 217649017, + "marketcap_usd": 210641476, "name": "Ontology", "shortcut": "ONT", "t1_enabled": "no", @@ -26937,7 +26919,7 @@ "links": { "Homepage": "https://tether.to" }, - "marketcap_usd": 4662069662, + "marketcap_usd": 4655051268, "name": "Tether", "shortcut": "USDT", "t1_enabled": "yes", @@ -26950,7 +26932,7 @@ "Github": "https://github.com/wanchain/go-wanchain", "Homepage": "https://wanchain.org" }, - "marketcap_usd": 11477245, + "marketcap_usd": 10683819, "name": "Wanchain", "shortcut": "WAN", "t1_enabled": "yes", @@ -26968,7 +26950,7 @@ "Github": "https://github.com/stellar/stellar-core", "Homepage": "https://www.stellar.org" }, - "marketcap_usd": 751445270, + "marketcap_usd": 745537578, "name": "Stellar", "shortcut": "XLM", "t1_enabled": "yes", @@ -26990,7 +26972,7 @@ "Github": "https://github.com/monero-project/monero", "Homepage": "https://getmonero.org" }, - "marketcap_usd": 641816771, + "marketcap_usd": 634185955, "name": "Monero", "shortcut": "XMR", "t1_enabled": "no", @@ -27008,7 +26990,7 @@ "Github": "https://github.com/ripple/rippled", "Homepage": "https://ripple.com" }, - "marketcap_usd": 6726080882, + "marketcap_usd": 6509252831, "name": "Ripple", "shortcut": "XRP", "t1_enabled": "no", @@ -27034,7 +27016,7 @@ "Github": "https://github.com/tezos/tezos", "Homepage": "https://tezos.com" }, - "marketcap_usd": 1113915736, + "marketcap_usd": 1001121819, "name": "Tezos", "shortcut": "XTZ", "t1_enabled": "no", @@ -27076,7 +27058,7 @@ "links": { "Homepage": "https://www.dimcoin.io" }, - "marketcap_usd": 317088, + "marketcap_usd": 284935, "name": "DIMCOIN", "shortcut": "DIM", "t1_enabled": "yes", @@ -27098,7 +27080,7 @@ "links": { "Homepage": "https://www.dimcoin.io" }, - "marketcap_usd": 317088, + "marketcap_usd": 284935, "name": "DIM TOKEN", "shortcut": "DIMTOK", "t1_enabled": "yes", @@ -27161,7 +27143,7 @@ "links": { "Homepage": "https://nem.io" }, - "marketcap_usd": 312070279, + "marketcap_usd": 300648795, "name": "NEM", "shortcut": "XEM", "t1_enabled": "yes", @@ -27180,12 +27162,12 @@ } }, "info": { - "marketcap_supported": "91.40 %", - "marketcap_usd": 142354540726, + "marketcap_supported": "91.24 %", + "marketcap_usd": 138673984862, "t1_coins": 1049, - "t2_coins": 1160, - "total_marketcap_usd": 155740870138, - "updated_at": 1584097947, - "updated_at_readable": "Fri Mar 13 12:12:27 2020" + "t2_coins": 1159, + "total_marketcap_usd": 151981454022, + "updated_at": 1584441141, + "updated_at_readable": "Tue Mar 17 11:32:21 2020" } } diff --git a/common/defs/support.json b/common/defs/support.json index 6b9e8ec55..d4a315b7d 100644 --- a/common/defs/support.json +++ b/common/defs/support.json @@ -8,7 +8,6 @@ "bitcoin:BTCP": true, "bitcoin:BTG": true, "bitcoin:BTX": true, - "bitcoin:CPC": true, "bitcoin:DASH": true, "bitcoin:DGB": true, "bitcoin:DOGE": true, @@ -1691,7 +1690,6 @@ "nem:XEM": "1.6.2" }, "unsupported": { - "bitcoin:CPC": "not implemented", "bitcoin:TRC": "address_type collides with Bitcoin", "bitcoin:ZEN": "not implemented", "erc20:etc:PLAY": "(AUTO) duplicate key", @@ -1735,7 +1733,6 @@ "erc20:eth:COIN:eb54": "(AUTO) duplicate key", "erc20:eth:COSS:6529": "(AUTO) duplicate key", "erc20:eth:COSS:9e96": "(AUTO) duplicate key", - "erc20:eth:CPC": "duplicate key with bitcoin:CPC", "erc20:eth:CPT:88d5": "(AUTO) duplicate key", "erc20:eth:CPT:9b62": "(AUTO) duplicate key", "erc20:eth:CTT:1a47": "(AUTO) duplicate key", @@ -1924,7 +1921,6 @@ "bitcoin:BTCP": "2.0.7", "bitcoin:BTG": "2.0.7", "bitcoin:BTX": "2.0.8", - "bitcoin:CPC": "2.0.10", "bitcoin:CPU": "2.1.4", "bitcoin:CRW": "2.1.7", "bitcoin:DASH": "2.0.5", @@ -3564,7 +3560,6 @@ "erc20:eth:COIN:eb54": "(AUTO) duplicate key", "erc20:eth:COSS:6529": "(AUTO) duplicate key", "erc20:eth:COSS:9e96": "(AUTO) duplicate key", - "erc20:eth:CPC": "duplicate key with bitcoin:CPC", "erc20:eth:CPT:88d5": "(AUTO) duplicate key", "erc20:eth:CPT:9b62": "(AUTO) duplicate key", "erc20:eth:CTT:1a47": "(AUTO) duplicate key", diff --git a/common/defs/wallets.json b/common/defs/wallets.json index b6a5683ce..38678b702 100644 --- a/common/defs/wallets.json +++ b/common/defs/wallets.json @@ -28,9 +28,6 @@ "Electrum-BTX": "https://github.com/LIMXTEC/electrum-btx", "Magnum": "https://magnumwallet.co" }, - "bitcoin:CPC": { - "Capricoin Mobile Wallet": "https://wallet.capricoin.org" - }, "bitcoin:CPU": { "Electrum-CPU": "https://cpuchain.org/download-page.html" }, diff --git a/common/protob/messages-bitcoin.proto b/common/protob/messages-bitcoin.proto index af45d4236..a5effcaf8 100644 --- a/common/protob/messages-bitcoin.proto +++ b/common/protob/messages-bitcoin.proto @@ -132,7 +132,7 @@ message SignTx { optional uint32 expiry = 6; // only for Decred and Zcash // optional bool overwintered = 7; // deprecated - only for Zcash optional uint32 version_group_id = 8; // only for Zcash, nVersionGroupId - optional uint32 timestamp = 9; // only for Peercoin, Capricoin + optional uint32 timestamp = 9; // only for Peercoin optional uint32 branch_id = 10; // only for Zcash, BRANCH_ID } @@ -198,7 +198,7 @@ message TxAck { optional uint32 expiry = 10; // only for Decred and Zcash // optional bool overwintered = 11; // deprecated - only for Zcash optional uint32 version_group_id = 12; // only for Zcash, nVersionGroupId - optional uint32 timestamp = 13; // only for Peercoin, Capricoin + optional uint32 timestamp = 13; // only for Peercoin optional uint32 branch_id = 14; // only for Zcash, BRANCH_ID /** * Structure representing transaction input diff --git a/core/src/apps/common/coininfo.py b/core/src/apps/common/coininfo.py index 37e92ec8d..cd19046ca 100644 --- a/core/src/apps/common/coininfo.py +++ b/core/src/apps/common/coininfo.py @@ -477,32 +477,6 @@ def by_name(name: str) -> CoinInfo: overwintered=False, confidential_assets=None, ) - elif name == "Capricoin": - return CoinInfo( - coin_name=name, - coin_shortcut="CPC", - decimals=8, - address_type=28, - address_type_p2sh=35, - maxfee_kb=2000000, - signed_message_header="Capricoin Signed Message:\n", - xpub_magic=0x0488b21e, - xpub_magic_segwit_p2sh=None, - xpub_magic_segwit_native=None, - bech32_prefix=None, - cashaddr_prefix=None, - slip44=289, - segwit=False, - fork_id=None, - force_bip143=False, - decred=False, - negative_fee=False, - curve_name='secp256k1', - extra_data=False, - timestamp=True, - overwintered=False, - confidential_assets=None, - ) elif name == "Crown": return CoinInfo( coin_name=name, diff --git a/core/src/apps/ethereum/tokens.py b/core/src/apps/ethereum/tokens.py index 9249cafcd..37c26cbc9 100644 --- a/core/src/apps/ethereum/tokens.py +++ b/core/src/apps/ethereum/tokens.py @@ -542,6 +542,8 @@ def token_by_chain_address(chain_id, address): return (chain_id, address, "CPAL", 8) # eth / CreatorPAL elif address == b"\x0e\xbb\x61\x42\x04\xe4\x7c\x09\xb6\xc3\xfe\xb9\xaa\xec\xad\x8e\xe0\x60\xe2\x3e": return (chain_id, address, "CPAY", 0) # eth / Cryptopay + elif address == b"\xfa\xe4\xee\x59\xcd\xd8\x6e\x3b\xe9\xe8\xb9\x0b\x53\xaa\x86\x63\x27\xd7\xc0\x90": + return (chain_id, address, "CPC", 18) # eth / CPChain elif address == b"\xb7\x87\xd4\xea\xc8\x89\x97\x30\xbb\x8c\x57\xfc\x3c\x99\x8c\x49\xc5\x24\x4e\xc0": return (chain_id, address, "CPEX", 8) # eth / CoinPulseToken elif address == b"\x70\x64\xaa\xb3\x9a\x0f\xcf\x72\x21\xc3\x39\x67\x19\xd0\x91\x7a\x65\xe3\x55\x15": diff --git a/python/docs/transaction-format.md b/python/docs/transaction-format.md index c7e2cf5e8..61a4e8029 100644 --- a/python/docs/transaction-format.md +++ b/python/docs/transaction-format.md @@ -126,7 +126,7 @@ message SignTx { optional uint32 expiry = 6; // only for Decred and Zcash optional bool overwintered = 7; // only for Zcash optional uint32 version_group_id = 8; // only for Zcash, nVersionGroupId when overwintered is set - optional uint32 timestamp = 9; // only for Capricoin, transaction timestamp + optional uint32 timestamp = 9; // only for Peercoin, transaction timestamp optional uint32 branch_id = 10; // only for Zcash, BRANCH_ID when overwintered is set } ``` @@ -160,7 +160,7 @@ message TransactionType { optional uint32 expiry = 10; // only for Decred and Zcash optional bool overwintered = 11; // only for Zcash optional uint32 version_group_id = 12; // only for Zcash, nVersionGroupId when overwintered is set - optional uint32 timestamp = 13; // only for Capricoin, transaction timestamp + optional uint32 timestamp = 13; // only for Peercoin, transaction timestamp optional uint32 branch_id = 14; // only for Zcash, BRANCH_ID when overwintered is set } ``` diff --git a/python/src/trezorlib/coins.json b/python/src/trezorlib/coins.json index c3ed5a7d9..2eabc8eee 100644 --- a/python/src/trezorlib/coins.json +++ b/python/src/trezorlib/coins.json @@ -1 +1 @@ -[{"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": "bc", "bitcore": [], "blockbook": ["https://btc1.trezor.io", "https://btc2.trezor.io", "https://btc3.trezor.io", "https://btc4.trezor.io", "https://btc5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin", "coin_name": "Bitcoin", "coin_shortcut": "BTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin", "negative_fee": false, "segwit": true, "shortcut": "BTC", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 0, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "bcrt", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Regtest", "coin_name": "Regtest", "coin_shortcut": "REGTEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", "key": "bitcoin:REGTEST", "maintainer": "Thomas Kerin ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Regtest", "negative_fee": false, "segwit": true, "shortcut": "REGTEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tb", "bitcore": [], "blockbook": ["https://tbtc1.trezor.io", "https://tbtc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Testnet", "coin_name": "Testnet", "coin_shortcut": "TEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TEST", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Testnet", "negative_fee": false, "segwit": true, "shortcut": "TEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 53, "address_type_p2sh": 55, "bech32_prefix": "acm", "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Actinium", "coin_name": "Actinium", "coin_shortcut": "ACM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Actinium-project/Actinium", "hash_genesis_block": "28d77872e23714562f49a1be792c276623c1bbe3fdcf21b6035cfde78b00b824", "key": "bitcoin:ACM", "maintainer": "Harris Brakmic ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Actinium", "negative_fee": false, "segwit": true, "shortcut": "ACM", "signed_message_header": "Actinium Signed Message:\n", "slip44": 228, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "actinium", "website": "https://actinium.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 55, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Axe", "coin_name": "Axe", "coin_shortcut": "AXE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/axerunners/axe", "hash_genesis_block": "00000c33631ca6f2f61368991ce2dc03306b5bb50bf7cede5cfbba6db38e52e6", "key": "bitcoin:AXE", "maintainer": "Kirill Orlov ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Axe", "negative_fee": false, "segwit": false, "shortcut": "AXE", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 4242, "support": {"connect": true, "trezor1": "1.7.3", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "axe", "website": "https://axerunners.com", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 85, "bech32_prefix": "bm", "bitcore": [], "blockbook": ["https://bellcoin-blockbook.ilmango.work", "https://bell.blockbook.ovh"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Bellcoin", "coin_name": "Bellcoin", "coin_shortcut": "BELL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bellcoin-org/bellcoin", "hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603", "key": "bitcoin:BELL", "maintainer": "ilmango-doge ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bellcoin", "negative_fee": false, "segwit": true, "shortcut": "BELL", "signed_message_header": "Bellcoin Signed Message:\n", "slip44": 25252, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bellcoin", "website": "https://bellcoin.web4u.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 81, "address_type_p2sh": 5, "bech32_prefix": "bz", "bitcore": ["https://insight.bitzeny.jp", "https://zeny.insight.monaco-ex.org"], "blockbook": ["https://zny.blockbook.ovh"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "BitZeny", "coin_name": "BitZeny", "coin_shortcut": "ZNY", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "hash_genesis_block": "000009f7e55e9e3b4781e22bd87a7cfa4acada9e4340d43ca738bf4e9fb8f5ce", "key": "bitcoin:ZNY", "maintainer": "y-chan ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "BitZeny", "negative_fee": false, "segwit": true, "shortcut": "ZNY", "signed_message_header": "BitZeny Signed Message:\n", "slip44": 123, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitzeny", "website": "https://bitzeny.tech", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://bch1.trezor.io", "https://bch2.trezor.io", "https://bch3.trezor.io", "https://bch4.trezor.io", "https://bch5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": "bitcoincash", "coin_label": "Bitcoin Cash", "coin_name": "Bcash", "coin_shortcut": "BCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash", "negative_fee": false, "segwit": false, "shortcut": "BCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 145, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": "bchtest", "coin_label": "Bitcoin Cash Testnet", "coin_name": "Bcash Testnet", "coin_shortcut": "TBCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TBCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TBCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 23, "bech32_prefix": "btg", "bitcore": [], "blockbook": ["https://btg1.trezor.io", "https://btg2.trezor.io", "https://btg3.trezor.io", "https://btg4.trezor.io", "https://btg5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold", "coin_name": "Bgold", "coin_shortcut": "BTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTG", "maintainer": "Saleem Rashid ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold", "negative_fee": false, "segwit": true, "shortcut": "BTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tbtg", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold Testnet", "coin_name": "Bgold Testnet", "coin_shortcut": "TBTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "00000000e0781ebe24b91eedc293adfea2f557b53ec379e78959de3853e6f9f6", "key": "bitcoin:TBTG", "maintainer": "The Bitcoin Gold Developers ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold Testnet", "negative_fee": false, "segwit": true, "shortcut": "TBTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 4901, "address_type_p2sh": 5039, "bech32_prefix": null, "bitcore": ["https://explorer.btcprivate.org"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcoin Private", "coin_name": "Bprivate", "coin_shortcut": "BTCP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": 42, "github": "https://github.com/BTCPrivate/BitcoinPrivate", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:BTCP", "maintainer": "Chris Sulmone ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Bitcoin Private", "negative_fee": false, "segwit": false, "shortcut": "BTCP", "signed_message_header": "BitcoinPrivate Signed Message:\n", "slip44": 183, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoinprivate", "website": "https://btcprivate.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 61, "address_type_p2sh": 123, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook1.bitcoinrh.org", "https://blockbook2.bitcoinrh.org"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Rhodium", "coin_name": "Brhodium", "coin_shortcut": "XRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "hash_genesis_block": "baff5bfd9dc43fb672d003ec20fd21428f9282ca46bfa1730d73e1f2c75f5fdd", "key": "bitcoin:XRC", "maintainer": "baff5b ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Rhodium", "negative_fee": false, "segwit": false, "shortcut": "XRC", "signed_message_header": "BitCoin Rhodium Signed Message:\n", "slip44": 10291, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin-rhodium", "website": "https://www.bitcoinrh.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3, "address_type_p2sh": 125, "bech32_prefix": "btx", "bitcore": ["https://insight.bitcore.cc"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcore", "coin_name": "Bitcore", "coin_shortcut": "BTX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/LIMXTEC/BitCore", "hash_genesis_block": "604148281e5c4b7f2487e5d03cd60d8e6f69411d613f6448034508cea52e9574", "key": "bitcoin:BTX", "maintainer": "limxdev ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcore", "negative_fee": false, "segwit": true, "shortcut": "BTX", "signed_message_header": "BitCore Signed Message:\n", "slip44": 160, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcore", "website": "https://bitcore.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 30, "bech32_prefix": "cpu", "bitcore": [], "blockbook": ["https://blockbook.cpuchain.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "CPUchain", "coin_name": "CPUchain", "coin_shortcut": "CPU", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/cpuchain/cpuchain", "hash_genesis_block": "000024d8766043ea0e1c9ad42e7ea4b5fdb459887bd80b8f9756f3d87e128f12", "key": "bitcoin:CPU", "maintainer": "Min Khang Aung ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "CPUchain", "negative_fee": false, "segwit": true, "shortcut": "CPU", "signed_message_header": "CPUchain Signed Message:\n", "slip44": 363, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "cpuchain", "website": "https://cpuchain.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 35, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.capricoin.org", "https://blockbook2.capricoin.org", "https://blockbook3.capricoin.org", "https://blockbook4.capricoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Capricoin", "coin_name": "Capricoin", "coin_shortcut": "CPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7, "High": 20, "Low": 1, "Normal": 14}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Capricoinofficial/Capricoin", "hash_genesis_block": "00000d23fa0fc52c90893adb1181c9ddffb6c797a3e41864b9a23aa2f2981fe3", "key": "bitcoin:CPC", "maintainer": "Jozef Knaperek ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Capricoin", "negative_fee": false, "segwit": false, "shortcut": "CPC", "signed_message_header": "Capricoin Signed Message:\n", "slip44": 289, "support": {"connect": true, "trezor1": false, "trezor2": "2.0.10", "webwallet": false}, "timestamp": true, "uri_prefix": "capricoin", "website": "https://capricoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 95495, "address_type_p2sh": 95473, "bech32_prefix": null, "bitcore": ["https://insight-01.crownplatform.com", "https://insight-02.crownplatform.com", "https://insight-03.crownplatform.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Crown", "coin_name": "Crown", "coin_shortcut": "CRW", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Crowndev/crowncoin", "hash_genesis_block": "0000000085370d5e122f64f4ab19c68614ff3df78c8d13cb814fd7e69a1dc6da", "key": "bitcoin:CRW", "maintainer": "Ashot ", "max_address_length": 40, "maxfee_kb": 2000000, "min_address_length": 36, "minfee_kb": 1000, "name": "Crown", "negative_fee": false, "segwit": false, "shortcut": "CRW", "signed_message_header": "Crown Signed Message:\n", "slip44": 72, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": false}, "timestamp": false, "uri_prefix": "crown", "website": "https://crownplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://dash1.trezor.io", "https://dash2.trezor.io", "https://dash3.trezor.io", "https://dash4.trezor.io", "https://dash5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash", "coin_name": "Dash", "coin_shortcut": "DASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", "key": "bitcoin:DASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dash", "negative_fee": false, "segwit": false, "shortcut": "DASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 5, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash Testnet", "coin_name": "Dash Testnet", "coin_shortcut": "tDASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", "key": "bitcoin:tDASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Dash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tDASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 1855, "address_type_p2sh": 1818, "bech32_prefix": null, "bitcore": ["https://mainnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred", "coin_name": "Decred", "coin_shortcut": "DCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "298e5cc3d985bfe7f81dc135f360abe089edd4396b86d2de66b0cef42b21d980", "key": "bitcoin:DCR", "maintainer": "Alex Yocom-Piatt ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 10000, "name": "Decred", "negative_fee": false, "segwit": false, "shortcut": "DCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 42, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 50177256, "xpub_magic": 50178342, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3873, "address_type_p2sh": 3836, "bech32_prefix": null, "bitcore": ["https://testnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred Testnet", "coin_name": "Decred Testnet", "coin_shortcut": "TDCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "a649dce53918caf422e9c711c858837e08d626ecfcd198969b24f7b634a49bac", "key": "bitcoin:TDCR", "maintainer": "Saleem Rashid ", "max_address_length": 35, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Decred Testnet", "negative_fee": false, "segwit": false, "shortcut": "TDCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 70615959, "xpub_magic": 70617041, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 63, "bech32_prefix": "dgb", "bitcore": [], "blockbook": ["https://dgb1.trezor.io", "https://dgb2.trezor.io"], "blocktime_seconds": 15, "cashaddr_prefix": null, "coin_label": "DigiByte", "coin_name": "DigiByte", "coin_shortcut": "DGB", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/digibyte/digibyte", "hash_genesis_block": "7497ea1b465eb39f1c8f507bc877078fe016d6fcb6dfad3a64c98dcc6e1e8496", "key": "bitcoin:DGB", "maintainer": "DigiByte ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "DigiByte", "negative_fee": false, "segwit": true, "shortcut": "DGB", "signed_message_header": "DigiByte Signed Message:\n", "slip44": 20, "support": {"connect": true, "trezor1": "1.6.3", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "digibyte", "website": "https://digibyte.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 30, "address_type_p2sh": 22, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://doge1.trezor.io", "https://doge2.trezor.io", "https://doge3.trezor.io", "https://doge4.trezor.io", "https://doge5.trezor.io"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Dogecoin", "coin_name": "Dogecoin", "coin_shortcut": "DOGE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 100000}, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/dogecoin/dogecoin", "hash_genesis_block": "1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691", "key": "bitcoin:DOGE", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dogecoin", "negative_fee": false, "segwit": false, "shortcut": "DOGE", "signed_message_header": "Dogecoin Signed Message:\n", "slip44": 3, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dogecoin", "website": "https://dogecoin.com", "xprv_magic": 49988504, "xpub_magic": 49990397, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 235, "address_type_p2sh": 75, "bech32_prefix": "ert", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Elements", "coin_name": "Elements", "coin_shortcut": "ELEMENTS", "confidential_assets": {"address_prefix": 4, "blech32_prefix": "el"}, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ElementsProject/elements", "hash_genesis_block": "209577bda6bf4b5804bd46f8621580dd6d4e8bfa2d190e1c50e932492baca07d", "key": "bitcoin:ELEMENTS", "maintainer": "Roman Zeyde ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Elements", "negative_fee": false, "segwit": true, "shortcut": "ELEMENTS", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "elements", "website": "https://elementsproject.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 14, "address_type_p2sh": 5, "bech32_prefix": "fc", "bitcore": ["https://bitcore.feathercoin.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Feathercoin", "coin_name": "Feathercoin", "coin_shortcut": "FTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "duplicate": true, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FeatherCoin/Feathercoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:FTC", "maintainer": "Lucas Betschart ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Feathercoin", "negative_fee": false, "segwit": true, "shortcut": "FTC", "signed_message_header": "Feathercoin Signed Message:\n", "slip44": 8, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "feathercoin", "website": "https://feathercoin.com", "xprv_magic": 76077806, "xpub_magic": 76069926, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 35, "address_type_p2sh": 94, "bech32_prefix": "flo", "bitcore": ["https://livenet.flocha.in"], "blockbook": [], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "Flo", "coin_name": "Florincoin", "coin_shortcut": "FLO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/floblockchain/flo", "hash_genesis_block": "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea", "key": "bitcoin:FLO", "maintainer": "Robert English ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Flo", "negative_fee": false, "segwit": true, "shortcut": "FLO", "signed_message_header": "Florincoin Signed Message:\n", "slip44": 216, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "florincoin", "website": "https://flo.cash", "xprv_magic": 15264107, "xpub_magic": 1526049, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 16, "bech32_prefix": "fc", "bitcore": [], "blockbook": ["https://explorer.fujicoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Fujicoin", "coin_name": "Fujicoin", "coin_shortcut": "FJC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 20000, "High": 100000, "Low": 10000, "Normal": 50000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/fujicoin/fujicoin", "hash_genesis_block": "adb6d9cfd74075e7f91608add4bd2a2ea636f70856183086842667a1597714a0", "key": "bitcoin:FJC", "maintainer": "motty ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 10000000, "name": "Fujicoin", "negative_fee": false, "segwit": true, "shortcut": "FJC", "signed_message_header": "FujiCoin Signed Message:\n", "slip44": 75, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "fujicoin", "website": "https://fujicoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 38, "address_type_p2sh": 10, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.gincoin.io"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "GIN", "coin_name": "Gincoin", "coin_shortcut": "GIN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gincoin-dev/gincoin-core", "hash_genesis_block": "00000cd6bde619b2c3b23ad2e384328a450a37fa28731debf748c3b17f91f97d", "key": "bitcoin:GIN", "maintainer": "Dragos Badea ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "GIN", "negative_fee": false, "segwit": false, "shortcut": "GIN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 2000, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "gincoin", "website": "https://gincoin.io", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 62, "bech32_prefix": "game", "bitcore": [], "blockbook": ["https://blockbook.gamecredits.network"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "GameCredits", "coin_name": "GameCredits", "coin_shortcut": "GAME", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gamecredits-project/gamecredits", "hash_genesis_block": "91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee", "key": "bitcoin:GAME", "maintainer": "Samad Sajanlal ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "GameCredits", "negative_fee": false, "segwit": true, "shortcut": "GAME", "signed_message_header": "GameCredits Signed Message:\n", "slip44": 101, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "gamecredits", "website": "https://gamecredits.org", "xprv_magic": 27108450, "xpub_magic": 27106558, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 5, "bech32_prefix": "grs", "bitcore": ["https://groestlsight.groestlcoin.org", "https://grsblocks.com"], "blockbook": ["https://blockbook.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin", "coin_name": "Groestlcoin", "coin_shortcut": "GRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023", "key": "bitcoin:GRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin", "negative_fee": false, "segwit": true, "shortcut": "GRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 17, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tgrs", "bitcore": ["https://groestlsight-test.groestlcoin.org"], "blockbook": ["https://blockbook-test.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin Testnet", "coin_name": "Groestlcoin Testnet", "coin_shortcut": "tGRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "000000ffbb50fc9898cdd36ec163e6ba23230164c0052a28876255b7dcf2cd36", "key": "bitcoin:tGRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tGRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch", "coin_name": "Hatch", "coin_shortcut": "HATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "000000fa6116f5d6c6ce9b60bd431469e40b4fe55feeeda59e33cd2f0b863196", "key": "bitcoin:HATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Hatch", "negative_fee": false, "segwit": false, "shortcut": "HATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 88888888, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch Testnet", "coin_name": "Hatch Testnet", "coin_shortcut": "tHATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "00000bf8b02180fa3860e3f4fbfaab76db14fbfd1323d1d3ad06d83b828b6644", "key": "bitcoin:tHATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Hatch Testnet", "negative_fee": false, "segwit": false, "shortcut": "tHATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 60, "address_type_p2sh": 85, "bech32_prefix": null, "bitcore": ["https://api.kmd.dev"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Komodo", "coin_name": "Komodo", "coin_shortcut": "KMD", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 1991772603}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/komodoplatform/komodo", "hash_genesis_block": "027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71", "key": "bitcoin:KMD", "maintainer": "Kadan Stadelmann ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Komodo", "negative_fee": true, "segwit": false, "shortcut": "KMD", "signed_message_header": "Komodo Signed Message:\n", "slip44": 141, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "komodo", "website": "https://komodoplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 6198, "address_type_p2sh": 6203, "bech32_prefix": null, "bitcore": ["https://insight.kotocoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Koto", "coin_name": "Koto", "coin_shortcut": "KOTO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/KotoDevelopers/koto", "hash_genesis_block": "6d424c350729ae633275d51dc3496e16cd1b1d195c164da00f39c499a2e9959e", "key": "bitcoin:KOTO", "maintainer": "WO ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Koto", "negative_fee": false, "segwit": false, "shortcut": "KOTO", "signed_message_header": "Koto Signed Message:\n", "slip44": 510, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "koto", "website": "https://ko-to.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 48, "address_type_p2sh": 50, "bech32_prefix": "ltc", "bitcore": [], "blockbook": ["https://ltc1.trezor.io", "https://ltc2.trezor.io", "https://ltc3.trezor.io", "https://ltc4.trezor.io", "https://ltc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin", "coin_name": "Litecoin", "coin_shortcut": "LTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:LTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Litecoin", "negative_fee": false, "segwit": true, "shortcut": "LTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 2, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 27106558, "xpub_magic": 27108450, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 111, "address_type_p2sh": 58, "bech32_prefix": "tltc", "bitcore": ["https://testnet.litecore.io"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin Testnet", "coin_name": "Litecoin Testnet", "coin_shortcut": "tLTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0", "key": "bitcoin:tLTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Litecoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tLTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 50, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Metaverse ETP", "coin_name": "MetaverseETP", "coin_shortcut": "ETP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/mvs-org/metaverse", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "key": "bitcoin:ETP", "maintainer": "Sven Mutzl ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 100, "name": "Metaverse ETP", "negative_fee": false, "segwit": false, "shortcut": "ETP", "signed_message_header": "Metaverse Signed Message:\n", "slip44": 2302, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "etp", "website": "https://mvs.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 50, "address_type_p2sh": 55, "bech32_prefix": "mona", "bitcore": ["https://mona.chainsight.info", "https://insight.electrum-mona.org"], "blockbook": ["https://blockbook.electrum-mona.org"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "Monacoin", "coin_name": "Monacoin", "coin_shortcut": "MONA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/monacoinproject/monacoin", "hash_genesis_block": "ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6", "key": "bitcoin:MONA", "maintainer": "cryptcoin-junkey ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Monacoin", "negative_fee": false, "segwit": true, "shortcut": "MONA", "signed_message_header": "Monacoin Signed Message:\n", "slip44": 22, "support": {"connect": true, "trezor1": "1.6.0", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "monacoin", "website": "https://monacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 16, "address_type_p2sh": 76, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.monetaryunit.org"], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "MonetaryUnit", "coin_name": "MonetaryUnit", "coin_shortcut": "MUE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/muecoin/MUE", "hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f", "key": "bitcoin:MUE", "maintainer": "Sotiris Blad ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "MonetaryUnit", "negative_fee": false, "segwit": false, "shortcut": "MUE", "signed_message_header": "MonetaryUnit Signed Message:\n", "slip44": 31, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "monetaryunit", "website": "https://www.monetaryunit.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 53, "bech32_prefix": "nix", "bitcore": ["https://blockchain.nixplatform.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "NIX", "coin_name": "NIX", "coin_shortcut": "NIX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/nixplatform/nixcore", "hash_genesis_block": "dd28ad86def767c3cfc34267a950d871fc7462bc57ea4a929fc3596d9b598e41", "key": "bitcoin:NIX", "maintainer": "mattt21 ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 0, "name": "NIX", "negative_fee": false, "segwit": true, "shortcut": "NIX", "signed_message_header": "NIX Signed Message:\n", "slip44": 400, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "nix", "website": "https://nixplatform.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 52, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://nmc1.trezor.io", "https://nmc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Namecoin", "coin_name": "Namecoin", "coin_shortcut": "NMC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 2940, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/namecoin/namecoin-core", "hash_genesis_block": "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770", "key": "bitcoin:NMC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Namecoin", "negative_fee": false, "segwit": false, "shortcut": "NMC", "signed_message_header": "Namecoin Signed Message:\n", "slip44": 7, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "namecoin", "website": "https://namecoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 13, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX", "coin_name": "PIVX", "coin_shortcut": "PIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:PIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX", "negative_fee": false, "segwit": false, "shortcut": "PIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 119, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 35729707, "xpub_magic": 36513075, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 139, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook-testnet.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX Testnet", "coin_name": "PIVX Testnet", "coin_shortcut": "tPIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:tPIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX Testnet", "negative_fee": false, "segwit": false, "shortcut": "tPIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 981489719, "xpub_magic": 981492128, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 56, "address_type_p2sh": 60, "bech32_prefix": "bc", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl", "coin_name": "Particl", "coin_shortcut": "PART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000ee0784c195317ac95623e22fddb8c7b8825dc3998e0bb924d66866eccf4c", "key": "bitcoin:PART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl", "negative_fee": false, "segwit": true, "shortcut": "PART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 44, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 1768850129, "xpub_magic": 2401087160, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 118, "address_type_p2sh": 122, "bech32_prefix": "tb", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl Testnet", "coin_name": "Particl Testnet", "coin_shortcut": "tPART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000594ada5310b367443ee0afd4fa3d0bbd5850ea4e33cdc7d6a904a7ec7c90", "key": "bitcoin:tPART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 3779229696, "xpub_magic": 76059768, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 55, "address_type_p2sh": 117, "bech32_prefix": "pc", "bitcore": [], "blockbook": ["https://blockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin", "coin_name": "Peercoin", "coin_shortcut": "PPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3", "key": "bitcoin:PPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin", "negative_fee": false, "segwit": true, "shortcut": "PPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 6, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tpc", "bitcore": [], "blockbook": ["https://tblockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin Testnet", "coin_name": "Peercoin Testnet", "coin_shortcut": "tPPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06", "key": "bitcoin:tPPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 47, "address_type_p2sh": 22, "bech32_prefix": null, "bitcore": ["https://live.pesetacoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Pesetacoin", "coin_name": "Pesetacoin", "coin_shortcut": "PTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "hash_genesis_block": "edfe5830b53251bfff733600b1cd5c192e761c011b055f07924634818c906438", "key": "bitcoin:PTC", "maintainer": "Rw ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Pesetacoin", "negative_fee": false, "segwit": false, "shortcut": "PTC", "signed_message_header": "Pesetacoin Signed Message:\n", "slip44": 109, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "pesetacoin", "website": "https://pesetacoin.info", "xprv_magic": 76079604, "xpub_magic": 76071982, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 55, "address_type_p2sh": 56, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.polispay.org"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Polis", "coin_name": "Polis", "coin_shortcut": "POLIS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/polispay/polis", "hash_genesis_block": "000009701eb781a8113b1af1d814e2f060f6408a2c990db291bc5108a1345c1e", "key": "bitcoin:POLIS", "maintainer": "Cronos ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Polis", "negative_fee": false, "segwit": false, "shortcut": "POLIS", "signed_message_header": "Polis Signed Message:\n", "slip44": 1997, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "polis", "website": "https://www.polispay.org", "xprv_magic": 65165637, "xpub_magic": 65166718, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 23, "address_type_p2sh": 83, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Primecoin", "coin_name": "Primecoin", "coin_shortcut": "XPM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/primecoin/primecoin", "hash_genesis_block": "963d17ba4dc753138078a2f56afb3af9674e2546822badff26837db9a0152106", "key": "bitcoin:XPM", "maintainer": "James Skrowvedeht ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 26, "minfee_kb": 1000, "name": "Primecoin", "negative_fee": false, "segwit": false, "shortcut": "XPM", "signed_message_header": "Primecoin Signed Message:\n", "slip44": 24, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "primecoin", "website": "https://primecoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 58, "address_type_p2sh": 50, "bech32_prefix": "qc", "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum", "coin_name": "Qtum", "coin_shortcut": "QTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "duplicate": true, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c", "key": "bitcoin:QTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum", "negative_fee": false, "segwit": true, "shortcut": "QTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 2301, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": true}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 120, "address_type_p2sh": 110, "bech32_prefix": "tq", "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum Testnet", "coin_name": "Qtum Testnet", "coin_shortcut": "tQTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222", "key": "bitcoin:tQTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum Testnet", "negative_fee": false, "segwit": true, "shortcut": "tQTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 60, "address_type_p2sh": 122, "bech32_prefix": null, "bitcore": ["https://ravencoin.network"], "blockbook": ["https://blockbook.ravencoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ravencoin", "coin_name": "Ravencoin", "coin_shortcut": "RVN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RavenProject/Ravencoin", "hash_genesis_block": "0000006b444bc2f2ffe627be9d9e7e7a0730000870ef6eb6da46c8eae389df90", "key": "bitcoin:RVN", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ravencoin", "negative_fee": false, "segwit": false, "shortcut": "RVN", "signed_message_header": "Raven Signed Message:\n", "slip44": 175, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "raven", "website": "https://ravencoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 105, "bech32_prefix": null, "bitcore": ["https://insight.ritocoin.org"], "blockbook": ["https://blockbook.ritocoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ritocoin", "coin_name": "Ritocoin", "coin_shortcut": "RITO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RitoProject", "hash_genesis_block": "00000075e344bdf1c0e433f453764b1830a7aa19b2a5213e707502a22b779c1b", "key": "bitcoin:RITO", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ritocoin", "negative_fee": false, "segwit": false, "shortcut": "RITO", "signed_message_header": "Rito Signed Message:\n", "slip44": 19169, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "rito", "website": "https://ritocoin.org", "xprv_magic": 87326380, "xpub_magic": 87353290, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 63, "address_type_p2sh": 18, "bech32_prefix": null, "bitcore": ["https://insight.smartcash.cc"], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash", "coin_name": "SmartCash", "coin_shortcut": "SMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "000007acc6970b812948d14ea5a0a13db0fdd07d5047c7e69101fa8b361e05a4", "key": "bitcoin:SMART", "maintainer": "Leandro Reinaux ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash", "negative_fee": false, "segwit": false, "shortcut": "SMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "smart", "website": "https://smartcash.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 21, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash Testnet", "coin_name": "SmartCash Testnet", "coin_shortcut": "tSMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "0000027235b5679bcd28c90d03d4bf1a9ba4c07c4efcc1c87d6c68cce25e6e5d", "key": "bitcoin:tSMART", "maintainer": "Leandro Reinaux ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tSMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "testsmart", "website": "https://smartcash.cc", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": "xc", "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Stakenet", "coin_name": "Stakenet", "coin_shortcut": "XSN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 1000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/X9Developers/XSN", "hash_genesis_block": "00000c822abdbb23e28f79a49d29b41429737c6c7e15df40d1b1f1b35907ae34", "key": "bitcoin:XSN", "maintainer": "Alexis Hernandez ", "max_address_length": 47, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Stakenet", "negative_fee": false, "segwit": true, "shortcut": "XSN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 199, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "stakenet", "website": "https://stakenet.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 63, "address_type_p2sh": 5, "bech32_prefix": "sys", "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Syscoin", "coin_name": "Syscoin", "coin_shortcut": "SYS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 200, "High": 2000, "Low": 100, "Normal": 400}, "dust_limit": 1820, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/syscoin/syscoin", "hash_genesis_block": "0000022642db0346b6e01c2a397471f4f12e65d4f4251ec96c1f85367a61a7ab", "key": "bitcoin:SYS", "maintainer": "Jagdeep Sidhu ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Syscoin", "negative_fee": false, "segwit": true, "shortcut": "SYS", "signed_message_header": "Syscoin Signed Message:\n", "slip44": 57, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "syscoin", "website": "https://syscoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": ["https://insight.terracoin.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Terracoin", "coin_name": "Terracoin", "coin_shortcut": "TRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/terracoin/terracoin", "hash_genesis_block": "00000000804bbc6a621a9dbb564ce469f492e1ccf2d70f8a6b241e26a277afa2", "key": "bitcoin:TRC", "maintainer": "The Terracoin Foundation ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Terracoin", "negative_fee": false, "segwit": false, "shortcut": "TRC", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 83, "support": {"connect": false, "trezor1": false, "trezor2": false, "webwallet": false}, "timestamp": false, "uri_prefix": "terracoin", "website": "https://terracoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 130, "address_type_p2sh": 30, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno"], "blocktime_seconds": 30, "cashaddr_prefix": null, "coin_label": "Unobtanium", "coin_name": "Unobtanium", "coin_shortcut": "UNO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 50, "High": 160, "Low": 10, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/unobtanium-official/unobtanium", "hash_genesis_block": "000004c2fc5fffb810dccc197d603690099a68305232e552d96ccbe8e2c52b75", "key": "bitcoin:UNO", "maintainer": "choicesz ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Unobtanium", "negative_fee": false, "segwit": false, "shortcut": "UNO", "signed_message_header": "Unobtanium Signed Message:\n", "slip44": 92, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "unobtanium", "website": "https://unobtanium.uno", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 70, "address_type_p2sh": 50, "bech32_prefix": "vips", "bitcore": ["https://insight.vipstarco.in"], "blockbook": ["https://vips.blockbook.japanesecoin-pool.work"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "VIPSTARCOIN", "coin_name": "VIPSTARCOIN", "coin_shortcut": "VIPS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/VIPSTARCOIN/VIPSTARCOIN", "hash_genesis_block": "0000d068e1d30f79fb64446137106be9c6ee69a6a722295c131506b1ee09b77c", "key": "bitcoin:VIPS", "maintainer": "y-chan ", "max_address_length": 36, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "VIPSTARCOIN", "negative_fee": false, "segwit": true, "shortcut": "VIPS", "signed_message_header": "VIPSTARCOIN Signed Message:\n", "slip44": 1919, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "vipstarcoin", "website": "https://vipstarcoin.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 5, "bech32_prefix": "vtc", "bitcore": [], "blockbook": ["https://vtc1.trezor.io", "https://vtc2.trezor.io", "https://vtc3.trezor.io", "https://vtc4.trezor.io", "https://vtc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Vertcoin", "coin_name": "Vertcoin", "coin_shortcut": "VTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/vertcoin-project/vertcoin-core", "hash_genesis_block": "4d96a915f49d40b1e5c2844d1ee2dccb90013a990ccea12c492d22110489f0c4", "key": "bitcoin:VTC", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Vertcoin", "negative_fee": false, "segwit": true, "shortcut": "VTC", "signed_message_header": "Vertcoin Signed Message:\n", "slip44": 28, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "vertcoin", "website": "https://vertcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 33, "bech32_prefix": "via", "bitcore": ["https://explorer.viacoin.org"], "blockbook": [], "blocktime_seconds": 24, "cashaddr_prefix": null, "coin_label": "Viacoin", "coin_name": "Viacoin", "coin_shortcut": "VIA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7000, "High": 20000, "Low": 1000, "Normal": 14000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/viacoin", "hash_genesis_block": "4e9b54001f9976049830128ec0331515eaabe35a70970d79971da1539a400ba1", "key": "bitcoin:VIA", "maintainer": "romanornr ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Viacoin", "negative_fee": false, "segwit": true, "shortcut": "VIA", "signed_message_header": "Viacoin Signed Message:\n", "slip44": 14, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "viacoin", "website": "https://viacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 142, "address_type_p2sh": 145, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.zcore.cash"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "ZCore", "coin_name": "ZCore", "coin_shortcut": "ZCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcore-coin/zcore-2.0", "hash_genesis_block": "695b79c8c234b45b2eeb4722f33373e471c9b686ff78efeb39da95f824a9f81b", "key": "bitcoin:ZCR", "maintainer": "Erick Costa ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 34, "minfee_kb": 1000, "name": "ZCore", "negative_fee": false, "segwit": false, "shortcut": "ZCR", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 428, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcore", "website": "https://zcore.cash", "xprv_magic": 78791432, "xpub_magic": 78792518, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://zec1.trezor.io", "https://zec2.trezor.io", "https://zec3.trezor.io", "https://zec4.trezor.io", "https://zec5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash", "coin_name": "Zcash", "coin_shortcut": "ZEC", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08", "key": "bitcoin:ZEC", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash", "negative_fee": false, "segwit": false, "shortcut": "ZEC", "signed_message_header": "Zcash Signed Message:\n", "slip44": 133, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7461, "address_type_p2sh": 7354, "bech32_prefix": null, "bitcore": ["https://explorer.testnet.z.cash"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash Testnet", "coin_name": "Zcash Testnet", "coin_shortcut": "TAZ", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38", "key": "bitcoin:TAZ", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TAZ", "signed_message_header": "Zcash Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 82, "address_type_p2sh": 7, "bech32_prefix": null, "bitcore": ["https://insight.zcoin.io"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin", "coin_name": "Zcoin", "coin_shortcut": "XZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "4381deb85b1b2c9843c222944b616d997516dcbd6a964e1eaf0def0830695233", "key": "bitcoin:XZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin", "negative_fee": false, "segwit": false, "shortcut": "XZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 136, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcoin", "website": "https://zcoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 178, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin Testnet", "coin_name": "Zcoin Testnet", "coin_shortcut": "tXZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "7ac038c193c2158c428c59f9ae0c02a07115141c6e9dc244ae96132e99b4e642", "key": "bitcoin:tXZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin Testnet", "negative_fee": false, "segwit": false, "shortcut": "tXZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "testzcoin", "website": "https://zcoin.io", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.zel.network"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Zel", "coin_name": "ZelCash", "coin_shortcut": "ZEL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zelcash", "hash_genesis_block": "00052461a5006c2e3b74ce48992a08695607912d5604c3eb8da25749b0900444", "key": "bitcoin:ZEL", "maintainer": "Cabecinha84 ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zel", "negative_fee": false, "segwit": false, "shortcut": "ZEL", "signed_message_header": "Zcash Signed Message:\n", "slip44": 19167, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "zelcash", "website": "https://zel.network", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}] +[{"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": "bc", "bitcore": [], "blockbook": ["https://btc1.trezor.io", "https://btc2.trezor.io", "https://btc3.trezor.io", "https://btc4.trezor.io", "https://btc5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin", "coin_name": "Bitcoin", "coin_shortcut": "BTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin", "negative_fee": false, "segwit": true, "shortcut": "BTC", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 0, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "bcrt", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Regtest", "coin_name": "Regtest", "coin_shortcut": "REGTEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", "key": "bitcoin:REGTEST", "maintainer": "Thomas Kerin ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Regtest", "negative_fee": false, "segwit": true, "shortcut": "REGTEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tb", "bitcore": [], "blockbook": ["https://tbtc1.trezor.io", "https://tbtc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Testnet", "coin_name": "Testnet", "coin_shortcut": "TEST", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bitcoin/bitcoin", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TEST", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Testnet", "negative_fee": false, "segwit": true, "shortcut": "TEST", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://bitcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 53, "address_type_p2sh": 55, "bech32_prefix": "acm", "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Actinium", "coin_name": "Actinium", "coin_shortcut": "ACM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Actinium-project/Actinium", "hash_genesis_block": "28d77872e23714562f49a1be792c276623c1bbe3fdcf21b6035cfde78b00b824", "key": "bitcoin:ACM", "maintainer": "Harris Brakmic ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Actinium", "negative_fee": false, "segwit": true, "shortcut": "ACM", "signed_message_header": "Actinium Signed Message:\n", "slip44": 228, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "actinium", "website": "https://actinium.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 55, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Axe", "coin_name": "Axe", "coin_shortcut": "AXE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/axerunners/axe", "hash_genesis_block": "00000c33631ca6f2f61368991ce2dc03306b5bb50bf7cede5cfbba6db38e52e6", "key": "bitcoin:AXE", "maintainer": "Kirill Orlov ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Axe", "negative_fee": false, "segwit": false, "shortcut": "AXE", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 4242, "support": {"connect": true, "trezor1": "1.7.3", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "axe", "website": "https://axerunners.com", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 85, "bech32_prefix": "bm", "bitcore": [], "blockbook": ["https://bellcoin-blockbook.ilmango.work", "https://bell.blockbook.ovh"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Bellcoin", "coin_name": "Bellcoin", "coin_shortcut": "BELL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/bellcoin-org/bellcoin", "hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603", "key": "bitcoin:BELL", "maintainer": "ilmango-doge ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bellcoin", "negative_fee": false, "segwit": true, "shortcut": "BELL", "signed_message_header": "Bellcoin Signed Message:\n", "slip44": 25252, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bellcoin", "website": "https://bellcoin.web4u.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 81, "address_type_p2sh": 5, "bech32_prefix": "bz", "bitcore": ["https://insight.bitzeny.jp", "https://zeny.insight.monaco-ex.org"], "blockbook": ["https://zny.blockbook.ovh"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "BitZeny", "coin_name": "BitZeny", "coin_shortcut": "ZNY", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/BitzenyCoreDevelopers/bitzeny", "hash_genesis_block": "000009f7e55e9e3b4781e22bd87a7cfa4acada9e4340d43ca738bf4e9fb8f5ce", "key": "bitcoin:ZNY", "maintainer": "y-chan ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "BitZeny", "negative_fee": false, "segwit": true, "shortcut": "ZNY", "signed_message_header": "BitZeny Signed Message:\n", "slip44": 123, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitzeny", "website": "https://bitzeny.tech", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://bch1.trezor.io", "https://bch2.trezor.io", "https://bch3.trezor.io", "https://bch4.trezor.io", "https://bch5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": "bitcoincash", "coin_label": "Bitcoin Cash", "coin_name": "Bcash", "coin_shortcut": "BCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash", "negative_fee": false, "segwit": false, "shortcut": "BCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 145, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": "bchtest", "coin_label": "Bitcoin Cash Testnet", "coin_name": "Bcash Testnet", "coin_shortcut": "TBCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 0, "github": "https://github.com/Bitcoin-ABC/bitcoin-abc", "hash_genesis_block": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", "key": "bitcoin:TBCH", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Cash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TBCH", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoincash", "website": "https://www.bitcoincash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 23, "bech32_prefix": "btg", "bitcore": [], "blockbook": ["https://btg1.trezor.io", "https://btg2.trezor.io", "https://btg3.trezor.io", "https://btg4.trezor.io", "https://btg5.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold", "coin_name": "Bgold", "coin_shortcut": "BTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "key": "bitcoin:BTG", "maintainer": "Saleem Rashid ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold", "negative_fee": false, "segwit": true, "shortcut": "BTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tbtg", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Gold Testnet", "coin_name": "Bgold Testnet", "coin_shortcut": "TBTG", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": true, "fork_id": 79, "github": "https://github.com/BTCGPU/BTCGPU", "hash_genesis_block": "00000000e0781ebe24b91eedc293adfea2f557b53ec379e78959de3853e6f9f6", "key": "bitcoin:TBTG", "maintainer": "The Bitcoin Gold Developers ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Gold Testnet", "negative_fee": false, "segwit": true, "shortcut": "TBTG", "signed_message_header": "Bitcoin Gold Signed Message:\n", "slip44": 156, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoingold", "website": "https://bitcoingold.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 4901, "address_type_p2sh": 5039, "bech32_prefix": null, "bitcore": ["https://explorer.btcprivate.org"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcoin Private", "coin_name": "Bprivate", "coin_shortcut": "BTCP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": 42, "github": "https://github.com/BTCPrivate/BitcoinPrivate", "hash_genesis_block": "0007104ccda289427919efc39dc9e4d499804b7bebc22df55f8b834301260602", "key": "bitcoin:BTCP", "maintainer": "Chris Sulmone ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Bitcoin Private", "negative_fee": false, "segwit": false, "shortcut": "BTCP", "signed_message_header": "BitcoinPrivate Signed Message:\n", "slip44": 183, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoinprivate", "website": "https://btcprivate.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 61, "address_type_p2sh": 123, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook1.bitcoinrh.org", "https://blockbook2.bitcoinrh.org"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Bitcoin Rhodium", "coin_name": "Brhodium", "coin_shortcut": "XRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://gitlab.com/bitcoinrh/BRhodiumNode", "hash_genesis_block": "baff5bfd9dc43fb672d003ec20fd21428f9282ca46bfa1730d73e1f2c75f5fdd", "key": "bitcoin:XRC", "maintainer": "baff5b ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcoin Rhodium", "negative_fee": false, "segwit": false, "shortcut": "XRC", "signed_message_header": "BitCoin Rhodium Signed Message:\n", "slip44": 10291, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcoin-rhodium", "website": "https://www.bitcoinrh.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3, "address_type_p2sh": 125, "bech32_prefix": "btx", "bitcore": ["https://insight.bitcore.cc"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Bitcore", "coin_name": "Bitcore", "coin_shortcut": "BTX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/LIMXTEC/BitCore", "hash_genesis_block": "604148281e5c4b7f2487e5d03cd60d8e6f69411d613f6448034508cea52e9574", "key": "bitcoin:BTX", "maintainer": "limxdev ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Bitcore", "negative_fee": false, "segwit": true, "shortcut": "BTX", "signed_message_header": "BitCore Signed Message:\n", "slip44": 160, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "bitcore", "website": "https://bitcore.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 28, "address_type_p2sh": 30, "bech32_prefix": "cpu", "bitcore": [], "blockbook": ["https://blockbook.cpuchain.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "CPUchain", "coin_name": "CPUchain", "coin_shortcut": "CPU", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 20}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/cpuchain/cpuchain", "hash_genesis_block": "000024d8766043ea0e1c9ad42e7ea4b5fdb459887bd80b8f9756f3d87e128f12", "key": "bitcoin:CPU", "maintainer": "Min Khang Aung ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "CPUchain", "negative_fee": false, "segwit": true, "shortcut": "CPU", "signed_message_header": "CPUchain Signed Message:\n", "slip44": 363, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "cpuchain", "website": "https://cpuchain.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 95495, "address_type_p2sh": 95473, "bech32_prefix": null, "bitcore": ["https://insight-01.crownplatform.com", "https://insight-02.crownplatform.com", "https://insight-03.crownplatform.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Crown", "coin_name": "Crown", "coin_shortcut": "CRW", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Crowndev/crowncoin", "hash_genesis_block": "0000000085370d5e122f64f4ab19c68614ff3df78c8d13cb814fd7e69a1dc6da", "key": "bitcoin:CRW", "maintainer": "Ashot ", "max_address_length": 40, "maxfee_kb": 2000000, "min_address_length": 36, "minfee_kb": 1000, "name": "Crown", "negative_fee": false, "segwit": false, "shortcut": "CRW", "signed_message_header": "Crown Signed Message:\n", "slip44": 72, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": false}, "timestamp": false, "uri_prefix": "crown", "website": "https://crownplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://dash1.trezor.io", "https://dash2.trezor.io", "https://dash3.trezor.io", "https://dash4.trezor.io", "https://dash5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash", "coin_name": "Dash", "coin_shortcut": "DASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6", "key": "bitcoin:DASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dash", "negative_fee": false, "segwit": false, "shortcut": "DASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 5, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Dash Testnet", "coin_name": "Dash Testnet", "coin_shortcut": "tDASH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/dashpay/dash", "hash_genesis_block": "00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c", "key": "bitcoin:tDASH", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Dash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tDASH", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "dash", "website": "https://www.dash.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 1855, "address_type_p2sh": 1818, "bech32_prefix": null, "bitcore": ["https://mainnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred", "coin_name": "Decred", "coin_shortcut": "DCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "298e5cc3d985bfe7f81dc135f360abe089edd4396b86d2de66b0cef42b21d980", "key": "bitcoin:DCR", "maintainer": "Alex Yocom-Piatt ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 10000, "name": "Decred", "negative_fee": false, "segwit": false, "shortcut": "DCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 42, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 50177256, "xpub_magic": 50178342, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 3873, "address_type_p2sh": 3836, "bech32_prefix": null, "bitcore": ["https://testnet.decred.org"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Decred Testnet", "coin_name": "Decred Testnet", "coin_shortcut": "TDCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_decred", "decimals": 8, "decred": true, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/decred/dcrd", "hash_genesis_block": "a649dce53918caf422e9c711c858837e08d626ecfcd198969b24f7b634a49bac", "key": "bitcoin:TDCR", "maintainer": "Saleem Rashid ", "max_address_length": 35, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Decred Testnet", "negative_fee": false, "segwit": false, "shortcut": "TDCR", "signed_message_header": "Decred Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "bitcoin", "website": "https://www.decred.org", "xprv_magic": 70615959, "xpub_magic": 70617041, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 63, "bech32_prefix": "dgb", "bitcore": [], "blockbook": ["https://dgb1.trezor.io", "https://dgb2.trezor.io"], "blocktime_seconds": 15, "cashaddr_prefix": null, "coin_label": "DigiByte", "coin_name": "DigiByte", "coin_shortcut": "DGB", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/digibyte/digibyte", "hash_genesis_block": "7497ea1b465eb39f1c8f507bc877078fe016d6fcb6dfad3a64c98dcc6e1e8496", "key": "bitcoin:DGB", "maintainer": "DigiByte ", "max_address_length": 34, "maxfee_kb": 500000, "min_address_length": 27, "minfee_kb": 1000, "name": "DigiByte", "negative_fee": false, "segwit": true, "shortcut": "DGB", "signed_message_header": "DigiByte Signed Message:\n", "slip44": 20, "support": {"connect": true, "trezor1": "1.6.3", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "digibyte", "website": "https://digibyte.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 30, "address_type_p2sh": 22, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://doge1.trezor.io", "https://doge2.trezor.io", "https://doge3.trezor.io", "https://doge4.trezor.io", "https://doge5.trezor.io"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Dogecoin", "coin_name": "Dogecoin", "coin_shortcut": "DOGE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 100000}, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/dogecoin/dogecoin", "hash_genesis_block": "1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691", "key": "bitcoin:DOGE", "maintainer": "Karel Bilek ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Dogecoin", "negative_fee": false, "segwit": false, "shortcut": "DOGE", "signed_message_header": "Dogecoin Signed Message:\n", "slip44": 3, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "dogecoin", "website": "https://dogecoin.com", "xprv_magic": 49988504, "xpub_magic": 49990397, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 235, "address_type_p2sh": 75, "bech32_prefix": "ert", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Elements", "coin_name": "Elements", "coin_shortcut": "ELEMENTS", "confidential_assets": {"address_prefix": 4, "blech32_prefix": "el"}, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/ElementsProject/elements", "hash_genesis_block": "209577bda6bf4b5804bd46f8621580dd6d4e8bfa2d190e1c50e932492baca07d", "key": "bitcoin:ELEMENTS", "maintainer": "Roman Zeyde ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Elements", "negative_fee": false, "segwit": true, "shortcut": "ELEMENTS", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "elements", "website": "https://elementsproject.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 14, "address_type_p2sh": 5, "bech32_prefix": "fc", "bitcore": ["https://bitcore.feathercoin.com"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Feathercoin", "coin_name": "Feathercoin", "coin_shortcut": "FTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "duplicate": true, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FeatherCoin/Feathercoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:FTC", "maintainer": "Lucas Betschart ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Feathercoin", "negative_fee": false, "segwit": true, "shortcut": "FTC", "signed_message_header": "Feathercoin Signed Message:\n", "slip44": 8, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "feathercoin", "website": "https://feathercoin.com", "xprv_magic": 76077806, "xpub_magic": 76069926, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 35, "address_type_p2sh": 94, "bech32_prefix": "flo", "bitcore": ["https://livenet.flocha.in"], "blockbook": [], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "Flo", "coin_name": "Florincoin", "coin_shortcut": "FLO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/floblockchain/flo", "hash_genesis_block": "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea", "key": "bitcoin:FLO", "maintainer": "Robert English ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Flo", "negative_fee": false, "segwit": true, "shortcut": "FLO", "signed_message_header": "Florincoin Signed Message:\n", "slip44": 216, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "florincoin", "website": "https://flo.cash", "xprv_magic": 15264107, "xpub_magic": 1526049, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 16, "bech32_prefix": "fc", "bitcore": [], "blockbook": ["https://explorer.fujicoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Fujicoin", "coin_name": "Fujicoin", "coin_shortcut": "FJC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 20000, "High": 100000, "Low": 10000, "Normal": 50000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/fujicoin/fujicoin", "hash_genesis_block": "adb6d9cfd74075e7f91608add4bd2a2ea636f70856183086842667a1597714a0", "key": "bitcoin:FJC", "maintainer": "motty ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 10000000, "name": "Fujicoin", "negative_fee": false, "segwit": true, "shortcut": "FJC", "signed_message_header": "FujiCoin Signed Message:\n", "slip44": 75, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "fujicoin", "website": "https://fujicoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 38, "address_type_p2sh": 10, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.gincoin.io"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "GIN", "coin_name": "Gincoin", "coin_shortcut": "GIN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gincoin-dev/gincoin-core", "hash_genesis_block": "00000cd6bde619b2c3b23ad2e384328a450a37fa28731debf748c3b17f91f97d", "key": "bitcoin:GIN", "maintainer": "Dragos Badea ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "GIN", "negative_fee": false, "segwit": false, "shortcut": "GIN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 2000, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "gincoin", "website": "https://gincoin.io", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 62, "bech32_prefix": "game", "bitcore": [], "blockbook": ["https://blockbook.gamecredits.network"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "GameCredits", "coin_name": "GameCredits", "coin_shortcut": "GAME", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/gamecredits-project/gamecredits", "hash_genesis_block": "91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee", "key": "bitcoin:GAME", "maintainer": "Samad Sajanlal ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "GameCredits", "negative_fee": false, "segwit": true, "shortcut": "GAME", "signed_message_header": "GameCredits Signed Message:\n", "slip44": 101, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "gamecredits", "website": "https://gamecredits.org", "xprv_magic": 27108450, "xpub_magic": 27106558, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 36, "address_type_p2sh": 5, "bech32_prefix": "grs", "bitcore": ["https://groestlsight.groestlcoin.org", "https://grsblocks.com"], "blockbook": ["https://blockbook.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin", "coin_name": "Groestlcoin", "coin_shortcut": "GRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023", "key": "bitcoin:GRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin", "negative_fee": false, "segwit": true, "shortcut": "GRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 17, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tgrs", "bitcore": ["https://groestlsight-test.groestlcoin.org"], "blockbook": ["https://blockbook-test.groestlcoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Groestlcoin Testnet", "coin_name": "Groestlcoin Testnet", "coin_shortcut": "tGRS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_groestl", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/Groestlcoin/groestlcoin", "hash_genesis_block": "000000ffbb50fc9898cdd36ec163e6ba23230164c0052a28876255b7dcf2cd36", "key": "bitcoin:tGRS", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Groestlcoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tGRS", "signed_message_header": "GroestlCoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.6.2", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "groestlcoin", "website": "https://www.groestlcoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch", "coin_name": "Hatch", "coin_shortcut": "HATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "000000fa6116f5d6c6ce9b60bd431469e40b4fe55feeeda59e33cd2f0b863196", "key": "bitcoin:HATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Hatch", "negative_fee": false, "segwit": false, "shortcut": "HATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 88888888, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 50221816, "xpub_magic": 50221772, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 140, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Hatch Testnet", "coin_name": "Hatch Testnet", "coin_shortcut": "tHATCH", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/hatchpay/hatch", "hash_genesis_block": "00000bf8b02180fa3860e3f4fbfaab76db14fbfd1323d1d3ad06d83b828b6644", "key": "bitcoin:tHATCH", "maintainer": "Hatch Support ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Hatch Testnet", "negative_fee": false, "segwit": false, "shortcut": "tHATCH", "signed_message_header": "Hatch Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "hatch", "website": "https://hatch.ga", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 60, "address_type_p2sh": 85, "bech32_prefix": null, "bitcore": ["https://api.kmd.dev"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Komodo", "coin_name": "Komodo", "coin_shortcut": "KMD", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 1991772603}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/komodoplatform/komodo", "hash_genesis_block": "027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71", "key": "bitcoin:KMD", "maintainer": "Kadan Stadelmann ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Komodo", "negative_fee": true, "segwit": false, "shortcut": "KMD", "signed_message_header": "Komodo Signed Message:\n", "slip44": 141, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "komodo", "website": "https://komodoplatform.com", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 6198, "address_type_p2sh": 6203, "bech32_prefix": null, "bitcore": ["https://insight.kotocoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Koto", "coin_name": "Koto", "coin_shortcut": "KOTO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/KotoDevelopers/koto", "hash_genesis_block": "6d424c350729ae633275d51dc3496e16cd1b1d195c164da00f39c499a2e9959e", "key": "bitcoin:KOTO", "maintainer": "WO ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Koto", "negative_fee": false, "segwit": false, "shortcut": "KOTO", "signed_message_header": "Koto Signed Message:\n", "slip44": 510, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "koto", "website": "https://ko-to.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 48, "address_type_p2sh": 50, "bech32_prefix": "ltc", "bitcore": [], "blockbook": ["https://ltc1.trezor.io", "https://ltc2.trezor.io", "https://ltc3.trezor.io", "https://ltc4.trezor.io", "https://ltc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin", "coin_name": "Litecoin", "coin_shortcut": "LTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2", "key": "bitcoin:LTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Litecoin", "negative_fee": false, "segwit": true, "shortcut": "LTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 2, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 27106558, "xpub_magic": 27108450, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 111, "address_type_p2sh": 58, "bech32_prefix": "tltc", "bitcore": ["https://testnet.litecore.io"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Litecoin Testnet", "coin_name": "Litecoin Testnet", "coin_shortcut": "tLTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/litecoin-project/litecoin", "hash_genesis_block": "4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0", "key": "bitcoin:tLTC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Litecoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tLTC", "signed_message_header": "Litecoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "litecoin", "website": "https://litecoin.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 50, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Metaverse ETP", "coin_name": "MetaverseETP", "coin_shortcut": "ETP", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/mvs-org/metaverse", "hash_genesis_block": "b81848ef9ae86e84c3da26564bc6ab3a79efc628239d11471ab5cd25c0684c2d", "key": "bitcoin:ETP", "maintainer": "Sven Mutzl ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 100, "name": "Metaverse ETP", "negative_fee": false, "segwit": false, "shortcut": "ETP", "signed_message_header": "Metaverse Signed Message:\n", "slip44": 2302, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "etp", "website": "https://mvs.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 50, "address_type_p2sh": 55, "bech32_prefix": "mona", "bitcore": ["https://mona.chainsight.info", "https://insight.electrum-mona.org"], "blockbook": ["https://blockbook.electrum-mona.org"], "blocktime_seconds": 90, "cashaddr_prefix": null, "coin_label": "Monacoin", "coin_name": "Monacoin", "coin_shortcut": "MONA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/monacoinproject/monacoin", "hash_genesis_block": "ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6", "key": "bitcoin:MONA", "maintainer": "cryptcoin-junkey ", "max_address_length": 34, "maxfee_kb": 5000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Monacoin", "negative_fee": false, "segwit": true, "shortcut": "MONA", "signed_message_header": "Monacoin Signed Message:\n", "slip44": 22, "support": {"connect": true, "trezor1": "1.6.0", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "monacoin", "website": "https://monacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 16, "address_type_p2sh": 76, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.monetaryunit.org"], "blocktime_seconds": 40, "cashaddr_prefix": null, "coin_label": "MonetaryUnit", "coin_name": "MonetaryUnit", "coin_shortcut": "MUE", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/muecoin/MUE", "hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f", "key": "bitcoin:MUE", "maintainer": "Sotiris Blad ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "MonetaryUnit", "negative_fee": false, "segwit": false, "shortcut": "MUE", "signed_message_header": "MonetaryUnit Signed Message:\n", "slip44": 31, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "monetaryunit", "website": "https://www.monetaryunit.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 38, "address_type_p2sh": 53, "bech32_prefix": "nix", "bitcore": ["https://blockchain.nixplatform.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "NIX", "coin_name": "NIX", "coin_shortcut": "NIX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/nixplatform/nixcore", "hash_genesis_block": "dd28ad86def767c3cfc34267a950d871fc7462bc57ea4a929fc3596d9b598e41", "key": "bitcoin:NIX", "maintainer": "mattt21 ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 0, "name": "NIX", "negative_fee": false, "segwit": true, "shortcut": "NIX", "signed_message_header": "NIX Signed Message:\n", "slip44": 400, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "nix", "website": "https://nixplatform.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 52, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://nmc1.trezor.io", "https://nmc2.trezor.io"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Namecoin", "coin_name": "Namecoin", "coin_shortcut": "NMC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 2940, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/namecoin/namecoin-core", "hash_genesis_block": "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770", "key": "bitcoin:NMC", "maintainer": "Pavol Rusnak ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Namecoin", "negative_fee": false, "segwit": false, "shortcut": "NMC", "signed_message_header": "Namecoin Signed Message:\n", "slip44": 7, "support": {"connect": true, "trezor1": "1.5.2", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "namecoin", "website": "https://namecoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 30, "address_type_p2sh": 13, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX", "coin_name": "PIVX", "coin_shortcut": "PIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:PIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX", "negative_fee": false, "segwit": false, "shortcut": "PIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 119, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 35729707, "xpub_magic": 36513075, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 139, "address_type_p2sh": 19, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook-testnet.pivx.link"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "PIVX Testnet", "coin_name": "PIVX Testnet", "coin_shortcut": "tPIVX", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/PIVX-Project/PIVX", "hash_genesis_block": "0000041e482b9b9691d98eefb48473405c0b8ec31b76df3797c74a78680ef818", "key": "bitcoin:tPIVX", "maintainer": "Random Zebra ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 100, "name": "PIVX Testnet", "negative_fee": false, "segwit": false, "shortcut": "tPIVX", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "pivx", "website": "https://pivx.org", "xprv_magic": 981489719, "xpub_magic": 981492128, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 56, "address_type_p2sh": 60, "bech32_prefix": "bc", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl", "coin_name": "Particl", "coin_shortcut": "PART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000ee0784c195317ac95623e22fddb8c7b8825dc3998e0bb924d66866eccf4c", "key": "bitcoin:PART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl", "negative_fee": false, "segwit": true, "shortcut": "PART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 44, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 1768850129, "xpub_magic": 2401087160, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 28471030}, {"address_type": 118, "address_type_p2sh": 122, "bech32_prefix": "tb", "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Particl Testnet", "coin_name": "Particl Testnet", "coin_shortcut": "tPART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/particl/particl-core", "hash_genesis_block": "0000594ada5310b367443ee0afd4fa3d0bbd5850ea4e33cdc7d6a904a7ec7c90", "key": "bitcoin:tPART", "maintainer": "Ryno ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Particl Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPART", "signed_message_header": "Bitcoin Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "particl", "website": "https://particl.io", "xprv_magic": 3779229696, "xpub_magic": 76059768, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 55, "address_type_p2sh": 117, "bech32_prefix": "pc", "bitcore": [], "blockbook": ["https://blockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin", "coin_name": "Peercoin", "coin_shortcut": "PPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3", "key": "bitcoin:PPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin", "negative_fee": false, "segwit": true, "shortcut": "PPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 6, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 111, "address_type_p2sh": 196, "bech32_prefix": "tpc", "bitcore": [], "blockbook": ["https://tblockbook.peercoin.net"], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Peercoin Testnet", "coin_name": "Peercoin Testnet", "coin_shortcut": "tPPC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 6, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 10000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/peercoin/peercoin", "hash_genesis_block": "00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06", "key": "bitcoin:tPPC", "maintainer": "backpacker69 ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 10000, "name": "Peercoin Testnet", "negative_fee": false, "segwit": true, "shortcut": "tPPC", "signed_message_header": "Peercoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.9", "webwallet": true}, "timestamp": true, "uri_prefix": "peercoin", "website": "https://peercoin.net", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 47, "address_type_p2sh": 22, "bech32_prefix": null, "bitcore": ["https://live.pesetacoin.info"], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Pesetacoin", "coin_name": "Pesetacoin", "coin_shortcut": "PTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 10000000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/FundacionPesetacoin/PesetacoinCore", "hash_genesis_block": "edfe5830b53251bfff733600b1cd5c192e761c011b055f07924634818c906438", "key": "bitcoin:PTC", "maintainer": "Rw ", "max_address_length": 34, "maxfee_kb": 1000000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Pesetacoin", "negative_fee": false, "segwit": false, "shortcut": "PTC", "signed_message_header": "Pesetacoin Signed Message:\n", "slip44": 109, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "pesetacoin", "website": "https://pesetacoin.info", "xprv_magic": 76079604, "xpub_magic": 76071982, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 55, "address_type_p2sh": 56, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.polispay.org"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Polis", "coin_name": "Polis", "coin_shortcut": "POLIS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/polispay/polis", "hash_genesis_block": "000009701eb781a8113b1af1d814e2f060f6408a2c990db291bc5108a1345c1e", "key": "bitcoin:POLIS", "maintainer": "Cronos ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 1000, "name": "Polis", "negative_fee": false, "segwit": false, "shortcut": "POLIS", "signed_message_header": "Polis Signed Message:\n", "slip44": 1997, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "polis", "website": "https://www.polispay.org", "xprv_magic": 65165637, "xpub_magic": 65166718, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 23, "address_type_p2sh": 83, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Primecoin", "coin_name": "Primecoin", "coin_shortcut": "XPM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/primecoin/primecoin", "hash_genesis_block": "963d17ba4dc753138078a2f56afb3af9674e2546822badff26837db9a0152106", "key": "bitcoin:XPM", "maintainer": "James Skrowvedeht ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 26, "minfee_kb": 1000, "name": "Primecoin", "negative_fee": false, "segwit": false, "shortcut": "XPM", "signed_message_header": "Primecoin Signed Message:\n", "slip44": 24, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "primecoin", "website": "https://primecoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 58, "address_type_p2sh": 50, "bech32_prefix": "qc", "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum", "coin_name": "Qtum", "coin_shortcut": "QTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "duplicate": true, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c", "key": "bitcoin:QTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum", "negative_fee": false, "segwit": true, "shortcut": "QTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 2301, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": true}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 120, "address_type_p2sh": 110, "bech32_prefix": "tq", "bitcore": [], "blockbook": [], "blocktime_seconds": 128, "cashaddr_prefix": null, "coin_label": "Qtum Testnet", "coin_name": "Qtum Testnet", "coin_shortcut": "tQTUM", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/qtumproject/qtum", "hash_genesis_block": "0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222", "key": "bitcoin:tQTUM", "maintainer": "CodeFace ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "Qtum Testnet", "negative_fee": false, "segwit": true, "shortcut": "tQTUM", "signed_message_header": "Qtum Signed Message:\n", "slip44": 1, "support": {"connect": false, "trezor1": "1.8.1", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "qtum", "website": "https://qtum.org", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": 73342198, "xpub_magic_segwit_p2sh": 71979618}, {"address_type": 60, "address_type_p2sh": 122, "bech32_prefix": null, "bitcore": ["https://ravencoin.network"], "blockbook": ["https://blockbook.ravencoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ravencoin", "coin_name": "Ravencoin", "coin_shortcut": "RVN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RavenProject/Ravencoin", "hash_genesis_block": "0000006b444bc2f2ffe627be9d9e7e7a0730000870ef6eb6da46c8eae389df90", "key": "bitcoin:RVN", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ravencoin", "negative_fee": false, "segwit": false, "shortcut": "RVN", "signed_message_header": "Raven Signed Message:\n", "slip44": 175, "support": {"connect": true, "trezor1": "1.7.2", "trezor2": "2.0.10", "webwallet": true}, "timestamp": false, "uri_prefix": "raven", "website": "https://ravencoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 25, "address_type_p2sh": 105, "bech32_prefix": null, "bitcore": ["https://insight.ritocoin.org"], "blockbook": ["https://blockbook.ritocoin.org"], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Ritocoin", "coin_name": "Ritocoin", "coin_shortcut": "RITO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Low": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/RitoProject", "hash_genesis_block": "00000075e344bdf1c0e433f453764b1830a7aa19b2a5213e707502a22b779c1b", "key": "bitcoin:RITO", "maintainer": "Scotty ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Ritocoin", "negative_fee": false, "segwit": false, "shortcut": "RITO", "signed_message_header": "Rito Signed Message:\n", "slip44": 19169, "support": {"connect": true, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "rito", "website": "https://ritocoin.org", "xprv_magic": 87326380, "xpub_magic": 87353290, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 63, "address_type_p2sh": 18, "bech32_prefix": null, "bitcore": ["https://insight.smartcash.cc"], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash", "coin_name": "SmartCash", "coin_shortcut": "SMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "duplicate": true, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "000007acc6970b812948d14ea5a0a13db0fdd07d5047c7e69101fa8b361e05a4", "key": "bitcoin:SMART", "maintainer": "Leandro Reinaux ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash", "negative_fee": false, "segwit": false, "shortcut": "SMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "smart", "website": "https://smartcash.cc", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 21, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 55, "cashaddr_prefix": null, "coin_label": "SmartCash Testnet", "coin_name": "SmartCash Testnet", "coin_shortcut": "tSMART", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1_smart", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/SmartCash/Core-Smart", "hash_genesis_block": "0000027235b5679bcd28c90d03d4bf1a9ba4c07c4efcc1c87d6c68cce25e6e5d", "key": "bitcoin:tSMART", "maintainer": "Leandro Reinaux ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "SmartCash Testnet", "negative_fee": false, "segwit": false, "shortcut": "tSMART", "signed_message_header": "SmartCash Signed Message:\n", "slip44": 224, "support": {"connect": false, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": false}, "timestamp": false, "uri_prefix": "testsmart", "website": "https://smartcash.cc", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 76, "address_type_p2sh": 16, "bech32_prefix": "xc", "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Stakenet", "coin_name": "Stakenet", "coin_shortcut": "XSN", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 70, "High": 200, "Low": 10, "Normal": 140}, "dust_limit": 1000, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/X9Developers/XSN", "hash_genesis_block": "00000c822abdbb23e28f79a49d29b41429737c6c7e15df40d1b1f1b35907ae34", "key": "bitcoin:XSN", "maintainer": "Alexis Hernandez ", "max_address_length": 47, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Stakenet", "negative_fee": false, "segwit": true, "shortcut": "XSN", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 199, "support": {"connect": true, "trezor1": "1.8.0", "trezor2": "2.0.11", "webwallet": false}, "timestamp": false, "uri_prefix": "stakenet", "website": "https://stakenet.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 63, "address_type_p2sh": 5, "bech32_prefix": "sys", "bitcore": [], "blockbook": [], "blocktime_seconds": 60, "cashaddr_prefix": null, "coin_label": "Syscoin", "coin_name": "Syscoin", "coin_shortcut": "SYS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 200, "High": 2000, "Low": 100, "Normal": 400}, "dust_limit": 1820, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/syscoin/syscoin", "hash_genesis_block": "0000022642db0346b6e01c2a397471f4f12e65d4f4251ec96c1f85367a61a7ab", "key": "bitcoin:SYS", "maintainer": "Jagdeep Sidhu ", "max_address_length": 34, "maxfee_kb": 10000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Syscoin", "negative_fee": false, "segwit": true, "shortcut": "SYS", "signed_message_header": "Syscoin Signed Message:\n", "slip44": 57, "support": {"connect": false, "trezor1": "1.8.4", "trezor2": "2.1.8", "webwallet": false}, "timestamp": false, "uri_prefix": "syscoin", "website": "https://syscoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 0, "address_type_p2sh": 5, "bech32_prefix": null, "bitcore": ["https://insight.terracoin.io"], "blockbook": [], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Terracoin", "coin_name": "Terracoin", "coin_shortcut": "TRC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "duplicate": true, "dust_limit": 5460, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/terracoin/terracoin", "hash_genesis_block": "00000000804bbc6a621a9dbb564ce469f492e1ccf2d70f8a6b241e26a277afa2", "key": "bitcoin:TRC", "maintainer": "The Terracoin Foundation ", "max_address_length": 34, "maxfee_kb": 100000, "min_address_length": 27, "minfee_kb": 10000, "name": "Terracoin", "negative_fee": false, "segwit": false, "shortcut": "TRC", "signed_message_header": "DarkCoin Signed Message:\n", "slip44": 83, "support": {"connect": false, "trezor1": false, "trezor2": false, "webwallet": false}, "timestamp": false, "uri_prefix": "terracoin", "website": "https://terracoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 130, "address_type_p2sh": 30, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.flurbo.xyz", "https://blockbook.unobtanium.uno"], "blocktime_seconds": 30, "cashaddr_prefix": null, "coin_label": "Unobtanium", "coin_name": "Unobtanium", "coin_shortcut": "UNO", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 50, "High": 160, "Low": 10, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/unobtanium-official/unobtanium", "hash_genesis_block": "000004c2fc5fffb810dccc197d603690099a68305232e552d96ccbe8e2c52b75", "key": "bitcoin:UNO", "maintainer": "choicesz ", "max_address_length": 34, "maxfee_kb": 2000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Unobtanium", "negative_fee": false, "segwit": false, "shortcut": "UNO", "signed_message_header": "Unobtanium Signed Message:\n", "slip44": 92, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.6", "webwallet": false}, "timestamp": false, "uri_prefix": "unobtanium", "website": "https://unobtanium.uno", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 70, "address_type_p2sh": 50, "bech32_prefix": "vips", "bitcore": ["https://insight.vipstarco.in"], "blockbook": ["https://vips.blockbook.japanesecoin-pool.work"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "VIPSTARCOIN", "coin_name": "VIPSTARCOIN", "coin_shortcut": "VIPS", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 500, "High": 2000, "Low": 410, "Normal": 600}, "dust_limit": 218400, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/VIPSTARCOIN/VIPSTARCOIN", "hash_genesis_block": "0000d068e1d30f79fb64446137106be9c6ee69a6a722295c131506b1ee09b77c", "key": "bitcoin:VIPS", "maintainer": "y-chan ", "max_address_length": 36, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 400000, "name": "VIPSTARCOIN", "negative_fee": false, "segwit": true, "shortcut": "VIPS", "signed_message_header": "VIPSTARCOIN Signed Message:\n", "slip44": 1919, "support": {"connect": false, "trezor1": "1.8.2", "trezor2": "2.1.1", "webwallet": false}, "timestamp": false, "uri_prefix": "vipstarcoin", "website": "https://vipstarcoin.jp", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 5, "bech32_prefix": "vtc", "bitcore": [], "blockbook": ["https://vtc1.trezor.io", "https://vtc2.trezor.io", "https://vtc3.trezor.io", "https://vtc4.trezor.io", "https://vtc5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Vertcoin", "coin_name": "Vertcoin", "coin_shortcut": "VTC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 1000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/vertcoin-project/vertcoin-core", "hash_genesis_block": "4d96a915f49d40b1e5c2844d1ee2dccb90013a990ccea12c492d22110489f0c4", "key": "bitcoin:VTC", "maintainer": "Jochen Hoenicke ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 100000, "name": "Vertcoin", "negative_fee": false, "segwit": true, "shortcut": "VTC", "signed_message_header": "Vertcoin Signed Message:\n", "slip44": 28, "support": {"connect": true, "trezor1": "1.6.1", "trezor2": "2.0.5", "webwallet": true}, "timestamp": false, "uri_prefix": "vertcoin", "website": "https://vertcoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 71, "address_type_p2sh": 33, "bech32_prefix": "via", "bitcore": ["https://explorer.viacoin.org"], "blockbook": [], "blocktime_seconds": 24, "cashaddr_prefix": null, "coin_label": "Viacoin", "coin_name": "Viacoin", "coin_shortcut": "VIA", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 7000, "High": 20000, "Low": 1000, "Normal": 14000}, "dust_limit": 54600, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/viacoin", "hash_genesis_block": "4e9b54001f9976049830128ec0331515eaabe35a70970d79971da1539a400ba1", "key": "bitcoin:VIA", "maintainer": "romanornr ", "max_address_length": 34, "maxfee_kb": 40000000, "min_address_length": 27, "minfee_kb": 1000, "name": "Viacoin", "negative_fee": false, "segwit": true, "shortcut": "VIA", "signed_message_header": "Viacoin Signed Message:\n", "slip44": 14, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "viacoin", "website": "https://viacoin.org", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": 78792518, "xpub_magic_segwit_p2sh": 77429938}, {"address_type": 142, "address_type_p2sh": 145, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.zcore.cash"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "ZCore", "coin_name": "ZCore", "coin_shortcut": "ZCR", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcore-coin/zcore-2.0", "hash_genesis_block": "695b79c8c234b45b2eeb4722f33373e471c9b686ff78efeb39da95f824a9f81b", "key": "bitcoin:ZCR", "maintainer": "Erick Costa ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 34, "minfee_kb": 1000, "name": "ZCore", "negative_fee": false, "segwit": false, "shortcut": "ZCR", "signed_message_header": "DarkNet Signed Message:\n", "slip44": 428, "support": {"connect": true, "trezor1": "1.8.4", "trezor2": "2.1.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcore", "website": "https://zcore.cash", "xprv_magic": 78791432, "xpub_magic": 78792518, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://zec1.trezor.io", "https://zec2.trezor.io", "https://zec3.trezor.io", "https://zec4.trezor.io", "https://zec5.trezor.io"], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash", "coin_name": "Zcash", "coin_shortcut": "ZEC", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08", "key": "bitcoin:ZEC", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash", "negative_fee": false, "segwit": false, "shortcut": "ZEC", "signed_message_header": "Zcash Signed Message:\n", "slip44": 133, "support": {"connect": true, "trezor1": "1.7.1", "trezor2": "2.0.8", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7461, "address_type_p2sh": 7354, "bech32_prefix": null, "bitcore": ["https://explorer.testnet.z.cash"], "blockbook": [], "blocktime_seconds": 150, "cashaddr_prefix": null, "coin_label": "Zcash Testnet", "coin_name": "Zcash Testnet", "coin_shortcut": "TAZ", "confidential_assets": null, "consensus_branch_id": {"1": 0, "2": 0, "3": 1537743641, "4": 733220448}, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": true, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcash/zcash", "hash_genesis_block": "05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38", "key": "bitcoin:TAZ", "maintainer": "Pavol Rusnak ", "max_address_length": 95, "maxfee_kb": 10000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zcash Testnet", "negative_fee": false, "segwit": false, "shortcut": "TAZ", "signed_message_header": "Zcash Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcash", "website": "https://z.cash", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 82, "address_type_p2sh": 7, "bech32_prefix": null, "bitcore": ["https://insight.zcoin.io"], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin", "coin_name": "Zcoin", "coin_shortcut": "XZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "4381deb85b1b2c9843c222944b616d997516dcbd6a964e1eaf0def0830695233", "key": "bitcoin:XZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 34, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin", "negative_fee": false, "segwit": false, "shortcut": "XZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 136, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": true}, "timestamp": false, "uri_prefix": "zcoin", "website": "https://zcoin.io", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 65, "address_type_p2sh": 178, "bech32_prefix": null, "bitcore": [], "blockbook": [], "blocktime_seconds": 600, "cashaddr_prefix": null, "coin_label": "Zcoin Testnet", "coin_name": "Zcoin Testnet", "coin_shortcut": "tXZC", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Economy": 10, "High": 200, "Low": 1, "Normal": 100}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zcoinofficial/zcoin", "hash_genesis_block": "7ac038c193c2158c428c59f9ae0c02a07115141c6e9dc244ae96132e99b4e642", "key": "bitcoin:tXZC", "maintainer": "Yura Pakhuchiy ", "max_address_length": 35, "maxfee_kb": 1000000, "min_address_length": 27, "minfee_kb": 0, "name": "Zcoin Testnet", "negative_fee": false, "segwit": false, "shortcut": "tXZC", "signed_message_header": "Zcoin Signed Message:\n", "slip44": 1, "support": {"connect": true, "trezor1": "1.6.2", "trezor2": "2.0.7", "webwallet": false}, "timestamp": false, "uri_prefix": "testzcoin", "website": "https://zcoin.io", "xprv_magic": 70615956, "xpub_magic": 70617039, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}, {"address_type": 7352, "address_type_p2sh": 7357, "bech32_prefix": null, "bitcore": [], "blockbook": ["https://blockbook.zel.network"], "blocktime_seconds": 120, "cashaddr_prefix": null, "coin_label": "Zel", "coin_name": "ZelCash", "coin_shortcut": "ZEL", "confidential_assets": null, "consensus_branch_id": null, "cooldown": 100, "curve_name": "secp256k1", "decimals": 8, "decred": false, "default_fee_b": {"Normal": 10}, "dust_limit": 546, "extra_data": false, "force_bip143": false, "fork_id": null, "github": "https://github.com/zelcash", "hash_genesis_block": "00052461a5006c2e3b74ce48992a08695607912d5604c3eb8da25749b0900444", "key": "bitcoin:ZEL", "maintainer": "Cabecinha84 ", "max_address_length": 95, "maxfee_kb": 1000000, "min_address_length": 35, "minfee_kb": 1000, "name": "Zel", "negative_fee": false, "segwit": false, "shortcut": "ZEL", "signed_message_header": "Zcash Signed Message:\n", "slip44": 19167, "support": {"connect": false, "trezor1": "1.8.3", "trezor2": "2.1.4", "webwallet": false}, "timestamp": false, "uri_prefix": "zelcash", "website": "https://zel.network", "xprv_magic": 76066276, "xpub_magic": 76067358, "xpub_magic_segwit_native": null, "xpub_magic_segwit_p2sh": null}] diff --git a/python/src/trezorlib/tx_api.py b/python/src/trezorlib/tx_api.py index 04d7f2371..74c935497 100644 --- a/python/src/trezorlib/tx_api.py +++ b/python/src/trezorlib/tx_api.py @@ -30,10 +30,6 @@ def is_zcash(coin): return lcn.startswith("zcash") or lcn.startswith("komodo") -def is_capricoin(coin): - return coin["coin_name"].lower().startswith("capricoin") - - def is_peercoin(coin): return coin["coin_name"].lower().startswith("peercoin") @@ -90,7 +86,7 @@ def json_to_tx(coin, data): t.version = data["version"] t.lock_time = data.get("locktime") - if is_capricoin(coin) or is_peercoin(coin): + if is_peercoin(coin): t.timestamp = data["time"] if coin["decred"]: diff --git a/python/tools/build_tx.py b/python/tools/build_tx.py index 3d0931c6b..cce268ba3 100755 --- a/python/tools/build_tx.py +++ b/python/tools/build_tx.py @@ -172,7 +172,7 @@ def sign_interactive(): signtx = messages.SignTx() signtx.version = prompt("Transaction version", type=int, default=2) signtx.lock_time = prompt("Transaction locktime", type=int, default=0) - if coin == "Capricoin": + if coin == "Peercoin": signtx.timestamp = prompt("Transaction timestamp", type=int) result = { diff --git a/tests/REGISTERED_MARKERS b/tests/REGISTERED_MARKERS index 0870190c4..20acd029c 100644 --- a/tests/REGISTERED_MARKERS +++ b/tests/REGISTERED_MARKERS @@ -1,7 +1,6 @@ altcoin slow binance -capricoin cardano decred eos diff --git a/tests/device_tests/test_msg_signtx_capricoin.py b/tests/device_tests/test_msg_signtx_capricoin.py deleted file mode 100644 index a761e2b39..000000000 --- a/tests/device_tests/test_msg_signtx_capricoin.py +++ /dev/null @@ -1,149 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib import btc, messages -from trezorlib.exceptions import TrezorFailure -from trezorlib.tools import parse_path - -from ..tx_cache import tx_cache - -TXHASH_3bf506 = bytes.fromhex( - "3bf506c81ce84eda891679ddc797d162c17c60b15d6c0ac23be5e31369e7235f" -) - -TXHASH_f3a6e6 = bytes.fromhex( - "f3a6e6411f1b2dffd76d2729bae8e056f8f9ecf8996d3f428e75a6f23f2c5e8c" -) - - -@pytest.mark.altcoin -@pytest.mark.capricoin -@pytest.mark.skip_t1 # T1 support is not planned -def test_timestamp_included(client): - # tx: 3bf506c81ce84eda891679ddc797d162c17c60b15d6c0ac23be5e31369e7235f - # input 0: 0.01 CPC - # tx: f3a6e6411f1b2dffd76d2729bae8e056f8f9ecf8996d3f428e75a6f23f2c5e8c - # input 0: 0.02 CPC - - inp1 = messages.TxInputType( - address_n=parse_path("m/44'/289'/0'/0/0"), prev_hash=TXHASH_3bf506, prev_index=0 - ) - - inp2 = messages.TxInputType( - address_n=parse_path("m/44'/289'/0'/0/0"), prev_hash=TXHASH_f3a6e6, prev_index=1 - ) - - out1 = messages.TxOutputType( - address="CUGi8RGPWxbHM6FxF4eMEfqmQ6Bs5VjCdr", - amount=3000000 - 20000, - script_type=messages.OutputScriptType.PAYTOADDRESS, - ) - - details = messages.SignTx(version=1, timestamp=0x5BCF5C66) - _, timestamp_tx = btc.sign_tx( - client, - "Capricoin", - [inp1, inp2], - [out1], - details=details, - prev_txes=tx_cache("Capricoin"), - ) - - # Accepted by network https://insight.capricoin.org/tx/1bf227e6e24fe1f8ac98849fe06a2c5b77762e906fcf7e82787675f7f3a10bb8 - accepted_txhex = "01000000665ccf5b025f23e76913e3e53bc20a6c5db1607cc162d197c7dd791689da4ee81cc806f53b000000006b483045022100fce7ccbeb9524f36d118ebcfebcb133a05c236c4478e2051cfd5c9632920aee602206921b7be1a81f30cce3d8e7dba4597fc16a2761c42321c49d65eeacdfe3781250121021fcf98aee04939ec7df5762f426dc2d1db8026e3a73c3bbe44749dacfbb61230ffffffff8c5e2c3ff2a6758e423f6d99f8ecf9f856e0e8ba29276dd7ff2d1b1f41e6a6f3010000006a473044022015d967166fe9f89fbed8747328b1c4658aa1d7163e731c5fd5908feafe08e9a6022028af30801098418bd298cc60b143c52c48466f5791256721304b6eba4fdf0b3c0121021fcf98aee04939ec7df5762f426dc2d1db8026e3a73c3bbe44749dacfbb61230ffffffff01a0782d00000000001976a914818437acfd15780debd31f3fd21d4ca678bb36d188ac00000000" - assert timestamp_tx.hex() == accepted_txhex - - -@pytest.mark.altcoin -@pytest.mark.capricoin -@pytest.mark.skip_ui -@pytest.mark.skip_t1 # T1 support is not planned -def test_timestamp_missing(client): - inp1 = messages.TxInputType( - address_n=parse_path("m/44'/289'/0'/0/0"), prev_hash=TXHASH_3bf506, prev_index=0 - ) - out1 = messages.TxOutputType( - address="CUGi8RGPWxbHM6FxF4eMEfqmQ6Bs5VjCdr", - amount=3000000 - 20000, - script_type=messages.OutputScriptType.PAYTOADDRESS, - ) - details = messages.SignTx(version=1, timestamp=None) - with pytest.raises(TrezorFailure) as e: - btc.sign_tx( - client, - "Capricoin", - [inp1], - [out1], - details=details, - prev_txes=tx_cache("Capricoin"), - ) - assert e.value.failure.message.endswith("Timestamp must be set.") - - details = messages.SignTx(version=1, timestamp=0) - with pytest.raises(TrezorFailure) as e: - btc.sign_tx( - client, - "Capricoin", - [inp1], - [out1], - details=details, - prev_txes=tx_cache("Capricoin"), - ) - assert e.value.failure.message.endswith("Timestamp must be set.") - - -@pytest.mark.altcoin -@pytest.mark.capricoin -@pytest.mark.skip_ui -@pytest.mark.skip_t1 # T1 support is not planned -def test_timestamp_missing_prevtx(client): - inp1 = messages.TxInputType( - address_n=parse_path("m/44'/289'/0'/0/0"), prev_hash=TXHASH_3bf506, prev_index=0 - ) - out1 = messages.TxOutputType( - address="CUGi8RGPWxbHM6FxF4eMEfqmQ6Bs5VjCdr", - amount=3000000 - 20000, - script_type=messages.OutputScriptType.PAYTOADDRESS, - ) - details = messages.SignTx(version=1, timestamp=0x5BCF5C66) - - prevtx = tx_cache("Capricoin")[TXHASH_3bf506] - prevtx.timestamp = 0 - - with pytest.raises(TrezorFailure) as e: - btc.sign_tx( - client, - "Capricoin", - [inp1], - [out1], - details=details, - prev_txes={TXHASH_3bf506: prevtx}, - ) - assert e.value.failure.message.endswith("Timestamp must be set.") - - prevtx.timestamp = None - with pytest.raises(TrezorFailure) as e: - btc.sign_tx( - client, - "Capricoin", - [inp1], - [out1], - details=details, - prev_txes={TXHASH_3bf506: prevtx}, - ) - assert e.value.failure.message.endswith("Timestamp must be set.") diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 7940c3235..3316997ee 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -284,7 +284,6 @@ "test_msg_signtx_bgold.py-test_send_multisig_1": "d049b3b25042c732ce26a253e7de49581adc83003713860924b8d951cb46de0c", "test_msg_signtx_bgold.py-test_send_p2sh": "ddd48151ce1d74ade0b9858cbcdba316581991ec92c2ef54b5893e3aae75f995", "test_msg_signtx_bgold.py-test_send_p2sh_witness_change": "02e44d4c1072eb774486210f885b1bee53acfb3b7fd787207b9f955853fef055", -"test_msg_signtx_capricoin.py::test_timestamp_included": "15052cadcea92d3405ba0f603c1a5c54bc4fe60eb0b89c79b062620023c3444b", "test_msg_signtx_dash.py-test_send_dash": "291f1a3ace22877641494a1a470a1a4a8dab6e363fc4402dadaeb52c1288c72b", "test_msg_signtx_dash.py-test_send_dash_dip2_input": "cf7fc7e6fe3a9e4063e743da6fc44c27dac013917bc00cfc63d13a183c091d91", "test_msg_signtx_decred.py-test_decred_multisig_change": "9a7e9e1adcb0ba6770e3965df8324f2b7bc46d6bcd866db9289e8e1d62ef486e", From 71a39bc0d7d6270a936445fecbb50eb6ff7e7258 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 13 Mar 2020 08:50:55 +0000 Subject: [PATCH 27/45] legacy: check inputs' and outputs' script types --- legacy/firmware/signing.c | 74 +++++++++++++++++++++++++--- tests/device_tests/test_op_return.py | 21 ++------ 2 files changed, 73 insertions(+), 22 deletions(-) diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 01d93f885..4932621d6 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -588,6 +588,26 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, #define MIN(a, b) (((a) < (b)) ? (a) : (b)) static bool signing_check_input(const TxInputType *txinput) { + if (txinput->has_multisig && + (txinput->script_type != InputScriptType_SPENDMULTISIG && + txinput->script_type != InputScriptType_SPENDP2SHWITNESS && + txinput->script_type != InputScriptType_SPENDWITNESS)) { + fsm_sendFailure(FailureType_Failure_ProcessError, + _("Multisig field provided but not expected.")); + signing_abort(); + return false; + } + if (txinput->address_n_count > 0 && + (txinput->script_type != InputScriptType_SPENDADDRESS && + txinput->script_type != InputScriptType_SPENDMULTISIG && + txinput->script_type != InputScriptType_SPENDWITNESS && + txinput->script_type != InputScriptType_SPENDP2SHWITNESS)) { + fsm_sendFailure(FailureType_Failure_DataError, + "Input's address_n provided but not expected."); + signing_abort(); + return false; + } + /* compute multisig fingerprint */ /* (if all input share the same fingerprint, outputs having the same * fingerprint will be considered as change outputs) */ @@ -662,6 +682,36 @@ static bool signing_check_output(TxOutputType *txoutput) { // add it to hash_outputs // ask user for permission + if (txoutput->has_multisig && + (txoutput->script_type != OutputScriptType_PAYTOMULTISIG && + txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS && + txoutput->script_type != OutputScriptType_PAYTOWITNESS)) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Multisig field provided but not expected.")); + signing_abort(); + return false; + } + + if (txoutput->address_n_count > 0 && + (txoutput->script_type != OutputScriptType_PAYTOADDRESS && + txoutput->script_type != OutputScriptType_PAYTOMULTISIG && + txoutput->script_type != OutputScriptType_PAYTOWITNESS && + txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Output's address_n provided but not expected.")); + signing_abort(); + return false; + } + + if (txoutput->has_op_return_data && + (txoutput->script_type != OutputScriptType_PAYTOOPRETURN)) { + fsm_sendFailure( + FailureType_Failure_DataError, + _("OP RETURN data provided but not OP RETURN script type.")); + signing_abort(); + return false; + } + if (txoutput->script_type == OutputScriptType_PAYTOOPRETURN) { if (txoutput->has_address || (txoutput->address_n_count > 0) || txoutput->has_multisig) { @@ -670,16 +720,28 @@ static bool signing_check_output(TxOutputType *txoutput) { signing_abort(); return false; } - } - // check for change address - bool is_change = false; - if (txoutput->address_n_count > 0) { - if (txoutput->has_address) { + if (txoutput->amount != 0) { fsm_sendFailure(FailureType_Failure_DataError, - _("Address in change output")); + _("OP_RETURN output with non-zero amount")); signing_abort(); return false; } + } else { + if (txoutput->has_address && txoutput->address_n_count > 0) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Both address and address_n provided.")); + signing_abort(); + return false; + } else if (!txoutput->has_address && txoutput->address_n_count == 0) { + fsm_sendFailure(FailureType_Failure_DataError, _("Missing address")); + signing_abort(); + return false; + } + } + + // check for change address + bool is_change = false; + if (txoutput->address_n_count > 0) { /* * For multisig check that all inputs are multisig */ diff --git a/tests/device_tests/test_op_return.py b/tests/device_tests/test_op_return.py index 25913f9a9..3ec7db8a0 100644 --- a/tests/device_tests/test_op_return.py +++ b/tests/device_tests/test_op_return.py @@ -172,14 +172,8 @@ class TestOpReturn: with pytest.raises(CallException) as exc: btc.sign_tx(client, "Bitcoin", [inp1], [out1], prev_txes=TX_API) - if client.features.model == "1": - assert exc.value.args[0] == proto.FailureType.ProcessError - assert exc.value.args[1].endswith("Failed to compile output") - else: - assert exc.value.args[0] == proto.FailureType.DataError - assert exc.value.args[1].endswith( - "OP_RETURN output with non-zero amount" - ) + assert exc.value.args[0] == proto.FailureType.DataError + assert exc.value.args[1].endswith("OP_RETURN output with non-zero amount") @pytest.mark.skip_ui def test_opreturn_address(self, client): @@ -236,11 +230,6 @@ class TestOpReturn: ) assert exc.value.args[0] == proto.FailureType.DataError - if client.features.model == "1": - assert exc.value.args[1].endswith( - "OP_RETURN output with address or multisig" - ) - else: - assert ( - exc.value.args[1] == "Output's address_n provided but not expected." - ) + assert exc.value.args[1].endswith( + "Output's address_n provided but not expected." + ) From 64584e271c2f7febe714131bd8e334496602af68 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Tue, 17 Mar 2020 08:40:29 +0000 Subject: [PATCH 28/45] legacy, core: add and unify validation checks --- core/src/apps/wallet/sign_tx/helpers.py | 43 ++++- legacy/firmware/signing.c | 243 +++++++++++++++--------- 2 files changed, 185 insertions(+), 101 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index e70bf5001..2a38c919d 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -1,5 +1,6 @@ import gc +from trezor import utils from trezor.messages import FailureType, InputScriptType, OutputScriptType from trezor.messages.RequestType import ( TXEXTRADATA, @@ -14,12 +15,14 @@ from trezor.messages.TxInputType import TxInputType from trezor.messages.TxOutputBinType import TxOutputBinType from trezor.messages.TxOutputType import TxOutputType from trezor.messages.TxRequest import TxRequest -from trezor.utils import obj_eq from .signing import SigningError from apps.common.coininfo import CoinInfo +if False: + from typing import Union + CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES = { OutputScriptType.PAYTOADDRESS: InputScriptType.SPENDADDRESS, OutputScriptType.PAYTOMULTISIG: InputScriptType.SPENDMULTISIG, @@ -50,7 +53,7 @@ class UiConfirmOutput: self.output = output self.coin = coin - __eq__ = obj_eq + __eq__ = utils.obj_eq class UiConfirmTotal: @@ -59,7 +62,7 @@ class UiConfirmTotal: self.fee = fee self.coin = coin - __eq__ = obj_eq + __eq__ = utils.obj_eq class UiConfirmFeeOverThreshold: @@ -67,21 +70,21 @@ class UiConfirmFeeOverThreshold: self.fee = fee self.coin = coin - __eq__ = obj_eq + __eq__ = utils.obj_eq class UiConfirmForeignAddress: def __init__(self, address_n: list): self.address_n = address_n - __eq__ = obj_eq + __eq__ = utils.obj_eq class UiConfirmNonDefaultLocktime: def __init__(self, lock_time: int): self.lock_time = lock_time - __eq__ = obj_eq + __eq__ = utils.obj_eq def confirm_output(output: TxOutputType, coin: CoinInfo): @@ -218,11 +221,25 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: raise SigningError( FailureType.DataError, "Input's address_n provided but not expected.", ) - if (txi.decred_script_version or txi.decred_script_version) and not coin.decred: + if not coin.decred and txi.decred_tree is not None: raise SigningError( FailureType.DataError, "Decred details provided but Decred coin not specified.", ) + if txi.script_type in ( + InputScriptType.SPENDWITNESS, + InputScriptType.SPENDP2SHWITNESS, + ): + if not coin.segwit: + raise SigningError( + FailureType.DataError, "Segwit not enabled on this coin", + ) + if txi.amount is None: + raise SigningError( + FailureType.DataError, "Segwit input without amount", + ) + + _sanitize_decred(txi, coin) return txi @@ -259,14 +276,22 @@ def sanitize_tx_output(tx: TransactionType, coin: CoinInfo) -> TxOutputType: if not txo.address_n and not txo.address: raise SigningError(FailureType.DataError, "Missing address") + _sanitize_decred(txo, coin) + return txo def sanitize_tx_binoutput(tx: TransactionType, coin: CoinInfo) -> TxOutputBinType: txo_bin = tx.bin_outputs[0] - if txo_bin.decred_script_version and not coin.decred: + _sanitize_decred(txo_bin, coin) + return txo_bin + + +def _sanitize_decred( + tx: Union[TxInputType, TxOutputType, TxOutputBinType], coin: CoinInfo +): + if not coin.decred and tx.decred_script_version is not None: raise SigningError( FailureType.DataError, "Decred details provided but Decred coin not specified.", ) - return txo_bin diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 4932621d6..d9c7073fa 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -587,7 +587,7 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, #define MIN(a, b) (((a) < (b)) ? (a) : (b)) -static bool signing_check_input(const TxInputType *txinput) { +static bool signing_validate_input(const TxInputType *txinput) { if (txinput->has_multisig && (txinput->script_type != InputScriptType_SPENDMULTISIG && txinput->script_type != InputScriptType_SPENDP2SHWITNESS && @@ -607,7 +607,114 @@ static bool signing_check_input(const TxInputType *txinput) { signing_abort(); return false; } + if (!coin->decred && txinput->has_decred_script_version) { + fsm_sendFailure( + FailureType_Failure_DataError, + _("Decred details provided but Decred coin not specified.")); + signing_abort(); + return false; + } + +#if !BITCOIN_ONLY + if (coin->force_bip143 || coin->overwintered) { + if (!txinput->has_amount) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Expected input with amount")); + signing_abort(); + return false; + } + } +#endif + + if (txinput->script_type == InputScriptType_SPENDWITNESS || + txinput->script_type == InputScriptType_SPENDP2SHWITNESS) { + if (!coin->has_segwit) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Segwit not enabled on this coin")); + signing_abort(); + return false; + } + if (!txinput->has_amount) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Segwit input without amount")); + signing_abort(); + return false; + } + } + + return true; +} + +static bool signing_validate_output(TxOutputType *txoutput) { + if (txoutput->has_multisig && + (txoutput->script_type != OutputScriptType_PAYTOMULTISIG && + txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS && + txoutput->script_type != OutputScriptType_PAYTOWITNESS)) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Multisig field provided but not expected.")); + signing_abort(); + return false; + } + + if (txoutput->address_n_count > 0 && + (txoutput->script_type != OutputScriptType_PAYTOADDRESS && + txoutput->script_type != OutputScriptType_PAYTOMULTISIG && + txoutput->script_type != OutputScriptType_PAYTOWITNESS && + txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Output's address_n provided but not expected.")); + signing_abort(); + return false; + } + + if (txoutput->script_type == OutputScriptType_PAYTOOPRETURN) { + if (txoutput->has_address || (txoutput->address_n_count > 0) || + txoutput->has_multisig) { + fsm_sendFailure(FailureType_Failure_DataError, + _("OP_RETURN output with address or multisig")); + signing_abort(); + return false; + } + if (txoutput->amount != 0) { + fsm_sendFailure(FailureType_Failure_DataError, + _("OP_RETURN output with non-zero amount")); + signing_abort(); + return false; + } + } else { + if (txoutput->has_op_return_data) { + fsm_sendFailure( + FailureType_Failure_DataError, + _("OP RETURN data provided but not OP RETURN script type.")); + signing_abort(); + return false; + } + if (txoutput->has_address && txoutput->address_n_count > 0) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Both address and address_n provided.")); + signing_abort(); + return false; + } else if (!txoutput->has_address && txoutput->address_n_count == 0) { + fsm_sendFailure(FailureType_Failure_DataError, _("Missing address")); + signing_abort(); + return false; + } + } + return true; +} + +static bool signing_validate_bin_output(TxOutputBinType *tx_bin_output) { + if (!coin->decred && tx_bin_output->has_decred_script_version) { + fsm_sendFailure( + FailureType_Failure_DataError, + _("Decred details provided but Decred coin not specified.")); + signing_abort(); + return false; + } + return true; +} +static bool signing_check_input(const TxInputType *txinput) { /* compute multisig fingerprint */ /* (if all input share the same fingerprint, outputs having the same * fingerprint will be considered as change outputs) */ @@ -682,63 +789,6 @@ static bool signing_check_output(TxOutputType *txoutput) { // add it to hash_outputs // ask user for permission - if (txoutput->has_multisig && - (txoutput->script_type != OutputScriptType_PAYTOMULTISIG && - txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS && - txoutput->script_type != OutputScriptType_PAYTOWITNESS)) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Multisig field provided but not expected.")); - signing_abort(); - return false; - } - - if (txoutput->address_n_count > 0 && - (txoutput->script_type != OutputScriptType_PAYTOADDRESS && - txoutput->script_type != OutputScriptType_PAYTOMULTISIG && - txoutput->script_type != OutputScriptType_PAYTOWITNESS && - txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Output's address_n provided but not expected.")); - signing_abort(); - return false; - } - - if (txoutput->has_op_return_data && - (txoutput->script_type != OutputScriptType_PAYTOOPRETURN)) { - fsm_sendFailure( - FailureType_Failure_DataError, - _("OP RETURN data provided but not OP RETURN script type.")); - signing_abort(); - return false; - } - - if (txoutput->script_type == OutputScriptType_PAYTOOPRETURN) { - if (txoutput->has_address || (txoutput->address_n_count > 0) || - txoutput->has_multisig) { - fsm_sendFailure(FailureType_Failure_DataError, - _("OP_RETURN output with address or multisig")); - signing_abort(); - return false; - } - if (txoutput->amount != 0) { - fsm_sendFailure(FailureType_Failure_DataError, - _("OP_RETURN output with non-zero amount")); - signing_abort(); - return false; - } - } else { - if (txoutput->has_address && txoutput->address_n_count > 0) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Both address and address_n provided.")); - signing_abort(); - return false; - } else if (!txoutput->has_address && txoutput->address_n_count == 0) { - fsm_sendFailure(FailureType_Failure_DataError, _("Missing address")); - signing_abort(); - return false; - } - } - // check for change address bool is_change = false; if (txoutput->address_n_count > 0) { @@ -1188,7 +1238,10 @@ void signing_txack(TransactionType *tx) { switch (signing_stage) { case STAGE_REQUEST_1_INPUT: - signing_check_input(&tx->inputs[0]); + if (!signing_validate_input(&tx->inputs[0]) || + !signing_check_input(&tx->inputs[0])) { + return; + } tx_weight += tx_input_weight(coin, &tx->inputs[0]); #if !BITCOIN_ONLY @@ -1211,13 +1264,8 @@ void signing_txack(TransactionType *tx) { } #endif +#if !BITCOIN_ONLY if (coin->force_bip143 || coin->overwintered) { - if (!tx->inputs[0].has_amount) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Expected input with amount")); - signing_abort(); - return; - } if (to_spend + tx->inputs[0].amount < to_spend) { fsm_sendFailure(FailureType_Failure_DataError, _("Value overflow")); signing_abort(); @@ -1226,7 +1274,9 @@ void signing_txack(TransactionType *tx) { to_spend += tx->inputs[0].amount; authorized_amount += tx->inputs[0].amount; phase1_request_next_input(); - } else { + } else +#endif + { // remember the first non-segwit input -- this is the first input // we need to sign during phase2 if (next_nonsegwit_input == 0xffffffff) next_nonsegwit_input = idx1; @@ -1235,26 +1285,6 @@ void signing_txack(TransactionType *tx) { } else if (tx->inputs[0].script_type == InputScriptType_SPENDWITNESS || tx->inputs[0].script_type == InputScriptType_SPENDP2SHWITNESS) { -#if !BITCOIN_ONLY - if (coin->decred) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Decred does not support Segwit")); - signing_abort(); - return; - } -#endif - if (!coin->has_segwit) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Segwit not enabled on this coin")); - signing_abort(); - return; - } - if (!tx->inputs[0].has_amount) { - fsm_sendFailure(FailureType_Failure_DataError, - _("Segwit input without amount")); - signing_abort(); - return; - } if (to_spend + tx->inputs[0].amount < to_spend) { fsm_sendFailure(FailureType_Failure_DataError, _("Value overflow")); signing_abort(); @@ -1342,6 +1372,9 @@ void signing_txack(TransactionType *tx) { } return; case STAGE_REQUEST_2_PREV_INPUT: + if (!signing_validate_input(&tx->inputs[0])) { + return; + } progress = (idx1 * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION; if (!tx_serialize_input_hash(&tp, tx->inputs)) { @@ -1359,6 +1392,9 @@ void signing_txack(TransactionType *tx) { } return; case STAGE_REQUEST_2_PREV_OUTPUT: + if (!signing_validate_bin_output(&tx->bin_outputs[0])) { + return; + } progress = (idx1 * progress_step + (tp.inputs_len + idx2) * progress_meta_step) >> PROGRESS_PRECISION; @@ -1376,9 +1412,9 @@ void signing_txack(TransactionType *tx) { } #if !BITCOIN_ONLY if (coin->decred && tx->bin_outputs[0].decred_script_version > 0) { - fsm_sendFailure( - FailureType_Failure_DataError, - _("Decred script version does not match previous output")); + fsm_sendFailure(FailureType_Failure_DataError, + _("Decred script version does " + "not match previous output")); signing_abort(); return; } @@ -1396,7 +1432,9 @@ void signing_txack(TransactionType *tx) { #endif } else { /* prevtx is done */ - signing_check_prevtx_hash(); + if (!signing_check_prevtx_hash()) { + return; + } } return; #if !BITCOIN_ONLY @@ -1414,18 +1452,24 @@ void signing_txack(TransactionType *tx) { tp.extra_data_received, MIN(1024, tp.extra_data_len - tp.extra_data_received)); } else { - signing_check_prevtx_hash(); + if (!signing_check_prevtx_hash()) { + return; + } } return; #endif case STAGE_REQUEST_3_OUTPUT: - if (!signing_check_output(&tx->outputs[0])) { + if (!signing_validate_output(&tx->outputs[0]) || + !signing_check_output(&tx->outputs[0])) { return; } tx_weight += tx_output_weight(coin, &tx->outputs[0]); phase1_request_next_output(); return; case STAGE_REQUEST_4_INPUT: + if (!signing_validate_input(&tx->inputs[0])) { + return; + } progress = 500 + ((signatures * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION); @@ -1481,6 +1525,9 @@ void signing_txack(TransactionType *tx) { } return; case STAGE_REQUEST_4_OUTPUT: + if (!signing_validate_output(&tx->outputs[0])) { + return; + } progress = 500 + ((signatures * progress_step + (inputs_count + idx2) * progress_meta_step) >> PROGRESS_PRECISION); @@ -1521,6 +1568,9 @@ void signing_txack(TransactionType *tx) { return; case STAGE_REQUEST_SEGWIT_INPUT: + if (!signing_validate_input(&tx->inputs[0])) { + return; + } resp.has_serialized = true; resp.serialized.has_signature_index = false; resp.serialized.has_signature = false; @@ -1627,6 +1677,9 @@ void signing_txack(TransactionType *tx) { return; case STAGE_REQUEST_5_OUTPUT: + if (!signing_validate_output(&tx->outputs[0])) { + return; + } if (compile_output(coin, &root, tx->outputs, &bin_output, false) <= 0) { fsm_sendFailure(FailureType_Failure_ProcessError, _("Failed to compile output")); @@ -1650,6 +1703,9 @@ void signing_txack(TransactionType *tx) { return; case STAGE_REQUEST_SEGWIT_WITNESS: + if (!signing_validate_input(&tx->inputs[0])) { + return; + } if (!signing_sign_segwit_input(&tx->inputs[0])) { return; } @@ -1669,6 +1725,9 @@ void signing_txack(TransactionType *tx) { #if !BITCOIN_ONLY case STAGE_REQUEST_DECRED_WITNESS: + if (!signing_validate_input(&tx->inputs[0])) { + return; + } progress = 500 + ((signatures * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION); From 694f7147190ad82370eca337adaac464f0140c52 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 11:23:09 +0100 Subject: [PATCH 29/45] core/ripple: rename write_bytes to avoid name collision --- core/src/apps/ripple/serialize.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/apps/ripple/serialize.py b/core/src/apps/ripple/serialize.py index be0cea854..b54e9b61b 100644 --- a/core/src/apps/ripple/serialize.py +++ b/core/src/apps/ripple/serialize.py @@ -63,9 +63,9 @@ def write(w: bytearray, field: dict, value): elif field["type"] == FIELD_TYPE_AMOUNT: w.extend(serialize_amount(value)) elif field["type"] == FIELD_TYPE_ACCOUNT: - write_bytes(w, helpers.decode_address(value)) + write_bytes_varint(w, helpers.decode_address(value)) elif field["type"] == FIELD_TYPE_VL: - write_bytes(w, value) + write_bytes_varint(w, value) else: raise ValueError("Unknown field type") @@ -91,7 +91,7 @@ def serialize_amount(value: int) -> bytearray: return b -def write_bytes(w: bytearray, value: bytes): +def write_bytes_varint(w: bytearray, value: bytes): """Serialize a variable length bytes.""" write_varint(w, len(value)) w.extend(value) From 9a5f6b025add8c2ce4736eeccdf0d09094a07ac4 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 11:29:06 +0100 Subject: [PATCH 30/45] core/tezos: factor out writing Michelson instructions --- core/src/apps/tezos/helpers.py | 6 +++- core/src/apps/tezos/sign_tx.py | 50 +++++++++++++++++----------------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/core/src/apps/tezos/helpers.py b/core/src/apps/tezos/helpers.py index 9e63953d4..1b18e8d5b 100644 --- a/core/src/apps/tezos/helpers.py +++ b/core/src/apps/tezos/helpers.py @@ -3,7 +3,7 @@ from micropython import const from trezor.crypto import base58 from apps.common import HARDENED -from apps.common.writers import write_uint8 +from apps.common.writers import write_uint8, write_bytes TEZOS_AMOUNT_DECIMALS = const(6) TEZOS_ED25519_ADDRESS_PREFIX = "tz1" @@ -96,3 +96,7 @@ def write_bool(w: bytearray, boolean: bool): write_uint8(w, 255) else: write_uint8(w, 0) + + +def write_instruction(w: bytearray, instruction: str) -> int: + write_bytes(w, MICHELSON_INSTRUCTION_BYTES[instruction]) diff --git a/core/src/apps/tezos/sign_tx.py b/core/src/apps/tezos/sign_tx.py index fb1e2305a..dcae86b76 100644 --- a/core/src/apps/tezos/sign_tx.py +++ b/core/src/apps/tezos/sign_tx.py @@ -295,14 +295,14 @@ def _encode_manager_common(w: bytearray, sequence_length, operation, to_contract write_uint32_be(w, argument_length) write_uint8(w, helpers.MICHELSON_SEQUENCE_TAG) write_uint32_be(w, sequence_length) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["DROP"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["NIL"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["operation"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES[operation]) + helpers.write_instruction(w, "DROP") + helpers.write_instruction(w, "NIL") + helpers.write_instruction(w, "operation") + helpers.write_instruction(w, operation) if to_contract is True: - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["address"]) + helpers.write_instruction(w, "address") else: - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["key_hash"]) + helpers.write_instruction(w, "key_hash") if operation == "PUSH": write_bytes(w, bytes([10])) # byte sequence if to_contract is True: @@ -320,13 +320,13 @@ def _encode_manager_to_implicit_transfer(w: bytearray, manager_transfer): _encode_manager_common(w, sequence_length, "PUSH") write_bytes(w, manager_transfer.destination.hash) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["IMPLICIT_ACCOUNT"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["PUSH"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["mutez"]) + helpers.write_instruction(w, "IMPLICIT_ACCOUNT") + helpers.write_instruction(w, "PUSH") + helpers.write_instruction(w, "mutez") _encode_natural(w, manager_transfer.amount) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["UNIT"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["TRANSFER_TOKENS"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["CONS"]) + helpers.write_instruction(w, "UNIT") + helpers.write_instruction(w, "TRANSFER_TOKENS") + helpers.write_instruction(w, "CONS") # smart_contract_delegation @@ -335,16 +335,16 @@ def _encode_manager_delegation(w: bytearray, delegate): _encode_manager_common(w, MICHELSON_LENGTH, "PUSH") write_bytes(w, delegate) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["SOME"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["SET_DELEGATE"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["CONS"]) + helpers.write_instruction(w, "SOME") + helpers.write_instruction(w, "SET_DELEGATE") + helpers.write_instruction(w, "CONS") def _encode_manager_delegation_remove(w: bytearray): MICHELSON_LENGTH = 14 # length is fixed this time(no variable length fields) _encode_manager_common(w, MICHELSON_LENGTH, "NONE") - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["SET_DELEGATE"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["CONS"]) + helpers.write_instruction(w, "SET_DELEGATE") + helpers.write_instruction(w, "CONS") def _encode_manager_to_manager_transfer(w: bytearray, manager_transfer): @@ -356,12 +356,12 @@ def _encode_manager_to_manager_transfer(w: bytearray, manager_transfer): _encode_manager_common(w, sequence_length, "PUSH", to_contract=True) _encode_contract_id(w, manager_transfer.destination) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["CONTRACT"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["unit"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["ASSERT_SOME"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["PUSH"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["mutez"]) + helpers.write_instruction(w, "CONTRACT") + helpers.write_instruction(w, "unit") + helpers.write_instruction(w, "ASSERT_SOME") + helpers.write_instruction(w, "PUSH") + helpers.write_instruction(w, "mutez") _encode_natural(w, manager_transfer.amount) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["UNIT"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["TRANSFER_TOKENS"]) - write_bytes(w, helpers.MICHELSON_INSTRUCTION_BYTES["CONS"]) + helpers.write_instruction(w, "UNIT") + helpers.write_instruction(w, "TRANSFER_TOKENS") + helpers.write_instruction(w, "CONS") From 27f6306e1dc34d7acbe3d0e3391e4825c67755b4 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 11:31:11 +0100 Subject: [PATCH 31/45] core: introduce safer write_bytes functions --- core/src/apps/common/writers.py | 13 +++++++-- core/src/apps/eos/actions/__init__.py | 6 ++-- core/src/apps/eos/sign_tx.py | 4 +-- core/src/apps/eos/writers.py | 8 +++--- core/src/apps/nem/writers.py | 4 +-- core/src/apps/stellar/operations/serialize.py | 6 ++-- core/src/apps/stellar/sign_tx.py | 6 ++-- core/src/apps/stellar/writers.py | 8 +++--- core/src/apps/tezos/helpers.py | 4 +-- core/src/apps/tezos/sign_tx.py | 28 +++++++++---------- core/src/apps/wallet/sign_tx/multisig.py | 6 ++-- core/src/apps/wallet/sign_tx/scripts.py | 12 ++++---- core/src/apps/wallet/sign_tx/segwit_bip143.py | 10 +++---- core/src/apps/wallet/sign_tx/signing.py | 20 +++++++------ core/src/apps/wallet/sign_tx/writers.py | 10 +++---- core/src/apps/wallet/sign_tx/zcash.py | 26 ++++++++--------- core/tests/test_apps.wallet.address.py | 2 +- 17 files changed, 91 insertions(+), 82 deletions(-) diff --git a/core/src/apps/common/writers.py b/core/src/apps/common/writers.py index ec23c2518..118757d36 100644 --- a/core/src/apps/common/writers.py +++ b/core/src/apps/common/writers.py @@ -78,11 +78,18 @@ def write_uint64_be(w: Writer, n: int) -> int: return 8 -def write_bytes(w: Writer, b: bytes) -> int: +def write_bytes_unchecked(w: Writer, b: bytes) -> int: w.extend(b) return len(b) -def write_bytes_reversed(w: Writer, b: bytes) -> int: +def write_bytes_fixed(w: Writer, b: bytes, length: int) -> int: + ensure(len(b) == length) + w.extend(b) + return length + + +def write_bytes_reversed(w: Writer, b: bytes, length: int) -> int: + ensure(len(b) == length) w.extend(bytes(reversed(b))) - return len(b) + return length diff --git a/core/src/apps/eos/actions/__init__.py b/core/src/apps/eos/actions/__init__.py index 8adf5ccfb..8f43ac747 100644 --- a/core/src/apps/eos/actions/__init__.py +++ b/core/src/apps/eos/actions/__init__.py @@ -68,7 +68,7 @@ async def process_action( writers.write_action_common(sha, action.common) writers.write_variant32(sha, len(w)) - writers.write_bytes(sha, w) + writers.write_bytes_unchecked(sha, w) async def process_unknown_action( @@ -78,7 +78,7 @@ async def process_unknown_action( writers.write_variant32(checksum, action.unknown.data_size) checksum.extend(action.unknown.data_chunk) - writers.write_bytes(w, action.unknown.data_chunk) + writers.write_bytes_unchecked(w, action.unknown.data_chunk) bytes_left = action.unknown.data_size - len(action.unknown.data_chunk) while bytes_left != 0: @@ -90,7 +90,7 @@ async def process_unknown_action( raise ValueError("Bad response. Unknown struct expected.") checksum.extend(action.unknown.data_chunk) - writers.write_bytes(w, action.unknown.data_chunk) + writers.write_bytes_unchecked(w, action.unknown.data_chunk) bytes_left -= len(action.unknown.data_chunk) if bytes_left < 0: diff --git a/core/src/apps/eos/sign_tx.py b/core/src/apps/eos/sign_tx.py index db82da859..e47bc23b5 100644 --- a/core/src/apps/eos/sign_tx.py +++ b/core/src/apps/eos/sign_tx.py @@ -34,7 +34,7 @@ async def sign_tx( await _init(ctx, sha, msg) await _actions(ctx, sha, msg.num_actions) writers.write_variant32(sha, 0) - writers.write_bytes(sha, bytearray(32)) + writers.write_bytes_unchecked(sha, bytearray(32)) digest = sha.get_digest() signature = secp256k1.sign( @@ -45,7 +45,7 @@ async def sign_tx( async def _init(ctx: wire.Context, sha: HashWriter, msg: EosSignTx) -> None: - writers.write_bytes(sha, msg.chain_id) + writers.write_bytes_unchecked(sha, msg.chain_id) writers.write_header(sha, msg.header) writers.write_variant32(sha, 0) writers.write_variant32(sha, msg.num_actions) diff --git a/core/src/apps/eos/writers.py b/core/src/apps/eos/writers.py index 81ea92912..fc6cf589a 100644 --- a/core/src/apps/eos/writers.py +++ b/core/src/apps/eos/writers.py @@ -1,5 +1,5 @@ from apps.common.writers import ( - write_bytes, + write_bytes_unchecked, write_uint8, write_uint16_le, write_uint32_le, @@ -31,7 +31,7 @@ def write_auth(w: Writer, auth: EosAuthorization) -> None: write_variant32(w, len(auth.keys)) for key in auth.keys: write_variant32(w, key.type) - write_bytes(w, key.key) + write_bytes_unchecked(w, key.key) write_uint16_le(w, key.weight) write_variant32(w, len(auth.accounts)) @@ -60,7 +60,7 @@ def write_action_transfer(w: Writer, msg: EosActionTransfer) -> None: write_uint64_le(w, msg.receiver) write_asset(w, msg.quantity) write_variant32(w, len(msg.memo)) - write_bytes(w, msg.memo) + write_bytes_unchecked(w, msg.memo) def write_action_buyram(w: Writer, msg: EosActionBuyRam) -> None: @@ -162,4 +162,4 @@ def write_variant32(w: Writer, value: int) -> None: variant.append(b) if value == 0: break - write_bytes(w, bytes(variant)) + write_bytes_unchecked(w, bytes(variant)) diff --git a/core/src/apps/nem/writers.py b/core/src/apps/nem/writers.py index cd0e28c5a..f049a8512 100644 --- a/core/src/apps/nem/writers.py +++ b/core/src/apps/nem/writers.py @@ -1,6 +1,6 @@ from trezor.messages.NEMTransactionCommon import NEMTransactionCommon -from apps.common.writers import write_bytes, write_uint32_le, write_uint64_le +from apps.common.writers import write_bytes_unchecked, write_uint32_le, write_uint64_le def serialize_tx_common( @@ -26,4 +26,4 @@ def serialize_tx_common( def write_bytes_with_len(w, buf: bytes): write_uint32_le(w, len(buf)) - write_bytes(w, buf) + write_bytes_unchecked(w, buf) diff --git a/core/src/apps/stellar/operations/serialize.py b/core/src/apps/stellar/operations/serialize.py index 10b34f38c..2ab3e8e5d 100644 --- a/core/src/apps/stellar/operations/serialize.py +++ b/core/src/apps/stellar/operations/serialize.py @@ -119,7 +119,7 @@ def write_set_options_op(w, msg: StellarSetOptionsOp): elif msg.signer_type in consts.SIGN_TYPES: writers.write_bool(w, True) writers.write_uint32(w, msg.signer_type) - writers.write_bytes(w, msg.signer_key) + writers.write_bytes_unchecked(w, msg.signer_key) writers.write_uint32(w, msg.signer_weight) else: raise ProcessError("Stellar: unknown signer type") @@ -146,10 +146,10 @@ def _write_asset_code(w, asset_type: int, asset_code: str): return # nothing is needed elif asset_type == consts.ASSET_TYPE_ALPHANUM4: # pad with zeros to 4 chars - writers.write_bytes(w, code + bytearray([0] * (4 - len(code)))) + writers.write_bytes_unchecked(w, code + bytearray([0] * (4 - len(code)))) elif asset_type == consts.ASSET_TYPE_ALPHANUM12: # pad with zeros to 12 chars - writers.write_bytes(w, code + bytearray([0] * (12 - len(code)))) + writers.write_bytes_unchecked(w, code + bytearray([0] * (12 - len(code)))) else: raise ProcessError("Stellar: invalid asset type") diff --git a/core/src/apps/stellar/sign_tx.py b/core/src/apps/stellar/sign_tx.py index c77b99e81..13e3ad121 100644 --- a/core/src/apps/stellar/sign_tx.py +++ b/core/src/apps/stellar/sign_tx.py @@ -47,8 +47,8 @@ async def _final(ctx, w: bytearray, msg: StellarSignTx): async def _init(ctx, w: bytearray, pubkey: bytes, msg: StellarSignTx): network_passphrase_hash = sha256(msg.network_passphrase).digest() - writers.write_bytes(w, network_passphrase_hash) - writers.write_bytes(w, consts.TX_TYPE) + writers.write_bytes_unchecked(w, network_passphrase_hash) + writers.write_bytes_unchecked(w, consts.TX_TYPE) address = helpers.address_from_public_key(pubkey) accounts_match = msg.source_account == address @@ -103,7 +103,7 @@ async def _memo(ctx, w: bytearray, msg: StellarSignTx): memo_confirm_text = str(msg.memo_id) elif msg.memo_type in (consts.MEMO_TYPE_HASH, consts.MEMO_TYPE_RETURN): # Hash/Return: 32 byte hash - writers.write_bytes(w, bytearray(msg.memo_hash)) + writers.write_bytes_unchecked(w, bytearray(msg.memo_hash)) memo_confirm_text = hexlify(msg.memo_hash).decode() else: raise ProcessError("Stellar invalid memo type") diff --git a/core/src/apps/stellar/writers.py b/core/src/apps/stellar/writers.py index 0846d148f..72f25492b 100644 --- a/core/src/apps/stellar/writers.py +++ b/core/src/apps/stellar/writers.py @@ -1,6 +1,6 @@ from .helpers import public_key_from_address -from apps.common.writers import write_bytes, write_uint32_be, write_uint64_be +from apps.common.writers import write_bytes_unchecked, write_uint32_be, write_uint64_be write_uint32 = write_uint32_be write_uint64 = write_uint64_be @@ -16,11 +16,11 @@ def write_string(w, s: AnyStr) -> None: else: buf = s write_uint32(w, len(buf)) - write_bytes(w, buf) + write_bytes_unchecked(w, buf) # if len isn't a multiple of 4, add padding bytes reminder = len(buf) % 4 if reminder: - write_bytes(w, bytes([0] * (4 - reminder))) + write_bytes_unchecked(w, bytes([0] * (4 - reminder))) def write_bool(w, val: bool): @@ -33,4 +33,4 @@ def write_bool(w, val: bool): def write_pubkey(w, address: str): # first 4 bytes of an address are the type, there's only one type (0) write_uint32(w, 0) - write_bytes(w, public_key_from_address(address)) + write_bytes_unchecked(w, public_key_from_address(address)) diff --git a/core/src/apps/tezos/helpers.py b/core/src/apps/tezos/helpers.py index 1b18e8d5b..a2f0fec28 100644 --- a/core/src/apps/tezos/helpers.py +++ b/core/src/apps/tezos/helpers.py @@ -3,7 +3,7 @@ from micropython import const from trezor.crypto import base58 from apps.common import HARDENED -from apps.common.writers import write_uint8, write_bytes +from apps.common.writers import write_bytes_unchecked, write_uint8 TEZOS_AMOUNT_DECIMALS = const(6) TEZOS_ED25519_ADDRESS_PREFIX = "tz1" @@ -99,4 +99,4 @@ def write_bool(w: bytearray, boolean: bool): def write_instruction(w: bytearray, instruction: str) -> int: - write_bytes(w, MICHELSON_INSTRUCTION_BYTES[instruction]) + write_bytes_unchecked(w, MICHELSON_INSTRUCTION_BYTES[instruction]) diff --git a/core/src/apps/tezos/sign_tx.py b/core/src/apps/tezos/sign_tx.py index dcae86b76..3fcb06ce4 100644 --- a/core/src/apps/tezos/sign_tx.py +++ b/core/src/apps/tezos/sign_tx.py @@ -7,7 +7,7 @@ from trezor.messages import TezosBallotType, TezosContractType from trezor.messages.TezosSignedTx import TezosSignedTx from apps.common import paths -from apps.common.writers import write_bytes, write_uint8, write_uint32_be +from apps.common.writers import write_bytes_unchecked, write_uint8, write_uint32_be from apps.tezos import CURVE, helpers, layout PROPOSAL_LENGTH = const(32) @@ -157,13 +157,13 @@ def _get_ballot(ballot): def _get_operation_bytes(w: bytearray, msg): - write_bytes(w, msg.branch) + write_bytes_unchecked(w, msg.branch) # when the account sends first operation in lifetime, # we need to reveal its public key if msg.reveal is not None: _encode_common(w, msg.reveal, "reveal") - write_bytes(w, msg.reveal.public_key) + write_bytes_unchecked(w, msg.reveal.public_key) # transaction operation if msg.transaction is not None: @@ -194,7 +194,7 @@ def _get_operation_bytes(w: bytearray, msg): _encode_common(w, msg.origination, "origination") _encode_zarith(w, msg.origination.balance) _encode_data_with_bool_prefix(w, msg.origination.delegate) - write_bytes(w, msg.origination.script) + write_bytes_unchecked(w, msg.origination.script) # delegation operation elif msg.delegation is not None: @@ -214,7 +214,7 @@ def _encode_common(w: bytearray, operation, str_operation): "delegation": 110, } write_uint8(w, operation_tags[str_operation]) - write_bytes(w, operation.source) + write_bytes_unchecked(w, operation.source) _encode_zarith(w, operation.fee) _encode_zarith(w, operation.counter) _encode_zarith(w, operation.gas_limit) @@ -223,13 +223,13 @@ def _encode_common(w: bytearray, operation, str_operation): def _encode_contract_id(w: bytearray, contract_id): write_uint8(w, contract_id.tag) - write_bytes(w, contract_id.hash) + write_bytes_unchecked(w, contract_id.hash) def _encode_data_with_bool_prefix(w: bytearray, data): if data: helpers.write_bool(w, True) - write_bytes(w, data) + write_bytes_unchecked(w, data) else: helpers.write_bool(w, False) @@ -250,20 +250,20 @@ def _encode_proposal(w: bytearray, proposal): proposal_tag = 5 write_uint8(w, proposal_tag) - write_bytes(w, proposal.source) + write_bytes_unchecked(w, proposal.source) write_uint32_be(w, proposal.period) write_uint32_be(w, len(proposal.proposals) * PROPOSAL_LENGTH) for proposal_hash in proposal.proposals: - write_bytes(w, proposal_hash) + write_bytes_unchecked(w, proposal_hash) def _encode_ballot(w: bytearray, ballot): ballot_tag = 6 write_uint8(w, ballot_tag) - write_bytes(w, ballot.source) + write_bytes_unchecked(w, ballot.source) write_uint32_be(w, ballot.period) - write_bytes(w, ballot.proposal) + write_bytes_unchecked(w, ballot.proposal) write_uint8(w, ballot.ballot) @@ -304,7 +304,7 @@ def _encode_manager_common(w: bytearray, sequence_length, operation, to_contract else: helpers.write_instruction(w, "key_hash") if operation == "PUSH": - write_bytes(w, bytes([10])) # byte sequence + write_bytes_unchecked(w, bytes([10])) # byte sequence if to_contract is True: write_uint32_be(w, SMART_CONTRACT_ADDRESS_LENGTH) else: @@ -319,7 +319,7 @@ def _encode_manager_to_implicit_transfer(w: bytearray, manager_transfer): sequence_length = MICHELSON_LENGTH + len(value_natural) _encode_manager_common(w, sequence_length, "PUSH") - write_bytes(w, manager_transfer.destination.hash) + write_bytes_unchecked(w, manager_transfer.destination.hash) helpers.write_instruction(w, "IMPLICIT_ACCOUNT") helpers.write_instruction(w, "PUSH") helpers.write_instruction(w, "mutez") @@ -334,7 +334,7 @@ def _encode_manager_delegation(w: bytearray, delegate): MICHELSON_LENGTH = 42 # length is fixed this time(no variable length fields) _encode_manager_common(w, MICHELSON_LENGTH, "PUSH") - write_bytes(w, delegate) + write_bytes_unchecked(w, delegate) helpers.write_instruction(w, "SOME") helpers.write_instruction(w, "SET_DELEGATE") helpers.write_instruction(w, "CONS") diff --git a/core/src/apps/wallet/sign_tx/multisig.py b/core/src/apps/wallet/sign_tx/multisig.py index aa474e786..3c52473a8 100644 --- a/core/src/apps/wallet/sign_tx/multisig.py +++ b/core/src/apps/wallet/sign_tx/multisig.py @@ -5,7 +5,7 @@ from trezor.messages.HDNodeType import HDNodeType from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType from trezor.utils import HashWriter, ensure -from apps.wallet.sign_tx.writers import write_bytes, write_uint32 +from apps.wallet.sign_tx.writers import write_bytes_unchecked, write_uint32 class MultisigError(ValueError): @@ -59,8 +59,8 @@ def multisig_fingerprint(multisig: MultisigRedeemScriptType) -> bytes: write_uint32(h, d.depth) write_uint32(h, d.fingerprint) write_uint32(h, d.child_num) - write_bytes(h, d.chain_code) - write_bytes(h, d.public_key) + write_bytes_unchecked(h, d.chain_code) + write_bytes_unchecked(h, d.public_key) return h.get_digest() diff --git a/core/src/apps/wallet/sign_tx/scripts.py b/core/src/apps/wallet/sign_tx/scripts.py index c6f71b1cf..7fc69a4b4 100644 --- a/core/src/apps/wallet/sign_tx/scripts.py +++ b/core/src/apps/wallet/sign_tx/scripts.py @@ -4,7 +4,7 @@ from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType from apps.common.coininfo import CoinInfo from apps.common.writers import empty_bytearray from apps.wallet.sign_tx.multisig import multisig_get_pubkey_count, multisig_get_pubkeys -from apps.wallet.sign_tx.writers import write_bytes, write_op_push, write_varint +from apps.wallet.sign_tx.writers import write_bytes_unchecked, write_op_push, write_varint class ScriptsError(ValueError): @@ -74,7 +74,7 @@ def output_script_native_p2wpkh_or_p2wsh(witprog: bytes) -> bytearray: w = empty_bytearray(3 + len(witprog)) w.append(0x00) # witness version byte w.append(len(witprog)) # pub key hash length is 20 (P2WPKH) or 32 (P2WSH) bytes - write_bytes(w, witprog) # pub key hash + write_bytes_unchecked(w, witprog) # pub key hash return w @@ -95,7 +95,7 @@ def input_script_p2wpkh_in_p2sh(pubkeyhash: bytes) -> bytearray: w.append(0x16) # length of the data w.append(0x00) # witness version byte w.append(0x14) # P2WPKH witness program (pub key hash length) - write_bytes(w, pubkeyhash) # pub key hash + write_bytes_unchecked(w, pubkeyhash) # pub key hash return w @@ -118,7 +118,7 @@ def input_script_p2wsh_in_p2sh(script_hash: bytes) -> bytearray: w.append(0x22) # length of the data w.append(0x00) # witness version byte w.append(0x20) # P2WSH witness program (redeem script hash length) - write_bytes(w, script_hash) + write_bytes_unchecked(w, script_hash) return w @@ -272,12 +272,12 @@ def output_script_paytoopreturn(data: bytes) -> bytearray: def append_signature(w: bytearray, signature: bytes, sighash: int) -> bytearray: write_op_push(w, len(signature) + 1) - write_bytes(w, signature) + write_bytes_unchecked(w, signature) w.append(sighash) return w def append_pubkey(w: bytearray, pubkey: bytes) -> bytearray: write_op_push(w, len(pubkey)) - write_bytes(w, pubkey) + write_bytes_unchecked(w, pubkey) return w diff --git a/core/src/apps/wallet/sign_tx/segwit_bip143.py b/core/src/apps/wallet/sign_tx/segwit_bip143.py index a92d4a847..333c7bd66 100644 --- a/core/src/apps/wallet/sign_tx/segwit_bip143.py +++ b/core/src/apps/wallet/sign_tx/segwit_bip143.py @@ -10,7 +10,7 @@ from apps.wallet.sign_tx.multisig import multisig_get_pubkeys from apps.wallet.sign_tx.scripts import output_script_multisig, output_script_p2pkh from apps.wallet.sign_tx.writers import ( get_tx_hash, - write_bytes, + write_bytes_unchecked, write_bytes_reversed, write_tx_output, write_uint32, @@ -61,19 +61,19 @@ class Bip143: ensure(not coin.overwintered) write_uint32(h_preimage, tx.version) # nVersion - write_bytes(h_preimage, self.get_prevouts_hash(coin)) # hashPrevouts - write_bytes(h_preimage, self.get_sequence_hash(coin)) # hashSequence + write_bytes_unchecked(h_preimage, self.get_prevouts_hash(coin)) # hashPrevouts + write_bytes_unchecked(h_preimage, self.get_sequence_hash(coin)) # hashSequence write_bytes_reversed(h_preimage, txi.prev_hash) # outpoint write_uint32(h_preimage, txi.prev_index) # outpoint script_code = self.derive_script_code(txi, pubkeyhash) # scriptCode write_varint(h_preimage, len(script_code)) - write_bytes(h_preimage, script_code) + write_bytes_unchecked(h_preimage, script_code) write_uint64(h_preimage, txi.amount) # amount write_uint32(h_preimage, txi.sequence) # nSequence - write_bytes(h_preimage, self.get_outputs_hash(coin)) # hashOutputs + write_bytes_unchecked(h_preimage, self.get_outputs_hash(coin)) # hashOutputs write_uint32(h_preimage, tx.lock_time) # nLockTime write_uint32(h_preimage, sighash) # nHashType diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index eba73e089..4a084fc57 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -151,7 +151,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI w_txi = writers.empty_bytearray(8 if i == 0 else 0 + 9 + len(txi.prev_hash)) if i == 0: # serializing first input => prepend headers # decred doesn't support segwit - writers.write_bytes(w_txi, get_tx_header(coin, tx, False)) + writers.write_bytes_unchecked(w_txi, get_tx_header(coin, tx, False)) writers.write_tx_input_decred(w_txi, txi) tx_ser.serialized_tx = w_txi tx_req.serialized = tx_ser @@ -281,7 +281,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 7 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes(w_txi, get_tx_header(coin, tx, True)) + writers.write_bytes_unchecked(w_txi, get_tx_header(coin, tx, True)) writers.write_tx_input(w_txi, txi_sign) tx_ser.serialized_tx = w_txi tx_ser.signature_index = None @@ -331,7 +331,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 5 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes(w_txi_sign, get_tx_header(coin, tx, any_segwit)) + writers.write_bytes_unchecked(w_txi_sign, get_tx_header(coin, tx, any_segwit)) writers.write_tx_input(w_txi_sign, txi_sign) tx_ser.serialized_tx = w_txi_sign @@ -367,7 +367,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): for ii in range(tx.inputs_count): if ii == i_sign: writers.write_varint(h_witness, len(prev_pkscript)) - writers.write_bytes(h_witness, prev_pkscript) + writers.write_bytes_unchecked(h_witness, prev_pkscript) else: writers.write_varint(h_witness, 0) @@ -377,8 +377,8 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): h_sign = utils.HashWriter(blake256()) writers.write_uint32(h_sign, decred.DECRED_SIGHASHALL) - writers.write_bytes(h_sign, prefix_hash) - writers.write_bytes(h_sign, witness_hash) + writers.write_bytes_unchecked(h_sign, prefix_hash) + writers.write_bytes_unchecked(h_sign, witness_hash) sig_hash = writers.get_tx_hash(h_sign, double=coin.sign_hash_double) signature = ecdsa_sign(key_sign, sig_hash) @@ -397,7 +397,9 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): ) if i_sign == 0: - writers.write_bytes(w_txi_sign, hash143.get_last_output_bytes()) + writers.write_bytes_unchecked( + w_txi_sign, hash143.get_last_output_bytes() + ) writers.write_uint32(w_txi_sign, tx.lock_time) writers.write_uint32(w_txi_sign, tx.expiry) writers.write_varint(w_txi_sign, tx.inputs_count) @@ -486,7 +488,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 5 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes(w_txi_sign, get_tx_header(coin, tx, any_segwit)) + writers.write_bytes_unchecked(w_txi_sign, get_tx_header(coin, tx, any_segwit)) writers.write_tx_input(w_txi_sign, txi_sign) tx_ser.serialized_tx = w_txi_sign @@ -652,7 +654,7 @@ async def get_prevtx_output_value( while ofs < tx.extra_data_len: size = min(1024, tx.extra_data_len - ofs) data = await helpers.request_tx_extra_data(tx_req, ofs, size, prev_hash) - writers.write_bytes(txh, data) + writers.write_bytes_unchecked(txh, data) ofs += len(data) if ( diff --git a/core/src/apps/wallet/sign_tx/writers.py b/core/src/apps/wallet/sign_tx/writers.py index 5a0d0d29d..d69b5b80c 100644 --- a/core/src/apps/wallet/sign_tx/writers.py +++ b/core/src/apps/wallet/sign_tx/writers.py @@ -5,7 +5,7 @@ from trezor.utils import ensure from apps.common.writers import ( # noqa: F401 empty_bytearray, - write_bytes, + write_bytes_unchecked, write_bytes_reversed, write_uint8, write_uint16_le, @@ -22,12 +22,12 @@ def write_tx_input(w, i: TxInputType): write_bytes_reversed(w, i.prev_hash) write_uint32(w, i.prev_index) write_varint(w, len(i.script_sig)) - write_bytes(w, i.script_sig) + write_bytes_unchecked(w, i.script_sig) write_uint32(w, i.sequence) def write_tx_input_check(w, i: TxInputType): - write_bytes(w, i.prev_hash) + write_bytes_unchecked(w, i.prev_hash) write_uint32(w, i.prev_index) write_uint32(w, i.script_type) write_uint32(w, len(i.address_n)) @@ -49,7 +49,7 @@ def write_tx_input_decred_witness(w, i: TxInputType): write_uint32(w, 0) # block height fraud proof write_uint32(w, 0xFFFFFFFF) # block index fraud proof write_varint(w, len(i.script_sig)) - write_bytes(w, i.script_sig) + write_bytes_unchecked(w, i.script_sig) def write_tx_output(w, o: TxOutputBinType): @@ -57,7 +57,7 @@ def write_tx_output(w, o: TxOutputBinType): if o.decred_script_version is not None: write_uint16(w, o.decred_script_version) write_varint(w, len(o.script_pubkey)) - write_bytes(w, o.script_pubkey) + write_bytes_unchecked(w, o.script_pubkey) def write_op_push(w, n: int): diff --git a/core/src/apps/wallet/sign_tx/zcash.py b/core/src/apps/wallet/sign_tx/zcash.py index d0776fa3f..c4b40d392 100644 --- a/core/src/apps/wallet/sign_tx/zcash.py +++ b/core/src/apps/wallet/sign_tx/zcash.py @@ -13,7 +13,7 @@ from apps.wallet.sign_tx.multisig import multisig_get_pubkeys from apps.wallet.sign_tx.scripts import output_script_multisig, output_script_p2pkh from apps.wallet.sign_tx.writers import ( get_tx_hash, - write_bytes, + write_bytes_unchecked, write_bytes_reversed, write_tx_output, write_uint32, @@ -92,10 +92,10 @@ class Zip143: h_preimage, tx.version | OVERWINTERED ) # 1. nVersion | fOverwintered write_uint32(h_preimage, tx.version_group_id) # 2. nVersionGroupId - write_bytes(h_preimage, bytearray(self.get_prevouts_hash())) # 3. hashPrevouts - write_bytes(h_preimage, bytearray(self.get_sequence_hash())) # 4. hashSequence - write_bytes(h_preimage, bytearray(self.get_outputs_hash())) # 5. hashOutputs - write_bytes(h_preimage, b"\x00" * 32) # 6. hashJoinSplits + write_bytes_unchecked(h_preimage, bytearray(self.get_prevouts_hash())) # 3. hashPrevouts + write_bytes_unchecked(h_preimage, bytearray(self.get_sequence_hash())) # 4. hashSequence + write_bytes_unchecked(h_preimage, bytearray(self.get_outputs_hash())) # 5. hashOutputs + write_bytes_unchecked(h_preimage, b"\x00" * 32) # 6. hashJoinSplits write_uint32(h_preimage, tx.lock_time) # 7. nLockTime write_uint32(h_preimage, tx.expiry) # 8. expiryHeight write_uint32(h_preimage, sighash) # 9. nHashType @@ -105,7 +105,7 @@ class Zip143: script_code = derive_script_code(txi, pubkeyhash) # 10b. scriptCode write_varint(h_preimage, len(script_code)) - write_bytes(h_preimage, script_code) + write_bytes_unchecked(h_preimage, script_code) write_uint64(h_preimage, txi.amount) # 10c. value @@ -139,12 +139,12 @@ class Zip243(Zip143): h_preimage, tx.version | OVERWINTERED ) # 1. nVersion | fOverwintered write_uint32(h_preimage, tx.version_group_id) # 2. nVersionGroupId - write_bytes(h_preimage, bytearray(self.get_prevouts_hash())) # 3. hashPrevouts - write_bytes(h_preimage, bytearray(self.get_sequence_hash())) # 4. hashSequence - write_bytes(h_preimage, bytearray(self.get_outputs_hash())) # 5. hashOutputs - write_bytes(h_preimage, b"\x00" * 32) # 6. hashJoinSplits - write_bytes(h_preimage, b"\x00" * 32) # 7. hashShieldedSpends - write_bytes(h_preimage, b"\x00" * 32) # 8. hashShieldedOutputs + write_bytes_unchecked(h_preimage, bytearray(self.get_prevouts_hash())) # 3. hashPrevouts + write_bytes_unchecked(h_preimage, bytearray(self.get_sequence_hash())) # 4. hashSequence + write_bytes_unchecked(h_preimage, bytearray(self.get_outputs_hash())) # 5. hashOutputs + write_bytes_unchecked(h_preimage, b"\x00" * 32) # 6. hashJoinSplits + write_bytes_unchecked(h_preimage, b"\x00" * 32) # 7. hashShieldedSpends + write_bytes_unchecked(h_preimage, b"\x00" * 32) # 8. hashShieldedOutputs write_uint32(h_preimage, tx.lock_time) # 9. nLockTime write_uint32(h_preimage, tx.expiry) # 10. expiryHeight write_uint64(h_preimage, 0) # 11. valueBalance @@ -155,7 +155,7 @@ class Zip243(Zip143): script_code = derive_script_code(txi, pubkeyhash) # 13b. scriptCode write_varint(h_preimage, len(script_code)) - write_bytes(h_preimage, script_code) + write_bytes_unchecked(h_preimage, script_code) write_uint64(h_preimage, txi.amount) # 13c. value diff --git a/core/tests/test_apps.wallet.address.py b/core/tests/test_apps.wallet.address.py index d7df64013..ad42e47ca 100644 --- a/core/tests/test_apps.wallet.address.py +++ b/core/tests/test_apps.wallet.address.py @@ -71,7 +71,7 @@ class TestAddress(unittest.TestCase): # pubkey OP_CHECKSIG script = unhexlify('210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac') h = HashWriter(sha256()) - write_bytes(h, script) + write_bytes_unchecked(h, script) address = address_p2wsh( h.get_digest(), From 9cab61fbd37286b4ee996b48891000449ebdde76 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 12:42:19 +0100 Subject: [PATCH 32/45] core/sign_tx: remove write_bytes_unchecked where appropriate --- core/src/apps/wallet/sign_tx/multisig.py | 6 +-- core/src/apps/wallet/sign_tx/scripts.py | 20 +++++--- core/src/apps/wallet/sign_tx/segwit_bip143.py | 21 +++++---- core/src/apps/wallet/sign_tx/signing.py | 7 ++- core/src/apps/wallet/sign_tx/writers.py | 30 ++++++++---- core/src/apps/wallet/sign_tx/zcash.py | 47 +++++++++++-------- 6 files changed, 79 insertions(+), 52 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/multisig.py b/core/src/apps/wallet/sign_tx/multisig.py index 3c52473a8..5cbf62f2e 100644 --- a/core/src/apps/wallet/sign_tx/multisig.py +++ b/core/src/apps/wallet/sign_tx/multisig.py @@ -5,7 +5,7 @@ from trezor.messages.HDNodeType import HDNodeType from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType from trezor.utils import HashWriter, ensure -from apps.wallet.sign_tx.writers import write_bytes_unchecked, write_uint32 +from apps.wallet.sign_tx.writers import write_bytes_fixed, write_uint32 class MultisigError(ValueError): @@ -59,8 +59,8 @@ def multisig_fingerprint(multisig: MultisigRedeemScriptType) -> bytes: write_uint32(h, d.depth) write_uint32(h, d.fingerprint) write_uint32(h, d.child_num) - write_bytes_unchecked(h, d.chain_code) - write_bytes_unchecked(h, d.public_key) + write_bytes_fixed(h, d.chain_code, 32) + write_bytes_fixed(h, d.public_key, 33) return h.get_digest() diff --git a/core/src/apps/wallet/sign_tx/scripts.py b/core/src/apps/wallet/sign_tx/scripts.py index 7fc69a4b4..b1495c785 100644 --- a/core/src/apps/wallet/sign_tx/scripts.py +++ b/core/src/apps/wallet/sign_tx/scripts.py @@ -4,7 +4,12 @@ from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType from apps.common.coininfo import CoinInfo from apps.common.writers import empty_bytearray from apps.wallet.sign_tx.multisig import multisig_get_pubkey_count, multisig_get_pubkeys -from apps.wallet.sign_tx.writers import write_bytes_unchecked, write_op_push, write_varint +from apps.wallet.sign_tx.writers import ( + write_bytes_fixed, + write_bytes_unchecked, + write_op_push, + write_varint, +) class ScriptsError(ValueError): @@ -69,12 +74,13 @@ def output_script_native_p2wpkh_or_p2wsh(witprog: bytes) -> bytearray: # Either: # 00 14 <20-byte-key-hash> # 00 20 <32-byte-script-hash> - utils.ensure(len(witprog) == 20 or len(witprog) == 32) + length = len(witprog) + utils.ensure(length == 20 or length == 32) - w = empty_bytearray(3 + len(witprog)) + w = empty_bytearray(3 + length) w.append(0x00) # witness version byte - w.append(len(witprog)) # pub key hash length is 20 (P2WPKH) or 32 (P2WSH) bytes - write_bytes_unchecked(w, witprog) # pub key hash + w.append(length) # pub key hash length is 20 (P2WPKH) or 32 (P2WSH) bytes + write_bytes_fixed(w, witprog, length) # pub key hash return w @@ -95,7 +101,7 @@ def input_script_p2wpkh_in_p2sh(pubkeyhash: bytes) -> bytearray: w.append(0x16) # length of the data w.append(0x00) # witness version byte w.append(0x14) # P2WPKH witness program (pub key hash length) - write_bytes_unchecked(w, pubkeyhash) # pub key hash + write_bytes_fixed(w, pubkeyhash, 20) # pub key hash return w @@ -118,7 +124,7 @@ def input_script_p2wsh_in_p2sh(script_hash: bytes) -> bytearray: w.append(0x22) # length of the data w.append(0x00) # witness version byte w.append(0x20) # P2WSH witness program (redeem script hash length) - write_bytes_unchecked(w, script_hash) + write_bytes_fixed(w, script_hash, 32) return w diff --git a/core/src/apps/wallet/sign_tx/segwit_bip143.py b/core/src/apps/wallet/sign_tx/segwit_bip143.py index 333c7bd66..40c26db7f 100644 --- a/core/src/apps/wallet/sign_tx/segwit_bip143.py +++ b/core/src/apps/wallet/sign_tx/segwit_bip143.py @@ -9,13 +9,14 @@ from apps.common.coininfo import CoinInfo from apps.wallet.sign_tx.multisig import multisig_get_pubkeys from apps.wallet.sign_tx.scripts import output_script_multisig, output_script_p2pkh from apps.wallet.sign_tx.writers import ( + TX_HASH_SIZE, get_tx_hash, - write_bytes_unchecked, + write_bytes_fixed, + write_bytes_prefixed, write_bytes_reversed, write_tx_output, write_uint32, write_uint64, - write_varint, ) @@ -30,7 +31,7 @@ class Bip143: self.h_outputs = HashWriter(sha256()) def add_prevouts(self, txi: TxInputType): - write_bytes_reversed(self.h_prevouts, txi.prev_hash) + write_bytes_reversed(self.h_prevouts, txi.prev_hash, TX_HASH_SIZE) write_uint32(self.h_prevouts, txi.prev_index) def add_sequence(self, txi: TxInputType): @@ -61,19 +62,21 @@ class Bip143: ensure(not coin.overwintered) write_uint32(h_preimage, tx.version) # nVersion - write_bytes_unchecked(h_preimage, self.get_prevouts_hash(coin)) # hashPrevouts - write_bytes_unchecked(h_preimage, self.get_sequence_hash(coin)) # hashSequence + # hashPrevouts + write_bytes_fixed(h_preimage, self.get_prevouts_hash(coin), TX_HASH_SIZE) + # hashSequence + write_bytes_fixed(h_preimage, self.get_sequence_hash(coin), TX_HASH_SIZE) - write_bytes_reversed(h_preimage, txi.prev_hash) # outpoint + write_bytes_reversed(h_preimage, txi.prev_hash, TX_HASH_SIZE) # outpoint write_uint32(h_preimage, txi.prev_index) # outpoint script_code = self.derive_script_code(txi, pubkeyhash) # scriptCode - write_varint(h_preimage, len(script_code)) - write_bytes_unchecked(h_preimage, script_code) + write_bytes_prefixed(h_preimage, script_code) write_uint64(h_preimage, txi.amount) # amount write_uint32(h_preimage, txi.sequence) # nSequence - write_bytes_unchecked(h_preimage, self.get_outputs_hash(coin)) # hashOutputs + # hashOutputs + write_bytes_fixed(h_preimage, self.get_outputs_hash(coin), TX_HASH_SIZE) write_uint32(h_preimage, tx.lock_time) # nLockTime write_uint32(h_preimage, sighash) # nHashType diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 4a084fc57..3a2797a45 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -366,8 +366,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): for ii in range(tx.inputs_count): if ii == i_sign: - writers.write_varint(h_witness, len(prev_pkscript)) - writers.write_bytes_unchecked(h_witness, prev_pkscript) + writers.write_bytes_prefixed(h_witness, prev_pkscript) else: writers.write_varint(h_witness, 0) @@ -377,8 +376,8 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): h_sign = utils.HashWriter(blake256()) writers.write_uint32(h_sign, decred.DECRED_SIGHASHALL) - writers.write_bytes_unchecked(h_sign, prefix_hash) - writers.write_bytes_unchecked(h_sign, witness_hash) + writers.write_bytes_fixed(h_sign, prefix_hash, writers.TX_HASH_SIZE) + writers.write_bytes_fixed(h_sign, witness_hash, writers.TX_HASH_SIZE) sig_hash = writers.get_tx_hash(h_sign, double=coin.sign_hash_double) signature = ecdsa_sign(key_sign, sig_hash) diff --git a/core/src/apps/wallet/sign_tx/writers.py b/core/src/apps/wallet/sign_tx/writers.py index d69b5b80c..5482457cf 100644 --- a/core/src/apps/wallet/sign_tx/writers.py +++ b/core/src/apps/wallet/sign_tx/writers.py @@ -1,3 +1,5 @@ +from micropython import const + from trezor.crypto.hashlib import sha256 from trezor.messages.TxInputType import TxInputType from trezor.messages.TxOutputBinType import TxOutputBinType @@ -5,29 +7,39 @@ from trezor.utils import ensure from apps.common.writers import ( # noqa: F401 empty_bytearray, - write_bytes_unchecked, + write_bytes_fixed, write_bytes_reversed, + write_bytes_unchecked, write_uint8, write_uint16_le, write_uint32_le, write_uint64_le, ) +if False: + from apps.common.writers import Writer + write_uint16 = write_uint16_le write_uint32 = write_uint32_le write_uint64 = write_uint64_le +TX_HASH_SIZE = const(32) + + +def write_bytes_prefixed(w: Writer, b: bytes) -> None: + write_varint(w, len(b)) + write_bytes_unchecked(w, b) + def write_tx_input(w, i: TxInputType): - write_bytes_reversed(w, i.prev_hash) + write_bytes_reversed(w, i.prev_hash, TX_HASH_SIZE) write_uint32(w, i.prev_index) - write_varint(w, len(i.script_sig)) - write_bytes_unchecked(w, i.script_sig) + write_bytes_prefixed(w, i.script_sig) write_uint32(w, i.sequence) def write_tx_input_check(w, i: TxInputType): - write_bytes_unchecked(w, i.prev_hash) + write_bytes_fixed(w, i.prev_hash, TX_HASH_SIZE) write_uint32(w, i.prev_index) write_uint32(w, i.script_type) write_uint32(w, len(i.address_n)) @@ -38,7 +50,7 @@ def write_tx_input_check(w, i: TxInputType): def write_tx_input_decred(w, i: TxInputType): - write_bytes_reversed(w, i.prev_hash) + write_bytes_reversed(w, i.prev_hash, TX_HASH_SIZE) write_uint32(w, i.prev_index or 0) write_uint8(w, i.decred_tree or 0) write_uint32(w, i.sequence) @@ -48,16 +60,14 @@ def write_tx_input_decred_witness(w, i: TxInputType): write_uint64(w, i.amount or 0) write_uint32(w, 0) # block height fraud proof write_uint32(w, 0xFFFFFFFF) # block index fraud proof - write_varint(w, len(i.script_sig)) - write_bytes_unchecked(w, i.script_sig) + write_bytes_prefixed(w, i.script_sig) def write_tx_output(w, o: TxOutputBinType): write_uint64(w, o.amount) if o.decred_script_version is not None: write_uint16(w, o.decred_script_version) - write_varint(w, len(o.script_pubkey)) - write_bytes_unchecked(w, o.script_pubkey) + write_bytes_prefixed(w, o.script_pubkey) def write_op_push(w, n: int): diff --git a/core/src/apps/wallet/sign_tx/zcash.py b/core/src/apps/wallet/sign_tx/zcash.py index c4b40d392..4f5c8e6ff 100644 --- a/core/src/apps/wallet/sign_tx/zcash.py +++ b/core/src/apps/wallet/sign_tx/zcash.py @@ -12,13 +12,14 @@ from apps.common.coininfo import CoinInfo from apps.wallet.sign_tx.multisig import multisig_get_pubkeys from apps.wallet.sign_tx.scripts import output_script_multisig, output_script_p2pkh from apps.wallet.sign_tx.writers import ( + TX_HASH_SIZE, get_tx_hash, - write_bytes_unchecked, + write_bytes_fixed, + write_bytes_prefixed, write_bytes_reversed, write_tx_output, write_uint32, write_uint64, - write_varint, ) OVERWINTERED = const(0x80000000) @@ -53,7 +54,7 @@ class Zip143: self.h_outputs = HashWriter(blake2b(outlen=32, personal=b"ZcashOutputsHash")) def add_prevouts(self, txi: TxInputType): - write_bytes_reversed(self.h_prevouts, txi.prev_hash) + write_bytes_reversed(self.h_prevouts, txi.prev_hash, TX_HASH_SIZE) write_uint32(self.h_prevouts, txi.prev_index) def add_sequence(self, txi: TxInputType): @@ -92,20 +93,23 @@ class Zip143: h_preimage, tx.version | OVERWINTERED ) # 1. nVersion | fOverwintered write_uint32(h_preimage, tx.version_group_id) # 2. nVersionGroupId - write_bytes_unchecked(h_preimage, bytearray(self.get_prevouts_hash())) # 3. hashPrevouts - write_bytes_unchecked(h_preimage, bytearray(self.get_sequence_hash())) # 4. hashSequence - write_bytes_unchecked(h_preimage, bytearray(self.get_outputs_hash())) # 5. hashOutputs - write_bytes_unchecked(h_preimage, b"\x00" * 32) # 6. hashJoinSplits + # 3. hashPrevouts + write_bytes_fixed(h_preimage, bytearray(self.get_prevouts_hash()), TX_HASH_SIZE) + # 4. hashSequence + write_bytes_fixed(h_preimage, bytearray(self.get_sequence_hash()), TX_HASH_SIZE) + # 5. hashOutputs + write_bytes_fixed(h_preimage, bytearray(self.get_outputs_hash()), TX_HASH_SIZE) + # 6. hashJoinSplits + write_bytes_fixed(h_preimage, b"\x00" * TX_HASH_SIZE, TX_HASH_SIZE) write_uint32(h_preimage, tx.lock_time) # 7. nLockTime write_uint32(h_preimage, tx.expiry) # 8. expiryHeight write_uint32(h_preimage, sighash) # 9. nHashType - write_bytes_reversed(h_preimage, txi.prev_hash) # 10a. outpoint + write_bytes_reversed(h_preimage, txi.prev_hash, TX_HASH_SIZE) # 10a. outpoint write_uint32(h_preimage, txi.prev_index) script_code = derive_script_code(txi, pubkeyhash) # 10b. scriptCode - write_varint(h_preimage, len(script_code)) - write_bytes_unchecked(h_preimage, script_code) + write_bytes_prefixed(h_preimage, script_code) write_uint64(h_preimage, txi.amount) # 10c. value @@ -139,23 +143,28 @@ class Zip243(Zip143): h_preimage, tx.version | OVERWINTERED ) # 1. nVersion | fOverwintered write_uint32(h_preimage, tx.version_group_id) # 2. nVersionGroupId - write_bytes_unchecked(h_preimage, bytearray(self.get_prevouts_hash())) # 3. hashPrevouts - write_bytes_unchecked(h_preimage, bytearray(self.get_sequence_hash())) # 4. hashSequence - write_bytes_unchecked(h_preimage, bytearray(self.get_outputs_hash())) # 5. hashOutputs - write_bytes_unchecked(h_preimage, b"\x00" * 32) # 6. hashJoinSplits - write_bytes_unchecked(h_preimage, b"\x00" * 32) # 7. hashShieldedSpends - write_bytes_unchecked(h_preimage, b"\x00" * 32) # 8. hashShieldedOutputs + # 3. hashPrevouts + write_bytes_fixed(h_preimage, bytearray(self.get_prevouts_hash()), TX_HASH_SIZE) + # 4. hashSequence + write_bytes_fixed(h_preimage, bytearray(self.get_sequence_hash()), TX_HASH_SIZE) + # 5. hashOutputs + write_bytes_fixed(h_preimage, bytearray(self.get_outputs_hash()), TX_HASH_SIZE) + + zero_hash = b"\x00" * TX_HASH_SIZE + write_bytes_fixed(h_preimage, zero_hash, TX_HASH_SIZE) # 6. hashJoinSplits + write_bytes_fixed(h_preimage, zero_hash, TX_HASH_SIZE) # 7. hashShieldedSpends + write_bytes_fixed(h_preimage, zero_hash, TX_HASH_SIZE) # 8. hashShieldedOutputs + write_uint32(h_preimage, tx.lock_time) # 9. nLockTime write_uint32(h_preimage, tx.expiry) # 10. expiryHeight write_uint64(h_preimage, 0) # 11. valueBalance write_uint32(h_preimage, sighash) # 12. nHashType - write_bytes_reversed(h_preimage, txi.prev_hash) # 13a. outpoint + write_bytes_reversed(h_preimage, txi.prev_hash, TX_HASH_SIZE) # 13a. outpoint write_uint32(h_preimage, txi.prev_index) script_code = derive_script_code(txi, pubkeyhash) # 13b. scriptCode - write_varint(h_preimage, len(script_code)) - write_bytes_unchecked(h_preimage, script_code) + write_bytes_prefixed(h_preimage, script_code) write_uint64(h_preimage, txi.amount) # 13c. value From c15519f707462c9ba5bd03aaae1af6ef7833a05d Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 12:43:45 +0100 Subject: [PATCH 33/45] core/sign_tx: modify get_tx_header to avoid writing unchecked bytes --- core/src/apps/wallet/sign_tx/signing.py | 31 ++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 3a2797a45..2f234de5e 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -151,7 +151,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI w_txi = writers.empty_bytearray(8 if i == 0 else 0 + 9 + len(txi.prev_hash)) if i == 0: # serializing first input => prepend headers # decred doesn't support segwit - writers.write_bytes_unchecked(w_txi, get_tx_header(coin, tx, False)) + write_tx_header(w_txi, coin, tx, False) writers.write_tx_input_decred(w_txi, txi) tx_ser.serialized_tx = w_txi tx_req.serialized = tx_ser @@ -281,7 +281,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 7 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes_unchecked(w_txi, get_tx_header(coin, tx, True)) + write_tx_header(w_txi, coin, tx, True) writers.write_tx_input(w_txi, txi_sign) tx_ser.serialized_tx = w_txi tx_ser.signature_index = None @@ -331,7 +331,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 5 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes_unchecked(w_txi_sign, get_tx_header(coin, tx, any_segwit)) + write_tx_header(w_txi_sign, coin, tx, any_segwit) writers.write_tx_input(w_txi_sign, txi_sign) tx_ser.serialized_tx = w_txi_sign @@ -487,7 +487,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): 5 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4 ) if i_sign == 0: # serializing first input => prepend headers - writers.write_bytes_unchecked(w_txi_sign, get_tx_header(coin, tx, any_segwit)) + write_tx_header(w_txi_sign, coin, tx, any_segwit) writers.write_tx_input(w_txi_sign, txi_sign) tx_ser.serialized_tx = w_txi_sign @@ -678,22 +678,21 @@ def get_hash_type(coin: coininfo.CoinInfo) -> int: return hashtype -def get_tx_header(coin: coininfo.CoinInfo, tx: SignTx, segwit: bool): - w_txi = bytearray() +def write_tx_header( + w: writers.Writer, coin: coininfo.CoinInfo, tx: SignTx, segwit: bool +) -> None: if not utils.BITCOIN_ONLY and coin.overwintered: - writers.write_uint32( - w_txi, tx.version | zcash.OVERWINTERED - ) # nVersion | fOverwintered - writers.write_uint32(w_txi, tx.version_group_id) # nVersionGroupId + # nVersion | fOverwintered + writers.write_uint32(w, tx.version | zcash.OVERWINTERED) + writers.write_uint32(w, tx.version_group_id) # nVersionGroupId else: - writers.write_uint32(w_txi, tx.version) # nVersion + writers.write_uint32(w, tx.version) # nVersion if not utils.BITCOIN_ONLY and coin.timestamp: - writers.write_uint32(w_txi, tx.timestamp) + writers.write_uint32(w, tx.timestamp) if segwit: - writers.write_varint(w_txi, 0x00) # segwit witness marker - writers.write_varint(w_txi, 0x01) # segwit witness flag - writers.write_varint(w_txi, tx.inputs_count) - return w_txi + writers.write_varint(w, 0x00) # segwit witness marker + writers.write_varint(w, 0x01) # segwit witness flag + writers.write_varint(w, tx.inputs_count) # TX Outputs From da89a17ce5c45972e5523dceb67ffbebf62d05c2 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 13:11:04 +0100 Subject: [PATCH 34/45] all: add checks for prev_hash size --- core/src/apps/wallet/sign_tx/helpers.py | 3 + legacy/firmware/signing.c | 6 + .../device_tests/test_msg_signtx_prevhash.py | 164 ++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 tests/device_tests/test_msg_signtx_prevhash.py diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index 2a38c919d..ad7a7dad7 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -17,6 +17,7 @@ from trezor.messages.TxOutputType import TxOutputType from trezor.messages.TxRequest import TxRequest from .signing import SigningError +from .writers import TX_HASH_SIZE from apps.common.coininfo import CoinInfo @@ -213,6 +214,8 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: txi.script_type = InputScriptType.SPENDADDRESS if txi.sequence is None: txi.sequence = 0xFFFFFFFF + if txi.prev_hash is None or len(txi.prev_hash) != TX_HASH_SIZE: + raise SigningError(FailureType.DataError, "Provided prev_hash is invalid.") if txi.multisig and txi.script_type not in MULTISIG_INPUT_SCRIPT_TYPES: raise SigningError( FailureType.DataError, "Multisig field provided but not expected.", diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index d9c7073fa..efac79c86 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -588,6 +588,12 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, #define MIN(a, b) (((a) < (b)) ? (a) : (b)) static bool signing_validate_input(const TxInputType *txinput) { + if (txinput->prev_hash.size != 32) { + fsm_sendFailure(FailureType_Failure_ProcessError, + _("Encountered invalid prevhash")); + signing_abort(); + return false; + } if (txinput->has_multisig && (txinput->script_type != InputScriptType_SPENDMULTISIG && txinput->script_type != InputScriptType_SPENDP2SHWITNESS && diff --git a/tests/device_tests/test_msg_signtx_prevhash.py b/tests/device_tests/test_msg_signtx_prevhash.py new file mode 100644 index 000000000..5a549a82a --- /dev/null +++ b/tests/device_tests/test_msg_signtx_prevhash.py @@ -0,0 +1,164 @@ +from hashlib import sha256 +from io import BytesIO + +import pytest + +from trezorlib import btc, messages +from trezorlib.exceptions import TrezorFailure + +from ..tx_cache import tx_cache + +TXHASH_157041 = bytes.fromhex( + "1570416eb4302cf52979afd5e6909e37d8fdd874301f7cc87e547e509cb1caa6" +) + + +def write_prefixed_bytes(io, data) -> None: + assert len(data) < 253 + io.write(len(data).to_bytes(1, "little")) + io.write(data) + + +def serialize_input(tx_input) -> bytes: + """serialize for Bitcoin tx format""" + b = BytesIO() + if tx_input.prev_hash: + b.write(tx_input.prev_hash[::-1]) + b.write(tx_input.prev_index.to_bytes(4, "little")) + write_prefixed_bytes(b, tx_input.script_sig) + b.write(tx_input.sequence.to_bytes(4, "little")) + return b.getvalue() + + +def serialize_bin_output(tx_output) -> bytes: + b = BytesIO() + b.write(tx_output.amount.to_bytes(8, "little")) + write_prefixed_bytes(b, tx_output.script_pubkey) + return b.getvalue() + + +def serialize_tx(tx) -> bytes: + b = BytesIO() + b.write(tx.version.to_bytes(4, "little")) + assert len(tx.inputs) < 253 + b.write(len(tx.inputs).to_bytes(1, "little")) + for inp in tx.inputs: + b.write(serialize_input(inp)) + assert len(tx.bin_outputs) < 253 + b.write(len(tx.bin_outputs).to_bytes(1, "little")) + for outp in tx.bin_outputs: + b.write(serialize_bin_output(outp)) + b.write(tx.lock_time.to_bytes(4, "little")) + if tx.extra_data: + b.write(tx.extra_data) + return b.getvalue() + + +def hash_tx(data: bytes) -> bytes: + return sha256(sha256(data).digest()).digest()[::-1] + + +def _check_error_message(value: bytes, model: str, message: str): + if model != "1": + assert message == "Provided prev_hash is invalid." + return + + # T1 has several possible errors + if value is None: + assert message.endswith("missing required field") + elif len(value) > 32: + assert message.endswith("bytes overflow") + else: + assert message.endswith("Encountered invalid prevhash") + + +@pytest.mark.skip_ui +@pytest.mark.parametrize("prev_hash", (None, b"", b"x", b"hello world", b"x" * 33)) +def test_invalid_prev_hash(client, prev_hash): + inp1 = messages.TxInputType( + address_n=[0], + amount=123456789, + prev_hash=prev_hash, + prev_index=0, + script_type=messages.InputScriptType.SPENDP2SHWITNESS, + ) + out1 = messages.TxOutputType( + address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", + amount=12300000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + + with pytest.raises(TrezorFailure) as e: + btc.sign_tx(client, "Testnet", [inp1], [out1]) + _check_error_message(prev_hash, client.features.model, e.value.failure.message) + + +@pytest.mark.skip_ui +@pytest.mark.parametrize("prev_hash", (None, b"", b"x", b"hello world", b"x" * 33)) +def test_invalid_prev_hash_attack(client, prev_hash): + # prepare input with a valid prev-hash + inp1 = messages.TxInputType( + address_n=[0], + amount=123456789, + prev_hash=b"\x00" * 32, + prev_index=0, + script_type=messages.InputScriptType.SPENDP2SHWITNESS, + ) + out1 = messages.TxOutputType( + address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", + amount=12300000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + + counter = 1 + + def attack_filter(msg): + nonlocal counter + + if not msg.tx.inputs: + return msg + + # on first attempt, send unmodified input + if counter > 0: + counter -= 1 + return msg + + # on second request, send modified input + msg.tx.inputs[0].prev_hash = prev_hash + return msg + + with client, pytest.raises(TrezorFailure) as e: + client.set_filter(messages.TxAck, attack_filter) + btc.sign_tx(client, "Testnet", [inp1], [out1]) + + # check that injection was performed + assert counter == 0 + _check_error_message(prev_hash, client.features.model, e.value.failure.message) + + +@pytest.mark.skip_ui +@pytest.mark.parametrize("prev_hash", (None, b"", b"x", b"hello world", b"x" * 33)) +def test_invalid_prev_hash_in_prevtx(client, prev_hash): + cache = tx_cache("Bitcoin") + prev_tx = cache[TXHASH_157041] + + # smoke check: replace prev_hash with all zeros, reserialize and hash, try to sign + prev_tx.inputs[0].prev_hash = b"\x00" * 32 + tx_hash = hash_tx(serialize_tx(prev_tx)) + + inp0 = messages.TxInputType(address_n=[0], prev_hash=tx_hash, prev_index=0) + out1 = messages.TxOutputType( + address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", + amount=1000, + script_type=messages.OutputScriptType.PAYTOADDRESS, + ) + btc.sign_tx(client, "Bitcoin", [inp0], [out1], prev_txes={tx_hash: prev_tx}) + + # attack: replace prev_hash with an invalid value + prev_tx.inputs[0].prev_hash = prev_hash + tx_hash = hash_tx(serialize_tx(prev_tx)) + inp0.prev_hash = tx_hash + + with pytest.raises(TrezorFailure) as e: + btc.sign_tx(client, "Bitcoin", [inp0], [out1], prev_txes={tx_hash: prev_tx}) + _check_error_message(prev_hash, client.features.model, e.value.failure.message) From a9faa4d4ab457c08e2f49d83c532d20fe98e1f86 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 16:12:51 +0100 Subject: [PATCH 35/45] core/tests: fix inline variant of assertRaises otherwise code like the following would fail: >>> self.assertRaises(AssertionError, ensure, False) because the AssertionError raised internally by `ensure` would be conflated with the AssertionError raised by the tested function --- core/tests/unittest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/tests/unittest.py b/core/tests/unittest.py index 4cb339fe3..a78a68d03 100644 --- a/core/tests/unittest.py +++ b/core/tests/unittest.py @@ -119,11 +119,12 @@ class TestCase: return AssertRaisesContext(exc) try: func(*args, **kwargs) - ensure(False, "%r not raised" % exc) except Exception as e: if isinstance(e, exc): return raise + else: + ensure(False, "%r not raised" % exc) def assertListEqual(self, x, y, msg=''): if len(x) != len(y): From bd9e15bb8c18e9280685aae474ff2fde30dea838 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 16 Mar 2020 16:16:10 +0100 Subject: [PATCH 36/45] core/tests: add unit tests for prevhash writers --- .../tests/test_apps.wallet.sign_tx.writers.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 core/tests/test_apps.wallet.sign_tx.writers.py diff --git a/core/tests/test_apps.wallet.sign_tx.writers.py b/core/tests/test_apps.wallet.sign_tx.writers.py new file mode 100644 index 000000000..7f8a2a985 --- /dev/null +++ b/core/tests/test_apps.wallet.sign_tx.writers.py @@ -0,0 +1,54 @@ +from common import * + +from trezor.messages.TxInputType import TxInputType +from trezor.messages import InputScriptType + +from apps.common import coins +from apps.common.seed import Keychain +from apps.wallet.sign_tx import writers + + +class TestWriters(unittest.TestCase): + def test_tx_input(self): + inp = TxInputType( + address_n=[0], + amount=390000, + prev_hash=unhexlify( + "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" + ), + prev_index=0, + sequence=0xffffffff, + script_sig=b"0123456789", + ) + + b = bytearray() + writers.write_tx_input(b, inp) + self.assertEqual(len(b), 32 + 4 + 1 + 10 + 4) + + for bad_prevhash in (b"", b"x", b"hello", b"x" * 33): + inp.prev_hash = bad_prevhash + self.assertRaises(AssertionError, writers.write_tx_input, b, inp) + + def test_tx_input_check(self): + inp = TxInputType( + address_n=[0], + amount=390000, + prev_hash=unhexlify( + "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" + ), + prev_index=0, + script_type=InputScriptType.SPENDWITNESS, + sequence=0xffffffff, + script_sig=b"0123456789", + ) + + b = bytearray() + writers.write_tx_input_check(b, inp) + self.assertEqual(len(b), 32 + 4 + 4 + 4 + 4 + 4 + 8) + + for bad_prevhash in (b"", b"x", b"hello", b"x" * 33): + inp.prev_hash = bad_prevhash + self.assertRaises(AssertionError, writers.write_tx_input_check, b, inp) + +if __name__ == "__main__": + unittest.main() From d0d41c884e5356e5f144bd800bbecd262c60515d Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Thu, 19 Mar 2020 14:35:33 +0000 Subject: [PATCH 37/45] legacy: move script type checks to separate functions and unify with core --- core/src/apps/wallet/sign_tx/helpers.py | 33 +++++---- core/src/apps/wallet/sign_tx/signing.py | 9 +-- legacy/firmware/signing.c | 93 +++++++++++++++++-------- 3 files changed, 83 insertions(+), 52 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index ad7a7dad7..ffc26e4b8 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -24,15 +24,6 @@ from apps.common.coininfo import CoinInfo if False: from typing import Union -CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES = { - OutputScriptType.PAYTOADDRESS: InputScriptType.SPENDADDRESS, - OutputScriptType.PAYTOMULTISIG: InputScriptType.SPENDMULTISIG, - OutputScriptType.PAYTOWITNESS: InputScriptType.SPENDWITNESS, - OutputScriptType.PAYTOP2SHWITNESS: InputScriptType.SPENDP2SHWITNESS, -} -CHANGE_INPUT_SCRIPT_TYPES = tuple(CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES.values()) -CHANGE_OUTPUT_SCRIPT_TYPES = tuple(CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES.keys()) - MULTISIG_INPUT_SCRIPT_TYPES = ( InputScriptType.SPENDMULTISIG, InputScriptType.SPENDP2SHWITNESS, @@ -44,6 +35,23 @@ MULTISIG_OUTPUT_SCRIPT_TYPES = ( OutputScriptType.PAYTOWITNESS, ) +CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES = { + OutputScriptType.PAYTOADDRESS: InputScriptType.SPENDADDRESS, + OutputScriptType.PAYTOMULTISIG: InputScriptType.SPENDMULTISIG, + OutputScriptType.PAYTOP2SHWITNESS: InputScriptType.SPENDP2SHWITNESS, + OutputScriptType.PAYTOWITNESS: InputScriptType.SPENDWITNESS, +} +INTERNAL_INPUT_SCRIPT_TYPES = tuple(CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES.values()) +CHANGE_OUTPUT_SCRIPT_TYPES = tuple(CHANGE_OUTPUT_TO_INPUT_SCRIPT_TYPES.keys()) + +SEGWIT_INPUT_SCRIPT_TYPES = { + InputScriptType.SPENDP2SHWITNESS, + InputScriptType.SPENDWITNESS, +} +SEGWIT_OUTPUT_SCRIPT_TYPES = { + OutputScriptType.PAYTOP2SHWITNESS, + OutputScriptType.PAYTOWITNESS, +} # Machine instructions # === @@ -220,7 +228,7 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: raise SigningError( FailureType.DataError, "Multisig field provided but not expected.", ) - if txi.address_n and txi.script_type not in CHANGE_INPUT_SCRIPT_TYPES: + if txi.address_n and txi.script_type not in INTERNAL_INPUT_SCRIPT_TYPES: raise SigningError( FailureType.DataError, "Input's address_n provided but not expected.", ) @@ -229,10 +237,7 @@ def sanitize_tx_input(tx: TransactionType, coin: CoinInfo) -> TxInputType: FailureType.DataError, "Decred details provided but Decred coin not specified.", ) - if txi.script_type in ( - InputScriptType.SPENDWITNESS, - InputScriptType.SPENDP2SHWITNESS, - ): + if txi.script_type in SEGWIT_INPUT_SCRIPT_TYPES: if not coin.segwit: raise SigningError( FailureType.DataError, "Segwit not enabled on this coin", diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 2f234de5e..c48415cc7 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -771,7 +771,7 @@ def output_is_change( return False if o.multisig and not multisig_fp.matches(o.multisig): return False - if output_is_segwit(o) and o.amount > segwit_in: + if o.script_type in helpers.SEGWIT_OUTPUT_SCRIPT_TYPES and o.amount > segwit_in: # if the output is segwit, make sure it doesn't spend more than what the # segwit inputs paid. this is to prevent user being tricked into # creating ANYONECANSPEND outputs before full segwit activation. @@ -784,13 +784,6 @@ def output_is_change( ) -def output_is_segwit(o: TxOutputType) -> bool: - return ( - o.script_type == OutputScriptType.PAYTOWITNESS - or o.script_type == OutputScriptType.PAYTOP2SHWITNESS - ) - - # Tx Inputs # === diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index efac79c86..544cf0890 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -587,6 +587,60 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +static bool is_multisig_input_script_type(const TxInputType *txinput) { + if (txinput->script_type == InputScriptType_SPENDMULTISIG || + txinput->script_type == InputScriptType_SPENDP2SHWITNESS || + txinput->script_type == InputScriptType_SPENDWITNESS) { + return true; + } + return false; +} + +static bool is_multisig_output_script_type(const TxOutputType *txoutput) { + if (txoutput->script_type == OutputScriptType_PAYTOMULTISIG || + txoutput->script_type == OutputScriptType_PAYTOP2SHWITNESS || + txoutput->script_type == OutputScriptType_PAYTOWITNESS) { + return true; + } + return false; +} + +static bool is_internal_input_script_type(const TxInputType *txinput) { + if (txinput->script_type == InputScriptType_SPENDADDRESS || + txinput->script_type == InputScriptType_SPENDMULTISIG || + txinput->script_type == InputScriptType_SPENDP2SHWITNESS || + txinput->script_type == InputScriptType_SPENDWITNESS) { + return true; + } + return false; +} + +static bool is_change_output_script_type(const TxOutputType *txoutput) { + if (txoutput->script_type == OutputScriptType_PAYTOADDRESS || + txoutput->script_type == OutputScriptType_PAYTOMULTISIG || + txoutput->script_type == OutputScriptType_PAYTOP2SHWITNESS || + txoutput->script_type == OutputScriptType_PAYTOWITNESS) { + return true; + } + return false; +} + +static bool is_segwit_input_script_type(const TxInputType *txinput) { + if (txinput->script_type == InputScriptType_SPENDP2SHWITNESS || + txinput->script_type == InputScriptType_SPENDWITNESS) { + return true; + } + return false; +} + +static bool is_segwit_output_script_type(const TxOutputType *txoutput) { + if (txoutput->script_type == OutputScriptType_PAYTOP2SHWITNESS || + txoutput->script_type == OutputScriptType_PAYTOWITNESS) { + return true; + } + return false; +} + static bool signing_validate_input(const TxInputType *txinput) { if (txinput->prev_hash.size != 32) { fsm_sendFailure(FailureType_Failure_ProcessError, @@ -594,20 +648,13 @@ static bool signing_validate_input(const TxInputType *txinput) { signing_abort(); return false; } - if (txinput->has_multisig && - (txinput->script_type != InputScriptType_SPENDMULTISIG && - txinput->script_type != InputScriptType_SPENDP2SHWITNESS && - txinput->script_type != InputScriptType_SPENDWITNESS)) { + if (txinput->has_multisig && !is_multisig_input_script_type(txinput)) { fsm_sendFailure(FailureType_Failure_ProcessError, _("Multisig field provided but not expected.")); signing_abort(); return false; } - if (txinput->address_n_count > 0 && - (txinput->script_type != InputScriptType_SPENDADDRESS && - txinput->script_type != InputScriptType_SPENDMULTISIG && - txinput->script_type != InputScriptType_SPENDWITNESS && - txinput->script_type != InputScriptType_SPENDP2SHWITNESS)) { + if (txinput->address_n_count > 0 && !is_internal_input_script_type(txinput)) { fsm_sendFailure(FailureType_Failure_DataError, "Input's address_n provided but not expected."); signing_abort(); @@ -632,8 +679,7 @@ static bool signing_validate_input(const TxInputType *txinput) { } #endif - if (txinput->script_type == InputScriptType_SPENDWITNESS || - txinput->script_type == InputScriptType_SPENDP2SHWITNESS) { + if (is_segwit_input_script_type(txinput)) { if (!coin->has_segwit) { fsm_sendFailure(FailureType_Failure_DataError, _("Segwit not enabled on this coin")); @@ -652,10 +698,7 @@ static bool signing_validate_input(const TxInputType *txinput) { } static bool signing_validate_output(TxOutputType *txoutput) { - if (txoutput->has_multisig && - (txoutput->script_type != OutputScriptType_PAYTOMULTISIG && - txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS && - txoutput->script_type != OutputScriptType_PAYTOWITNESS)) { + if (txoutput->has_multisig && !is_multisig_output_script_type(txoutput)) { fsm_sendFailure(FailureType_Failure_DataError, _("Multisig field provided but not expected.")); signing_abort(); @@ -663,10 +706,7 @@ static bool signing_validate_output(TxOutputType *txoutput) { } if (txoutput->address_n_count > 0 && - (txoutput->script_type != OutputScriptType_PAYTOADDRESS && - txoutput->script_type != OutputScriptType_PAYTOMULTISIG && - txoutput->script_type != OutputScriptType_PAYTOWITNESS && - txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { + !is_change_output_script_type(txoutput)) { fsm_sendFailure(FailureType_Failure_DataError, _("Output's address_n provided but not expected.")); signing_abort(); @@ -817,17 +857,13 @@ static bool signing_check_output(TxOutputType *txoutput) { * to make sure the user is not tricked to use witness change output * instead of regular one therefore creating ANYONECANSPEND output */ - if ((txoutput->script_type == OutputScriptType_PAYTOWITNESS || - txoutput->script_type == OutputScriptType_PAYTOP2SHWITNESS) && + if ((is_segwit_output_script_type(txoutput)) && txoutput->amount > authorized_amount) { is_change = false; } } - if ((txoutput->script_type != OutputScriptType_PAYTOADDRESS) && - (txoutput->script_type != OutputScriptType_PAYTOMULTISIG) && - (txoutput->script_type != OutputScriptType_PAYTOWITNESS) && - (txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { + if (!is_change_output_script_type(txoutput)) { is_change = false; } @@ -1133,8 +1169,7 @@ static bool signing_sign_segwit_input(TxInputType *txinput) { // idx1: index to sign uint8_t hash[32] = {0}; - if (txinput->script_type == InputScriptType_SPENDWITNESS || - txinput->script_type == InputScriptType_SPENDP2SHWITNESS) { + if (is_segwit_input_script_type(txinput)) { if (!compile_input_script_sig(txinput)) { fsm_sendFailure(FailureType_Failure_ProcessError, _("Failed to compile input")); @@ -1288,9 +1323,7 @@ void signing_txack(TransactionType *tx) { if (next_nonsegwit_input == 0xffffffff) next_nonsegwit_input = idx1; send_req_2_prev_meta(); } - } else if (tx->inputs[0].script_type == InputScriptType_SPENDWITNESS || - tx->inputs[0].script_type == - InputScriptType_SPENDP2SHWITNESS) { + } else if (is_segwit_input_script_type(&tx->inputs[0])) { if (to_spend + tx->inputs[0].amount < to_spend) { fsm_sendFailure(FailureType_Failure_DataError, _("Value overflow")); signing_abort(); From f786d75a6f7bf788a1df458ebfa1149b56936f2d Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 20 Mar 2020 10:26:31 +0000 Subject: [PATCH 38/45] core: drop obsolete check for ANYONECANSPEND segwit outputs --- core/src/apps/wallet/sign_tx/helpers.py | 4 ---- core/src/apps/wallet/sign_tx/signing.py | 32 +++++++++---------------- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/core/src/apps/wallet/sign_tx/helpers.py b/core/src/apps/wallet/sign_tx/helpers.py index ffc26e4b8..12eafb375 100644 --- a/core/src/apps/wallet/sign_tx/helpers.py +++ b/core/src/apps/wallet/sign_tx/helpers.py @@ -48,10 +48,6 @@ SEGWIT_INPUT_SCRIPT_TYPES = { InputScriptType.SPENDP2SHWITNESS, InputScriptType.SPENDWITNESS, } -SEGWIT_OUTPUT_SCRIPT_TYPES = { - OutputScriptType.PAYTOP2SHWITNESS, - OutputScriptType.PAYTOWITNESS, -} # Machine instructions # === diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index c48415cc7..33232b981 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -83,7 +83,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI weight = tx_weight.TxWeightCalculator(tx.inputs_count, tx.outputs_count) total_in = 0 # sum of input amounts - segwit_in = 0 # sum of segwit input amounts + bip143_in = 0 # sum of segwit input amounts total_out = 0 # sum of output amounts change_out = 0 # change output amount wallet_path = [] # common prefix of input paths @@ -123,7 +123,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI if not txi.amount: raise SigningError(FailureType.DataError, "Segwit input without amount") segwit[i] = True - segwit_in += txi.amount + bip143_in += txi.amount total_in += txi.amount elif txi.script_type in ( @@ -136,7 +136,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI FailureType.DataError, "Expected input with amount" ) segwit[i] = False - segwit_in += txi.amount + bip143_in += txi.amount total_in += txi.amount else: segwit[i] = False @@ -166,9 +166,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI txo_bin.script_pubkey = output_derive_script(txo, coin, keychain) weight.add_output(txo_bin.script_pubkey) - if change_out == 0 and output_is_change( - txo, wallet_path, segwit_in, multisig_fp - ): + if change_out == 0 and output_is_change(txo, wallet_path, multisig_fp): # output is change and does not need confirmation change_out = txo.amount elif not await helpers.confirm_output(txo, coin): @@ -219,7 +217,7 @@ async def check_tx_fee(tx: SignTx, keychain: seed.Keychain, coin: coininfo.CoinI if not utils.BITCOIN_ONLY and coin.decred: hash143.add_locktime_expiry(tx) - return h_first, hash143, segwit, total_in, wallet_path, multisig_fp + return h_first, hash143, segwit, bip143_in, wallet_path, multisig_fp async def sign_tx(tx: SignTx, keychain: seed.Keychain): @@ -235,7 +233,7 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): h_first, hash143, segwit, - authorized_in, + authorized_bip143_in, wallet_path, multisig_fp, ) = await check_tx_fee(tx, keychain, coin) @@ -298,11 +296,11 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): txi_sign.script_type == InputScriptType.SPENDADDRESS or txi_sign.script_type == InputScriptType.SPENDMULTISIG ) - if not is_bip143 or txi_sign.amount > authorized_in: + if not is_bip143 or txi_sign.amount > authorized_bip143_in: raise SigningError( FailureType.ProcessError, "Transaction has changed during signing" ) - authorized_in -= txi_sign.amount + authorized_bip143_in -= txi_sign.amount key_sign = keychain.derive(txi_sign.address_n, coin.curve_name) key_sign_pub = key_sign.public_key() @@ -523,11 +521,11 @@ async def sign_tx(tx: SignTx, keychain: seed.Keychain): input_check_wallet_path(txi, wallet_path) input_check_multisig_fingerprint(txi, multisig_fp) - if not input_is_segwit(txi) or txi.amount > authorized_in: + if not input_is_segwit(txi) or txi.amount > authorized_bip143_in: raise SigningError( FailureType.ProcessError, "Transaction has changed during signing" ) - authorized_in -= txi.amount + authorized_bip143_in -= txi.amount key_sign = keychain.derive(txi.address_n, coin.curve_name) key_sign_pub = key_sign.public_key() @@ -762,20 +760,12 @@ def get_address_for_change( def output_is_change( - o: TxOutputType, - wallet_path: list, - segwit_in: int, - multisig_fp: multisig.MultisigFingerprint, + o: TxOutputType, wallet_path: list, multisig_fp: multisig.MultisigFingerprint, ) -> bool: if o.script_type not in helpers.CHANGE_OUTPUT_SCRIPT_TYPES: return False if o.multisig and not multisig_fp.matches(o.multisig): return False - if o.script_type in helpers.SEGWIT_OUTPUT_SCRIPT_TYPES and o.amount > segwit_in: - # if the output is segwit, make sure it doesn't spend more than what the - # segwit inputs paid. this is to prevent user being tricked into - # creating ANYONECANSPEND outputs before full segwit activation. - return False return ( wallet_path is not None and wallet_path == o.address_n[:-_BIP32_WALLET_DEPTH] From 175d708ebc019f4e9e827d7d8ee7bf8442aaaf4c Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Thu, 19 Mar 2020 17:28:50 +0100 Subject: [PATCH 39/45] legacy: Drop obsolete check for ANYONECANSPEND segwit outputs. --- legacy/firmware/signing.c | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 544cf0890..ec9ee37ff 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -68,7 +68,7 @@ static uint8_t hash_prevouts[32], hash_sequence[32], hash_outputs[32]; static uint8_t decred_hash_prefix[32]; #endif static uint8_t hash_check[32]; -static uint64_t to_spend, authorized_amount, spending, change_spend; +static uint64_t to_spend, authorized_bip143_in, spending, change_spend; static uint32_t version = 1; static uint32_t lock_time = 0; static uint32_t expiry = 0; @@ -529,7 +529,7 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, to_spend = 0; spending = 0; change_spend = 0; - authorized_amount = 0; + authorized_bip143_in = 0; memzero(&input, sizeof(TxInputType)); memzero(&resp, sizeof(TxRequest)); @@ -633,14 +633,6 @@ static bool is_segwit_input_script_type(const TxInputType *txinput) { return false; } -static bool is_segwit_output_script_type(const TxOutputType *txoutput) { - if (txoutput->script_type == OutputScriptType_PAYTOP2SHWITNESS || - txoutput->script_type == OutputScriptType_PAYTOWITNESS) { - return true; - } - return false; -} - static bool signing_validate_input(const TxInputType *txinput) { if (txinput->prev_hash.size != 32) { fsm_sendFailure(FailureType_Failure_ProcessError, @@ -851,16 +843,6 @@ static bool signing_check_output(TxOutputType *txoutput) { } else { is_change = check_change_bip32_path(txoutput); } - /* - * only allow segwit change if amount is smaller than what segwit inputs - * paid. this was added during the times segwit was not yet fully activated - * to make sure the user is not tricked to use witness change output - * instead of regular one therefore creating ANYONECANSPEND output - */ - if ((is_segwit_output_script_type(txoutput)) && - txoutput->amount > authorized_amount) { - is_change = false; - } } if (!is_change_output_script_type(txoutput)) { @@ -1176,13 +1158,13 @@ static bool signing_sign_segwit_input(TxInputType *txinput) { signing_abort(); return false; } - if (txinput->amount > authorized_amount) { + if (txinput->amount > authorized_bip143_in) { fsm_sendFailure(FailureType_Failure_DataError, _("Transaction has changed during signing")); signing_abort(); return false; } - authorized_amount -= txinput->amount; + authorized_bip143_in -= txinput->amount; signing_hash_bip143(txinput, hash); @@ -1313,7 +1295,7 @@ void signing_txack(TransactionType *tx) { return; } to_spend += tx->inputs[0].amount; - authorized_amount += tx->inputs[0].amount; + authorized_bip143_in += tx->inputs[0].amount; phase1_request_next_input(); } else #endif @@ -1347,7 +1329,7 @@ void signing_txack(TransactionType *tx) { to.is_segwit = true; #endif to_spend += tx->inputs[0].amount; - authorized_amount += tx->inputs[0].amount; + authorized_bip143_in += tx->inputs[0].amount; phase1_request_next_input(); } else { fsm_sendFailure(FailureType_Failure_DataError, @@ -1628,13 +1610,13 @@ void signing_txack(TransactionType *tx) { signing_abort(); return; } - if (tx->inputs[0].amount > authorized_amount) { + if (tx->inputs[0].amount > authorized_bip143_in) { fsm_sendFailure(FailureType_Failure_DataError, _("Transaction has changed during signing")); signing_abort(); return; } - authorized_amount -= tx->inputs[0].amount; + authorized_bip143_in -= tx->inputs[0].amount; uint8_t hash[32] = {0}; #if !BITCOIN_ONLY From ae4f927a454df7e8e3610c291035641c6bfe26c9 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Wed, 18 Mar 2020 18:06:24 +0000 Subject: [PATCH 40/45] tests: test incorrect script type --- legacy/firmware/signing.c | 2 +- tests/device_tests/test_msg_signtx.py | 49 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index ec9ee37ff..e18f7c51d 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -641,7 +641,7 @@ static bool signing_validate_input(const TxInputType *txinput) { return false; } if (txinput->has_multisig && !is_multisig_input_script_type(txinput)) { - fsm_sendFailure(FailureType_Failure_ProcessError, + fsm_sendFailure(FailureType_Failure_DataError, _("Multisig field provided but not expected.")); signing_abort(); return false; diff --git a/tests/device_tests/test_msg_signtx.py b/tests/device_tests/test_msg_signtx.py index b71730104..8dfb13123 100644 --- a/tests/device_tests/test_msg_signtx.py +++ b/tests/device_tests/test_msg_signtx.py @@ -934,3 +934,52 @@ class TestMsgSigntx: btc.sign_tx(client, "Bitcoin", [inp0], [out1], details, prev_txes=cache) name = field[0].upper() + field[1:].replace("_", " ") assert e.value.failure.message.endswith(name + " not enabled on this coin.") + + @pytest.mark.skip_ui + def test_incorrect_script_type(self, client): + address_n = parse_path("44'/1'/0'/0/0") + attacker_multisig_public_key = bytes.fromhex( + "030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0" + ) + + multisig = proto.MultisigRedeemScriptType( + m=1, + nodes=[ + btc.get_public_node(client, address_n).node, + proto.HDNodeType( + depth=0, + fingerprint=0, + child_num=0, + chain_code=bytes(32), + public_key=attacker_multisig_public_key, + ), + ], + address_n=[], + ) + inp1 = proto.TxInputType( + address_n=address_n, + prev_index=1, + sequence=0xFFFFFFFF, + script_type=proto.InputScriptType.SPENDADDRESS, + multisig=multisig, + prev_hash=TXHASH_e5040e, + ) + out1 = proto.TxOutputType( + address_n=address_n, + amount=1000000 - 50000 - 10000, + script_type=proto.OutputScriptType.PAYTOMULTISIG, + multisig=multisig, + ) + out2 = proto.TxOutputType( + address="mtkyndbpgv1G7nwggwKDVagRpxEJrwwyh6", + amount=50000, + script_type=proto.OutputScriptType.PAYTOADDRESS, + ) + + with pytest.raises(CallException) as exc: + btc.sign_tx( + client, "Testnet", [inp1], [out1, out2], prev_txes=tx_cache("Testnet") + ) + + assert exc.value.args[0] == proto.FailureType.DataError + assert exc.value.args[1].endswith("Multisig field provided but not expected.") From 6478b2705c0995bce8cd70295346b9d848d3dfc8 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Fri, 20 Mar 2020 14:30:43 +0000 Subject: [PATCH 41/45] common: regenerate support.json --- common/defs/support.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/defs/support.json b/common/defs/support.json index d4a315b7d..f141b4b1b 100644 --- a/common/defs/support.json +++ b/common/defs/support.json @@ -42,7 +42,6 @@ "bitcoin:XZC": true, "bitcoin:ZCR": true, "bitcoin:ZEC": true, - "bitcoin:ZEN": true, "bitcoin:ZNY": true, "bitcoin:tDASH": true, "bitcoin:tLTC": true, @@ -1691,7 +1690,6 @@ }, "unsupported": { "bitcoin:TRC": "address_type collides with Bitcoin", - "bitcoin:ZEN": "not implemented", "erc20:etc:PLAY": "(AUTO) duplicate key", "erc20:eth:A18:ba7d": "(AUTO) duplicate key", "erc20:eth:A18:bde8": "(AUTO) duplicate key", @@ -1970,7 +1968,6 @@ "bitcoin:ZCR": "2.1.7", "bitcoin:ZEC": "2.0.8", "bitcoin:ZEL": "2.1.4", - "bitcoin:ZEN": "2.0.8", "bitcoin:ZNY": "2.1.1", "bitcoin:tDASH": "2.0.8", "bitcoin:tGRS": "2.0.8", From aa71c20f2c262ae72820ef9c58d3f54a2d8e099d Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Tue, 24 Mar 2020 09:20:10 +0000 Subject: [PATCH 42/45] core: require hold to confirm --- core/src/apps/binance/layout.py | 10 ++++++---- core/src/apps/cardano/layout/__init__.py | 6 +++--- core/src/apps/cardano/sign_tx.py | 15 +++++---------- core/src/apps/management/reset_device/layout.py | 4 ++-- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/core/src/apps/binance/layout.py b/core/src/apps/binance/layout.py index e2a7422fd..89b430cc5 100644 --- a/core/src/apps/binance/layout.py +++ b/core/src/apps/binance/layout.py @@ -13,7 +13,7 @@ from trezor.ui.text import Text from . import helpers -from apps.common.confirm import hold_to_confirm +from apps.common.confirm import require_hold_to_confirm from apps.common.layout import split_address @@ -38,7 +38,9 @@ async def require_confirm_transfer(ctx, msg: BinanceTransferMsg): for txoutput in msg.outputs: pages.extend(make_input_output_pages(txoutput, "output")) - return await hold_to_confirm(ctx, Paginated(pages), ButtonRequestType.ConfirmOutput) + return await require_hold_to_confirm( + ctx, Paginated(pages), ButtonRequestType.ConfirmOutput + ) async def require_confirm_cancel(ctx, msg: BinanceCancelMsg): @@ -52,7 +54,7 @@ async def require_confirm_cancel(ctx, msg: BinanceCancelMsg): page2.normal("Order ID:") page2.bold(msg.refid) - return await hold_to_confirm( + return await require_hold_to_confirm( ctx, Paginated([page1, page2]), ButtonRequestType.SignTx ) @@ -77,6 +79,6 @@ async def require_confirm_order(ctx, msg: BinanceOrderMsg): page3.normal("Price:") page3.bold(format_amount(msg.price, helpers.DECIMALS)) - return await hold_to_confirm( + return await require_hold_to_confirm( ctx, Paginated([page1, page2, page3]), ButtonRequestType.SignTx ) diff --git a/core/src/apps/cardano/layout/__init__.py b/core/src/apps/cardano/layout/__init__.py index 53c2a7fb4..f5f8fae0a 100644 --- a/core/src/apps/cardano/layout/__init__.py +++ b/core/src/apps/cardano/layout/__init__.py @@ -6,7 +6,7 @@ from trezor.ui.scroll import Paginated from trezor.ui.text import Text from trezor.utils import chunks -from apps.common.confirm import confirm, hold_to_confirm +from apps.common.confirm import require_confirm, require_hold_to_confirm def format_coin_amount(amount): @@ -32,7 +32,7 @@ async def confirm_sending(ctx, amount, to): t.bold(line) pages.append(t) - return await confirm(ctx, Paginated(pages)) + await require_confirm(ctx, Paginated(pages)) async def confirm_transaction(ctx, amount, fee, network_name): @@ -46,4 +46,4 @@ async def confirm_transaction(ctx, amount, fee, network_name): t2.normal("Network:") t2.bold(network_name) - return await hold_to_confirm(ctx, Paginated([t1, t2])) + await require_hold_to_confirm(ctx, Paginated([t1, t2])) diff --git a/core/src/apps/cardano/sign_tx.py b/core/src/apps/cardano/sign_tx.py index e32eaa1a9..60dd41547 100644 --- a/core/src/apps/cardano/sign_tx.py +++ b/core/src/apps/cardano/sign_tx.py @@ -47,19 +47,15 @@ async def show_tx( network_name: str, raw_inputs: list, raw_outputs: list, -) -> bool: +) -> None: for index, output in enumerate(outputs): if is_change(raw_outputs[index].address_n, raw_inputs): continue - if not await confirm_sending(ctx, outcoins[index], output): - return False + await confirm_sending(ctx, outcoins[index], output) total_amount = sum(outcoins) - if not await confirm_transaction(ctx, total_amount, fee, network_name): - return False - - return True + await confirm_transaction(ctx, total_amount, fee, network_name) async def request_transaction(ctx, tx_req: CardanoTxRequest, index: int): @@ -114,7 +110,7 @@ async def sign_tx(ctx, msg): raise wire.ProcessError("Signing failed") # display the transaction in UI - if not await show_tx( + await show_tx( ctx, transaction.output_addresses, transaction.outgoing_coins, @@ -122,8 +118,7 @@ async def sign_tx(ctx, msg): transaction.network_name, transaction.inputs, transaction.outputs, - ): - raise wire.ActionCancelled("Signing cancelled") + ) return tx diff --git a/core/src/apps/management/reset_device/layout.py b/core/src/apps/management/reset_device/layout.py index 93aa99354..8652c1c39 100644 --- a/core/src/apps/management/reset_device/layout.py +++ b/core/src/apps/management/reset_device/layout.py @@ -11,7 +11,7 @@ from trezor.ui.num_input import NumInput from trezor.ui.scroll import Paginated from trezor.ui.text import Text -from apps.common.confirm import confirm, hold_to_confirm, require_confirm +from apps.common.confirm import confirm, require_confirm, require_hold_to_confirm from apps.common.layout import show_success if __debug__: @@ -127,7 +127,7 @@ async def _show_share_words(ctx, share_words, share_index=None, group_index=None utils.ensure(share_words == shares_words_check) # confirm the share - await hold_to_confirm(ctx, paginated, ButtonRequestType.ResetDevice) + await require_hold_to_confirm(ctx, paginated, ButtonRequestType.ResetDevice) def _split_share_into_pages(share_words): From 8ae0535e69b7d69a8a0bcc22ad8ec6857b2dc02e Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Tue, 24 Mar 2020 16:18:37 +0100 Subject: [PATCH 43/45] core/webauthn: Fix attestation statement format to use a list in the x5c field. --- core/src/apps/webauthn/fido2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/apps/webauthn/fido2.py b/core/src/apps/webauthn/fido2.py index 0948f18bd..52013618c 100644 --- a/core/src/apps/webauthn/fido2.py +++ b/core/src/apps/webauthn/fido2.py @@ -1527,7 +1527,7 @@ def cbor_make_credential_sign( attestation_statement = { "alg": common.COSE_ALG_ES256, "sig": sig, - "x5c": _U2F_ATT_CERT, + "x5c": [_U2F_ATT_CERT], } # Encode the authenticatorMakeCredential response data. From bf20537f415f26ff7ae04670a885aafb8f9eba65 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Mon, 30 Mar 2020 15:56:30 +0000 Subject: [PATCH 44/45] core: add option to omit cancel button in HoldToConfirm; add it to reset --- core/src/apps/common/confirm.py | 5 ++-- .../apps/management/reset_device/layout.py | 2 +- core/src/trezor/ui/confirm.py | 15 ++++++++--- tests/ui_tests/fixtures.json | 26 +++++++++---------- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/core/src/apps/common/confirm.py b/core/src/apps/common/confirm.py index 5602e9d12..b8ec7866c 100644 --- a/core/src/apps/common/confirm.py +++ b/core/src/apps/common/confirm.py @@ -84,6 +84,7 @@ async def hold_to_confirm( confirm: str = HoldToConfirm.DEFAULT_CONFIRM, confirm_style: ButtonStyleType = HoldToConfirm.DEFAULT_CONFIRM_STYLE, loader_style: LoaderStyleType = HoldToConfirm.DEFAULT_LOADER_STYLE, + cancel: bool = True, ) -> bool: await ctx.call(ButtonRequest(code=code), ButtonAck) @@ -93,11 +94,11 @@ async def hold_to_confirm( assert isinstance(content, Paginated) content.pages[-1] = HoldToConfirm( - content.pages[-1], confirm, confirm_style, loader_style + content.pages[-1], confirm, confirm_style, loader_style, cancel ) dialog = content # type: ui.Layout else: - dialog = HoldToConfirm(content, confirm, confirm_style, loader_style) + dialog = HoldToConfirm(content, confirm, confirm_style, loader_style, cancel) return await ctx.wait(dialog) is CONFIRMED diff --git a/core/src/apps/management/reset_device/layout.py b/core/src/apps/management/reset_device/layout.py index 8652c1c39..b341a149d 100644 --- a/core/src/apps/management/reset_device/layout.py +++ b/core/src/apps/management/reset_device/layout.py @@ -127,7 +127,7 @@ async def _show_share_words(ctx, share_words, share_index=None, group_index=None utils.ensure(share_words == shares_words_check) # confirm the share - await require_hold_to_confirm(ctx, paginated, ButtonRequestType.ResetDevice) + await require_hold_to_confirm(ctx, paginated, ButtonRequestType.ResetDevice, cancel=False) def _split_share_into_pages(share_words): diff --git a/core/src/trezor/ui/confirm.py b/core/src/trezor/ui/confirm.py index 9641f4e3e..cec522743 100644 --- a/core/src/trezor/ui/confirm.py +++ b/core/src/trezor/ui/confirm.py @@ -241,19 +241,25 @@ class HoldToConfirm(ui.Layout): confirm: str = DEFAULT_CONFIRM, confirm_style: ButtonStyleType = DEFAULT_CONFIRM_STYLE, loader_style: LoaderStyleType = DEFAULT_LOADER_STYLE, + cancel: bool = True, ): self.content = content self.loader = Loader(loader_style) self.loader.on_start = self._on_loader_start # type: ignore - self.confirm = Button(ui.grid(17, n_x=4, cells_x=3), confirm, confirm_style) + if cancel: + self.confirm = Button(ui.grid(17, n_x=4, cells_x=3), confirm, confirm_style) + else: + self.confirm = Button(ui.grid(4, n_x=1), confirm, confirm_style) self.confirm.on_press_start = self._on_press_start # type: ignore self.confirm.on_press_end = self._on_press_end # type: ignore self.confirm.on_click = self._on_click # type: ignore - self.cancel = Button(ui.grid(16, n_x=4), res.load(ui.ICON_CANCEL), ButtonAbort) - self.cancel.on_click = self.on_cancel # type: ignore + self.cancel = None + if cancel: + self.cancel = Button(ui.grid(16, n_x=4), res.load(ui.ICON_CANCEL), ButtonAbort) + self.cancel.on_click = self.on_cancel # type: ignore def _on_press_start(self) -> None: self.loader.start() @@ -278,7 +284,8 @@ class HoldToConfirm(ui.Layout): else: self.content.dispatch(event, x, y) self.confirm.dispatch(event, x, y) - self.cancel.dispatch(event, x, y) + if self.cancel: + self.cancel.dispatch(event, x, y) def on_confirm(self) -> None: raise ui.Result(CONFIRMED) diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 3316997ee..3dd644d95 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -9,9 +9,9 @@ "test_cancel.py::test_cancel_message_via_initialize[message1]": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", "test_msg_applysettings.py-test_apply_settings": "b698654871541258f97d58ada0f010b2d77b74829791566746cad619d3740a94", "test_msg_applysettings.py-test_apply_settings_passphrase": "fb38537b921f8064f7ea6e1a584e70a8be74968a3be6726b7d36cf57de0d7865", -"test_msg_backup_device.py::test_backup_bip39": "ff34ef60d2bbb92fc4e4ab00a1e4f9c2c7884e3186bb6861398f74dd3e05e3cf", -"test_msg_backup_device.py::test_backup_slip39_advanced": "edfccb742254ab1c5945c27f0c70926c2a4adb6fff4df0ed561bd58b05043034", -"test_msg_backup_device.py::test_backup_slip39_basic": "ca04ca33f05b5b0f3c762f0cad293a376e056e43a28ce94ffb77b36d491cbc1f", +"test_msg_backup_device.py::test_backup_bip39": "749f543f21fe0005ef43b00e23162cf68522d1460cee5cc77d933324e85b5ded", +"test_msg_backup_device.py::test_backup_slip39_advanced": "efb31ae0ed0565d0c044e0aeabe3d32a524e99155d50d6b72100627c68a1d472", +"test_msg_backup_device.py::test_backup_slip39_basic": "ffef65aa4bb5f265644a5df0063542c3f261f815db65914893a690760d0d0b6a", "test_msg_backup_device.py::test_interrupt_backup_fails": "225b3da1acac6e9a65106fcc4a01de8a44de035aedb4dcc21c09f439199fdf40", "test_msg_backup_device.py::test_no_backup_fails": "93039a9472cfc9058563bd56e4a3dbe2e41af64744a61f6ee3255a04bd3a9366", "test_msg_backup_device.py::test_no_backup_show_entropy_fails": "14fcdd2ded299ca099a35966cc9f21204b31de8d6bab9ec91cb64537bd70440c", @@ -219,11 +219,11 @@ "test_msg_recoverydevice_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "55f2dd6b4958659f071c3f57e06286f872ac38af4828f446a0f4e91c657dfccc", "test_msg_resetdevice_bip39_t2.py-test_already_initialized": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", "test_msg_resetdevice_bip39_t2.py-test_failed_pin": "f284b630fef6ae437c9726cd0ee0d1728a77f677f37cd5f88aabb21e596f589e", -"test_msg_resetdevice_bip39_t2.py-test_reset_device": "aaa37f33897fbdf33858a9cbb8982be1b1c1d1e2cbff83ebfd4c49fa8fc4b342", +"test_msg_resetdevice_bip39_t2.py-test_reset_device": "c5fc35eab68889c0b3315cad09afd573ce32c1e94c2cb942388638414145f631", "test_msg_resetdevice_bip39_t2.py-test_reset_device_192": "febbacc3370cf9219faa49bbc542a7aa1280d9fc3e6e9776dacbcd2f09231636", -"test_msg_resetdevice_bip39_t2.py-test_reset_device_pin": "dd95b1f1e7b496828314a4baf77f5f9f3aa54fc11754236e35f7519da9fd44c8", -"test_msg_resetdevice_slip39_advanced.py-test_reset_device_slip39_advanced": "b1ca19a20f4d2be96847c8d2373921a68c5c9bd1292790229c64f93a0319cb69", -"test_msg_resetdevice_slip39_basic.py-test_reset_device_slip39_basic": "77e9d45a9fb16a8759478ac1d433bb86ce58c01fa135bc4524596955de20552d", +"test_msg_resetdevice_bip39_t2.py-test_reset_device_pin": "e5957c6790bb3319b90da678949d09bfdd2d641d8d315ffa6b98a316cffeef0c", +"test_msg_resetdevice_slip39_advanced.py-test_reset_device_slip39_advanced": "77fae06d2427b6626debb71448e0b79c81afb99da10df9b9e987259eb045edf2", +"test_msg_resetdevice_slip39_basic.py-test_reset_device_slip39_basic": "ad0d71e21112456fa99fdbd36563aa1ccbf49343a94ca1ed74068b2ec04ebd61", "test_msg_resetdevice_slip39_basic.py-test_reset_device_slip39_basic_256": "5f21f628ada58d9b519aec96f99a087df1098825de33421ddb36777dc4f578f1", "test_msg_ripple_get_address.py-test_ripple_get_address": "2bb7d7bf48f1218530b4d7045d48480cad6411e110df537551b2f80b342007f2", "test_msg_ripple_get_address.py-test_ripple_get_address_other": "2bb7d7bf48f1218530b4d7045d48480cad6411e110df537551b2f80b342007f2", @@ -378,12 +378,12 @@ "test_passphrase_slip39_advanced.py::test_256bit_passphrase": "69b6b8b22c819e1282d7d2c14b31bf8d015c81ac05fe034540dbb11c8a20dbdb", "test_passphrase_slip39_basic.py::test_2of5_passphrase": "1e00b1a7840bc144b98b7bce26f74fc913a0abf9d1c500571d7803b6b2e0943c", "test_passphrase_slip39_basic.py::test_3of6_passphrase": "1e00b1a7840bc144b98b7bce26f74fc913a0abf9d1c500571d7803b6b2e0943c", -"test_reset_backup.py::test_skip_backup_manual[0-backup_flow_bip39]": "458d09ef5b84b80093f904e9cdd04172b2781ccc303239a077daba586781f186", -"test_reset_backup.py::test_skip_backup_manual[1-backup_flow_slip39_basic]": "ff23780ce790c0f0c53961a94f9faa00873878130cc4ddd4d0a74bebeb4fdcde", -"test_reset_backup.py::test_skip_backup_manual[2-backup_flow_slip39_advanced]": "d43f68e08d989766fd0b75403fa75aea5bf6f746383198ed0bdc55467c5595bd", -"test_reset_backup.py::test_skip_backup_msg[0-backup_flow_bip39]": "718a277f77290cfd28bf16de1fc46b4da13540015ae3d2566472906389d5a69d", -"test_reset_backup.py::test_skip_backup_msg[1-backup_flow_slip39_basic]": "34a27fe6d204808149b2de3c15c04a52f5d2335ef4a43b2468f218dc0cf20102", -"test_reset_backup.py::test_skip_backup_msg[2-backup_flow_slip39_advanced]": "25a4e8a2ca91518b481538c7c9e70e1769f1aa26c85455bfaadf33c47ae185c2", +"test_reset_backup.py::test_skip_backup_manual[0-backup_flow_bip39]": "1002b2e5c75fcd7dc8d421283e2eccb5b747a4014af274ad335b3cff7d27db9d", +"test_reset_backup.py::test_skip_backup_manual[1-backup_flow_slip39_basic]": "c37acfae2609b03bd84f9eb53b0642c73b16cf78300271fc94a6d9a311b144b9", +"test_reset_backup.py::test_skip_backup_manual[2-backup_flow_slip39_advanced]": "26d8bbbdc25f3105f60fd2367fbb765e41ebd42b8545c42fd9398b62233ec363", +"test_reset_backup.py::test_skip_backup_msg[0-backup_flow_bip39]": "6e26d95a67a27f5bb0fc2bb5eaaca01bce3a30e20391ccb5208179edb768b52e", +"test_reset_backup.py::test_skip_backup_msg[1-backup_flow_slip39_basic]": "bea2ebcb056e300f5b8f731af8ee284bf38d3cc725b79d0772fd85f7b09d32bd", +"test_reset_backup.py::test_skip_backup_msg[2-backup_flow_slip39_advanced]": "fd2001fe6960aa7c527266a4030a93bb189435703033cba7337a77c534b87e89", "test_sdcard.py::test_sd_format": "6bb7486932a5d38cdbb9b1368ee92aca3fad384115c744feadfade80c1605dd8", "test_sdcard.py::test_sd_no_format": "f47e897caee95cf98c1b4506732825f853c4b8afcdc2713e38e3b4055973c9ac", "test_sdcard.py::test_sd_protect_unlock": "621294fce5df0a5f381450647b3a45d71696cca0c46bec368a0fea675709956d", From 0b7a8449f8dd003fc415262b05102d113247d3de Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Mon, 30 Mar 2020 16:04:05 +0000 Subject: [PATCH 45/45] core: style --- core/src/apps/management/reset_device/layout.py | 4 +++- core/src/trezor/ui/confirm.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/apps/management/reset_device/layout.py b/core/src/apps/management/reset_device/layout.py index b341a149d..b6a5606e5 100644 --- a/core/src/apps/management/reset_device/layout.py +++ b/core/src/apps/management/reset_device/layout.py @@ -127,7 +127,9 @@ async def _show_share_words(ctx, share_words, share_index=None, group_index=None utils.ensure(share_words == shares_words_check) # confirm the share - await require_hold_to_confirm(ctx, paginated, ButtonRequestType.ResetDevice, cancel=False) + await require_hold_to_confirm( + ctx, paginated, ButtonRequestType.ResetDevice, cancel=False + ) def _split_share_into_pages(share_words): diff --git a/core/src/trezor/ui/confirm.py b/core/src/trezor/ui/confirm.py index cec522743..b519f7723 100644 --- a/core/src/trezor/ui/confirm.py +++ b/core/src/trezor/ui/confirm.py @@ -258,7 +258,9 @@ class HoldToConfirm(ui.Layout): self.cancel = None if cancel: - self.cancel = Button(ui.grid(16, n_x=4), res.load(ui.ICON_CANCEL), ButtonAbort) + self.cancel = Button( + ui.grid(16, n_x=4), res.load(ui.ICON_CANCEL), ButtonAbort + ) self.cancel.on_click = self.on_cancel # type: ignore def _on_press_start(self) -> None: