Merge branch 'master' into eosc

This commit is contained in:
Michael Ira Krufky
2018-09-04 14:59:01 -04:00
committed by GitHub
18 changed files with 170 additions and 2556 deletions

View File

@@ -26,7 +26,7 @@ APP_LOAD_PARAMS= --curve secp256k1 $(COMMON_LOAD_PARAMS)
APPVERSION_M=1
APPVERSION_N=1
APPVERSION_P=3
APPVERSION_P=4
APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)
@@ -116,7 +116,7 @@ DEFINES += CHAINID_UPCASE=\"EOSCLASSIC\" CHAINID_COINNAME=\"EOSC\" CHAIN_KIND=CH
APPNAME = "EOSClassic"
else
ifeq ($(filter clean,$(MAKECMDGOALS)),)
$(error Unsupported CHAIN - use ethereum, ethereum_classic, expanse, poa, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, callisto, ethersocial, ellaism, pirl, akroma, ether1, ethergem, atheios, eosclassic)
$(error Unsupported CHAIN - use ethereum, ethereum_classic, expanse, poa, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, eosclassic)
endif
endif
@@ -205,7 +205,7 @@ delete:
include $(BOLOS_SDK)/Makefile.rules
#add dependency on custom makefile filename
dep/%.d: %.c Makefile.genericwallet
dep/%.d: %.c Makefile
listvariants:
@echo VARIANTS CHAIN ethereum ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain kusd #musicoin callisto ethersocial ellaism pirl akroma ether1 ethergem atheios eosclassic
@echo VARIANTS CHAIN ethereum ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain kusd pirl akroma # musicoin atheios callisto ethersocial ellaism ether1 ethergem eosclassic

BIN
akroma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
atheios.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 880 B

After

Width:  |  Height:  |  Size: 504 B

BIN
musicoin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 B

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
pirl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,981 +0,0 @@
/*******************************************************************************
* Ledger Blue
* (c) 2016 Ledger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
********************************************************************************/
#include "os.h"
#include "cx.h"
#include <stdbool.h>
#include "app_cx_sha3.h"
#include "ethUstream.h"
#include "ethUtils.h"
#include "uint256.h"
#include "os_io_seproxyhal.h"
#include "string.h"
unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B];
unsigned char usb_enable_request; // request to turn on USB
unsigned char uiDone; // notification to come back to the APDU event loop
unsigned int
currentUiElement; // currently displayed UI element in a set of elements
unsigned char
element_displayed; // notification of something displayed in a touch handler
// UI currently displayed
enum UI_STATE { UI_IDLE, UI_ADDRESS, UI_APPROVAL };
enum UI_STATE uiState;
void io_usb_enable(unsigned char enabled);
void os_boot(void);
unsigned int io_seproxyhal_touch_exit(bagl_element_t *e);
unsigned int io_seproxyhal_touch_tx_ok(bagl_element_t *e);
unsigned int io_seproxyhal_touch_tx_cancel(bagl_element_t *e);
unsigned int io_seproxyhal_touch_address_ok(bagl_element_t *e);
unsigned int io_seproxyhal_touch_address_cancel(bagl_element_t *e);
uint32_t set_result_get_publicKey(void);
#define MAX_BIP32_PATH 10
#define CLA 0xE0
#define INS_GET_PUBLIC_KEY 0x02
#define INS_SIGN 0x04
#define INS_ADD_SELF 0x06
#define P1_CONFIRM 0x01
#define P1_NON_CONFIRM 0x00
#define P1_FIRST 0x00
#define P1_MORE 0x80
#define OFFSET_CLA 0
#define OFFSET_INS 1
#define OFFSET_P1 2
#define OFFSET_P2 3
#define OFFSET_LC 4
#define OFFSET_CDATA 5
#define DAO_TOKENS_UNIT 16
typedef struct publicKeyContext_t {
cx_ecfp_public_key_t publicKey;
uint8_t address[41];
} publicKeyContext_t;
typedef struct transactionContext_t {
uint8_t pathLength;
uint32_t bip32Path[MAX_BIP32_PATH];
uint8_t hash[32];
} transactionContext_t;
typedef struct daosendContext_t {
uint8_t data[4 + 32 + 32];
uint32_t dataFieldPos;
uint8_t selfAddress[20];
bool selfAddressProvided;
} daosendContext_t;
char lineBuffer[50];
union {
publicKeyContext_t publicKeyContext;
transactionContext_t transactionContext;
} tmpCtx;
txContext_t txContext;
txContent_t txContent;
daosendContext_t daoContext;
app_cx_sha3_t sha3;
volatile char addressSummary[21];
volatile char address1[21];
volatile char address2[21];
volatile char fullAmount[50];
static const uint8_t const DAO_TRANSFER_ID[] = {0xa9, 0x05, 0x9c, 0xbb};
static const uint8_t const DAO_ADDRESS[] = {
0xbb, 0x9b, 0xc2, 0x44, 0xd7, 0x98, 0x12, 0x3f, 0xde, 0x78,
0x3f, 0xcc, 0x1c, 0x72, 0xd3, 0xbb, 0x8c, 0x18, 0x94, 0x13};
// blank the screen
static const bagl_element_t const bagl_ui_erase_all[] = {
{{BAGL_RECTANGLE, 0x00, 0, 60, 320, 420, 0, 0, BAGL_FILL, 0xf9f9f9,
0xf9f9f9, 0, 0},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
};
bagl_element_t const bagl_ui_address[] = {
// type id x y w h s r fill
// fg bg font icon text, out, over, touch
{{BAGL_RECTANGLE, 0x00, 0, 0, 320, 60, 0, 0, BAGL_FILL, 0x1d2028, 0x1d2028,
0, 0},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 20, 0, 320, 60, 0, 0, BAGL_FILL, 0xFFFFFF, 0x1d2028,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_MIDDLE, 0},
"TheDAO send token",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 35, 385, 120, 40, 0, 6,
BAGL_FILL, 0xcccccc, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER |
BAGL_FONT_ALIGNMENT_MIDDLE,
0},
"CANCEL",
0,
0x37ae99,
0xF9F9F9,
(bagl_element_callback_t)io_seproxyhal_touch_address_cancel,
NULL,
NULL},
{{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 165, 385, 120, 40, 0, 6,
BAGL_FILL, 0x41ccb4, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER |
BAGL_FONT_ALIGNMENT_MIDDLE,
0},
"CONFIRM",
0,
0x37ae99,
0xF9F9F9,
(bagl_element_callback_t)io_seproxyhal_touch_address_ok,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 147, 320, 32, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"Confirm address",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 280, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)addressSummary,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 310, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)address1,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 330, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)address2,
0,
0,
0,
NULL,
NULL,
NULL},
};
// UI to approve or deny the signature proposal
static const bagl_element_t const bagl_ui_approval[] = {
// type id x y w h s r fill
// fg bg font icon text, out, over, touch
{{BAGL_RECTANGLE, 0x00, 0, 0, 320, 60, 0, 0, BAGL_FILL, 0x1d2028, 0x1d2028,
0, 0},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 20, 0, 320, 60, 0, 0, BAGL_FILL, 0xFFFFFF, 0x1d2028,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_MIDDLE, 0},
"TheDAO send token",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 35, 385, 120, 40, 0, 6,
BAGL_FILL, 0xcccccc, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER |
BAGL_FONT_ALIGNMENT_MIDDLE,
0},
"CANCEL",
0,
0x37ae99,
0xF9F9F9,
(bagl_element_callback_t)io_seproxyhal_touch_tx_cancel,
NULL,
NULL},
{{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 165, 385, 120, 40, 0, 6,
BAGL_FILL, 0x41ccb4, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER |
BAGL_FONT_ALIGNMENT_MIDDLE,
0},
"CONFIRM",
0,
0x37ae99,
0xF9F9F9,
(bagl_element_callback_t)io_seproxyhal_touch_tx_ok,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 87, 320, 32, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"CONFIRM THEDAO TOKENS SEND",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 125, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)fullAmount,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 175, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)addressSummary,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 205, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)address1,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 0, 225, 320, 33, 0, 0, 0, 0x000000, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(const char *)address2,
0,
0,
0,
NULL,
NULL,
NULL},
};
// UI displayed when no signature proposal has been received
static const bagl_element_t const bagl_ui_idle[] = {
{{BAGL_RECTANGLE, 0x00, 0, 0, 320, 60, 0, 0, BAGL_FILL, 0x1d2028, 0x1d2028,
0, 0},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABEL, 0x00, 20, 0, 320, 60, 0, 0, BAGL_FILL, 0xFFFFFF, 0x1d2028,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_MIDDLE, 0},
"TheDAO send token",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 190, 215, 120, 40, 0, 6,
BAGL_FILL, 0x41ccb4, 0xF9F9F9,
BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER |
BAGL_FONT_ALIGNMENT_MIDDLE,
0},
"Exit",
0,
0x37ae99,
0xF9F9F9,
(bagl_element_callback_t)io_seproxyhal_touch_exit,
NULL,
NULL}
};
// TODO : replace with 1.2 SDK
int app_cx_ecfp_init_private_key(cx_curve_t curve, unsigned char WIDE *rawkey,
int key_len, cx_ecfp_private_key_t *key) {
key->curve = curve;
key->d_len = key_len;
if (rawkey != NULL) {
os_memmove(key->d, rawkey, key_len);
}
return key_len;
}
unsigned int io_seproxyhal_touch_exit(bagl_element_t *e) {
// Go back to the dashboard
os_sched_exit(0);
return 0; // do not redraw the widget
}
unsigned int io_seproxyhal_touch_address_ok(bagl_element_t *e) {
uint32_t tx = set_result_get_publicKey();
uiDone = 1;
G_io_apdu_buffer[tx++] = 0x90;
G_io_apdu_buffer[tx++] = 0x00;
// Send back the response, do not restart the event loop
io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx);
// Display back the original UX
uiState = UI_IDLE;
currentUiElement = 0;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
return 0; // do not redraw the widget
}
unsigned int io_seproxyhal_touch_address_cancel(bagl_element_t *e) {
uiDone = 1;
G_io_apdu_buffer[0] = 0x69;
G_io_apdu_buffer[1] = 0x85;
// Send back the response, do not restart the event loop
io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2);
// Display back the original UX
uiState = UI_IDLE;
currentUiElement = 0;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
return 0; // do not redraw the widget
}
unsigned int io_seproxyhal_touch_tx_ok(bagl_element_t *e) {
uint8_t privateKeyData[32];
uint8_t signature[100];
uint8_t signatureLength;
cx_ecfp_private_key_t privateKey;
uint32_t tx = 0;
uint8_t rLength, sLength, rOffset, sOffset;
os_perso_derive_seed_bip32(tmpCtx.transactionContext.bip32Path,
tmpCtx.transactionContext.pathLength,
privateKeyData, NULL);
app_cx_ecfp_init_private_key(CX_CURVE_256K1, privateKeyData, 32,
&privateKey);
os_memset(privateKeyData, 0, sizeof(privateKeyData));
signatureLength =
cx_ecdsa_sign(&privateKey, CX_RND_RFC6979 | CX_LAST, CX_SHA256,
tmpCtx.transactionContext.hash,
sizeof(tmpCtx.transactionContext.hash), signature);
os_memset(&privateKey, 0, sizeof(privateKey));
// Parity is present in the sequence tag in the legacy API
G_io_apdu_buffer[0] = 27 + (signature[0] & 0x01);
rLength = signature[3];
sLength = signature[4 + rLength + 1];
rOffset = (rLength == 33 ? 1 : 0);
sOffset = (sLength == 33 ? 1 : 0);
os_memmove(G_io_apdu_buffer + 1, signature + 4 + rOffset, 32);
os_memmove(G_io_apdu_buffer + 1 + 32, signature + 4 + rLength + 2 + sOffset,
32);
tx = 65;
uiDone = 1;
G_io_apdu_buffer[tx++] = 0x90;
G_io_apdu_buffer[tx++] = 0x00;
// Send back the response, do not restart the event loop
io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx);
// Display back the original UX
uiState = UI_IDLE;
currentUiElement = 0;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
return 0; // do not redraw the widget
}
unsigned int io_seproxyhal_touch_tx_cancel(bagl_element_t *e) {
uiDone = 1;
G_io_apdu_buffer[0] = 0x69;
G_io_apdu_buffer[1] = 0x85;
// Send back the response, do not restart the event loop
io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2);
// Display back the original UX
uiState = UI_IDLE;
currentUiElement = 0;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
return 0; // do not redraw the widget
}
void reset(void) {
}
unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) {
switch (channel & ~(IO_FLAGS)) {
case CHANNEL_KEYBOARD:
break;
// multiplexed io exchange over a SPI channel and TLV encapsulated protocol
case CHANNEL_SPI:
if (tx_len) {
io_seproxyhal_spi_send(G_io_apdu_buffer, tx_len);
if (channel & IO_RESET_AFTER_REPLIED) {
reset();
}
return 0; // nothing received from the master so far (it's a tx
// transaction)
} else {
return io_seproxyhal_spi_recv(G_io_apdu_buffer,
sizeof(G_io_apdu_buffer), 0);
}
default:
THROW(INVALID_PARAMETER);
}
return 0;
}
uint32_t set_result_get_publicKey() {
uint32_t tx = 0;
G_io_apdu_buffer[tx++] = 65;
os_memmove(G_io_apdu_buffer + tx, tmpCtx.publicKeyContext.publicKey.W, 65);
tx += 65;
G_io_apdu_buffer[tx++] = 40;
os_memmove(G_io_apdu_buffer + tx, tmpCtx.publicKeyContext.address, 40);
tx += 40;
return tx;
}
void convertUint256BE(uint8_t *data, uint32_t length, uint256_t *target) {
uint8_t tmp[32];
os_memset(tmp, 0, 32);
os_memmove(tmp + 32 - length, data, length);
readu256BE(tmp, target);
}
bool customProcessor(txContext_t *context) {
if (context->currentField != TX_RLP_DATA) {
return false;
}
if (context->currentFieldLength != sizeof(daoContext.data)) {
screen_printf("Invalid length for RLP_DATA\n");
THROW(EXCEPTION);
}
if (context->currentFieldPos < context->currentFieldLength) {
uint32_t copySize =
(context->commandLength <
((context->currentFieldLength - context->currentFieldPos))
? context->commandLength
: context->currentFieldLength - context->currentFieldPos);
copyTxData(context, daoContext.data + context->currentFieldPos,
copySize);
}
if (context->currentFieldPos == context->currentFieldLength) {
context->currentField++;
context->processingField = false;
}
return true;
}
void sample_main(void) {
volatile unsigned int rx = 0;
volatile unsigned int tx = 0;
volatile unsigned int flags = 0;
// DESIGN NOTE: the bootloader ignores the way APDU are fetched. The only
// goal is to retrieve APDU.
// When APDU are to be fetched from multiple IOs, like NFC+USB+BLE, make
// sure the io_event is called with a
// switch event, before the apdu is replied to the bootloader. This avoid
// APDU injection faults.
for (;;) {
volatile unsigned short sw = 0;
BEGIN_TRY {
TRY {
rx = tx;
tx = 0; // ensure no race in catch_other if io_exchange throws
// an error
rx = io_exchange(CHANNEL_APDU | flags, rx);
// no apdu received, well, reset the session, and reset the
// bootloader configuration
if (rx == 0) {
THROW(0x6982);
}
if (G_io_apdu_buffer[OFFSET_CLA] != CLA) {
THROW(0x6E00);
}
switch (G_io_apdu_buffer[OFFSET_INS]) {
case INS_GET_PUBLIC_KEY: {
uint8_t privateKeyData[32];
uint32_t bip32Path[MAX_BIP32_PATH];
uint32_t i;
uint8_t bip32PathLength = G_io_apdu_buffer[OFFSET_CDATA];
uint8_t p1 = G_io_apdu_buffer[OFFSET_P1];
uint8_t *dataBuffer = G_io_apdu_buffer + OFFSET_CDATA + 1;
cx_ecfp_private_key_t privateKey;
if ((bip32PathLength < 0x01) ||
(bip32PathLength > MAX_BIP32_PATH)) {
screen_printf("Invalid path\n");
THROW(0x6a80);
}
if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) {
THROW(0x6B00);
}
if (G_io_apdu_buffer[OFFSET_P2] != 0) {
THROW(0x6B00);
}
for (i = 0; i < bip32PathLength; i++) {
bip32Path[i] = (dataBuffer[0] << 24) |
(dataBuffer[1] << 16) |
(dataBuffer[2] << 8) | (dataBuffer[3]);
dataBuffer += 4;
}
os_perso_derive_seed_bip32(bip32Path, bip32PathLength,
privateKeyData, NULL);
app_cx_ecfp_init_private_key(CX_CURVE_256K1, privateKeyData,
32, &privateKey);
cx_ecfp_generate_pair(CX_CURVE_256K1,
&tmpCtx.publicKeyContext.publicKey,
&privateKey, 1);
os_memset(&privateKey, 0, sizeof(privateKey));
os_memset(privateKeyData, 0, sizeof(privateKeyData));
getEthAddressStringFromKey(
&tmpCtx.publicKeyContext.publicKey,
tmpCtx.publicKeyContext.address, &sha3);
if (p1 == P1_NON_CONFIRM) {
tx = set_result_get_publicKey();
THROW(0x9000);
} else {
os_memmove((unsigned char *)addressSummary,
tmpCtx.publicKeyContext.address, 5);
os_memmove((unsigned char *)(addressSummary + 5),
" ... ", 5);
os_memmove((unsigned char *)(addressSummary + 10),
tmpCtx.publicKeyContext.address + 40 - 5, 5);
addressSummary[15] = '\0';
os_memmove((unsigned char *)address1,
tmpCtx.publicKeyContext.address, 20);
address1[20] = '\0';
os_memmove((unsigned char *)address2,
tmpCtx.publicKeyContext.address + 20, 20);
address2[20] = '\0';
uiState = UI_ADDRESS;
currentUiElement = 0;
uiDone = 0;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
// Pump SPI events until the UI has been displayed, then
// go
// back to the original event loop
while (!uiDone) {
unsigned int rx_len;
rx_len = io_seproxyhal_spi_recv(
G_io_seproxyhal_spi_buffer,
sizeof(G_io_seproxyhal_spi_buffer), 0);
if (io_seproxyhal_handle_event()) {
io_seproxyhal_general_status();
continue;
}
io_event(CHANNEL_SPI);
}
continue;
}
}
break;
case INS_ADD_SELF: {
uint8_t privateKeyData[32];
uint32_t bip32Path[MAX_BIP32_PATH];
uint32_t i;
uint8_t bip32PathLength = G_io_apdu_buffer[OFFSET_CDATA];
uint8_t *dataBuffer = G_io_apdu_buffer + OFFSET_CDATA + 1;
cx_ecfp_private_key_t privateKey;
if ((bip32PathLength < 0x01) ||
(bip32PathLength > MAX_BIP32_PATH)) {
screen_printf("Invalid path\n");
THROW(0x6a80);
}
if ((G_io_apdu_buffer[OFFSET_P1] != 0) ||
(G_io_apdu_buffer[OFFSET_P2] != 0)) {
THROW(0x6B00);
}
for (i = 0; i < bip32PathLength; i++) {
bip32Path[i] = (dataBuffer[0] << 24) |
(dataBuffer[1] << 16) |
(dataBuffer[2] << 8) | (dataBuffer[3]);
dataBuffer += 4;
}
os_perso_derive_seed_bip32(bip32Path, bip32PathLength,
privateKeyData, NULL);
app_cx_ecfp_init_private_key(CX_CURVE_256K1, privateKeyData,
32, &privateKey);
cx_ecfp_generate_pair(CX_CURVE_256K1,
&tmpCtx.publicKeyContext.publicKey,
&privateKey, 1);
os_memset(&privateKey, 0, sizeof(privateKey));
os_memset(privateKeyData, 0, sizeof(privateKeyData));
getEthAddressFromKey(&tmpCtx.publicKeyContext.publicKey,
daoContext.selfAddress, &sha3);
daoContext.selfAddressProvided = true;
THROW(0x9000);
} break;
case INS_SIGN: {
uint8_t commandLength = G_io_apdu_buffer[OFFSET_LC];
uint8_t *workBuffer = G_io_apdu_buffer + OFFSET_CDATA;
parserStatus_e txResult;
uint256_t uint256;
uint32_t i;
uint8_t address[41];
if (G_io_apdu_buffer[OFFSET_P1] == P1_FIRST) {
tmpCtx.transactionContext.pathLength = workBuffer[0];
if ((tmpCtx.transactionContext.pathLength < 0x01) ||
(tmpCtx.transactionContext.pathLength >
MAX_BIP32_PATH)) {
screen_printf("Invalid path\n");
THROW(0x6a80);
}
workBuffer++;
commandLength--;
for (i = 0; i < tmpCtx.transactionContext.pathLength;
i++) {
tmpCtx.transactionContext.bip32Path[i] =
(workBuffer[0] << 24) | (workBuffer[1] << 16) |
(workBuffer[2] << 8) | (workBuffer[3]);
workBuffer += 4;
commandLength -= 4;
}
initTx(&txContext, &sha3, &txContent, customProcessor,
NULL);
} else if (G_io_apdu_buffer[OFFSET_P1] != P1_MORE) {
THROW(0x6B00);
}
if (G_io_apdu_buffer[OFFSET_P2] != 0) {
THROW(0x6B00);
}
if (txContext.currentField == TX_RLP_NONE) {
screen_printf("Parser not initialized\n");
THROW(0x6985);
}
txResult = processTx(&txContext, workBuffer, commandLength);
switch (txResult) {
case USTREAM_FINISHED:
break;
case USTREAM_PROCESSING:
THROW(0x9000);
case USTREAM_FAULT:
THROW(0x6A80);
default:
screen_printf("Unexpected parser status\n");
THROW(0x6A80);
}
// Store the hash
app_cx_hash((cx_hash_t *)&sha3, CX_LAST,
tmpCtx.transactionContext.hash, 0,
tmpCtx.transactionContext.hash);
// Abort if not sending to the DAO
if (os_memcmp(txContent.destination, DAO_ADDRESS, 20) !=
0) {
screen_printf("Invalid target address\n");
THROW(0x6A80);
}
// Abort if sending an amount
if (txContent.value.length != 0) {
screen_printf("Invalid amount\n");
THROW(0x6A80);
}
// Abort if not calling the transfer function
if (os_memcmp(daoContext.data, DAO_TRANSFER_ID, 4) != 0) {
screen_printf("Invalid contract call ID\n");
THROW(0x6A80);
}
if (daoContext.selfAddressProvided &&
os_memcmp(daoContext.selfAddress,
daoContext.data + 4 + 12, 20) == 0) {
os_memmove((unsigned char *)addressSummary, "Self", 5);
address1[0] = '\0';
address2[0] = '\0';
} else {
// Add address
getEthAddressStringFromBinary(daoContext.data + 4 + 12,
address, &sha3);
os_memmove((unsigned char *)addressSummary, address, 5);
os_memmove((unsigned char *)(addressSummary + 5),
" ... ", 5);
os_memmove((unsigned char *)(addressSummary + 10),
address + 40 - 5, 5);
addressSummary[15] = '\0';
os_memmove((unsigned char *)address1, address, 20);
address1[20] = '\0';
os_memmove((unsigned char *)address2, address + 20, 20);
address2[20] = '\0';
}
// Add token amount
convertUint256BE(daoContext.data + 4 + 32, 32, &uint256);
tostring256(&uint256, 10, (char *)(G_io_apdu_buffer + 100),
100);
i = 0;
while (G_io_apdu_buffer[100 + i]) {
i++;
}
adjustDecimals((char *)(G_io_apdu_buffer + 100), i,
(char *)G_io_apdu_buffer, 100,
DAO_TOKENS_UNIT);
i = 0;
fullAmount[0] = 'D';
fullAmount[1] = 'A';
fullAmount[2] = 'O';
fullAmount[3] = ' ';
while (G_io_apdu_buffer[i]) {
fullAmount[4 + i] = G_io_apdu_buffer[i];
i++;
}
fullAmount[4 + i] = '\0';
uiState = UI_APPROVAL;
currentUiElement = 0;
uiDone = 0;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
// Pump SPI events until the UI has been displayed, then go
// back to the original event loop
while (!uiDone) {
unsigned int rx_len;
rx_len = io_seproxyhal_spi_recv(
G_io_seproxyhal_spi_buffer,
sizeof(G_io_seproxyhal_spi_buffer), 0);
if (io_seproxyhal_handle_event()) {
io_seproxyhal_general_status();
continue;
}
io_event(CHANNEL_SPI);
}
continue;
} break;
case 0xFF: // return to dashboard
goto return_to_dashboard;
default:
THROW(0x6D00);
break;
}
}
CATCH_OTHER(e) {
switch (e & 0xF000) {
case 0x6000:
// Wipe the transaction context and report the exception
sw = e;
os_memset(&txContext, 0, sizeof(txContext));
break;
case 0x9000:
// All is well
sw = e;
break;
default:
// Internal error
sw = 0x6800 | (e & 0x7FF);
break;
}
// Unexpected exception => report
G_io_apdu_buffer[tx] = sw >> 8;
G_io_apdu_buffer[tx + 1] = sw;
tx += 2;
}
FINALLY {
}
}
END_TRY;
}
return_to_dashboard:
return;
}
void io_seproxyhal_display(const bagl_element_t *element) {
element_displayed = 1;
return io_seproxyhal_display_default((bagl_element_t *)element);
}
unsigned char io_event(unsigned char channel) {
// nothing done with the event, throw an error on the transport layer if
// needed
unsigned int offset = 0;
// can't have more than one tag in the reply, not supported yet.
switch (G_io_seproxyhal_spi_buffer[0]) {
case SEPROXYHAL_TAG_FINGER_EVENT: {
bagl_element_t *elements = NULL;
unsigned int elementsSize = 0;
if (uiState == UI_IDLE) {
elements = (bagl_element_t *)bagl_ui_idle;
elementsSize = sizeof(bagl_ui_idle) / sizeof(bagl_element_t);
} else if (uiState == UI_ADDRESS) {
elements = (bagl_element_t *)bagl_ui_address;
elementsSize = sizeof(bagl_ui_address) / sizeof(bagl_element_t);
} else if (uiState == UI_APPROVAL) {
elements = (bagl_element_t *)bagl_ui_approval;
elementsSize = sizeof(bagl_ui_approval) / sizeof(bagl_element_t);
}
if (elements != NULL) {
io_seproxyhal_touch(elements, elementsSize,
(G_io_seproxyhal_spi_buffer[4] << 8) |
(G_io_seproxyhal_spi_buffer[5] & 0xFF),
(G_io_seproxyhal_spi_buffer[6] << 8) |
(G_io_seproxyhal_spi_buffer[7] & 0xFF),
G_io_seproxyhal_spi_buffer[3]);
if (!element_displayed) {
goto general_status;
}
} else {
goto general_status;
}
} break;
#ifdef HAVE_BLE
// Make automatically discoverable again when disconnected
case SEPROXYHAL_TAG_BLE_CONNECTION_EVENT:
if (G_io_seproxyhal_spi_buffer[3] == 0) {
// TODO : cleaner reset sequence
// first disable BLE before turning it off
G_io_seproxyhal_spi_buffer[0] = SEPROXYHAL_TAG_BLE_RADIO_POWER;
G_io_seproxyhal_spi_buffer[1] = 0;
G_io_seproxyhal_spi_buffer[2] = 1;
G_io_seproxyhal_spi_buffer[3] = 0;
io_seproxyhal_spi_send(G_io_seproxyhal_spi_buffer, 4);
// send BLE power on (default parameters)
G_io_seproxyhal_spi_buffer[0] = SEPROXYHAL_TAG_BLE_RADIO_POWER;
G_io_seproxyhal_spi_buffer[1] = 0;
G_io_seproxyhal_spi_buffer[2] = 1;
G_io_seproxyhal_spi_buffer[3] = 3; // ble on & advertise
io_seproxyhal_spi_send(G_io_seproxyhal_spi_buffer, 5);
}
goto general_status;
#endif
case SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT:
if (uiState == UI_IDLE) {
if (currentUiElement <
(sizeof(bagl_ui_idle) / sizeof(bagl_element_t))) {
io_seproxyhal_display(&bagl_ui_idle[currentUiElement++]);
break;
}
} else if (uiState == UI_ADDRESS) {
if (currentUiElement <
(sizeof(bagl_ui_address) / sizeof(bagl_element_t))) {
io_seproxyhal_display(&bagl_ui_address[currentUiElement++]);
break;
}
} else if (uiState == UI_APPROVAL) {
if (currentUiElement <
(sizeof(bagl_ui_approval) / sizeof(bagl_element_t))) {
io_seproxyhal_display(&bagl_ui_approval[currentUiElement++]);
break;
}
} else {
screen_printf("Unknown UI state\n");
}
if (usb_enable_request) {
io_usb_enable(1);
usb_enable_request = 0;
}
goto general_status;
// unknown events are acknowledged
default:
general_status:
// send a general status last command
offset = 0;
G_io_seproxyhal_spi_buffer[offset++] = SEPROXYHAL_TAG_GENERAL_STATUS;
G_io_seproxyhal_spi_buffer[offset++] = 0;
G_io_seproxyhal_spi_buffer[offset++] = 2;
G_io_seproxyhal_spi_buffer[offset++] =
SEPROXYHAL_TAG_GENERAL_STATUS_LAST_COMMAND >> 8;
G_io_seproxyhal_spi_buffer[offset++] =
SEPROXYHAL_TAG_GENERAL_STATUS_LAST_COMMAND;
io_seproxyhal_spi_send(G_io_seproxyhal_spi_buffer, offset);
element_displayed = 0;
break;
}
// command has been processed, DO NOT reset the current APDU transport
return 1;
}
__attribute__((section(".boot"))) int main(void) {
// exit critical section
__asm volatile("cpsie i");
usb_enable_request = 0;
element_displayed = 0;
uiState = UI_IDLE;
currentUiElement = 0;
os_memset(&txContext, 0, sizeof(txContext));
// ensure exception will work as planned
os_boot();
BEGIN_TRY {
TRY {
io_seproxyhal_init();
#ifdef HAVE_BLE
// send BLE power on (default parameters)
G_io_seproxyhal_spi_buffer[0] = SEPROXYHAL_TAG_BLE_RADIO_POWER;
G_io_seproxyhal_spi_buffer[1] = 0;
G_io_seproxyhal_spi_buffer[2] = 1;
G_io_seproxyhal_spi_buffer[3] = 3; // ble on & advertise
io_seproxyhal_spi_send(G_io_seproxyhal_spi_buffer, 4);
#endif
usb_enable_request = 1;
io_seproxyhal_display(&bagl_ui_erase_all[0]);
sample_main();
}
CATCH_OTHER(e) {
}
FINALLY {
}
}
END_TRY;
}

