Add DGB, Hcash, QTUM
34
Makefile
|
@ -20,11 +20,12 @@ $(error Environment variable BOLOS_SDK is not set)
|
||||||
endif
|
endif
|
||||||
include $(BOLOS_SDK)/Makefile.defines
|
include $(BOLOS_SDK)/Makefile.defines
|
||||||
|
|
||||||
APP_LOAD_PARAMS=--appFlags 0x50 --path "" --curve secp256k1 $(COMMON_LOAD_PARAMS)
|
APP_PATH = ""
|
||||||
|
APP_LOAD_PARAMS=--appFlags 0x50 --curve secp256k1 $(COMMON_LOAD_PARAMS)
|
||||||
|
|
||||||
APPVERSION_M=1
|
APPVERSION_M=1
|
||||||
APPVERSION_N=1
|
APPVERSION_N=1
|
||||||
APPVERSION_P=16
|
APPVERSION_P=17
|
||||||
APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)
|
APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)
|
||||||
|
|
||||||
# ifndef COIN
|
# ifndef COIN
|
||||||
|
@ -35,68 +36,95 @@ ifeq ($(COIN),bitcoin_testnet)
|
||||||
# Bitcoin testnet
|
# Bitcoin testnet
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=111 BTCHIP_P2SH_VERSION=196 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOIN\" COLOR_HDR=0xFCB653 COLOR_DB=0xFEDBA9 COINID_NAME=\"Bitcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"TEST\" NATIVE_SEGWIT_PREFIX=\"tb\" COIN_BITCOIN_TESTNET HAVE_SEGWIT_CHANGE_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=111 BTCHIP_P2SH_VERSION=196 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOIN\" COLOR_HDR=0xFCB653 COLOR_DB=0xFEDBA9 COINID_NAME=\"Bitcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"TEST\" NATIVE_SEGWIT_PREFIX=\"tb\" COIN_BITCOIN_TESTNET HAVE_SEGWIT_CHANGE_SUPPORT
|
||||||
APPNAME ="Bitcoin Test"
|
APPNAME ="Bitcoin Test"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),bitcoin)
|
else ifeq ($(COIN),bitcoin)
|
||||||
# Bitcoin mainnet
|
# Bitcoin mainnet
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=0 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOIN\" COLOR_HDR=0xFCB653 COLOR_DB=0xFEDBA9 COINID_NAME=\"Bitcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BTC\" NATIVE_SEGWIT_PREFIX=\"bc\" COIN_BITCOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=0 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOIN\" COLOR_HDR=0xFCB653 COLOR_DB=0xFEDBA9 COINID_NAME=\"Bitcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BTC\" NATIVE_SEGWIT_PREFIX=\"bc\" COIN_BITCOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
||||||
APPNAME ="Bitcoin"
|
APPNAME ="Bitcoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),bitcoin_cash)
|
else ifeq ($(COIN),bitcoin_cash)
|
||||||
# Bitcoin cash
|
# Bitcoin cash
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=0 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOINCASH\" COLOR_HDR=0x85bb65 COLOR_DB=0xc2ddb2 COINID_NAME=\"BitcoinCash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BCH\" COIN_BITCOIN_CASH COIN_FORKID=0
|
DEFINES += BTCHIP_P2PKH_VERSION=0 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOINCASH\" COLOR_HDR=0x85bb65 COLOR_DB=0xc2ddb2 COINID_NAME=\"BitcoinCash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BCH\" COIN_BITCOIN_CASH COIN_FORKID=0
|
||||||
APPNAME ="Bitcoin Cash"
|
APPNAME ="Bitcoin Cash"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),bitcoin_gold)
|
else ifeq ($(COIN),bitcoin_gold)
|
||||||
# Bitcoin Gold
|
# Bitcoin Gold
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=38 BTCHIP_P2SH_VERSION=23 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\\x20Gold\" COINID_UPCASE=\"BITCOINGOLD\" COLOR_HDR=0x85bb65 COLOR_DB=0xc2ddb2 COINID_NAME=\"BitcoinGold\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BTG\" COIN_BITCOIN_GOLD HAVE_SEGWIT_CHANGE_SUPPORT COIN_FORKID=79
|
DEFINES += BTCHIP_P2PKH_VERSION=38 BTCHIP_P2SH_VERSION=23 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\\x20Gold\" COINID_UPCASE=\"BITCOINGOLD\" COLOR_HDR=0x85bb65 COLOR_DB=0xc2ddb2 COINID_NAME=\"BitcoinGold\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BTG\" COIN_BITCOIN_GOLD HAVE_SEGWIT_CHANGE_SUPPORT COIN_FORKID=79
|
||||||
APPNAME ="Bitcoin Gold"
|
APPNAME ="Bitcoin Gold"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),litecoin)
|
else ifeq ($(COIN),litecoin)
|
||||||
# Litecoin
|
# Litecoin
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=48 BTCHIP_P2SH_VERSION=50 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Litecoin\" COINID_UPCASE=\"LITECOIN\" COLOR_HDR=0xCCCCCC COLOR_DB=0xE6E6E6 COINID_NAME=\"Litecoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"LTC\" COIN_LITECOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=48 BTCHIP_P2SH_VERSION=50 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Litecoin\" COINID_UPCASE=\"LITECOIN\" COLOR_HDR=0xCCCCCC COLOR_DB=0xE6E6E6 COINID_NAME=\"Litecoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"LTC\" COIN_LITECOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
||||||
APPNAME ="Litecoin"
|
APPNAME ="Litecoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),dogecoin)
|
else ifeq ($(COIN),dogecoin)
|
||||||
# Doge
|
# Doge
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=30 BTCHIP_P2SH_VERSION=22 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Dogecoin\" COINID_UPCASE=\"DOGECOIN\" COLOR_HDR=0x65D196 COLOR_DB=0xB2E8CB COINID_NAME=\"Dogecoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"DOGE\" COIN_DOGE
|
DEFINES += BTCHIP_P2PKH_VERSION=30 BTCHIP_P2SH_VERSION=22 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Dogecoin\" COINID_UPCASE=\"DOGECOIN\" COLOR_HDR=0x65D196 COLOR_DB=0xB2E8CB COINID_NAME=\"Dogecoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"DOGE\" COIN_DOGE
|
||||||
APPNAME ="Dogecoin"
|
APPNAME ="Dogecoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),dash)
|
else ifeq ($(COIN),dash)
|
||||||
# Dash
|
# Dash
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=76 BTCHIP_P2SH_VERSION=16 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"DarkCoin\" COINID_UPCASE=\"DASH\" COLOR_HDR=0x0E76AA COLOR_DB=0x87BBD5 COINID_NAME=\"Dash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"DASH\" COIN_DASH
|
DEFINES += BTCHIP_P2PKH_VERSION=76 BTCHIP_P2SH_VERSION=16 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"DarkCoin\" COINID_UPCASE=\"DASH\" COLOR_HDR=0x0E76AA COLOR_DB=0x87BBD5 COINID_NAME=\"Dash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"DASH\" COIN_DASH
|
||||||
APPNAME ="Dash"
|
APPNAME ="Dash"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),zcash)
|
else ifeq ($(COIN),zcash)
|
||||||
# Zcash
|
# Zcash
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=7352 BTCHIP_P2SH_VERSION=7357 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Zcash\" COINID_UPCASE=\"ZCASH\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Zcash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"ZEC\" COIN_ZCASH
|
DEFINES += BTCHIP_P2PKH_VERSION=7352 BTCHIP_P2SH_VERSION=7357 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Zcash\" COINID_UPCASE=\"ZCASH\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Zcash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"ZEC\" COIN_ZCASH
|
||||||
APPNAME ="Zcash"
|
APPNAME ="Zcash"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),komodo)
|
else ifeq ($(COIN),komodo)
|
||||||
# Komodo
|
# Komodo
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=60 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Komodo\" COINID_UPCASE=\"KMD\" COLOR_HDR=0x326464 COLOR_DB=0x99b2b2 COINID_NAME=\"Komodo\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"KMD\" COIN_KOMODO
|
DEFINES += BTCHIP_P2PKH_VERSION=60 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Komodo\" COINID_UPCASE=\"KMD\" COLOR_HDR=0x326464 COLOR_DB=0x99b2b2 COINID_NAME=\"Komodo\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"KMD\" COIN_KOMODO
|
||||||
APPNAME ="Komodo"
|
APPNAME ="Komodo"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),stratis)
|
else ifeq ($(COIN),stratis)
|
||||||
# Stratis
|
# Stratis
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=63 BTCHIP_P2SH_VERSION=125 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"Stratis\" COINID_UPCASE=\"STRAT\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Stratis\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"STRAT\" COIN_STRATIS HAVE_PEERCOIN_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=63 BTCHIP_P2SH_VERSION=125 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"Stratis\" COINID_UPCASE=\"STRAT\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Stratis\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"STRAT\" COIN_STRATIS HAVE_PEERCOIN_SUPPORT
|
||||||
APPNAME ="Stratis"
|
APPNAME ="Stratis"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),peercoin)
|
else ifeq ($(COIN),peercoin)
|
||||||
# Peercoin
|
# Peercoin
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=117 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"Peercoin\" COINID_UPCASE=\"PPC\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Peercoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"PPC\" COIN_PEERCOIN HAVE_PEERCOIN_SUPPORT HAVE_PEERCOIN_UNITS
|
DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=117 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"Peercoin\" COINID_UPCASE=\"PPC\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Peercoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"PPC\" COIN_PEERCOIN HAVE_PEERCOIN_SUPPORT HAVE_PEERCOIN_UNITS
|
||||||
APPNAME ="Peercoin"
|
APPNAME ="Peercoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),posw)
|
else ifeq ($(COIN),posw)
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"PoSWallet\" COINID_UPCASE=\"POSW\" COLOR_HDR=0x23273D COLOR_DB=0x91939E COINID_NAME=\"PoSW\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"POSW\" COIN_POSW HAVE_PEERCOIN_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"PoSWallet\" COINID_UPCASE=\"POSW\" COLOR_HDR=0x23273D COLOR_DB=0x91939E COINID_NAME=\"PoSW\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"POSW\" COIN_POSW HAVE_PEERCOIN_SUPPORT
|
||||||
APPNAME ="PoSW"
|
APPNAME ="PoSW"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),pivx)
|
else ifeq ($(COIN),pivx)
|
||||||
# PivX
|
# PivX
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=30 BTCHIP_P2SH_VERSION=13 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"DarkNet\" COINID_UPCASE=\"PIVX\" COLOR_HDR=0x46385D COLOR_DB=0x9E96AA COINID_NAME=\"PivX\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"PIV\" COIN_PIVX
|
DEFINES += BTCHIP_P2PKH_VERSION=30 BTCHIP_P2SH_VERSION=13 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"DarkNet\" COINID_UPCASE=\"PIVX\" COLOR_HDR=0x46385D COLOR_DB=0x9E96AA COINID_NAME=\"PivX\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"PIV\" COIN_PIVX
|
||||||
APPNAME ="PivX"
|
APPNAME ="PivX"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),stealthcoin)
|
else ifeq ($(COIN),stealthcoin)
|
||||||
# Stealthcoin
|
# Stealthcoin
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=62 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"StealthCoin\" COINID_UPCASE=\"STEALTHCOIN\" COLOR_HDR=0x000000 COLOR_DB=0x808080 COINID_NAME=\"Stealthcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"XST\" COIN_STEALTHCOIN HAVE_PEERCOIN_SUPPORT HAVE_PEERCOIN_UNITS
|
DEFINES += BTCHIP_P2PKH_VERSION=62 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"StealthCoin\" COINID_UPCASE=\"STEALTHCOIN\" COLOR_HDR=0x000000 COLOR_DB=0x808080 COINID_NAME=\"Stealthcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"XST\" COIN_STEALTHCOIN HAVE_PEERCOIN_SUPPORT HAVE_PEERCOIN_UNITS
|
||||||
APPNAME ="Stealthcoin"
|
APPNAME ="Stealthcoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),viacoin)
|
else ifeq ($(COIN),viacoin)
|
||||||
# Viacoin
|
# Viacoin
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=71 BTCHIP_P2SH_VERSION=33 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Viacoin\" COINID_UPCASE=\"VIACOIN\" COLOR_HDR=0x414141 COLOR_DB=0xA0A0A0 COINID_NAME=\"Viacoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"VIA\" COIN_VIACOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=71 BTCHIP_P2SH_VERSION=33 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Viacoin\" COINID_UPCASE=\"VIACOIN\" COLOR_HDR=0x414141 COLOR_DB=0xA0A0A0 COINID_NAME=\"Viacoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"VIA\" COIN_VIACOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
||||||
APPNAME ="Viacoin"
|
APPNAME ="Viacoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
else ifeq ($(COIN),vertcoin)
|
else ifeq ($(COIN),vertcoin)
|
||||||
# Vertcoin
|
# Vertcoin
|
||||||
DEFINES += BTCHIP_P2PKH_VERSION=71 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Vertcoin\" COINID_UPCASE=\"VERTCOIN\" COLOR_HDR=0x1B5C2E COLOR_DB=0x8DAE97 COINID_NAME=\"Vertcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"VTC\" COIN_VERTCOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
DEFINES += BTCHIP_P2PKH_VERSION=71 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Vertcoin\" COINID_UPCASE=\"VERTCOIN\" COLOR_HDR=0x1B5C2E COLOR_DB=0x8DAE97 COINID_NAME=\"Vertcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"VTC\" COIN_VERTCOIN HAVE_SEGWIT_CHANGE_SUPPORT
|
||||||
APPNAME ="Vertcoin"
|
APPNAME ="Vertcoin"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
|
else ifeq ($(COIN),digibyte)
|
||||||
|
DEFINES += BTCHIP_P2PKH_VERSION=30 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"DigiByte\" COINID_UPCASE=\"DIGIBYTE\" COLOR_HDR=0x2864AE COLOR_DB=0x94B2D7 COINID_NAME=\"DigiByte\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"DBG\" COIN_DIGIBYTE HAVE_SEGWIT_CHANGE_SUPPORT
|
||||||
|
APPNAME ="Digibyte"
|
||||||
|
APP_LOAD_PARAMS += --path $(APP_PATH)
|
||||||
|
else ifeq ($(COIN),qtum)
|
||||||
|
# Qtum
|
||||||
|
DEFINES += BTCHIP_P2PKH_VERSION=58 BTCHIP_P2SH_VERSION=50 BTCHIP_COIN_FAMILY=3 BTCHIP_COINID=\"Qtum\" COINID_UPCASE=\"QTUM\" COLOR_HDR=0x2E9AD0 COLOR_DB=0x97CDE8 COINID_NAME=\"QTUM\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"QTUM\" COIN_QTUM HAVE_QTUM_SUPPORT
|
||||||
|
APPNAME ="Qtum"
|
||||||
|
APP_LOAD_PARAMS += --path "44'/88'" --path "0'/45342'" --path "20698'/3053'/12648430'"
|
||||||
|
else ifeq ($(COIN),hcash)
|
||||||
|
DEFINES += BTCHIP_P2PKH_VERSION=40 BTCHIP_P2SH_VERSION=100 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"HShare\" COINID_UPCASE=\"HCASH\" COLOR_HDR=0x57448D COLOR_DB=0xABA2C6 COINID_NAME=\"HCash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"HCASH\" COIN_HCASH HAVE_PEERCOIN_SUPPORT
|
||||||
else
|
else
|
||||||
ifeq ($(filter clean,$(MAKECMDGOALS)),)
|
ifeq ($(filter clean,$(MAKECMDGOALS)),)
|
||||||
$(error Unsupported COIN - use bitcoin_testnet, bitcoin, bitcoin_cash, bitcoin_gold, litecoin, dogecoin, dash, zcash, komodo, stratis, peercoin, posw, pivx, viacoin, vertcoin, stealthcoin)
|
$(error Unsupported COIN - use bitcoin_testnet, bitcoin, bitcoin_cash, bitcoin_gold, litecoin, dogecoin, dash, zcash, komodo, stratis, peercoin, posw, pivx, viacoin, vertcoin, stealthcoin, digibyte, qtum, hcash)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 408 B |
After Width: | Height: | Size: 439 B |
After Width: | Height: | Size: 590 B |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 379 B |
After Width: | Height: | Size: 445 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
|
@ -36,6 +36,9 @@ enum btchip_family_e {
|
||||||
#ifdef HAVE_PEERCOIN_SUPPORT
|
#ifdef HAVE_PEERCOIN_SUPPORT
|
||||||
BTCHIP_FAMILY_PEERCOIN = 0x02
|
BTCHIP_FAMILY_PEERCOIN = 0x02
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
BTCHIP_FAMILY_QTUM = 0x03
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct btchip_config_s {
|
struct btchip_config_s {
|
||||||
|
|
|
@ -31,6 +31,11 @@ unsigned char btchip_output_script_is_p2sh(unsigned char *buffer);
|
||||||
unsigned char btchip_output_script_is_op_return(unsigned char *buffer);
|
unsigned char btchip_output_script_is_op_return(unsigned char *buffer);
|
||||||
unsigned char btchip_output_script_is_native_witness(unsigned char *buffer);
|
unsigned char btchip_output_script_is_native_witness(unsigned char *buffer);
|
||||||
|
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
unsigned char btchip_output_script_is_op_create(unsigned char *buffer);
|
||||||
|
unsigned char btchip_output_script_is_op_call(unsigned char *buffer);
|
||||||
|
#endif
|
||||||
|
|
||||||
void btchip_sleep16(unsigned short delay);
|
void btchip_sleep16(unsigned short delay);
|
||||||
void btchip_sleep32(unsigned long int delayEach, unsigned long int delayRepeat);
|
void btchip_sleep32(unsigned long int delayEach, unsigned long int delayRepeat);
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
|
@ -55,6 +55,9 @@ static bool check_output_displayable() {
|
||||||
bool displayable = true;
|
bool displayable = true;
|
||||||
unsigned char amount[8], isOpReturn, isP2sh, isNativeSegwit, j,
|
unsigned char amount[8], isOpReturn, isP2sh, isNativeSegwit, j,
|
||||||
nullAmount = 1;
|
nullAmount = 1;
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
unsigned char isOpCreate, isOpCall;
|
||||||
|
#endif
|
||||||
for (j = 0; j < 8; j++) {
|
for (j = 0; j < 8; j++) {
|
||||||
if (btchip_context_D.currentOutput[j] != 0) {
|
if (btchip_context_D.currentOutput[j] != 0) {
|
||||||
nullAmount = 0;
|
nullAmount = 0;
|
||||||
|
@ -71,8 +74,17 @@ static bool check_output_displayable() {
|
||||||
isP2sh = btchip_output_script_is_p2sh(btchip_context_D.currentOutput + 8);
|
isP2sh = btchip_output_script_is_p2sh(btchip_context_D.currentOutput + 8);
|
||||||
isNativeSegwit = btchip_output_script_is_native_witness(
|
isNativeSegwit = btchip_output_script_is_native_witness(
|
||||||
btchip_context_D.currentOutput + 8);
|
btchip_context_D.currentOutput + 8);
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
isOpCreate =
|
||||||
|
btchip_output_script_is_op_create(btchip_context_D.currentOutput + 8);
|
||||||
|
isOpCall =
|
||||||
|
btchip_output_script_is_op_call(btchip_context_D.currentOutput + 8);
|
||||||
|
if (!btchip_output_script_is_regular(btchip_context_D.currentOutput + 8) &&
|
||||||
|
!isP2sh && !(nullAmount && isOpReturn) && !isOpCreate && !isOpCall) {
|
||||||
|
#else
|
||||||
if (!btchip_output_script_is_regular(btchip_context_D.currentOutput + 8) &&
|
if (!btchip_output_script_is_regular(btchip_context_D.currentOutput + 8) &&
|
||||||
!isP2sh && !(nullAmount && isOpReturn)) {
|
!isP2sh && !(nullAmount && isOpReturn)) {
|
||||||
|
#endif
|
||||||
PRINTF("Error : Unrecognized input script");
|
PRINTF("Error : Unrecognized input script");
|
||||||
THROW(EXCEPTION);
|
THROW(EXCEPTION);
|
||||||
}
|
}
|
||||||
|
@ -327,10 +339,14 @@ unsigned short btchip_apdu_hash_input_finalize_full_internal(
|
||||||
G_io_apdu_buffer + ISO_OFFSET_CDATA, apduLength);
|
G_io_apdu_buffer + ISO_OFFSET_CDATA, apduLength);
|
||||||
btchip_context_D.currentOutputOffset += apduLength;
|
btchip_context_D.currentOutputOffset += apduLength;
|
||||||
|
|
||||||
// Check if the legacy UI can be applied
|
// Check if the legacy UI can be applied
|
||||||
|
#ifndef HAVE_QTUM_SUPPORT
|
||||||
if ((G_io_apdu_buffer[ISO_OFFSET_P1] == FINALIZE_P1_LAST) &&
|
if ((G_io_apdu_buffer[ISO_OFFSET_P1] == FINALIZE_P1_LAST) &&
|
||||||
!btchip_context_D.tmpCtx.output.multipleOutput &&
|
!btchip_context_D.tmpCtx.output.multipleOutput &&
|
||||||
prepare_full_output(1)) {
|
prepare_full_output(1)) {
|
||||||
|
#else
|
||||||
|
if (0) {
|
||||||
|
#endif
|
||||||
btchip_context_D.io_flags |= IO_ASYNCH_REPLY;
|
btchip_context_D.io_flags |= IO_ASYNCH_REPLY;
|
||||||
btchip_context_D.outputParsingState =
|
btchip_context_D.outputParsingState =
|
||||||
BTCHIP_OUTPUT_HANDLE_LEGACY;
|
BTCHIP_OUTPUT_HANDLE_LEGACY;
|
||||||
|
|
|
@ -54,6 +54,9 @@ unsigned short btchip_apdu_set_alternate_coin_version() {
|
||||||
case BTCHIP_FAMILY_BITCOIN:
|
case BTCHIP_FAMILY_BITCOIN:
|
||||||
#ifdef HAVE_PEERCOIN_SUPPORT
|
#ifdef HAVE_PEERCOIN_SUPPORT
|
||||||
case BTCHIP_FAMILY_PEERCOIN:
|
case BTCHIP_FAMILY_PEERCOIN:
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
case BTCHIP_FAMILY_QTUM:
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -79,6 +79,22 @@ unsigned char btchip_output_script_is_op_return(unsigned char *buffer) {
|
||||||
return (buffer[1] == 0x6A);
|
return (buffer[1] == 0x6A);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
unsigned char btchip_output_script_is_op_create(unsigned char *buffer) {
|
||||||
|
return (!btchip_output_script_is_regular(buffer) &&
|
||||||
|
!btchip_output_script_is_p2sh(buffer) &&
|
||||||
|
!btchip_output_script_is_op_return(buffer) && (buffer[0] <= 0xEA) &&
|
||||||
|
(buffer[buffer[0]] == 0xC1));
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char btchip_output_script_is_op_call(unsigned char *buffer) {
|
||||||
|
return (!btchip_output_script_is_regular(buffer) &&
|
||||||
|
!btchip_output_script_is_p2sh(buffer) &&
|
||||||
|
!btchip_output_script_is_op_return(buffer) && (buffer[0] <= 0xEA) &&
|
||||||
|
(buffer[buffer[0]] == 0xC2));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned char btchip_rng_u8_modulo(unsigned char modulo) {
|
unsigned char btchip_rng_u8_modulo(unsigned char modulo) {
|
||||||
unsigned int rng_max = 256 % modulo;
|
unsigned int rng_max = 256 % modulo;
|
||||||
unsigned int rng_limit = 256 - rng_max;
|
unsigned int rng_limit = 256 - rng_max;
|
||||||
|
|
96
src/main.c
|
@ -2227,17 +2227,25 @@ uint8_t prepare_single_output() {
|
||||||
unsigned short textSize;
|
unsigned short textSize;
|
||||||
unsigned char nativeSegwit;
|
unsigned char nativeSegwit;
|
||||||
|
|
||||||
|
vars.tmp.fullAddress[0] = '\0';
|
||||||
btchip_swap_bytes(amount, btchip_context_D.currentOutput + offset, 8);
|
btchip_swap_bytes(amount, btchip_context_D.currentOutput + offset, 8);
|
||||||
offset += 8;
|
offset += 8;
|
||||||
nativeSegwit = btchip_output_script_is_native_witness(
|
nativeSegwit = btchip_output_script_is_native_witness(
|
||||||
btchip_context_D.currentOutput + offset);
|
btchip_context_D.currentOutput + offset);
|
||||||
if (btchip_output_script_is_op_return(btchip_context_D.currentOutput +
|
if (btchip_output_script_is_op_return(btchip_context_D.currentOutput +
|
||||||
offset)) {
|
offset)) {
|
||||||
os_memmove(vars.tmp.fullAddress, "OP_RETURN", 9);
|
strcpy(vars.tmp.fullAddress, "OP_RETURN");
|
||||||
vars.tmp.fullAddress[10] = '\0';
|
}
|
||||||
vars.tmp.fullAmount[0] = '\0';
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
return 1;
|
else if (btchip_output_script_is_op_create(btchip_context_D.currentOutput +
|
||||||
} else if (nativeSegwit) {
|
offset)) {
|
||||||
|
strcpy(vars.tmp.fullAddress, "OP_CREATE");
|
||||||
|
} else if (btchip_output_script_is_op_call(btchip_context_D.currentOutput +
|
||||||
|
offset)) {
|
||||||
|
strcpy(vars.tmp.fullAddress, "OP_CALL");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (nativeSegwit) {
|
||||||
addressOffset = offset + OUTPUT_SCRIPT_NATIVE_WITNESS_PROGRAM_OFFSET;
|
addressOffset = offset + OUTPUT_SCRIPT_NATIVE_WITNESS_PROGRAM_OFFSET;
|
||||||
} else if (btchip_output_script_is_regular(btchip_context_D.currentOutput +
|
} else if (btchip_output_script_is_regular(btchip_context_D.currentOutput +
|
||||||
offset)) {
|
offset)) {
|
||||||
|
@ -2247,34 +2255,36 @@ uint8_t prepare_single_output() {
|
||||||
addressOffset = offset + 3;
|
addressOffset = offset + 3;
|
||||||
version = btchip_context_D.payToScriptHashVersion;
|
version = btchip_context_D.payToScriptHashVersion;
|
||||||
}
|
}
|
||||||
if (!nativeSegwit) {
|
if (vars.tmp.fullAddress[0] == 0) {
|
||||||
if (version > 255) {
|
if (!nativeSegwit) {
|
||||||
versionSize = 2;
|
if (version > 255) {
|
||||||
address[0] = (version >> 8);
|
versionSize = 2;
|
||||||
address[1] = version;
|
address[0] = (version >> 8);
|
||||||
} else {
|
address[1] = version;
|
||||||
versionSize = 1;
|
} else {
|
||||||
address[0] = version;
|
versionSize = 1;
|
||||||
}
|
address[0] = version;
|
||||||
os_memmove(address + versionSize,
|
}
|
||||||
btchip_context_D.currentOutput + addressOffset, 20);
|
os_memmove(address + versionSize,
|
||||||
|
btchip_context_D.currentOutput + addressOffset, 20);
|
||||||
|
|
||||||
// Prepare address
|
// Prepare address
|
||||||
textSize = btchip_public_key_to_encoded_base58(
|
textSize = btchip_public_key_to_encoded_base58(
|
||||||
address, 20 + versionSize, (unsigned char *)tmp, sizeof(tmp),
|
address, 20 + versionSize, (unsigned char *)tmp, sizeof(tmp),
|
||||||
version, 1);
|
version, 1);
|
||||||
tmp[textSize] = '\0';
|
tmp[textSize] = '\0';
|
||||||
}
|
}
|
||||||
#ifdef NATIVE_SEGWIT_PREFIX
|
#ifdef NATIVE_SEGWIT_PREFIX
|
||||||
else {
|
else {
|
||||||
textSize = segwit_addr_encode(
|
textSize = segwit_addr_encode(
|
||||||
tmp, NATIVE_SEGWIT_PREFIX, 0,
|
tmp, NATIVE_SEGWIT_PREFIX, 0,
|
||||||
btchip_context_D.currentOutput + addressOffset,
|
btchip_context_D.currentOutput + addressOffset,
|
||||||
btchip_context_D.currentOutput[addressOffset - 1]);
|
btchip_context_D.currentOutput[addressOffset - 1]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
strcpy(vars.tmp.fullAddress, tmp);
|
strcpy(vars.tmp.fullAddress, tmp);
|
||||||
|
}
|
||||||
|
|
||||||
// Prepare amount
|
// Prepare amount
|
||||||
|
|
||||||
|
@ -2328,6 +2338,9 @@ uint8_t prepare_full_output(uint8_t checkOnly) {
|
||||||
unsigned char nullAmount = 1;
|
unsigned char nullAmount = 1;
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
unsigned char isOpReturn, isP2sh, isNativeSegwit;
|
unsigned char isOpReturn, isP2sh, isNativeSegwit;
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
unsigned char isOpCreate, isOpCall;
|
||||||
|
#endif
|
||||||
for (j = 0; j < 8; j++) {
|
for (j = 0; j < 8; j++) {
|
||||||
if (btchip_context_D.currentOutput[offset + j] != 0) {
|
if (btchip_context_D.currentOutput[offset + j] != 0) {
|
||||||
nullAmount = 0;
|
nullAmount = 0;
|
||||||
|
@ -2343,15 +2356,31 @@ uint8_t prepare_full_output(uint8_t checkOnly) {
|
||||||
offset);
|
offset);
|
||||||
isNativeSegwit = btchip_output_script_is_native_witness(
|
isNativeSegwit = btchip_output_script_is_native_witness(
|
||||||
btchip_context_D.currentOutput + offset);
|
btchip_context_D.currentOutput + offset);
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
isOpCreate = btchip_output_script_is_op_create(
|
||||||
|
btchip_context_D.currentOutput + offset);
|
||||||
|
isOpCall = btchip_output_script_is_op_call(
|
||||||
|
btchip_context_D.currentOutput + offset);
|
||||||
|
if (!btchip_output_script_is_regular(btchip_context_D.currentOutput +
|
||||||
|
offset) &&
|
||||||
|
!isP2sh && !(nullAmount && isOpReturn) && !isOpCreate &&
|
||||||
|
!isOpCall) {
|
||||||
|
#else
|
||||||
if (!btchip_output_script_is_regular(btchip_context_D.currentOutput +
|
if (!btchip_output_script_is_regular(btchip_context_D.currentOutput +
|
||||||
offset) &&
|
offset) &&
|
||||||
!isP2sh && !(nullAmount && isOpReturn)) {
|
!isP2sh && !(nullAmount && isOpReturn)) {
|
||||||
|
#endif
|
||||||
if (!checkOnly) {
|
if (!checkOnly) {
|
||||||
PRINTF("Error : Unrecognized input script");
|
PRINTF("Error : Unrecognized input script");
|
||||||
}
|
}
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
if (btchip_context_D.tmpCtx.output.changeInitialized && !isOpReturn &&
|
||||||
|
!isOpCreate && !isOpCall) {
|
||||||
|
#else
|
||||||
if (btchip_context_D.tmpCtx.output.changeInitialized && !isOpReturn) {
|
if (btchip_context_D.tmpCtx.output.changeInitialized && !isOpReturn) {
|
||||||
|
#endif
|
||||||
unsigned char addressOffset =
|
unsigned char addressOffset =
|
||||||
(isNativeSegwit ? OUTPUT_SCRIPT_NATIVE_WITNESS_PROGRAM_OFFSET
|
(isNativeSegwit ? OUTPUT_SCRIPT_NATIVE_WITNESS_PROGRAM_OFFSET
|
||||||
: isP2sh ? OUTPUT_SCRIPT_P2SH_PRE_LENGTH
|
: isP2sh ? OUTPUT_SCRIPT_P2SH_PRE_LENGTH
|
||||||
|
@ -2394,8 +2423,17 @@ uint8_t prepare_full_output(uint8_t checkOnly) {
|
||||||
offset = 1;
|
offset = 1;
|
||||||
btchip_context_D.tmp = (unsigned char *)tmp;
|
btchip_context_D.tmp = (unsigned char *)tmp;
|
||||||
for (i = 0; i < numberOutputs; i++) {
|
for (i = 0; i < numberOutputs; i++) {
|
||||||
|
#ifdef HAVE_QTUM_SUPPORT
|
||||||
|
if (!btchip_output_script_is_op_return(
|
||||||
|
btchip_context_D.currentOutput + offset + 8) &&
|
||||||
|
!btchip_output_script_is_op_create(
|
||||||
|
btchip_context_D.currentOutput + offset + 8) &&
|
||||||
|
!btchip_output_script_is_op_call(
|
||||||
|
btchip_context_D.currentOutput + offset + 8)) {
|
||||||
|
#else
|
||||||
if (!btchip_output_script_is_op_return(
|
if (!btchip_output_script_is_op_return(
|
||||||
btchip_context_D.currentOutput + offset + 8)) {
|
btchip_context_D.currentOutput + offset + 8)) {
|
||||||
|
#endif
|
||||||
unsigned char versionSize;
|
unsigned char versionSize;
|
||||||
int addressOffset;
|
int addressOffset;
|
||||||
unsigned char address[22];
|
unsigned char address[22];
|
||||||
|
|