From 779fae60581dec8bc147004e637e3328353fdc6f Mon Sep 17 00:00:00 2001 From: Markus Alvila Date: Thu, 5 Aug 2021 19:27:53 +0200 Subject: [PATCH] Add support for Songbird (SGB) --- Makefile | 8 ++++++-- icons/nanos_app_songbird.gif | Bin 0 -> 73 bytes icons/nanox_app_songbird.gif | Bin 0 -> 57 bytes icons/songbird.png | Bin 0 -> 10782 bytes src/chainConfig.h | 3 ++- src/main.c | 11 +++++++++-- src/tokens.c | 2 ++ src/tokens.h | 2 ++ 8 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 icons/nanos_app_songbird.gif create mode 100644 icons/nanox_app_songbird.gif create mode 100644 icons/songbird.png diff --git a/Makefile b/Makefile index 6b88b48..612610d 100755 --- a/Makefile +++ b/Makefile @@ -211,9 +211,13 @@ else ifeq ($(CHAIN),bsc) APP_LOAD_PARAMS += --path "44'/60'" DEFINES += CHAINID_UPCASE=\"BSC\" CHAINID_COINNAME=\"BNB\" CHAIN_KIND=CHAIN_KIND_BSC CHAIN_ID=56 APPNAME = "Binance Smart Chain" +else ifeq ($(CHAIN),songbird) +APP_LOAD_PARAMS += --path "44'/554'" --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"SONGBIRD\" CHAINID_COINNAME=\"SGB\" CHAIN_KIND=CHAIN_KIND_SONGBIRD CHAIN_ID=19 +APPNAME = "Songbird" else ifeq ($(filter clean,$(MAKECMDGOALS)),) -$(error Unsupported CHAIN - use ethereum, ropsten, ethereum_classic, expanse, poa, artis_sigma1, artis_tau1, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, gochain, mix, reosc, hpb, tomochain, tobalaba, dexon, volta, ewc, webchain, thundercore, flare, flare_coston, theta) +$(error Unsupported CHAIN - use ethereum, ropsten, ethereum_classic, expanse, poa, artis_sigma1, artis_tau1, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, gochain, mix, reosc, hpb, tomochain, tobalaba, dexon, volta, ewc, webchain, thundercore, flare, flare_coston, theta, bsc, songbird) endif endif @@ -384,4 +388,4 @@ include $(BOLOS_SDK)/Makefile.rules dep/%.d: %.c Makefile listvariants: - @echo VARIANTS CHAIN ethereum ropsten ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain pirl akroma atheios callisto ethersocial ether1 gochain musicoin ethergem mix ellaism reosc hpb tomochain dexon volta ewc thundercore flare flare_coston theta bsc + @echo VARIANTS CHAIN ethereum ropsten ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain pirl akroma atheios callisto ethersocial ether1 gochain musicoin ethergem mix ellaism reosc hpb tomochain dexon volta ewc thundercore flare flare_coston theta bsc songbird diff --git a/icons/nanos_app_songbird.gif b/icons/nanos_app_songbird.gif new file mode 100644 index 0000000000000000000000000000000000000000..302030bcf9cb31a05375e23f9d3967cf2725ffa8 GIT binary patch literal 73 zcmZ?wbhEHb6krfwSjfl#1pi?`@h1x-7XuT64oDOv&%h+r)4%fc*#|-m7k#Ak%c|C& Ri@h2Wnd&g_Rg@@$H2|Es8cYBH literal 0 HcmV?d00001 diff --git a/icons/nanox_app_songbird.gif b/icons/nanox_app_songbird.gif new file mode 100644 index 0000000000000000000000000000000000000000..1361a68860057a4115fa272c716b9a817c55b73d GIT binary patch literal 57 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 literal 0 HcmV?d00001 diff --git a/src/chainConfig.h b/src/chainConfig.h index a845018..8be7e9e 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -55,7 +55,8 @@ typedef enum chain_kind_e { CHAIN_KIND_THUNDERCORE, CHAIN_KIND_FLARE, CHAIN_KIND_THETA, - CHAIN_KIND_BSC + CHAIN_KIND_BSC, + CHAIN_KIND_SONGBIRD } chain_kind_t; typedef struct chain_config_s { diff --git a/src/main.c b/src/main.c index ca26b41..e93aec7 100644 --- a/src/main.c +++ b/src/main.c @@ -256,6 +256,9 @@ tokenDefinition_t *getKnownToken(uint8_t *contractAddress) { case CHAIN_KIND_BSC: numTokens = NUM_TOKENS_BSC; break; + case CHAIN_KIND_SONGBIRD: + numTokens = NUM_TOKENS_SONGBIRD; + break; } for (i = 0; i < numTokens; i++) { switch (chainConfig->kind) { @@ -351,12 +354,16 @@ tokenDefinition_t *getKnownToken(uint8_t *contractAddress) { break; case CHAIN_KIND_FLARE: currentToken = (tokenDefinition_t *) PIC(&TOKENS_FLARE[i]); - break case CHAIN_KIND_THETA : currentToken = - (tokenDefinition_t *) PIC(&TOKENS_THETA[i]); + break; + case CHAIN_KIND_THETA: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_THETA[i]); break; case CHAIN_KIND_BSC: currentToken = (tokenDefinition_t *) PIC(&TOKENS_BSC[i]); break; + case CHAIN_KIND_SONGBIRD: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_SONGBIRD[i]); + break; } if (memcmp(currentToken->address, tmpContent.txContent.destination, ADDRESS_LENGTH) == 0) { return currentToken; diff --git a/src/tokens.c b/src/tokens.c index 63667e8..880d87e 100644 --- a/src/tokens.c +++ b/src/tokens.c @@ -4568,4 +4568,6 @@ const tokenDefinition_t const TOKENS_THETA[NUM_TOKENS_THETA] = {}; const tokenDefinition_t const TOKENS_BSC[NUM_TOKENS_BSC] = {}; +const tokenDefinition_t const TOKENS_SONGBIRD[NUM_TOKENS_SONGBIRD] = {}; + #endif diff --git a/src/tokens.h b/src/tokens.h index 3573cd3..e31444f 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -97,6 +97,7 @@ static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { #define NUM_TOKENS_FLARE 0 #define NUM_TOKENS_THETA 0 #define NUM_TOKENS_BSC 0 +#define NUM_TOKENS_SONGBIRD 0 extern tokenDefinition_t const TOKENS_AKROMA[NUM_TOKENS_AKROMA]; extern tokenDefinition_t const TOKENS_ELLAISM[NUM_TOKENS_ELLAISM]; @@ -131,6 +132,7 @@ extern tokenDefinition_t const TOKENS_THUNDERCORE[NUM_TOKENS_THUNDERCORE]; extern tokenDefinition_t const TOKENS_FLARE[NUM_TOKENS_FLARE]; extern tokenDefinition_t const TOKENS_THETA[NUM_TOKENS_THETA]; extern tokenDefinition_t const TOKENS_BSC[NUM_TOKENS_BSC]; +extern tokenDefinition_t const TOKENS_SONGBIRD[NUM_TOKENS_SONGBIRD]; #endif /* HAVE_TOKENS_LIST */