View File

@@ -125,6 +125,7 @@ union {
} dataContext;
volatile uint8_t dataAllowed;
volatile uint8_t contractDetails;
volatile char addressSummary[32];
volatile bool dataPresent;
volatile bool tokenProvisioned;
@@ -138,6 +139,7 @@ unsigned int ux_step_count;
typedef struct internalStorage_t {
unsigned char dataAllowed;
unsigned char contractDetails;
uint8_t initialized;
} internalStorage_t;
@@ -259,6 +261,7 @@ const ux_menu_entry_t menu_main[];
const ux_menu_entry_t menu_settings[];
//const ux_menu_entry_t menu_settings_browser[];
const ux_menu_entry_t menu_settings_data[];
const ux_menu_entry_t menu_settings_details[];
#ifdef HAVE_U2F
@@ -270,20 +273,39 @@ void menu_settings_data_change(unsigned int enabled) {
UX_MENU_DISPLAY(0, menu_settings, NULL);
}
void menu_settings_details_change(unsigned int enabled) {
contractDetails = enabled;
nvm_write(&N_storage.contractDetails, (void*)&contractDetails, sizeof(uint8_t));
// go back to the menu entry
UX_MENU_DISPLAY(0, menu_settings, NULL);
}
// show the currently activated entry
void menu_settings_data_init(unsigned int ignored) {
UNUSED(ignored);
UX_MENU_DISPLAY(N_storage.dataAllowed?1:0, menu_settings_data, NULL);
}
void menu_settings_details_init(unsigned int ignored) {
UNUSED(ignored);
UX_MENU_DISPLAY(N_storage.contractDetails?1:0, menu_settings_details, NULL);
}
const ux_menu_entry_t menu_settings_data[] = {
{NULL, menu_settings_data_change, 0, NULL, "No", NULL, 0, 0},
{NULL, menu_settings_data_change, 1, NULL, "Yes", NULL, 0, 0},
UX_MENU_END
};
const ux_menu_entry_t menu_settings_details[] = {
{NULL, menu_settings_details_change, 0, NULL, "No", NULL, 0, 0},
{NULL, menu_settings_details_change, 1, NULL, "Yes", NULL, 0, 0},
UX_MENU_END
};
const ux_menu_entry_t menu_settings[] = {
{NULL, menu_settings_data_init, 0, NULL, "Contract data", NULL, 0, 0},
{NULL, menu_settings_details_init, 0, NULL, "Display data", NULL, 0, 0},
{menu_main, NULL, 1, &C_icon_back, "Back", NULL, 61, 40},
UX_MENU_END
};
@@ -319,6 +341,19 @@ const bagl_element_t * ui_settings_blue_toggle_data(const bagl_element_t * e) {
return 0;
}
const bagl_element_t * ui_settings_blue_toggle_details(const bagl_element_t * e) {
// swap setting and request redraw of settings elements
uint8_t setting = N_storage.contractDetails?0:1;
nvm_write(&N_storage.contractDetails, (void*)&setting, sizeof(uint8_t));
// only refresh settings mutable drawn elements
UX_REDISPLAY_IDX(7);
// won't redisplay the bagl_none
return 0;
}
// don't perform any draw/color change upon finger event over settings
const bagl_element_t* ui_settings_out_over(const bagl_element_t* e) {
return NULL;
@@ -348,6 +383,13 @@ const bagl_element_t ui_settings_blue[] = {
{{BAGL_LABELINE , 0x00, 30, 126, 260, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX, 0 }, "Allow contract data in transactions", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_NONE | BAGL_FLAG_TOUCHABLE , 0x00, 0, 78, 320, 68, 0, 0, BAGL_FILL, 0xFFFFFF, 0x000000, 0 , 0 }, NULL, 0, 0xEEEEEE, 0x000000, ui_settings_blue_toggle_data, ui_settings_out_over, ui_settings_out_over },
{{BAGL_RECTANGLE, 0x00, 30, 146, 260, 1, 1, 0, 0, 0xEEEEEE, COLOR_BG_1, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x00, 30, 174, 160, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0}, "Display data", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x00, 30, 195, 260, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX, 0}, "Display contract data details", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_NONE | BAGL_FLAG_TOUCHABLE, 0x00, 0, 147, 320, 68, 0, 0, BAGL_FILL, 0xFFFFFF, 0x000000, 0, 0}, NULL, 0, 0xEEEEEE, 0x000000, ui_settings_blue_toggle_details, ui_settings_out_over, ui_settings_out_over},
{{BAGL_ICON, 0x02, 258, 167, 32, 18, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON , 0x01, 258, 98, 32, 18, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, 0, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL},
};
@@ -369,6 +411,15 @@ const bagl_element_t * ui_settings_blue_prepro(const bagl_element_t * e) {
tmp_element.text = &C_icon_toggle_reset;
}
break;
case 0x02:
// swap icon content
if (N_storage.contractDetails) {
tmp_element.text = &C_icon_toggle_set;
}
else {
tmp_element.text = &C_icon_toggle_reset;
}
break;
}
}
return &tmp_element;
@@ -549,6 +600,10 @@ const bagl_element_t ui_approval_blue[] = {
{{BAGL_NONE | BAGL_FLAG_TOUCHABLE , 0x00, 0, 266, 320, 48, 0, 9, BAGL_FILL, 0xFFFFFF, 0x000000, 0 , 0 }, NULL, 0, 0xEEEEEE, 0x000000, ui_approval_blue_3_details, ui_menu_item_out_over, ui_menu_item_out_over },
{{BAGL_RECTANGLE , 0x22, 0, 266, 5, 48, 0, 0, BAGL_FILL, COLOR_BG_1, COLOR_BG_1, 0 , 0 }, NULL, 0, 0x41CCB4, 0, NULL, NULL, NULL },
{{BAGL_RECTANGLE, 0x90, 30, 314, 260, 1, 1, 0, 0, 0xEEEEEE, COLOR_BG_1, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x90, 30, 343, 120, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0}, "CONTRACT DATA", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x90, 133, 343, 140, 30, 0, 0, BAGL_FILL, 0x666666, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX | BAGL_FONT_ALIGNMENT_RIGHT, 0}, "Present", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON, 0x90, 278, 333, 12, 12, 0, 0, BAGL_FILL, 0, COLOR_BG_1, 0, 0}, &C_icon_warning, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 40, 414, 115, 36, 0,18, BAGL_FILL, 0xCCCCCC, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "REJECT", 0, 0xB7B7B7, COLOR_BG_1, ui_approval_blue_cancel_callback, NULL, NULL},
{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 165, 414, 115, 36, 0,18, BAGL_FILL, 0x41ccb4, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "CONFIRM", 0, 0x3ab7a2, COLOR_BG_1, ui_approval_blue_ok_callback, NULL, NULL},
@@ -619,6 +674,9 @@ const bagl_element_t* ui_approval_blue_prepro(const bagl_element_t* element) {
// horizontal delimiter
case 0x30:
return ui_approval_blue_details_name[G_ui_approval_blue_state][element->component.userid&0xF]!=NULL?&tmp_element:NULL;
case 0x90:
return (dataPresent && !N_storage.contractDetails);
}
}
return &tmp_element;
@@ -722,14 +780,17 @@ const bagl_element_t ui_approval_nanos[] = {
{{BAGL_LABELINE , 0x01, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Confirm", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x01, 0, 26, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "transaction", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x02, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Amount", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x02, 23, 26, 82, 12, 0x80|10, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 26 }, (char*)strings.common.fullAmount, 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE, 0x02, 0, 12, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "WARNING", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x02, 23, 26, 82, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "Data present", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE , 0x03, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Address", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x03, 23, 26, 82, 12, 0x80|10, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 50 }, (char*)strings.common.fullAddress, 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x03, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Amount", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x03, 23, 26, 82, 12, 0x80|10, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 26 }, (char*)strings.common.fullAmount, 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x04, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Maximum fees", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x04, 23, 26, 82, 12, 0x80|10, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 26 }, (char*)strings.common.maxFee, 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x04, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Address", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x04, 23, 26, 82, 12, 0x80|10, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 50 }, (char*)strings.common.fullAddress, 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x05, 0, 12, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Maximum fees", 0, 0, 0, NULL, NULL, NULL },
{{BAGL_LABELINE , 0x05, 23, 26, 82, 12, 0x80|10, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, 26 }, (char*)strings.common.maxFee, 0, 0, 0, NULL, NULL, NULL },
};
@@ -743,7 +804,13 @@ unsigned int ui_approval_prepro(const bagl_element_t* element) {
UX_CALLBACK_SET_INTERVAL(2000);
break;
case 2:
UX_CALLBACK_SET_INTERVAL(MAX(3000, 1000+bagl_label_roundtrip_duration_ms(element, 7)));
if (dataPresent && !N_storage.contractDetails) {
UX_CALLBACK_SET_INTERVAL(3000);
}
else {
display = 0;
ux_step++; // display the next step
}
break;
case 3:
UX_CALLBACK_SET_INTERVAL(MAX(3000, 1000+bagl_label_roundtrip_duration_ms(element, 7)));
@@ -751,6 +818,9 @@ unsigned int ui_approval_prepro(const bagl_element_t* element) {
case 4:
UX_CALLBACK_SET_INTERVAL(MAX(3000, 1000+bagl_label_roundtrip_duration_ms(element, 7)));
break;
case 5:
UX_CALLBACK_SET_INTERVAL(MAX(3000, 1000+bagl_label_roundtrip_duration_ms(element, 7)));
break;
}
}
}
@@ -843,75 +913,14 @@ unsigned int ui_data_selector_blue_button(unsigned int button_mask, unsigned int
const bagl_element_t ui_data_selector_nanos[] = {
// type userid x y w h str rad
// fill fg bg fid iid txt touchparams... ]
{{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF,
0, 0},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CHECK}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x01, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "Confirm", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x01, 0, 26, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "selector", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0,
BAGL_GLYPH_ICON_CROSS},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0,
BAGL_GLYPH_ICON_CHECK},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
//{{BAGL_ICON , 0x01, 31, 9, 14, 14, 0, 0, 0
//, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_EYE_BADGE }, NULL, 0, 0, 0,
//NULL, NULL, NULL },
{{BAGL_LABELINE, 0x01, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"Confirm",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x01, 0, 26, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"selector",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x02, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"Selector",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x02, 23, 26, 82, 12, 0x80 | 10, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 26},
(char *)strings.tmp.tmp,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x02, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "Selector", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x02, 23, 26, 82, 12, 0x80 | 10, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 26}, (char *)strings.tmp.tmp, 0, 0, 0, NULL, NULL, NULL},
};
unsigned int ui_data_selector_prepro(const bagl_element_t *element) {
@@ -1011,75 +1020,16 @@ unsigned int ui_data_parameter_blue_button(unsigned int button_mask, unsigned in
const bagl_element_t ui_data_parameter_nanos[] = {
// type userid x y w h str rad
// fill fg bg fid iid txt touchparams... ]
{{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF,
0, 0},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0,
BAGL_GLYPH_ICON_CROSS},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0,
BAGL_GLYPH_ICON_CHECK},
NULL,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS}, NULL, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CHECK}, NULL, 0, 0, 0, NULL, NULL, NULL},
//{{BAGL_ICON , 0x01, 31, 9, 14, 14, 0, 0, 0
//, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_EYE_BADGE }, NULL, 0, 0, 0,
//NULL, NULL, NULL },
{{BAGL_LABELINE, 0x01, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"Confirm",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x01, 0, 26, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0},
"parameter",
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x01, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "Confirm", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x01, 0, 26, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, "parameter", 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x02, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0},
(char*)strings.tmp.tmp2,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x02, 23, 26, 82, 12, 0x80 | 10, 0, 0, 0xFFFFFF, 0x000000,
BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 26},
(char *)strings.tmp.tmp,
0,
0,
0,
NULL,
NULL,
NULL},
{{BAGL_LABELINE, 0x02, 0, 12, 128, 12, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, (char*)strings.tmp.tmp2, 0, 0, 0, NULL, NULL, NULL},
{{BAGL_LABELINE, 0x02, 23, 26, 82, 12, 0x80 | 10, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 26}, (char *)strings.tmp.tmp, 0, 0, 0, NULL, NULL, NULL},
};
unsigned int ui_data_parameter_prepro(const bagl_element_t *element) {
@@ -1636,7 +1586,7 @@ customStatus_e customProcessor(txContext_t *context) {
dataPresent = true;
// If handling a new contract rather than a function call, abort immediately
if (tmpContent.txContent.destinationLength == 0) {
return CUSTOM_HANDLED;
return CUSTOM_NOT_HANDLED;
}
if (context->currentFieldPos == 0) {
// If handling the beginning of the data field, assume that the function selector is present
@@ -1677,6 +1627,9 @@ customStatus_e customProcessor(txContext_t *context) {
PRINTF("Data field forbidden\n");
return CUSTOM_FAULT;
}
if (!N_storage.contractDetails) {
return CUSTOM_NOT_HANDLED;
}
dataContext.rawDataContext.fieldIndex = 0;
dataContext.rawDataContext.fieldOffset = 0;
blockSize = 4;
@@ -1931,7 +1884,7 @@ void finalizeParsing(bool direct) {
ui_approval_transaction_blue_init();
#elif defined(TARGET_NANOS)
ux_step = 0;
ux_step_count = 4;
ux_step_count = 5;
UX_DISPLAY(ui_approval_nanos, ui_approval_prepro);
#endif // #if TARGET_ID
}
@@ -2358,10 +2311,12 @@ __attribute__((section(".boot"))) int main(int arg0) {
if (N_storage.initialized != 0x01) {
internalStorage_t storage;
storage.dataAllowed = 0x00;
storage.contractDetails = 0x00;
storage.initialized = 0x01;
nvm_write(&N_storage, (void*)&storage, sizeof(internalStorage_t));
}
dataAllowed = N_storage.dataAllowed;
contractDetails = N_storage.contractDetails;
USB_power(0);
USB_power(1);

View File

@@ -22,12 +22,15 @@ const tokenDefinition_t const TOKENS_AKROMA[NUM_TOKENS_AKROMA] = {};
const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x4E,0x84,0xE9,0xe5,0xfb,0x0A,0x97,0x26,0x28,0xCf,0x45,0x68,0xc4,0x03,0x16,0x7E,0xF1,0xD4,0x04,0x31}, "$FFC ", 18},
{{0xa0,0x24,0xe8,0x05,0x7e,0xec,0x47,0x4a,0x9b,0x23,0x56,0x83,0x37,0x07,0xdd,0x05,0x79,0xe2,0x6e,0xf3}, "$FYX ", 18},
{{0xcd,0xb7,0xec,0xfd,0x34,0x03,0xee,0xf3,0x88,0x2c,0x65,0xb7,0x61,0xef,0x9b,0x50,0x54,0x89,0x0a,0x47}, "$HUR ", 18},
{{0x0d,0xb8,0xd8,0xb7,0x6b,0xc3,0x61,0xba,0xcb,0xb7,0x2e,0x2c,0x49,0x1e,0x06,0x08,0x5a,0x97,0xab,0x31}, "$IQN ", 18},
{{0x7d,0xd7,0xf5,0x6d,0x69,0x7c,0xc0,0xf2,0xb5,0x2b,0xd5,0x5c,0x05,0x7f,0x37,0x8f,0x1f,0xe6,0xab,0x4b}, "$TEAK ", 18},
{{0xB6,0xeD,0x76,0x44,0xC6,0x94,0x16,0xd6,0x7B,0x52,0x2e,0x20,0xbC,0x29,0x4A,0x9a,0x9B,0x40,0x5B,0x31}, "0xBTC ", 8},
{{0xAf,0x30,0xD2,0xa7,0xE9,0x0d,0x7D,0xC3,0x61,0xc8,0xC4,0x58,0x5e,0x9B,0xB7,0xD2,0xF6,0xf1,0x5b,0xc7}, "1ST ", 18},
{{0xfd,0xbc,0x1a,0xdc,0x26,0xf0,0xf8,0xf8,0x60,0x6a,0x5d,0x63,0xb7,0xd3,0xa3,0xcd,0x21,0xc2,0x2b,0x23}, "1WO ", 8},
{{0x9f,0xC0,0x58,0x32,0x20,0xeB,0x44,0xfA,0xeE,0x9e,0x2d,0xc1,0xE6,0x3F,0x39,0x20,0x4D,0xDD,0x90,0x90}, "2DC ", 18},
{{0xaE,0xc9,0x8A,0x70,0x88,0x10,0x41,0x48,0x78,0xc3,0xBC,0xDF,0x46,0xAa,0xd3,0x1d,0xEd,0x4a,0x45,0x57}, "300 ", 18},
{{0x43,0x02,0x41,0x36,0x8c,0x1D,0x29,0x3f,0xdA,0x21,0xDB,0xa8,0xBb,0x7a,0xF3,0x20,0x07,0xc5,0x91,0x09}, "3LT ", 8},
{{0xBD,0xe8,0xf7,0x82,0x0b,0x55,0x44,0xa4,0x9D,0x34,0xF9,0xdD,0xea,0xCA,0xbE,0xDC,0x7C,0x0B,0x5a,0xdc}, "A18 ", 0},
{{0xb9,0x8d,0x4c,0x97,0x42,0x5d,0x99,0x08,0xe6,0x6e,0x53,0xa6,0xfd,0xf6,0x73,0xac,0xca,0x0b,0xe9,0x86}, "ABT ", 18},
{{0x0e,0x8d,0x6b,0x47,0x1e,0x33,0x2f,0x14,0x0e,0x7d,0x9d,0xbb,0x99,0xe5,0xe3,0x82,0x2f,0x72,0x8d,0xa6}, "ABYSS ", 18},
@@ -43,11 +46,13 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x4C,0xEd,0xA7,0x90,0x6a,0x5E,0xd2,0x17,0x97,0x85,0xCd,0x3A,0x40,0xA6,0x9e,0xe8,0xbc,0x99,0xC4,0x66}, "AION ", 8},
{{0x27,0xdc,0xe1,0xec,0x4d,0x3f,0x72,0xc3,0xe4,0x57,0xcc,0x50,0x35,0x4f,0x1f,0x97,0x5d,0xde,0xf4,0x88}, "AIR ", 8},
{{0x10,0x63,0xce,0x52,0x42,0x65,0xd5,0xa3,0xA6,0x24,0xf4,0x91,0x4a,0xcd,0x57,0x3d,0xD8,0x9c,0xe9,0x88}, "AIX ", 18},
{{0x1c,0xa4,0x3a,0x17,0x0b,0xad,0x61,0x93,0x22,0xe6,0xf5,0x4d,0x46,0xb5,0x7e,0x50,0x4d,0xb6,0x63,0xaa}, "AKC ", 18},
{{0x18,0x1a,0x63,0x74,0x6d,0x3a,0xdc,0xf3,0x56,0xcb,0xc7,0x3a,0xce,0x22,0x83,0x2f,0xfb,0xb1,0xee,0x5a}, "ALCO ", 8},
{{0xEA,0x61,0x0B,0x11,0x53,0x47,0x77,0x20,0x74,0x8D,0xC1,0x3E,0xD3,0x78,0x00,0x39,0x41,0xd8,0x4f,0xAB}, "ALIS ", 18},
{{0x63,0x8a,0xc1,0x49,0xea,0x8e,0xf9,0xa1,0x28,0x6c,0x41,0xb9,0x77,0x01,0x7a,0xa7,0x35,0x9e,0x6c,0xfa}, "ALTS ", 18},
{{0x4d,0xc3,0x64,0x3d,0xbc,0x64,0x2b,0x72,0xc1,0x58,0xe7,0xf3,0xd2,0xff,0x23,0x2d,0xf6,0x1c,0xb6,0xce}, "AMB ", 18},
{{0x94,0x9b,0xed,0x88,0x6c,0x73,0x9f,0x1a,0x32,0x73,0x62,0x9b,0x33,0x20,0xdb,0x0c,0x50,0x24,0xc7,0x19}, "AMIS ", 9},
{{0xca,0x0e,0x72,0x69,0x60,0x0d,0x35,0x3f,0x70,0xb1,0x4a,0xd1,0x18,0xa4,0x95,0x75,0x45,0x5c,0x0f,0x2f}, "AMLT ", 18},
{{0x73,0x7f,0x98,0xac,0x8c,0xa5,0x9f,0x2c,0x68,0xad,0x65,0x8e,0x3c,0x3d,0x8c,0x89,0x63,0xe4,0x0a,0x4c}, "AMN ", 18},
{{0x38,0xc8,0x7a,0xa8,0x9b,0x2b,0x8c,0xd9,0xb9,0x5b,0x73,0x6e,0x1f,0xa7,0xb6,0x12,0xea,0x97,0x21,0x69}, "AMO ", 18},
{{0x84,0x93,0x6c,0xF7,0x63,0x0A,0xA3,0xe2,0x7D,0xd9,0xAf,0xF9,0x68,0xb1,0x40,0xd5,0xAE,0xE4,0x9F,0x5a}, "AMTC ", 8},
@@ -72,7 +77,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xeD,0x24,0x79,0x80,0x39,0x6B,0x10,0x16,0x9B,0xB1,0xd3,0x6f,0x6e,0x27,0x8e,0xD1,0x67,0x00,0xa6,0x0f}, "AVA ", 4},
{{0x0d,0x88,0xed,0x6e,0x74,0xbb,0xfd,0x96,0xb8,0x31,0x23,0x16,0x38,0xb6,0x6c,0x05,0x57,0x1e,0x82,0x4f}, "AVT ", 18},
{{0xcd,0x4b,0x4b,0x0f,0x32,0x84,0xa3,0x3a,0xc4,0x9c,0x67,0x96,0x1e,0xc6,0xe1,0x11,0x70,0x83,0x18,0xcf}, "AX1 ", 5},
{{0x9a,0xf2,0xc6,0xB1,0xA2,0x8D,0x3d,0x6B,0xC0,0x84,0xbd,0x26,0x7F,0x70,0xe9,0x0d,0x49,0x74,0x1D,0x5B}, "AXP ", 8},
{{0xC3,0x9E,0x62,0x6A,0x04,0xC5,0x97,0x1D,0x77,0x0e,0x31,0x97,0x60,0xD7,0x92,0x65,0x02,0x97,0x5e,0x47}, "AXPR ", 18},
{{0xf8,0x7f,0x0d,0x91,0x53,0xfe,0xa5,0x49,0xc7,0x28,0xad,0x61,0xcb,0x80,0x15,0x95,0xa6,0x8b,0x73,0xde}, "BANX ", 18},
{{0x0D,0x87,0x75,0xF6,0x48,0x43,0x06,0x79,0xA7,0x09,0xE9,0x8d,0x2b,0x0C,0xb6,0x25,0x0d,0x28,0x87,0xEF}, "BAT ", 18},
{{0x4a,0x60,0x58,0x66,0x6c,0xf1,0x05,0x7e,0xaC,0x3C,0xD3,0xA5,0xa6,0x14,0x62,0x05,0x47,0x55,0x9f,0xc9}, "BBK ", 18},
@@ -87,6 +92,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x74,0xC1,0xE4,0xb8,0xca,0xE5,0x92,0x69,0xec,0x1D,0x85,0xD3,0xD4,0xF3,0x24,0x39,0x60,0x48,0xF4,0xac}, "BeerCoin ", 0},
{{0x6a,0xeb,0x95,0xf0,0x6c,0xda,0x84,0xca,0x34,0x5c,0x2d,0xe0,0xf3,0xb7,0xf9,0x69,0x23,0xa4,0x4f,0x4c}, "BERRY ", 14},
{{0x8a,0xA3,0x3A,0x78,0x99,0xFC,0xC8,0xeA,0x5f,0xBe,0x6A,0x60,0x8A,0x10,0x9c,0x38,0x93,0xA1,0xB8,0xb2}, "BET ", 18},
{{0x14,0xC9,0x26,0xF2,0x29,0x00,0x44,0xB6,0x47,0xe1,0xBf,0x20,0x72,0xe6,0x7B,0x49,0x5e,0xff,0x19,0x05}, "BETHER ", 18},
{{0x76,0x31,0x86,0xeb,0x8d,0x48,0x56,0xd5,0x36,0xed,0x44,0x78,0x30,0x29,0x71,0x21,0x4f,0xeb,0xc6,0xa9}, "BETR ", 18},
{{0xb2,0xbf,0xeb,0x70,0xb9,0x03,0xf1,0xba,0xac,0x7f,0x2b,0xa2,0xc6,0x29,0x34,0xc7,0xe5,0xb9,0x74,0xc4}, "BKB ", 8},
{{0x3c,0xf9,0xe0,0xc3,0x85,0xa5,0xab,0xec,0x9f,0xd2,0xa7,0x17,0x90,0xaa,0x34,0x4c,0x4e,0x8e,0x35,0x70}, "BKRx ", 18},
@@ -107,8 +113,9 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xCc,0x34,0x36,0x6E,0x38,0x42,0xcA,0x1B,0xD3,0x6c,0x1f,0x32,0x4d,0x15,0x25,0x79,0x60,0xfC,0xC8,0x01}, "BON ", 18},
{{0x7f,0x1e,0x2c,0x7d,0x6a,0x69,0xbf,0x34,0x82,0x4d,0x72,0xc5,0x3b,0x45,0x50,0xe8,0x95,0xc0,0xd8,0xc2}, "BOP ", 8},
{{0xC2,0xC6,0x3F,0x23,0xec,0x5E,0x97,0xef,0xbD,0x75,0x65,0xdF,0x9E,0xc7,0x64,0xFD,0xc7,0xd4,0xe9,0x1d}, "BOU ", 18},
{{0xe1,0xA1,0x78,0xB6,0x81,0xBD,0x05,0x96,0x4d,0x3e,0x3E,0xd3,0x3A,0xE7,0x31,0x57,0x7d,0x9d,0x96,0xdD}, "BOX ", 18},
{{0x32,0x76,0x82,0x77,0x9b,0xAB,0x2B,0xF4,0xd1,0x33,0x7e,0x89,0x74,0xab,0x9d,0xE8,0x27,0x5A,0x7C,0xa8}, "BPT ", 18},
{{0x5A,0xf2,0xBe,0x19,0x3a,0x6A,0xBC,0xa9,0xc8,0x81,0x70,0x01,0xF4,0x57,0x44,0x77,0x7D,0xb3,0x07,0x56}, "BQX ", 8},
{{0x5A,0xf2,0xBe,0x19,0x3a,0x6A,0xBC,0xa9,0xc8,0x81,0x70,0x01,0xF4,0x57,0x44,0x77,0x7D,0xb3,0x07,0x56}, "ETHOS ", 8},
{{0x9E,0x77,0xD5,0xa1,0x25,0x1b,0x6F,0x7D,0x45,0x67,0x22,0xA6,0xea,0xC6,0xD2,0xd5,0x98,0x0b,0xd8,0x91}, "BRAT ", 8},
{{0x55,0x8e,0xc3,0x15,0x2e,0x2e,0xb2,0x17,0x49,0x05,0xcd,0x19,0xae,0xa4,0xe3,0x4a,0x23,0xde,0x9a,0xd6}, "BRD ", 18},
{{0xf2,0x6e,0xf5,0xe0,0x54,0x53,0x84,0xb7,0xdc,0xc0,0xf2,0x97,0xf2,0x67,0x41,0x89,0x58,0x68,0x30,0xdf}, "BSDC ", 18},
@@ -117,7 +124,6 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x5a,0xcD,0x19,0xb9,0xc9,0x1e,0x59,0x6b,0x1f,0x06,0x2f,0x18,0xe3,0xD0,0x2d,0xa7,0xeD,0x8D,0x1e,0x50}, "BTCL ", 8},
{{0x73,0xdd,0x06,0x9c,0x29,0x9a,0x5d,0x69,0x1e,0x98,0x36,0x24,0x3b,0xca,0xec,0x9c,0x8c,0x1d,0x87,0x34}, "BTE ", 8},
{{0xfa,0xd5,0x72,0xdb,0x56,0x6e,0x52,0x34,0xac,0x9f,0xc3,0xd5,0x70,0xc4,0xed,0xc0,0x05,0x0e,0xaa,0x92}, "BTH ", 18},
{{0x14,0xC9,0x26,0xF2,0x29,0x00,0x44,0xB6,0x47,0xe1,0xBf,0x20,0x72,0xe6,0x7B,0x49,0x5e,0xff,0x19,0x05}, "BETHER ", 18},
{{0xdb,0x86,0x46,0xf5,0xb4,0x87,0xb5,0xdd,0x97,0x9f,0xac,0x61,0x83,0x50,0xe8,0x50,0x18,0xf5,0x57,0xd4}, "BTK ", 18},
{{0x2a,0xcc,0xaB,0x9c,0xb7,0xa4,0x8c,0x3E,0x82,0x28,0x6F,0x0b,0x2f,0x87,0x98,0xD2,0x01,0xF4,0xeC,0x3f}, "Battle ", 18},
{{0x92,0x68,0x5E,0x93,0x95,0x65,0x37,0xc2,0x5B,0xb7,0x5D,0x5d,0x47,0xfc,0xa4,0x26,0x6d,0xd6,0x28,0xB8}, "Bitlle ", 4},
@@ -125,12 +131,14 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x16,0xB0,0xE6,0x2a,0xC1,0x3a,0x2f,0xAe,0xD3,0x6D,0x18,0xbc,0xe2,0x35,0x6d,0x25,0xAb,0x3C,0xfA,0xD3}, "BTQ ", 18},
{{0x08,0x0a,0xa0,0x7e,0x2c,0x71,0x85,0x15,0x0d,0x7e,0x4d,0xa9,0x88,0x38,0xa8,0xd2,0xfe,0xac,0x3d,0xfc}, "Bit eth ", 0},
{{0xFA,0x45,0x6C,0xf5,0x52,0x50,0xA8,0x39,0x08,0x8b,0x27,0xEE,0x32,0xA4,0x24,0xd7,0xDA,0xcB,0x54,0xFf}, "BlkTrade ", 18},
{{0xE5,0xf8,0x67,0xdE,0x1E,0xA8,0x13,0x46,0xdf,0x51,0x81,0xb8,0xb4,0x8D,0xD6,0xB0,0xBB,0x33,0x57,0xB0}, "BTZ ", 18},
{{0xca,0x3c,0x18,0xa6,0x5b,0x80,0x2e,0xc2,0x67,0xf8,0xf4,0x80,0x25,0x45,0xe7,0xf5,0x3d,0x24,0xc7,0x5e}, "BUC ", 18},
{{0x26,0xE7,0x53,0x07,0xFc,0x0C,0x02,0x14,0x72,0xfE,0xb8,0xF7,0x27,0x83,0x95,0x31,0xF1,0x12,0xf3,0x17}, "C20 ", 18},
{{0xd4,0x2d,0xeb,0xE4,0xeD,0xc9,0x2B,0xd5,0xa3,0xFB,0xb4,0x24,0x3e,0x1e,0xcC,0xf6,0xd6,0x3A,0x4A,0x5d}, "C8 ", 18},
{{0x7d,0x4b,0x8C,0xce,0x05,0x91,0xC9,0x04,0x4a,0x22,0xee,0x54,0x35,0x33,0xb7,0x2E,0x97,0x6E,0x36,0xC3}, "CAG ", 18},
{{0x1d,0x46,0x24,0x14,0xfe,0x14,0xcf,0x48,0x9c,0x7A,0x21,0xCa,0xC7,0x85,0x09,0xf4,0xbF,0x8C,0xD7,0xc0}, "CAN ", 6},
{{0x42,0x3e,0x43,0x22,0xcd,0xda,0x29,0x15,0x6b,0x49,0xa1,0x7d,0xfb,0xd2,0xac,0xc4,0xb2,0x80,0x60,0x0d}, "CAR ", 9},
{{0x4d,0x9e,0x23,0xa3,0x84,0x2f,0xe7,0xeb,0x76,0x82,0xb9,0x72,0x5c,0xf6,0xc5,0x07,0xc4,0x24,0xa4,0x1b}, "Carblock ", 18},
{{0xa5,0x17,0xa4,0x6b,0xaa,0xd6,0xb0,0x54,0xa7,0x6b,0xd1,0x9c,0x46,0x84,0x4f,0x71,0x7f,0xe6,0x9f,0xea}, "CARB ", 8},
{{0xB0,0x7e,0xc2,0xc2,0x88,0x34,0xB8,0x89,0xb1,0xCE,0x52,0x7C,0xa0,0xF1,0x93,0x64,0xcD,0x38,0x93,0x5c}, "CARD ", 18},
{{0xbf,0x18,0xf2,0x46,0xb9,0x30,0x1f,0x23,0x1e,0x95,0x61,0xb3,0x5a,0x38,0x79,0x76,0x9b,0xb4,0x63,0x75}, "CARE ", 18},
@@ -149,6 +157,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x6f,0xFF,0x38,0x06,0xBb,0xac,0x52,0xA2,0x0e,0x0d,0x79,0xBC,0x53,0x8d,0x52,0x7f,0x6a,0x22,0xc9,0x6b}, "CDX Net ", 18},
{{0xb0,0x56,0xc3,0x8f,0x6b,0x7d,0xc4,0x06,0x43,0x67,0x40,0x3e,0x26,0x42,0x4c,0xd2,0xc6,0x06,0x55,0xe1}, "CEEK ", 18},
{{0xf6,0x60,0xca,0x1e,0x22,0x8e,0x7b,0xe1,0xfa,0x8b,0x4f,0x55,0x83,0x14,0x5e,0x31,0x14,0x7f,0xb5,0x77}, "CET ", 18},
{{0x5d,0xff,0x89,0xa2,0xca,0xa4,0xd7,0x6b,0xc2,0x86,0xf7,0x4d,0x67,0xbd,0x71,0x8e,0xb8,0x34,0xda,0x61}, "CFC ", 18},
{{0x12,0xFE,0xF5,0xe5,0x7b,0xF4,0x58,0x73,0xCd,0x9B,0x62,0xE9,0xDB,0xd7,0xBF,0xb9,0x9e,0x32,0xD7,0x3e}, "CFI ", 18},
{{0x69,0x56,0x98,0x3f,0x8b,0x3c,0xe1,0x73,0xb4,0xab,0x84,0x36,0x1a,0xa0,0xad,0x52,0xf3,0x8d,0x93,0x6f}, "CFTY ", 8},
{{0xba,0x9d,0x41,0x99,0xfa,0xb4,0xf2,0x6e,0xfe,0x35,0x51,0xd4,0x90,0xe3,0x82,0x14,0x86,0xf1,0x35,0xba}, "CHSB ", 8},
@@ -177,6 +186,8 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xAe,0xf3,0x8f,0xBF,0xBF,0x93,0x2D,0x1A,0xeF,0x3B,0x80,0x8B,0xc8,0xfB,0xd8,0xCd,0x8E,0x1f,0x8B,0xC5}, "CRB ", 8},
{{0x67,0x2a,0x1A,0xD4,0xf6,0x67,0xFB,0x18,0xA3,0x33,0xAf,0x13,0x66,0x7a,0xa0,0xAf,0x1F,0x5b,0x5b,0xDD}, "CRED ", 18},
{{0x4e,0x06,0x03,0xe2,0xa2,0x7a,0x30,0x48,0x0e,0x5e,0x3a,0x4f,0xe5,0x48,0xe2,0x9e,0xf1,0x2f,0x64,0xbe}, "CREDO ", 18},
{{0xf4,0x9c,0xdd,0x50,0xad,0x40,0x8d,0x38,0x7d,0x61,0x1f,0x88,0xa6,0x47,0x17,0x9c,0x3d,0xe3,0x49,0x2b}, "CRGO ", 18},
{{0x92,0x38,0xbf,0xb7,0x81,0xa5,0x5e,0xac,0xc3,0xcf,0x05,0xf7,0xdf,0x94,0x03,0x8c,0x19,0x8c,0xd9,0xb9}, "CRMT ", 8},
{{0x80,0xa7,0xe0,0x48,0xf3,0x7a,0x50,0x50,0x03,0x51,0xc2,0x04,0xcb,0x40,0x77,0x66,0xfa,0x3b,0xae,0x7f}, "CRPT ", 18},
{{0xF0,0xda,0x11,0x86,0xa4,0x97,0x72,0x26,0xb9,0x13,0x5d,0x06,0x13,0xee,0x72,0xe2,0x29,0xEC,0x3F,0x4d}, "CRT ", 18},
{{0xE4,0xc9,0x4d,0x45,0xf7,0xAe,0xf7,0x01,0x8a,0x5D,0x66,0xf4,0x4a,0xF7,0x80,0xec,0x60,0x23,0x37,0x8e}, "CrCarbon ", 6},
@@ -186,10 +197,12 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xbf,0x4c,0xfd,0x7d,0x1e,0xde,0xee,0xa5,0xf6,0x60,0x08,0x27,0x41,0x1b,0x41,0xa2,0x1e,0xb0,0x8a,0xbd}, "CTL ", 2},
{{0xE3,0xFa,0x17,0x7A,0xce,0xcf,0xB8,0x67,0x21,0xCf,0x6f,0x9f,0x42,0x06,0xbd,0x3B,0xd6,0x72,0xD7,0xd5}, "CTT ", 18},
{{0x66,0x2a,0xBc,0xAd,0x0b,0x7f,0x34,0x5A,0xB7,0xFf,0xB1,0xb1,0xfb,0xb9,0xDf,0x78,0x94,0xf1,0x8e,0x66}, "CTX ", 18},
{{0x05,0xc3,0x61,0x7c,0xbf,0x13,0x04,0xb9,0x26,0x0a,0xa6,0x1e,0xc9,0x60,0xf1,0x15,0xd6,0x7b,0xec,0xea}, "Cubrix ", 18},
{{0xdA,0x6c,0xb5,0x8A,0x0D,0x0C,0x01,0x61,0x0a,0x29,0xc5,0xA6,0x5c,0x30,0x3e,0x13,0xe8,0x85,0x88,0x7C}, "cV ", 18},
{{0x41,0xe5,0x56,0x00,0x54,0x82,0x4e,0xa6,0xb0,0x73,0x2e,0x65,0x6e,0x3a,0xd6,0x4e,0x20,0xe9,0x4e,0x45}, "CVC ", 8},
{{0x21,0x34,0x05,0x7c,0x0b,0x46,0x1f,0x89,0x8d,0x37,0x5c,0xea,0xd6,0x52,0xac,0xae,0x62,0xb5,0x95,0x41}, "CXC ", 18},
{{0xb6,0xEE,0x96,0x68,0x77,0x1a,0x79,0xbe,0x79,0x67,0xee,0x29,0xa6,0x3D,0x41,0x84,0xF8,0x09,0x71,0x43}, "CXO ", 18},
{{0x3f,0x06,0xB5,0xD7,0x84,0x06,0xcD,0x97,0xbd,0xf1,0x0f,0x5C,0x42,0x0B,0x24,0x1D,0x32,0x75,0x9c,0x80}, "CYFM ", 18},
{{0xda,0xb0,0xC3,0x1B,0xF3,0x4C,0x89,0x7F,0xb0,0xFe,0x90,0xD1,0x2E,0xC9,0x40,0x1c,0xaf,0x5c,0x36,0xEc}, "DAB ", 0},
{{0xfb,0x2f,0x26,0xf2,0x66,0xfb,0x28,0x05,0xa3,0x87,0x23,0x0f,0x2a,0xa0,0xa3,0x31,0xb4,0xd9,0x6f,0xba}, "DADI ", 18},
{{0x89,0xd2,0x4A,0x6b,0x4C,0xcB,0x1B,0x6f,0xAA,0x26,0x25,0xfE,0x56,0x2b,0xDD,0x9a,0x23,0x26,0x03,0x59}, "DAI ", 18},
@@ -199,20 +212,24 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x81,0xc9,0x15,0x1d,0xe0,0xc8,0xba,0xfc,0xd3,0x25,0xa5,0x7e,0x3d,0xb5,0xa5,0xdf,0x1c,0xeb,0xf7,0x9c}, "DAT ", 18},
{{0x1b,0x5f,0x21,0xee,0x98,0xee,0xd4,0x8d,0x29,0x2e,0x8e,0x2d,0x3e,0xd8,0x2b,0x40,0xa9,0x72,0x8a,0x22}, "DATABrkr ", 18},
{{0x0c,0xf0,0xee,0x63,0x78,0x8a,0x08,0x49,0xfe,0x52,0x97,0xf3,0x40,0x7f,0x70,0x1e,0x12,0x2c,0xc0,0x23}, "DATACoin ", 18},
{{0x61,0x72,0x5f,0x3d,0xb4,0x00,0x4a,0xfe,0x01,0x47,0x45,0xb2,0x1d,0xab,0x1e,0x16,0x77,0xcc,0x32,0x8b}, "DAXT ", 18},
{{0xd8,0x2D,0xf0,0xAB,0xD3,0xf5,0x14,0x25,0xEb,0x15,0xef,0x75,0x80,0xfD,0xA5,0x57,0x27,0x87,0x5f,0x14}, "DAV ", 18},
{{0x61,0x72,0x5f,0x3d,0xb4,0x00,0x4a,0xfe,0x01,0x47,0x45,0xb2,0x1d,0xab,0x1e,0x16,0x77,0xcc,0x32,0x8b}, "DAXT ", 18},
{{0x38,0x6F,0xaa,0x47,0x03,0xa3,0x4a,0x7F,0xdb,0x19,0xBe,0xc2,0xe1,0x4F,0xd4,0x27,0xC9,0x63,0x84,0x16}, "DCA ", 18},
{{0xff,0xa9,0x3a,0xac,0xf4,0x92,0x97,0xd5,0x1e,0x21,0x18,0x17,0x45,0x28,0x39,0x05,0x2f,0xdf,0xb9,0x61}, "DCC ", 18},
{{0x39,0x9A,0x0e,0x6F,0xbE,0xb3,0xd7,0x4c,0x85,0x35,0x74,0x39,0xf4,0xc8,0xAe,0xD9,0x67,0x8a,0x5c,0xbF}, "DCL ", 3},
{{0x08,0xd3,0x2b,0x0d,0xa6,0x3e,0x2C,0x3b,0xcF,0x80,0x19,0xc9,0xc5,0xd8,0x49,0xd7,0xa9,0xd7,0x91,0xe6}, "DCN ", 0},
{{0xcC,0x4e,0xF9,0xEE,0xAF,0x65,0x6a,0xC1,0xa2,0xAb,0x88,0x67,0x43,0xE9,0x8e,0x97,0xE0,0x90,0xed,0x38}, "DDF ", 18},
{{0x15,0x12,0x02,0xC9,0xc1,0x8e,0x49,0x56,0x56,0xf3,0x72,0x28,0x1F,0x49,0x3E,0xB7,0x69,0x89,0x61,0xD5}, "DEB ", 18},
{{0x35,0x97,0xbf,0xd5,0x33,0xa9,0x9c,0x9a,0xa0,0x83,0x58,0x7b,0x07,0x44,0x34,0xe6,0x1e,0xb0,0xa2,0x58}, "DENT ", 8},
{{0x7c,0xF2,0x71,0x96,0x6F,0x36,0x34,0x3B,0xf0,0x15,0x0F,0x25,0xE5,0x36,0x4f,0x79,0x61,0xc5,0x82,0x01}, "DEPO ", 0},
{{0x89,0xcb,0xea,0xc5,0xe8,0xa1,0x3f,0x0e,0xbb,0x4c,0x74,0xfa,0xdf,0xc6,0x9b,0xe8,0x1a,0x50,0x11,0x06}, "DeposNet ", 18},
{{0xdd,0x94,0xDe,0x9c,0xFE,0x06,0x35,0x77,0x05,0x1A,0x5e,0xb7,0x46,0x5D,0x08,0x31,0x7d,0x88,0x08,0xB6}, "Devcon2 ", 0},
{{0xE0,0xB7,0x92,0x7c,0x4a,0xF2,0x37,0x65,0xCb,0x51,0x31,0x4A,0x0E,0x05,0x21,0xA9,0x64,0x5F,0x0E,0x2A}, "DGD ", 9},
{{0xf6,0xcF,0xe5,0x3d,0x6F,0xEb,0xaE,0xEA,0x05,0x1f,0x40,0x0f,0xf5,0xfc,0x14,0xF0,0xcB,0xBD,0xac,0xA1}, "DGPT ", 18},
{{0x6a,0xED,0xbF,0x8d,0xFF,0x31,0x43,0x72,0x20,0xdF,0x35,0x19,0x50,0xBa,0x2a,0x33,0x62,0x16,0x8d,0x1b}, "DGS ", 8},
{{0x55,0xb9,0xa1,0x1c,0x2e,0x83,0x51,0xb4,0xFf,0xc7,0xb1,0x15,0x61,0x14,0x8b,0xfa,0xC9,0x97,0x78,0x55}, "DGX ", 9},
{{0x1c,0x83,0x50,0x14,0x78,0xf1,0x32,0x09,0x77,0x04,0x70,0x08,0x49,0x6d,0xac,0xbd,0x60,0xbb,0x15,0xef}, "DGTX ", 18},
{{0x4f,0x3a,0xfe,0xc4,0xe5,0xa3,0xf2,0xa6,0xa1,0xa4,0x11,0xde,0xf7,0xd7,0xdf,0xe5,0x0e,0xe0,0x57,0xbf}, "DGX ", 9},
{{0x55,0xb9,0xa1,0x1c,0x2e,0x83,0x51,0xb4,0xFf,0xc7,0xb1,0x15,0x61,0x14,0x8b,0xfa,0xC9,0x97,0x78,0x55}, "DGX1 ", 9},
{{0x2e,0x07,0x1D,0x29,0x66,0xAa,0x7D,0x8d,0xEC,0xB1,0x00,0x58,0x85,0xbA,0x19,0x77,0xD6,0x03,0x8A,0x65}, "DICE ", 16},
{{0xc7,0x19,0xd0,0x10,0xB6,0x3E,0x5b,0xbF,0x2C,0x05,0x51,0x87,0x2C,0xD5,0x31,0x6E,0xD2,0x6A,0xcD,0x83}, "DecInsur ", 18},
{{0x13,0xf1,0x1C,0x99,0x05,0xA0,0x8c,0xa7,0x6e,0x3e,0x85,0x3b,0xE6,0x3D,0x4f,0x09,0x44,0x32,0x6C,0x72}, "DIVX ", 18},
@@ -227,12 +244,13 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x3c,0x75,0x22,0x65,0x55,0xFC,0x49,0x61,0x68,0xd4,0x8B,0x88,0xDF,0x83,0xB9,0x5F,0x16,0x77,0x1F,0x37}, "DROPlex ", 0},
{{0x62,0x1d,0x78,0xf2,0xef,0x2f,0xd9,0x37,0xbf,0xca,0x69,0x6c,0xab,0xaf,0x9a,0x77,0x9f,0x59,0xb3,0xed}, "DRP ", 2},
{{0x27,0x99,0xd9,0x0c,0x6d,0x44,0xcb,0x9a,0xa5,0xfb,0xc3,0x77,0x17,0x7f,0x16,0xc3,0x3e,0x05,0x6b,0x82}, "DripCoin ", 0},
{{0x62,0xd4,0xc0,0x46,0x44,0x31,0x4f,0x35,0x86,0x8b,0xa4,0xc6,0x5c,0xc2,0x7a,0x77,0x68,0x1d,0xe7,0xa9}, "DRVH ", 18},
{{0x1e,0x09,0xBD,0x8C,0xad,0xb4,0x41,0x63,0x2e,0x44,0x1D,0xb3,0xe1,0xD7,0x99,0x09,0xEE,0x0A,0x22,0x56}, "DSC ", 1},
{{0x5a,0xdc,0x96,0x1D,0x6A,0xC3,0xf7,0x06,0x2D,0x2e,0xA4,0x5F,0xEF,0xB8,0xD8,0x16,0x7d,0x44,0xb1,0x90}, "DTH ", 18},
{{0xd2,0x34,0xbf,0x24,0x10,0xa0,0x00,0x9d,0xf9,0xc3,0xc6,0x3b,0x61,0x0c,0x09,0x73,0x8f,0x18,0xcc,0xd7}, "DTR ", 8},
{{0xf9,0xF7,0xc2,0x9C,0xFd,0xf1,0x9F,0xCf,0x1f,0x2A,0xA6,0xB8,0x4a,0xA3,0x67,0xBc,0xf1,0xbD,0x16,0x76}, "DTT ", 18},
{{0x82,0xfd,0xed,0xfB,0x76,0x35,0x44,0x1a,0xA5,0xA9,0x27,0x91,0xD0,0x01,0xfA,0x73,0x88,0xda,0x80,0x25}, "DTx ", 18},
{{0x76,0x5f,0x0c,0x16,0xd1,0xdd,0xc2,0x79,0x29,0x5c,0x1a,0x7c,0x24,0xb0,0x88,0x3f,0x62,0xd3,0x3f,0x75}, "DTX ", 18},
{{0x82,0xfd,0xed,0xfB,0x76,0x35,0x44,0x1a,0xA5,0xA9,0x27,0x91,0xD0,0x01,0xfA,0x73,0x88,0xda,0x80,0x25}, "DTx ", 18},
{{0x9c,0x6F,0xa4,0x22,0x09,0x16,0x9b,0xCe,0xA0,0x32,0xe4,0x01,0x18,0x8a,0x6f,0xc3,0xe9,0xC9,0xf5,0x9c}, "DUBI ", 18},
{{0x99,0x4f,0x0d,0xff,0xdb,0xae,0x0b,0xbf,0x09,0xb6,0x52,0xd6,0xf1,0x1a,0x49,0x3f,0xd3,0x3f,0x42,0xb9}, "EAGLE ", 18},
{{0xaf,0xc3,0x97,0x88,0xc5,0x1f,0x0c,0x1f,0xf7,0xb5,0x53,0x17,0xf3,0xe7,0x02,0x99,0xe5,0x21,0xff,0xf6}, "eBCH ", 8},
@@ -242,6 +260,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xfa,0x1d,0xe2,0xee,0x97,0xe4,0xc1,0x0c,0x94,0xc9,0x1c,0xb2,0xb5,0x06,0x2b,0x89,0xfb,0x14,0x0b,0x82}, "EDC ", 6},
{{0x08,0x71,0x1D,0x3B,0x02,0xC8,0x75,0x8F,0x2F,0xB3,0xab,0x4e,0x80,0x22,0x84,0x18,0xa7,0xF8,0xe3,0x9c}, "EDG ", 0},
{{0xce,0xd4,0xe9,0x31,0x98,0x73,0x4d,0xda,0xff,0x84,0x92,0xd5,0x25,0xbd,0x25,0x8d,0x49,0xeb,0x38,0x8e}, "EDO ", 18},
{{0xc5,0x28,0xc2,0x8F,0xEC,0x0A,0x90,0xC0,0x83,0x32,0x8B,0xC4,0x5f,0x58,0x7e,0xE2,0x15,0x76,0x0A,0x0F}, "EDR ", 18},
{{0x2a,0x22,0xe5,0xcc,0xa0,0x0a,0x3d,0x63,0x30,0x8f,0xa3,0x9f,0x29,0x20,0x2e,0xb1,0xb3,0x9e,0xef,0x52}, "EDU ", 18},
{{0xb5,0x3a,0x96,0xbc,0xbd,0xd9,0xcf,0x78,0xdf,0xf2,0x0b,0xab,0x6c,0x2b,0xe7,0xba,0xec,0x8f,0x00,0xf8}, "eGAS ", 8},
{{0x8e,0x1b,0x44,0x8E,0xC7,0xaD,0xFc,0x7F,0xa3,0x5F,0xC2,0xe8,0x85,0x67,0x8b,0xD3,0x23,0x17,0x6E,0x34}, "EGT ", 18},
@@ -249,6 +268,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xbf,0x21,0x79,0x85,0x9f,0xc6,0xd5,0xbe,0xe9,0xbf,0x91,0x58,0x63,0x2d,0xc5,0x16,0x78,0xa4,0x10,0x0e}, "ELF ", 18},
{{0xc8,0xC6,0xA3,0x1A,0x4A,0x80,0x6d,0x37,0x10,0xA7,0xB3,0x8b,0x7B,0x29,0x6D,0x2f,0xAB,0xCC,0xDB,0xA8}, "ELIX ", 18},
{{0x44,0x19,0x7a,0x4c,0x44,0xd6,0xa0,0x59,0x29,0x7c,0xaf,0x6b,0xe4,0xf7,0xe1,0x72,0xbd,0x56,0xca,0xaf}, "ELTCOIN ", 8},
{{0xa9,0x55,0x92,0xDC,0xFf,0xA3,0xC0,0x80,0xB4,0xB4,0x0E,0x45,0x9c,0x5f,0x56,0x92,0xF6,0x7D,0xB7,0xF8}, "ELY ", 18},
{{0xb6,0x7b,0x88,0xa2,0x57,0x08,0xa3,0x5a,0xe7,0xc2,0xd7,0x36,0xd3,0x98,0xd2,0x68,0xce,0x4f,0x7f,0x83}, "EMON ", 8},
{{0x95,0xda,0xaa,0xb9,0x80,0x46,0x84,0x6b,0xf4,0xb2,0x85,0x3e,0x23,0xcb,0xa2,0x36,0xfa,0x39,0x4a,0x31}, "EMONT ", 8},
{{0x95,0x01,0xBF,0xc4,0x88,0x97,0xDC,0xEE,0xad,0xf7,0x31,0x13,0xEF,0x63,0x5d,0x2f,0xF7,0xee,0x4B,0x97}, "EMT ", 18},
@@ -266,14 +286,15 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x3a,0x26,0x74,0x6D,0xdb,0x79,0xB1,0xB8,0xe4,0x45,0x0e,0x3F,0x4F,0xFE,0x32,0x85,0xA3,0x07,0x38,0x7E}, "ETHB ", 8},
{{0x69,0x27,0xC6,0x9f,0xb4,0xda,0xf2,0x04,0x3f,0xbB,0x1C,0xb7,0xb8,0x6c,0x56,0x61,0x41,0x6b,0xea,0x29}, "ETR ", 18},
{{0xab,0xdf,0x14,0x78,0x70,0x23,0x5f,0xcf,0xc3,0x41,0x53,0x82,0x8c,0x76,0x9a,0x70,0xb3,0xfa,0xe0,0x1f}, "EURT ", 6},
{{0x52,0x36,0x30,0x97,0x6e,0xB6,0x14,0x76,0x21,0xB5,0xc3,0x1c,0x78,0x1e,0xBe,0x2E,0xc2,0xa8,0x06,0xE0}, "eUSD ", 18},
{{0x92,0x31,0x08,0xa4,0x39,0xC4,0xe8,0xC2,0x31,0x5c,0x4f,0x65,0x21,0xE5,0xcE,0x95,0xB4,0x4e,0x9B,0x4c}, "EVE ", 18},
{{0xd7,0x80,0xAe,0x2B,0xf0,0x4c,0xD9,0x6E,0x57,0x7D,0x3D,0x01,0x47,0x62,0xf8,0x31,0xd9,0x71,0x29,0xd0}, "EVN ", 18},
{{0xf3,0xdb,0x5f,0xa2,0xc6,0x6b,0x7a,0xf3,0xeb,0x0c,0x0b,0x78,0x25,0x10,0x81,0x6c,0xbe,0x48,0x13,0xb8}, "EVX ", 4},
{{0xc9,0x8e,0x06,0x39,0xc6,0xd2,0xec,0x03,0x7a,0x61,0x53,0x41,0xc3,0x69,0x66,0x6b,0x11,0x0e,0x80,0xe5}, "EXMR ", 8},
{{0xb6,0x77,0x34,0x52,0x1e,0xAb,0xBE,0x9C,0x77,0x37,0x29,0xdB,0x73,0xE1,0x6C,0xC2,0xdf,0xb2,0x0A,0x58}, "E ", 2},
{{0x5c,0x74,0x3a,0x35,0xe9,0x03,0xf6,0xc5,0x84,0x51,0x4e,0xc6,0x17,0xac,0xee,0x06,0x11,0xcf,0x44,0xf3}, "EXY ", 18},
{{0xb6,0x77,0x34,0x52,0x1e,0xAb,0xBE,0x9C,0x77,0x37,0x29,0xdB,0x73,0xE1,0x6C,0xC2,0xdf,0xb2,0x0A,0x58}, "ERupee ", 2},
{{0x19,0x0e,0x56,0x9b,0xE0,0x71,0xF4,0x0c,0x70,0x4e,0x15,0x82,0x5F,0x28,0x54,0x81,0xCB,0x74,0xB6,0xcC}, "FAM ", 12},
{{0x7f,0x67,0x15,0xc3,0xfc,0x47,0x40,0xa0,0x2f,0x70,0xde,0x85,0xb9,0xfd,0x50,0xac,0x60,0x01,0xfe,0xd9}, "FANX ", 18},
{{0x90,0x16,0x2f,0x41,0x88,0x6c,0x09,0x46,0xd0,0x99,0x99,0x73,0x6f,0x1c,0x15,0xc8,0xa1,0x05,0xa4,0x21}, "FAN ", 18},
{{0x7d,0xcb,0x3b,0x23,0x56,0xc8,0x22,0xd3,0x57,0x7d,0x4d,0x06,0x0d,0x0d,0x5d,0x78,0xc8,0x60,0x48,0x8c}, "FANX ", 18},
{{0x00,0x9e,0x86,0x49,0x23,0xb4,0x92,0x63,0xc7,0xF1,0x0D,0x19,0xB7,0xf8,0xAb,0x7a,0x9A,0x5A,0xAd,0x33}, "FKX ", 18},
{{0xf0,0x4a,0x8a,0xc5,0x53,0xFc,0xeD,0xB5,0xBA,0x99,0xA6,0x47,0x99,0x15,0x58,0x26,0xC1,0x36,0xb0,0xBe}, "FLIXX ", 18},
{{0x04,0xcC,0x78,0x3b,0x45,0x0b,0x8D,0x11,0xF3,0xC7,0xd0,0x0D,0xD0,0x3f,0xDF,0x7F,0xB5,0x1f,0xE9,0xF2}, "FLMC ", 18},
@@ -286,6 +307,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xe6,0xf7,0x4d,0xcf,0xa0,0xe2,0x08,0x83,0x00,0x8d,0x8c,0x16,0xb6,0xd9,0xa3,0x29,0x18,0x9d,0x0c,0x30}, "FTC ", 2},
{{0x20,0x23,0xDC,0xf7,0xc4,0x38,0xc8,0xC8,0xC0,0xB0,0xF2,0x8d,0xBa,0xE1,0x55,0x20,0xB4,0xf3,0xEe,0x20}, "FTR ", 18},
{{0x2A,0xEC,0x18,0xc5,0x50,0x0f,0x21,0x35,0x9C,0xE1,0xBE,0xA5,0xDc,0x17,0x77,0x34,0x4d,0xF4,0xC0,0xDc}, "FTT ", 18},
{{0x41,0x87,0x5c,0x23,0x32,0xb0,0x87,0x7c,0xdf,0xaa,0x69,0x9b,0x64,0x14,0x02,0xb7,0xd4,0x64,0x2c,0x32}, "FTXT ", 8},
{{0x65,0xbe,0x44,0xc7,0x47,0x98,0x8f,0xbf,0x60,0x62,0x07,0x69,0x8c,0x94,0x4d,0xf4,0x44,0x2e,0xfe,0x19}, "FUCK ", 4},
{{0xEA,0x38,0xeA,0xa3,0xC8,0x6c,0x8F,0x9B,0x75,0x15,0x33,0xBa,0x2E,0x56,0x2d,0xeb,0x9a,0xcD,0xED,0x40}, "FUEL ", 18},
{{0x41,0x9D,0x0d,0x8B,0xdD,0x9a,0xF5,0xe6,0x06,0xAe,0x22,0x32,0xed,0x28,0x5A,0xff,0x19,0x0E,0x71,0x1b}, "FUN ", 8},
@@ -312,18 +334,22 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xB7,0x08,0x35,0xD7,0x82,0x2e,0xBB,0x94,0x26,0xB5,0x65,0x43,0xE3,0x91,0x84,0x6C,0x10,0x7b,0xd3,0x2C}, "GTC ", 18},
{{0x02,0x5a,0xba,0xd9,0xe5,0x18,0x51,0x6f,0xda,0xaf,0xbd,0xcd,0xb9,0x70,0x1b,0x37,0xfb,0x7e,0xf0,0xfa}, "GTKT ", 0},
{{0xc5,0xbb,0xae,0x50,0x78,0x1b,0xe1,0x66,0x93,0x06,0xb9,0xe0,0x01,0xef,0xf5,0x7a,0x29,0x57,0xb0,0x9d}, "GTO ", 5},
{{0x98,0x47,0x34,0x5d,0xe8,0xb6,0x14,0xc9,0x56,0x14,0x6b,0xbe,0xa5,0x49,0x33,0x6d,0x9c,0x8d,0x26,0xb6}, "GULD ", 8},
{{0xf7,0xB0,0x98,0x29,0x8f,0x7C,0x69,0xFc,0x14,0x61,0x0b,0xf7,0x1d,0x5e,0x02,0xc6,0x07,0x92,0x89,0x4C}, "GUP ", 3},
{{0x10,0x3c,0x3A,0x20,0x9d,0xa5,0x9d,0x3E,0x7C,0x4A,0x89,0x30,0x7e,0x66,0x52,0x1e,0x08,0x1C,0xFD,0xF0}, "GVT ", 18},
{{0x58,0xca,0x30,0x65,0xc0,0xf2,0x4c,0x7c,0x96,0xae,0xe8,0xd6,0x05,0x6b,0x5b,0x5d,0xec,0xf9,0xc2,0xf8}, "GXC ", 10},
{{0x22,0xF0,0xAF,0x8D,0x78,0x85,0x1b,0x72,0xEE,0x79,0x9e,0x05,0xF5,0x4A,0x77,0x00,0x15,0x86,0xB1,0x8A}, "GXVC ", 10},
{{0x8C,0x65,0xe9,0x92,0x29,0x7d,0x5f,0x09,0x2A,0x75,0x6d,0xEf,0x24,0xF4,0x78,0x1a,0x28,0x01,0x98,0xFf}, "GZE ", 18},
{{0xE6,0x38,0xdc,0x39,0xb6,0xaD,0xBE,0xE8,0x52,0x6b,0x5C,0x22,0x38,0x0b,0x4b,0x45,0xdA,0xf4,0x6d,0x8e}, "GZR ", 6},
{{0x5a,0x56,0x7e,0x28,0xdb,0xfa,0x2b,0xbd,0x3e,0xf1,0x3c,0x0a,0x01,0xbe,0x11,0x47,0x45,0x34,0x96,0x57}, "HAPPY ", 2},
{{0x90,0x02,0xD4,0x48,0x5b,0x75,0x94,0xe3,0xE8,0x50,0xF0,0xa2,0x06,0x71,0x3B,0x30,0x51,0x13,0xf6,0x9e}, "HAT ", 12},
{{0xC0,0x11,0xA7,0x24,0x00,0xE5,0x8e,0xcD,0x99,0xEe,0x49,0x7C,0xF8,0x9E,0x37,0x75,0xd4,0xbd,0x73,0x2F}, "HAV ", 18},
{{0xff,0xe8,0x19,0x6b,0xc2,0x59,0xe8,0xde,0xdc,0x54,0x4d,0x93,0x57,0x86,0xaa,0x47,0x09,0xec,0x3e,0x64}, "HDG ", 18},
{{0x95,0xC4,0xbe,0x85,0x34,0xd6,0x9C,0x24,0x8C,0x06,0x23,0xc4,0xC9,0xa7,0xA2,0xa0,0x01,0xc1,0x73,0x37}, "HDL ", 18},
{{0xe9,0xff,0x07,0x80,0x9c,0xcf,0xf0,0x5d,0xae,0x74,0x99,0x0e,0x25,0x83,0x1d,0x0b,0xc5,0xcb,0xe5,0x75}, "Hdp ", 18},
{{0x84,0x54,0x3f,0x86,0x8e,0xc1,0xb1,0xfa,0xc5,0x10,0xd4,0x9d,0x13,0xc0,0x69,0xf6,0x4c,0xd2,0xd5,0xf9}, "Hdp ", 18},
{{0x84,0x54,0x3f,0x86,0x8e,0xc1,0xb1,0xfa,0xc5,0x10,0xd4,0x9d,0x13,0xc0,0x69,0xf6,0x4c,0xd2,0xd5,0xf9}, "Hdp2 ", 18},
{{0xba,0x21,0x84,0x52,0x0A,0x1c,0xC4,0x9a,0x61,0x59,0xc5,0x7e,0x61,0xE1,0x84,0x4E,0x08,0x56,0x15,0xB6}, "HGT ", 8},
{{0x9b,0xb1,0xdb,0x14,0x45,0xb8,0x32,0x13,0xa5,0x6d,0x90,0xd3,0x31,0x89,0x4b,0x3f,0x26,0x21,0x8e,0x4e}, "HIBT ", 18},
{{0xa9,0x24,0x0f,0xBC,0xAC,0x1F,0x0b,0x9A,0x6a,0xDf,0xB0,0x4a,0x53,0xc8,0xE3,0xB0,0xcC,0x1D,0x14,0x44}, "HIG ", 18},
{{0x14,0xF3,0x7B,0x57,0x42,0x42,0xD3,0x66,0x55,0x8d,0xB6,0x1f,0x33,0x35,0x28,0x9a,0x50,0x35,0xc5,0x06}, "HKG ", 3},
{{0x88,0xac,0x94,0xd5,0xd1,0x75,0x13,0x03,0x47,0xfc,0x95,0xe1,0x09,0xd7,0x7a,0xc0,0x9d,0xbf,0x5a,0xb7}, "HKY ", 18},
@@ -334,7 +360,6 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x9a,0xf8,0x39,0x68,0x7f,0x6c,0x94,0x54,0x2a,0xc5,0xec,0xe2,0xe3,0x17,0xda,0xae,0x35,0x54,0x93,0xa1}, "Hydro ", 18},
{{0x55,0x4C,0x20,0xB7,0xc4,0x86,0xbe,0xeE,0x43,0x92,0x77,0xb4,0x54,0x0A,0x43,0x45,0x66,0xdC,0x4C,0x02}, "HST ", 18},
{{0xC0,0xEb,0x85,0x28,0x5d,0x83,0x21,0x7C,0xD7,0xc8,0x91,0x70,0x2b,0xcb,0xC0,0xFC,0x40,0x1E,0x2D,0x9D}, "HVN ", 8},
{{0xC1,0xE2,0x09,0x7d,0x78,0x8d,0x33,0x70,0x1B,0xA3,0xCc,0x27,0x73,0xBF,0x67,0x15,0x5e,0xc9,0x3F,0xC4}, "IAD ", 18},
{{0x5a,0x84,0x96,0x9b,0xb6,0x63,0xfb,0x64,0xF6,0xd0,0x15,0xDc,0xF9,0xF6,0x22,0xAe,0xdc,0x79,0x67,0x50}, "ICE ", 18},
{{0x88,0x86,0x66,0xCA,0x69,0xE0,0xf1,0x78,0xDE,0xD6,0xD7,0x5b,0x57,0x26,0xCe,0xe9,0x9A,0x87,0xD6,0x98}, "ICN ", 18},
{{0xa3,0x3e,0x72,0x9b,0xf4,0xfd,0xeb,0x86,0x8b,0x53,0x4e,0x1f,0x20,0x52,0x34,0x63,0xd9,0xc4,0x6b,0xee}, "ICO ", 10},
@@ -356,6 +381,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x6f,0xb3,0xe0,0xa2,0x17,0x40,0x7e,0xff,0xf7,0xca,0x06,0x2d,0x46,0xc2,0x6e,0x5d,0x60,0xa1,0x4d,0x69}, "IOTX ", 18},
{{0x64,0xCd,0xF8,0x19,0xd3,0xE7,0x5A,0xc8,0xeC,0x21,0x7B,0x34,0x96,0xd7,0xcE,0x16,0x7B,0xe4,0x2e,0x80}, "IPL ", 18},
{{0x00,0x1f,0x0a,0xa5,0xda,0x15,0x58,0x5e,0x5b,0x23,0x05,0xdb,0xab,0x2b,0xac,0x42,0x5e,0xa7,0x10,0x07}, "IPSX ", 18},
{{0x0c,0xf7,0x13,0xb1,0x1c,0x9b,0x98,0x6e,0xc4,0x0d,0x65,0xbd,0x4f,0x7f,0xbd,0x50,0xf6,0xff,0x2d,0x64}, "IST34 ", 18},
{{0x5e,0x6b,0x6d,0x9a,0xba,0xd9,0x09,0x3f,0xdc,0x86,0x1e,0xa1,0x60,0x0e,0xba,0x1b,0x35,0x5c,0xd9,0x40}, "ITC ", 18},
{{0x0a,0xeF,0x06,0xDc,0xCC,0xC5,0x31,0xe5,0x81,0xf0,0x44,0x00,0x59,0xE6,0xFf,0xCC,0x20,0x60,0x39,0xEE}, "ITT ", 8},
{{0xfc,0xa4,0x79,0x62,0xd4,0x5a,0xdf,0xdf,0xd1,0xab,0x2d,0x97,0x23,0x15,0xdb,0x4c,0xe7,0xcc,0xf0,0x94}, "IXT ", 8},
@@ -379,7 +405,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xfD,0x10,0x7B,0x47,0x3A,0xB9,0x0e,0x8F,0xbd,0x89,0x87,0x21,0x44,0xa3,0xDC,0x92,0xC4,0x0F,0xa8,0xC9}, "LALA ", 18},
{{0x51,0x02,0x79,0x1c,0xa0,0x2f,0xc3,0x59,0x53,0x98,0x40,0x0b,0xfe,0x0e,0x33,0xd7,0xb6,0xc8,0x22,0x67}, "LDC ", 18},
{{0x5b,0x26,0xC5,0xD0,0x77,0x2E,0x5b,0xba,0xC8,0xb3,0x18,0x2A,0xE9,0xa1,0x3f,0x9B,0xB2,0xD0,0x37,0x65}, "LEDU ", 8},
{{0xB5,0xAE,0x84,0x8E,0xdB,0x29,0x6C,0x21,0x25,0x9b,0x74,0x67,0x33,0x14,0x67,0xd2,0x64,0x7e,0xEc,0xDf}, "LEMO ", 18},
{{0x60,0xC2,0x44,0x07,0xd0,0x17,0x82,0xC2,0x17,0x5D,0x32,0xfe,0x7C,0x89,0x21,0xed,0x73,0x23,0x71,0xD1}, "LEMO ", 18},
{{0x80,0xfB,0x78,0x4B,0x7e,0xD6,0x67,0x30,0xe8,0xb1,0xDB,0xd9,0x82,0x0a,0xFD,0x29,0x93,0x1a,0xab,0x03}, "LEND ", 18},
{{0xc7,0x98,0xcd,0x1c,0x49,0xdb,0x0e,0x29,0x73,0x12,0xe4,0xc6,0x82,0x75,0x26,0x68,0xce,0x1d,0xb2,0xad}, "LFR ", 5},
{{0x12,0x3a,0xb1,0x95,0xdd,0x38,0xb1,0xb4,0x05,0x10,0xd4,0x67,0xa6,0xa3,0x59,0xb2,0x01,0xaf,0x05,0x6f}, "LGO ", 8},
@@ -395,7 +421,8 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x5e,0x33,0x46,0x44,0x40,0x10,0x13,0x53,0x22,0x26,0x8a,0x46,0x30,0xd2,0xed,0x5f,0x8d,0x09,0x44,0x6c}, "LOC ", 18},
{{0x9c,0x23,0xd6,0x7a,0xea,0x7b,0x95,0xd8,0x09,0x42,0xe3,0x83,0x6b,0xcd,0xf7,0xe7,0x08,0xa7,0x47,0xc2}, "LOCI ", 18},
{{0xC6,0x45,0x00,0xDD,0x7B,0x0f,0x17,0x94,0x80,0x7e,0x67,0x80,0x2F,0x8A,0xbb,0xf5,0xF8,0xFf,0xb0,0x54}, "LOCUS ", 18},
{{0x21,0xae,0x23,0xb8,0x82,0xa3,0x40,0xa2,0x22,0x82,0x16,0x20,0x86,0xbc,0x98,0xd3,0xe2,0xb7,0x30,0x18}, "LOK ", 18},
{{0x25,0x3c,0x7d,0xd0,0x74,0xf4,0xba,0xcb,0x30,0x53,0x87,0xf9,0x22,0x22,0x5a,0x4f,0x73,0x7c,0x08,0xbd}, "LOOK ", 18},
{{0x21,0xae,0x23,0xb8,0x82,0xa3,0x40,0xa2,0x22,0x82,0x16,0x20,0x86,0xbc,0x98,0xd3,0xe2,0xb7,0x30,0x18}, "LOOK old ", 18},
{{0xa4,0xe8,0xc3,0xec,0x45,0x61,0x07,0xea,0x67,0xd3,0x07,0x5b,0xf9,0xe3,0xdf,0x3a,0x75,0x82,0x3d,0xb0}, "LOOM ", 18},
{{0xEF,0x68,0xe7,0xC6,0x94,0xF4,0x0c,0x82,0x02,0x82,0x1e,0xDF,0x52,0x5d,0xE3,0x78,0x24,0x58,0x63,0x9f}, "LRC ", 18},
{{0x5d,0xbe,0x29,0x6f,0x97,0xb2,0x3c,0x4a,0x6a,0xa6,0x18,0x3d,0x73,0xe5,0x74,0xd0,0x2b,0xa5,0xc7,0x19}, "LUC ", 18},
@@ -415,6 +442,8 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x01,0xf2,0xac,0xf2,0x91,0x48,0x60,0x33,0x1c,0x1c,0xb1,0xa9,0xac,0xec,0xda,0x74,0x75,0xe0,0x6a,0xf8}, "MESH ", 18},
{{0x5b,0x8d,0x43,0xff,0xde,0x4a,0x29,0x82,0xb9,0xa5,0x38,0x7c,0xdf,0x21,0xd5,0x4e,0xad,0x64,0xac,0x8d}, "MEST ", 18},
{{0x67,0x10,0xc6,0x34,0x32,0xa2,0xde,0x02,0x95,0x4f,0xc0,0xf8,0x51,0xdb,0x07,0x14,0x6a,0x6c,0x03,0x12}, "MFG ", 18},
{{0xDF,0x2C,0x72,0x38,0x19,0x8A,0xd8,0xB3,0x89,0x66,0x65,0x74,0xf2,0xd8,0xbc,0x41,0x1A,0x4b,0x74,0x28}, "MFT ", 18},
{{0x05,0xD4,0x12,0xCE,0x18,0xF2,0x40,0x40,0xbB,0x3F,0xa4,0x5C,0xF2,0xC6,0x9e,0x50,0x65,0x86,0xD8,0xe8}, "MFTU ", 18},
{{0x40,0x39,0x50,0x44,0xac,0x3c,0x0c,0x57,0x05,0x19,0x06,0xda,0x93,0x8b,0x54,0xbd,0x65,0x57,0xf2,0x12}, "MGO ", 8},
{{0xe2,0x3c,0xd1,0x60,0x76,0x1f,0x63,0xFC,0x3a,0x1c,0xF7,0x8A,0xa0,0x34,0xb6,0xcd,0xF9,0x7d,0x3E,0x0C}, "Mainstrt ", 18},
{{0xad,0x8d,0xd4,0xc7,0x25,0xde,0x1d,0x31,0xb9,0xe8,0xf8,0xd1,0x46,0x08,0x9e,0x9d,0xc6,0x88,0x20,0x93}, "Mychat ", 6},
@@ -429,7 +458,8 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x21,0xf0,0xF0,0xfD,0x31,0x41,0xEe,0x9E,0x11,0xB3,0xd7,0xf1,0x3a,0x10,0x28,0xCD,0x51,0x5f,0x45,0x9c}, "MRP ", 18},
{{0xAB,0x6C,0xF8,0x7a,0x50,0xF1,0x7d,0x7F,0x5E,0x1F,0xEa,0xf8,0x1B,0x6f,0xE9,0xFf,0xBe,0x8E,0xBF,0x84}, "MRV ", 18},
{{0x68,0xAA,0x3F,0x23,0x2d,0xA9,0xbd,0xC2,0x34,0x34,0x65,0x54,0x57,0x94,0xef,0x3e,0xEa,0x52,0x09,0xBD}, "MSP ", 18},
{{0x90,0x5E,0x33,0x7c,0x6c,0x86,0x45,0x26,0x3D,0x35,0x21,0x20,0x5A,0xa3,0x7b,0xf4,0xd0,0x34,0xe7,0x45}, "MTC ", 18},
{{0xdf,0xdc,0x0d,0x82,0xd9,0x6f,0x8f,0xd4,0x0c,0xa0,0xcf,0xb4,0xa2,0x88,0x95,0x5b,0xec,0xec,0x20,0x88}, "MTC Mesh ", 18},
{{0x90,0x5E,0x33,0x7c,0x6c,0x86,0x45,0x26,0x3D,0x35,0x21,0x20,0x5A,0xa3,0x7b,0xf4,0xd0,0x34,0xe7,0x45}, "MTC Med ", 18},
{{0xaF,0x4D,0xcE,0x16,0xDa,0x28,0x77,0xf8,0xc9,0xe0,0x05,0x44,0xc9,0x3B,0x62,0xAc,0x40,0x63,0x1F,0x16}, "MTH ", 5},
{{0xF4,0x33,0x08,0x93,0x66,0x89,0x9D,0x83,0xa9,0xf2,0x6A,0x77,0x3D,0x59,0xec,0x7e,0xCF,0x30,0x35,0x5e}, "MTL ", 8},
{{0x41,0xdb,0xec,0xc1,0xcd,0xc5,0x51,0x7c,0x6f,0x76,0xf6,0xa6,0xe8,0x36,0xad,0xbe,0xe2,0x75,0x4d,0xe3}, "MTN ", 18},
@@ -454,6 +484,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x17,0x76,0xe1,0xF2,0x6f,0x98,0xb1,0xA5,0xdF,0x9c,0xD3,0x47,0x95,0x3a,0x26,0xdd,0x3C,0xb4,0x66,0x71}, "NMR ", 18},
{{0xec,0x46,0xf8,0x20,0x7d,0x76,0x60,0x12,0x45,0x4c,0x40,0x8d,0xe2,0x10,0xbc,0xbc,0x22,0x43,0xe7,0x1c}, "NOX ", 18},
{{0x4c,0xe6,0xb3,0x62,0xbc,0x77,0xa2,0x49,0x66,0xdd,0xa9,0x07,0x8f,0x9c,0xef,0x81,0xb3,0xb8,0x86,0xa7}, "NPER ", 18},
{{0x24,0x5e,0xf4,0x7d,0x4d,0x05,0x05,0xec,0xf3,0xac,0x46,0x3f,0x4d,0x81,0xf4,0x1a,0xde,0x8f,0x1f,0xd1}, "NUG ", 18},
{{0xb9,0x13,0x18,0xf3,0x5b,0xdb,0x26,0x2e,0x94,0x23,0xbc,0x7c,0x7c,0x2a,0x3a,0x93,0xdd,0x93,0xc9,0x2c}, "NULS ", 18},
{{0x57,0xAb,0x1E,0x02,0xfE,0xE2,0x37,0x74,0x58,0x0C,0x11,0x97,0x40,0x12,0x9e,0xAC,0x70,0x81,0xe9,0xD3}, "nUSD ", 18},
{{0x45,0xe4,0x2D,0x65,0x9D,0x9f,0x94,0x66,0xcD,0x5D,0xF6,0x22,0x50,0x60,0x33,0x14,0x5a,0x9b,0x89,0xBc}, "NxC ", 3},
@@ -462,20 +493,23 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x5e,0x88,0x8B,0x83,0xB7,0x28,0x7E,0xED,0x4f,0xB7,0xDA,0x7b,0x7d,0x0A,0x0D,0x4c,0x73,0x5d,0x94,0xb3}, "OAK ", 18},
{{0x70,0x1C,0x24,0x4b,0x98,0x8a,0x51,0x3c,0x94,0x59,0x73,0xdE,0xFA,0x05,0xde,0x93,0x3b,0x23,0xFe,0x1D}, "OAX ", 18},
{{0x02,0x35,0xfe,0x62,0x4e,0x04,0x4a,0x05,0xee,0xd7,0xa4,0x3e,0x16,0xe3,0x08,0x3b,0xc8,0xa4,0x28,0x7a}, "OCC ", 18},
{{0xbf,0x52,0xf2,0xab,0x39,0xe2,0x6e,0x09,0x51,0xd2,0xa0,0x2b,0x49,0xb7,0x70,0x2a,0xbe,0x30,0x40,0x6a}, "ODE ", 18},
{{0x6f,0x53,0x9a,0x94,0x56,0xa5,0xbc,0xb6,0x33,0x4a,0x1a,0x41,0x20,0x7c,0x37,0x88,0xf5,0x82,0x52,0x07}, "OHNI ", 18},
{{0xbe,0xef,0x54,0x6a,0xc8,0xa4,0xe0,0xa8,0x0d,0xc1,0xe2,0xd6,0x96,0x96,0x8e,0xf5,0x41,0x38,0xf1,0xd4}, "OJX ", 18},
{{0xc6,0x6e,0xa8,0x02,0x71,0x7b,0xfb,0x98,0x33,0x40,0x02,0x64,0xdd,0x12,0xc2,0xbc,0xea,0xa3,0x4a,0x6d}, "OLD_MKR ", 18},
{{0x64,0xA6,0x04,0x93,0xD8,0x88,0x72,0x8C,0xf4,0x26,0x16,0xe0,0x34,0xa0,0xdf,0xEA,0xe3,0x8E,0xFC,0xF0}, "OLT ", 18},
{{0xd2,0x61,0x14,0xcd,0x6E,0xE2,0x89,0xAc,0xcF,0x82,0x35,0x0c,0x8d,0x84,0x87,0xfe,0xdB,0x8A,0x0C,0x07}, "OMG ", 18},
{{0xb2,0x3b,0xe7,0x35,0x73,0xbc,0x7e,0x03,0xdb,0x6e,0x5d,0xfc,0x62,0x40,0x53,0x68,0x71,0x6d,0x28,0xa8}, "ONEK ", 18},
{{0xd3,0x41,0xd1,0x68,0x0e,0xee,0xe3,0x25,0x5b,0x8c,0x4c,0x75,0xbc,0xce,0x7e,0xb5,0x7f,0x14,0x4d,0xae}, "onG ", 18},
{{0x69,0xc4,0xBB,0x24,0x0c,0xF0,0x5D,0x51,0xee,0xab,0x69,0x85,0xBa,0xb3,0x55,0x27,0xd0,0x4a,0x8C,0x64}, "OPEN ", 8},
{{0x43,0x55,0xfC,0x16,0x0f,0x74,0x32,0x8f,0x9b,0x38,0x3d,0xF2,0xEC,0x58,0x9b,0xB3,0xdF,0xd8,0x2B,0xa0}, "OPT ", 18},
{{0xff,0x56,0xCc,0x6b,0x1E,0x6d,0xEd,0x34,0x7a,0xA0,0xB7,0x67,0x6C,0x85,0xAB,0x0B,0x3D,0x08,0xB0,0xFA}, "ORBS ", 18},
{{0x6F,0x59,0xe0,0x46,0x1A,0xe5,0xE2,0x79,0x9F,0x1f,0xB3,0x84,0x7f,0x05,0xa6,0x3B,0x16,0xd0,0xDb,0xF8}, "ORCA ", 18},
{{0x2C,0x4e,0x8f,0x2D,0x74,0x61,0x13,0xd0,0x69,0x6c,0xE8,0x9B,0x35,0xF0,0xd8,0xbF,0x88,0xE0,0xAE,0xcA}, "OST ", 18},
{{0x17,0x0b,0x27,0x5c,0xed,0x08,0x9f,0xff,0xae,0xbf,0xe9,0x27,0xf4,0x45,0xa3,0x50,0xed,0x91,0x60,0xdc}, "OWN ", 8},
{{0x65,0xa1,0x50,0x14,0x96,0x4f,0x21,0x02,0xff,0x58,0x64,0x7e,0x16,0xa1,0x6a,0x6b,0x9e,0x14,0xbc,0xf6}, "Ox Fina ", 3},
{{0xfe,0xDA,0xE5,0x64,0x26,0x68,0xf8,0x63,0x6A,0x11,0x98,0x7F,0xf3,0x86,0xbf,0xd2,0x15,0xF9,0x42,0xEE}, "PAL ", 18},
{{0x77,0x76,0x1e,0x63,0xc0,0x5a,0xee,0x66,0x48,0xfd,0xae,0xaa,0x9b,0x94,0x24,0x83,0x51,0xaf,0x9b,0xcd}, "PASS ", 18},
{{0xea,0x5f,0x88,0xe5,0x4d,0x98,0x2c,0xbb,0x0c,0x44,0x1c,0xde,0x4e,0x79,0xbc,0x30,0x5e,0x5b,0x43,0xbc}, "PARETO ", 18},
{{0xBB,0x1f,0xA4,0xFd,0xEB,0x34,0x59,0x73,0x3b,0xF6,0x7E,0xbC,0x6f,0x89,0x30,0x03,0xfA,0x97,0x6a,0x82}, "XPAT ", 18},
{{0x69,0x44,0x04,0x59,0x5e,0x30,0x75,0xa9,0x42,0x39,0x7f,0x46,0x6a,0xac,0xd4,0x62,0xff,0x1a,0x7b,0xd0}, "PATENTS ", 18},
{{0xF8,0x13,0xF3,0x90,0x2b,0xBc,0x00,0xA6,0xDC,0xe3,0x78,0x63,0x4d,0x3B,0x79,0xD8,0x4F,0x98,0x03,0xd7}, "PATH ", 18},
{{0xB9,0x70,0x48,0x62,0x8D,0xB6,0xB6,0x61,0xD4,0xC2,0xaA,0x83,0x3e,0x95,0xDb,0xe1,0xA9,0x05,0xB2,0x80}, "PAY ", 18},
@@ -484,6 +518,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xfc,0xAC,0x7A,0x75,0x15,0xe9,0xA9,0xd7,0x61,0x9f,0xA7,0x7A,0x1f,0xa7,0x38,0x11,0x1f,0x66,0x72,0x7e}, "PCH ", 18},
{{0x36,0x18,0x51,0x6F,0x45,0xCD,0x3c,0x91,0x3F,0x81,0xF9,0x98,0x7A,0xF4,0x10,0x77,0x93,0x2B,0xc4,0x0d}, "PCL ", 8},
{{0x53,0x14,0x8B,0xb4,0x55,0x17,0x07,0xed,0xF5,0x1a,0x1e,0x8d,0x7A,0x93,0x69,0x8d,0x18,0x93,0x12,0x25}, "PCLOLD ", 8},
{{0x8A,0xe5,0x6a,0x68,0x50,0xa7,0xcb,0xea,0xC3,0xc3,0xAb,0x2c,0xB3,0x11,0xe7,0x62,0x01,0x67,0xeA,0xC8}, "PEG ", 18},
{{0x58,0x84,0x96,0x9E,0xc0,0x48,0x05,0x56,0xE1,0x1d,0x11,0x99,0x80,0x13,0x6a,0x4C,0x17,0xeD,0xDE,0xd1}, "PET ", 18},
{{0xec,0x18,0xf8,0x98,0xb4,0x07,0x6a,0x3e,0x18,0xf1,0x08,0x9d,0x33,0x37,0x6c,0xc3,0x80,0xbd,0xe6,0x1d}, "PETRO ", 18},
{{0x55,0xc2,0xA0,0xC1,0x71,0xD9,0x20,0x84,0x35,0x60,0x59,0x4d,0xE3,0xd6,0xEE,0xcC,0x09,0xeF,0xc0,0x98}, "PEXT ", 4},
@@ -519,6 +554,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x61,0x8e,0x75,0xac,0x90,0xb1,0x2c,0x60,0x49,0xba,0x3b,0x27,0xf5,0xd5,0xf8,0x65,0x1b,0x00,0x37,0xf6}, "QASH ", 6},
{{0x67,0x1A,0xbB,0xe5,0xCE,0x65,0x24,0x91,0x98,0x53,0x42,0xe8,0x54,0x28,0xEB,0x1b,0x07,0xbC,0x6c,0x64}, "QAU ", 8},
{{0x24,0x67,0xaa,0x6b,0x5a,0x23,0x51,0x41,0x6f,0xd4,0xc3,0xde,0xf8,0x46,0x2d,0x84,0x1f,0xee,0xec,0xec}, "QBX ", 18},
{{0x4a,0x22,0x0E,0x60,0x96,0xB2,0x5E,0xAD,0xb8,0x83,0x58,0xcb,0x44,0x06,0x8A,0x32,0x48,0x25,0x46,0x75}, "QNT ", 18},
{{0xFF,0xAA,0x5f,0xfc,0x45,0x5d,0x91,0x31,0xf8,0xA2,0x71,0x3A,0x74,0x1f,0xD1,0x96,0x03,0x30,0x50,0x8B}, "QRG ", 18},
{{0x69,0x7b,0xea,0xc2,0x8B,0x09,0xE1,0x22,0xC4,0x33,0x2D,0x16,0x39,0x85,0xe8,0xa7,0x31,0x21,0xb9,0x7F}, "QRL ", 8},
{{0x99,0xea,0x4d,0xB9,0xEE,0x77,0xAC,0xD4,0x0B,0x11,0x9B,0xD1,0xdC,0x4E,0x33,0xe1,0xC0,0x70,0xb8,0x0d}, "QSP ", 18},
@@ -531,8 +567,9 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x76,0x7b,0xA2,0x91,0x5E,0xC3,0x44,0x01,0x5a,0x79,0x38,0xE3,0xeE,0xDf,0xeC,0x27,0x85,0x19,0x5D,0x05}, "REA ", 18},
{{0x5f,0x53,0xf7,0xa8,0x07,0x56,0x14,0xb6,0x99,0xba,0xad,0x0b,0xc2,0xc8,0x99,0xf4,0xba,0xd8,0xfb,0xbf}, "REBL ", 18},
{{0x76,0x96,0x0d,0xcc,0xd5,0xa1,0xfe,0x79,0x9f,0x7c,0x29,0xbe,0x9f,0x19,0xce,0xb4,0x62,0x7a,0xeb,0x2f}, "RED ", 18},
{{0xB5,0x63,0x30,0x0A,0x3B,0xAc,0x79,0xFC,0x09,0xB9,0x3b,0x6F,0x84,0xCE,0x0d,0x44,0x65,0xA2,0xAC,0x27}, "REDC ", 18},
{{0x40,0x8e,0x41,0x87,0x6c,0xCC,0xDC,0x0F,0x92,0x21,0x06,0x00,0xef,0x50,0x37,0x26,0x56,0x05,0x2a,0x38}, "REN ", 18},
{{0xE9,0x43,0x27,0xD0,0x7F,0xc1,0x79,0x07,0xb4,0xDB,0x78,0x8E,0x5a,0xDf,0x2e,0xd4,0x24,0xad,0xDf,0xf6}, "REP ", 18},
{{0x19,0x85,0x36,0x5e,0x9f,0x78,0x35,0x9a,0x9B,0x6A,0xD7,0x60,0xe3,0x24,0x12,0xf4,0xa4,0x45,0xE8,0x62}, "REP ", 18},
{{0x8f,0x82,0x21,0xaF,0xbB,0x33,0x99,0x8d,0x85,0x84,0xA2,0xB0,0x57,0x49,0xbA,0x73,0xc3,0x7a,0x93,0x8a}, "REQ ", 18},
{{0xf0,0x5a,0x93,0x82,0xA4,0xC3,0xF2,0x9E,0x27,0x84,0x50,0x27,0x54,0x29,0x3D,0x88,0xb8,0x35,0x10,0x9C}, "REX ", 18},
{{0xd0,0x92,0x9d,0x41,0x19,0x54,0xc4,0x74,0x38,0xdc,0x1d,0x87,0x1d,0xd6,0x08,0x1f,0x5c,0x5e,0x14,0x9c}, "RFR ", 4},
@@ -571,6 +608,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x6E,0x34,0xd8,0xd8,0x47,0x64,0xD4,0x0f,0x6D,0x7b,0x39,0xcd,0x56,0x9F,0xd0,0x17,0xbF,0x53,0x17,0x7D}, "SKRP 1 ", 18},
{{0x32,0x4a,0x48,0xeb,0xcb,0xb4,0x6e,0x61,0x99,0x39,0x31,0xef,0x9d,0x35,0xf6,0x69,0x7c,0xd2,0x90,0x1b}, "SKRP 1-E ", 18},
{{0x7A,0x5f,0xF2,0x95,0xDc,0x82,0x39,0xd5,0xC2,0x37,0x4E,0x4D,0x89,0x42,0x02,0xaA,0xF0,0x29,0xCa,0xb6}, "SLT ", 3},
{{0x79,0x28,0xc8,0xaB,0xF1,0xF7,0x4e,0xF9,0xF9,0x6D,0x4D,0x0a,0x44,0xe3,0xb4,0x20,0x9d,0x36,0x07,0x85}, "SLY ", 18},
{{0x6F,0x6D,0xEb,0x5d,0xb0,0xC4,0x99,0x4A,0x82,0x83,0xA0,0x1D,0x6C,0xFe,0xEB,0x27,0xFc,0x3b,0xBe,0x9C}, "SMART ", 0},
{{0x2d,0xcf,0xaa,0xc1,0x1c,0x9e,0xeb,0xd8,0xc6,0xc4,0x21,0x03,0xfe,0x9e,0x2a,0x6a,0xd2,0x37,0xaf,0x27}, "SmartNod ", 18},
{{0x55,0xf9,0x39,0x85,0x43,0x1f,0xc9,0x30,0x40,0x77,0x68,0x7a,0x35,0xa1,0xba,0x10,0x3d,0xc1,0xe0,0x81}, "SmartMsh ", 18},
@@ -592,7 +630,6 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x68,0xd5,0x7c,0x9a,0x1C,0x35,0xf6,0x3E,0x2c,0x83,0xeE,0x8e,0x49,0xA6,0x4e,0x9d,0x70,0x52,0x8D,0x25}, "SRN ", 18},
{{0xbb,0xFF,0x86,0x2d,0x90,0x6E,0x34,0x8E,0x99,0x46,0xBf,0xb2,0x13,0x2e,0xcB,0x15,0x7D,0xa3,0xD4,0xb4}, "SS shard ", 18},
{{0x6e,0x20,0x50,0xCB,0xFB,0x3e,0xD8,0xA4,0xd3,0x9b,0x64,0xcC,0x9f,0x47,0xE7,0x11,0xa0,0x3a,0x5a,0x89}, "SSH ", 18},
{{0x4A,0x89,0xcD,0x48,0x6f,0xA9,0x96,0xad,0x50,0xc0,0xa6,0x3C,0x35,0xc7,0x87,0x02,0xf5,0x42,0x2a,0x50}, "STABIT ", 3},
{{0x9a,0x00,0x5c,0x9a,0x89,0xbd,0x72,0xa4,0xbd,0x27,0x72,0x1e,0x7a,0x09,0xa3,0xc1,0x1d,0x2b,0x03,0xc4}, "STAC ", 18},
{{0xF7,0x0a,0x64,0x2b,0xD3,0x87,0xF9,0x43,0x80,0xfF,0xb9,0x04,0x51,0xC2,0xc8,0x1d,0x4E,0xb8,0x2C,0xBc}, "STAR ", 18},
{{0x62,0x9a,0xEe,0x55,0xed,0x49,0x58,0x1C,0x33,0xab,0x27,0xf9,0x40,0x3F,0x79,0x92,0xA2,0x89,0xff,0xd5}, "STC ", 18},
@@ -614,32 +651,38 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xc2,0x7a,0x2f,0x05,0xfa,0x57,0x7a,0x83,0xba,0x0f,0xdb,0x4c,0x38,0x44,0x3c,0x07,0x18,0x35,0x65,0x01}, "TAU ", 18},
{{0xFA,0xCC,0xD5,0xFc,0x83,0xc3,0xE4,0xC3,0xc1,0xAC,0x1E,0xF3,0x5D,0x15,0xad,0xf0,0x6b,0xCF,0x20,0x9C}, "TBC2 ", 8},
{{0xAF,0xe6,0x05,0x11,0x34,0x1a,0x37,0x48,0x8d,0xe2,0x5B,0xef,0x35,0x19,0x52,0x56,0x2E,0x31,0xfC,0xc1}, "TBT ", 8},
{{0xfA,0x0e,0xF5,0xE0,0x34,0xCa,0xE1,0xAE,0x75,0x2d,0x59,0xbd,0xb8,0xaD,0xcD,0xe3,0x7E,0xd7,0xaB,0x97}, "TCA ", 18},
{{0x2a,0x1d,0xba,0xbe,0x65,0xc5,0x95,0xB0,0x02,0x2e,0x75,0x20,0x8C,0x34,0x01,0x41,0x39,0xd5,0xd3,0x57}, "TDH ", 18},
{{0x85,0xe0,0x76,0x36,0x1c,0xc8,0x13,0xa9,0x08,0xff,0x67,0x2f,0x9b,0xad,0x15,0x41,0x47,0x44,0x02,0xb2}, "TEL ", 2},
{{0xa7,0xf9,0x76,0xC3,0x60,0xeb,0xBe,0xD4,0x46,0x5c,0x28,0x55,0x68,0x4D,0x1A,0xAE,0x52,0x71,0xeF,0xa9}, "TFL ", 8},
{{0x38,0x83,0xf5,0xe1,0x81,0xfc,0xca,0xf8,0x41,0x0f,0xa6,0x1e,0x12,0xb5,0x9b,0xad,0x96,0x3f,0xb6,0x45}, "THETA ", 18},
{{0xfe,0x7B,0x91,0x5A,0x0b,0xAA,0x0E,0x79,0xf8,0x5c,0x55,0x53,0x26,0x65,0x13,0xF7,0xC1,0xc0,0x3E,0xd0}, "THUG ", 18},
{{0xa5,0xdb,0x1d,0x6f,0x7a,0x0d,0x5b,0xcc,0xc1,0x7d,0x0b,0xfd,0x39,0xd7,0xaf,0x32,0xd5,0xe5,0xed,0xc6}, "TICO ", 5},
{{0x65,0x31,0xf1,0x33,0xe6,0xDe,0xeB,0xe7,0xF2,0xdc,0xE5,0xA0,0x44,0x1a,0xA7,0xef,0x33,0x0B,0x4e,0x53}, "TIME ", 8},
{{0x80,0xbc,0x55,0x12,0x56,0x1c,0x7f,0x85,0xa3,0xa9,0x50,0x8c,0x7d,0xf7,0x90,0x1b,0x37,0x0f,0xa1,0xdf}, "TIO ", 18},
{{0xEa,0x1f,0x34,0x6f,0xaF,0x02,0x3F,0x97,0x4E,0xb5,0xad,0xaf,0x08,0x8B,0xbC,0xdf,0x02,0xd7,0x61,0xF4}, "TIX ", 18},
{{0xaA,0xAf,0x91,0xD9,0xb9,0x0d,0xF8,0x00,0xDf,0x4F,0x55,0xc2,0x05,0xfd,0x69,0x89,0xc9,0x77,0xE7,0x3a}, "TKN ", 8},
{{0xb3,0x61,0x65,0x50,0xab,0xc8,0xaf,0x79,0xc7,0xa5,0x90,0x2d,0xef,0x9e,0xfa,0x3b,0xc9,0xa9,0x52,0x00}, "TLX ", 8},
{{0x08,0xf5,0xa9,0x23,0x5b,0x08,0x17,0x3b,0x75,0x69,0xf8,0x36,0x45,0xd2,0xc7,0xfb,0x55,0xe8,0xcc,0xd8}, "TNT ", 8},
{{0x8e,0xb9,0x65,0xee,0x9c,0xCF,0xBC,0xE7,0x6c,0x0a,0x06,0x26,0x44,0x92,0xc0,0xaf,0xEf,0xc2,0x82,0x6d}, "TOOR ", 18},
{{0xcB,0x3F,0x90,0x2b,0xf9,0x76,0x26,0x39,0x1b,0xF8,0xbA,0x87,0x26,0x4b,0xbC,0x3D,0xC1,0x34,0x69,0xbe}, "TRC ", 18},
{{0x56,0x6F,0xd7,0x99,0x9B,0x1F,0xc3,0x98,0x80,0x22,0xbD,0x38,0x50,0x7A,0x48,0xF0,0xbC,0xf2,0x2c,0x77}, "TRCN ", 18},
{{0xcb,0x94,0xbe,0x6f,0x13,0xa1,0x18,0x2e,0x4a,0x4b,0x61,0x40,0xcb,0x7b,0xf2,0x02,0x5d,0x28,0xe4,0x1b}, "TRST ", 6},
{{0xf2,0x30,0xb7,0x90,0xe0,0x53,0x90,0xfc,0x82,0x95,0xf4,0xd3,0xf6,0x03,0x32,0xc9,0x3b,0xed,0x42,0xe2}, "TRX ", 6},
{{0x6B,0x87,0x99,0x9b,0xE8,0x73,0x58,0x06,0x5b,0xBd,0xE4,0x1e,0x8a,0x0f,0xe0,0xB7,0xb1,0xcd,0x25,0x14}, "TSW ", 18},
{{0x2e,0xF1,0xaB,0x8a,0x26,0x18,0x7C,0x58,0xBB,0x8a,0xAe,0xB1,0x1B,0x2f,0xC6,0xD2,0x5C,0x5c,0x07,0x16}, "TWN ", 18},
{{0xfb,0xd0,0xd1,0xc7,0x7b,0x50,0x17,0x96,0xa3,0x5d,0x86,0xcf,0x91,0xd6,0x5d,0x97,0x78,0xee,0xe6,0x95}, "TWNKL ", 3},
{{0xfb,0xd0,0xd1,0xc7,0x7b,0x50,0x17,0x96,0xa3,0x5d,0x86,0xcf,0x91,0xd6,0x5d,0x97,0x78,0xee,0xe6,0x95}, "MOVED ", 3},
{{0x24,0x69,0x27,0x91,0xbc,0x44,0x4c,0x5c,0xd0,0xb8,0x1e,0x3c,0xbc,0xab,0xa4,0xb0,0x4a,0xcd,0x1f,0x3b}, "UKG ", 18},
{{0x8e,0x5a,0xfc,0x69,0xf6,0x22,0x7a,0x3a,0xd7,0x5e,0xd3,0x46,0xc8,0x72,0x3b,0xc6,0x2c,0xe9,0x71,0x23}, "UMKA ", 4},
{{0x89,0x20,0x5A,0x3A,0x3b,0x2A,0x69,0xDe,0x6D,0xbf,0x7f,0x01,0xED,0x13,0xB2,0x10,0x8B,0x2c,0x43,0xe7}, "Unicorn ", 0},
{{0xd0,0x1d,0xb7,0x3e,0x04,0x78,0x55,0xef,0xb4,0x14,0xe6,0x20,0x20,0x98,0xc4,0xbe,0x4c,0xd2,0x42,0x3b}, "UQC ", 18},
{{0x93,0x16,0x84,0x13,0x9f,0x75,0x6C,0x24,0xeC,0x07,0x31,0xE9,0xF7,0x4F,0xE5,0x0e,0x55,0x48,0xdD,0xeF}, "URB ", 18},
{{0xD7,0x60,0xAD,0xdF,0xb2,0x4D,0x9C,0x01,0xFe,0x4B,0xfe,0xa7,0x47,0x5C,0x5e,0x36,0x36,0x68,0x40,0x58}, "USDM ", 2},
{{0xda,0xc1,0x7f,0x95,0x8d,0x2e,0xe5,0x23,0xa2,0x20,0x62,0x06,0x99,0x45,0x97,0xc1,0x3d,0x83,0x1e,0xc7}, "USDT ", 6},
{{0x70,0xa7,0x28,0x33,0xd6,0xbf,0x7f,0x50,0x8c,0x82,0x24,0xce,0x59,0xea,0x1e,0xf3,0xd0,0xea,0x3a,0x38}, "UTK ", 18},
{{0x9e,0x33,0x19,0x63,0x6e,0x21,0x26,0xe3,0xc0,0xbc,0x9e,0x31,0x34,0xAE,0xC5,0xe1,0x50,0x8A,0x46,0xc7}, "UTN-P ", 18},
{{0x35,0x43,0x63,0x8e,0xD4,0xa9,0x00,0x6E,0x48,0x40,0xB1,0x05,0x94,0x42,0x71,0xBc,0xea,0x15,0x60,0x5D}, "UUU ", 18},
{{0x57,0xC7,0x5E,0xCC,0xc8,0x55,0x71,0x36,0xD3,0x26,0x19,0xa1,0x91,0xfB,0xCD,0xc8,0x85,0x60,0xd7,0x11}, "VDG ", 0},
{{0x82,0xBD,0x52,0x6b,0xDB,0x71,0x8C,0x6d,0x4D,0xD2,0x29,0x1E,0xd0,0x13,0xA5,0x18,0x6c,0xAE,0x2D,0xCa}, "VDOC ", 18},
{{0x34,0x0d,0x2b,0xde,0x5e,0xb2,0x8c,0x1e,0xed,0x91,0xb2,0xf7,0x90,0x72,0x3e,0x3b,0x16,0x06,0x13,0xb7}, "VEE ", 18},
{{0xEb,0xeD,0x4f,0xF9,0xfe,0x34,0x41,0x3d,0xb8,0xfC,0x82,0x94,0x55,0x6B,0xBD,0x15,0x28,0xa4,0xDA,0xca}, "VENUS ", 3},
@@ -657,6 +700,7 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0x92,0xe7,0x8d,0xae,0x13,0x15,0x06,0x7a,0x88,0x19,0xef,0xd6,0xdc,0xa4,0x32,0xde,0x9d,0xcd,0xe2,0xe9}, "VRS ", 6},
{{0x5c,0x54,0x3e,0x7A,0xE0,0xA1,0x10,0x4f,0x78,0x40,0x6C,0x34,0x0E,0x9C,0x64,0xFD,0x9f,0xCE,0x51,0x70}, "VSL ", 18},
{{0x28,0x6B,0xDA,0x14,0x13,0xa2,0xDf,0x81,0x73,0x1D,0x49,0x30,0xce,0x2F,0x86,0x2a,0x35,0xA6,0x09,0xfE}, "WaBi ", 18},
{{0x82,0x9A,0x4c,0xA1,0x30,0x33,0x83,0xF1,0x08,0x2B,0x6B,0x1f,0xB9,0x37,0x11,0x6e,0x4b,0x3b,0x56,0x05}, "WATT ", 18},
{{0x39,0xBb,0x25,0x9F,0x66,0xE1,0xC5,0x9d,0x5A,0xBE,0xF8,0x83,0x75,0x97,0x9b,0x4D,0x20,0xD9,0x80,0x22}, "WAX ", 8},
{{0x74,0x95,0x1B,0x67,0x7d,0xe3,0x2D,0x59,0x6E,0xE8,0x51,0xA2,0x33,0x33,0x69,0x26,0xe6,0xA2,0xcd,0x09}, "WBA ", 7},
{{0x6a,0x0a,0x97,0xe4,0x7d,0x15,0xaa,0xd1,0xd1,0x32,0xa1,0xac,0x79,0xa4,0x80,0xe3,0xf2,0x07,0x90,0x63}, "WCT ", 18},
@@ -668,9 +712,9 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xD3,0xC0,0x07,0x72,0xB2,0x4D,0x99,0x7A,0x81,0x22,0x49,0xca,0x63,0x7a,0x92,0x1e,0x81,0x35,0x77,0x01}, "WILD ", 18},
{{0x66,0x70,0x88,0xb2,0x12,0xce,0x3d,0x06,0xa1,0xb5,0x53,0xa7,0x22,0x1E,0x1f,0xD1,0x90,0x00,0xd9,0xaF}, "WINGS ", 18},
{{0xF6,0xB5,0x5a,0xcB,0xBC,0x49,0xf4,0x52,0x4A,0xa4,0x8D,0x19,0x28,0x1A,0x9A,0x77,0xc5,0x4D,0xE1,0x0f}, "WLK ", 18},
{{0xbf,0xbe,0x53,0x32,0xf1,0x72,0xd7,0x78,0x11,0xbc,0x6c,0x27,0x28,0x44,0xf3,0xe5,0x4a,0x7b,0x23,0xbb}, "WMK ", 18},
{{0xd7,0x3A,0x66,0xB8,0xFB,0x26,0xBe,0x8B,0x0A,0xcD,0x7c,0x52,0xBd,0x32,0x50,0x54,0xAc,0x7d,0x46,0x8b}, "WNK ", 18},
{{0x72,0x87,0x81,0xE7,0x57,0x35,0xdc,0x09,0x62,0xDf,0x3a,0x51,0xd7,0xEf,0x47,0xE7,0x98,0xA7,0x10,0x7E}, "WOLK ", 18},
{{0xd1,0x8e,0x45,0x4d,0x84,0x4e,0xb0,0x00,0x9d,0x32,0xe0,0x7a,0x0c,0xde,0x89,0xe1,0x8d,0x64,0xcf,0xb4}, "WORK ", 18},
{{0x62,0x08,0x72,0x45,0x08,0x71,0x25,0xd3,0xdb,0x5b,0x9a,0x3d,0x71,0x3d,0x78,0xe7,0xbb,0xc3,0x1e,0x54}, "WPC ", 18},
{{0x4C,0xF4,0x88,0x38,0x7F,0x03,0x5F,0xF0,0x8c,0x37,0x15,0x15,0x56,0x2C,0xBa,0x71,0x2f,0x90,0x15,0xd4}, "WPR ", 18},
{{0x71,0xe8,0xd7,0x4f,0xf1,0xc9,0x23,0xe3,0x69,0xd0,0xe7,0x0d,0xfb,0x09,0x86,0x66,0x29,0xc4,0xdd,0x35}, "WRK ", 18},
{{0xb7,0xcb,0x1c,0x96,0xdb,0x6b,0x22,0xb0,0xd3,0xd9,0x53,0x6e,0x01,0x08,0xd0,0x62,0xbd,0x48,0x8f,0x74}, "WTC ", 18},
@@ -688,9 +732,10 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = {
{{0xBC,0x86,0x72,0x7E,0x77,0x0d,0xe6,0x8B,0x10,0x60,0xC9,0x1f,0x6B,0xB6,0x94,0x5c,0x73,0xe1,0x03,0x88}, "XNK ", 18},
{{0xab,0x95,0xe9,0x15,0xc1,0x23,0xfd,0xed,0x5b,0xdf,0xb6,0x32,0x5e,0x35,0xef,0x55,0x15,0xf1,0xea,0x69}, "XNN ", 18},
{{0x57,0x2e,0x6f,0x31,0x80,0x56,0xba,0x0c,0x5d,0x47,0xa4,0x22,0x65,0x31,0x13,0x84,0x3d,0x25,0x06,0x91}, "XNT ", 0},
{{0xBB,0x1f,0xA4,0xFd,0xEB,0x34,0x59,0x73,0x3b,0xF6,0x7E,0xbC,0x6f,0x89,0x30,0x03,0xfA,0x97,0x6a,0x82}, "XPAT ", 18},
{{0xB2,0x47,0x54,0xbE,0x79,0x28,0x15,0x53,0xdc,0x1a,0xdC,0x16,0x0d,0xdF,0x5C,0xd9,0xb7,0x43,0x61,0xa4}, "XRL ", 9},
{{0x0F,0x51,0x3f,0xFb,0x49,0x26,0xff,0x82,0xD7,0xF6,0x0A,0x05,0x06,0x90,0x47,0xAc,0xA2,0x95,0xC4,0x13}, "XSC ", 18},
{{0x6f,0x7a,0x4b,0xac,0x33,0x15,0xb5,0x08,0x2f,0x79,0x31,0x61,0xa2,0x2e,0x26,0x66,0x6d,0x22,0x71,0x7f}, "YEED ", 18},
{{0xca,0x27,0x96,0xf9,0xf6,0x1d,0xc7,0xb2,0x38,0xaa,0xb0,0x43,0x97,0x1e,0x49,0xc6,0x16,0x4d,0xf3,0x75}, "YEED ", 18},
{{0x0F,0x33,0xbb,0x20,0xa2,0x82,0xA7,0x64,0x9C,0x7B,0x3A,0xFf,0x64,0x4F,0x08,0x4a,0x93,0x48,0xe9,0x33}, "YUPIE ", 18},
{{0x67,0x81,0xa0,0xf8,0x4c,0x7e,0x9e,0x84,0x6d,0xcb,0x84,0xa9,0xa5,0xbd,0x49,0x33,0x30,0x67,0xb1,0x04}, "ZAP ", 18},
{{0x05,0xf4,0xa4,0x2e,0x25,0x1f,0x2d,0x52,0xb8,0xed,0x15,0xE9,0xFE,0xdA,0xac,0xFc,0xEF,0x1F,0xAD,0x27}, "ZIL ", 12},

View File

@@ -25,7 +25,7 @@ typedef struct tokenDefinition_t {
#define NUM_TOKENS_AKROMA 0
#define NUM_TOKENS_ELLAISM 1
#define NUM_TOKENS_ETHEREUM 677
#define NUM_TOKENS_ETHEREUM 722
#define NUM_TOKENS_ETHEREUM_CLASSIC 0
#define NUM_TOKENS_ETHERSOCIAL 0
#define NUM_TOKENS_ETHER1 0