From 18a02dcacbcd9580db4c035cd1fbda352296b872 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 7 May 2024 17:17:26 +0200 Subject: [PATCH] Added some asset info util functions --- src/manage_asset_info.c | 27 ++++++++++++++++++++++++++- src/manage_asset_info.h | 2 ++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/manage_asset_info.c b/src/manage_asset_info.c index fd25099..bfaa589 100644 --- a/src/manage_asset_info.c +++ b/src/manage_asset_info.c @@ -4,12 +4,26 @@ void reset_known_tokens(void) { memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS); } +static extraInfo_t *get_asset_info(uint8_t index) { + if (index >= MAX_ITEMS) { + return NULL; + } + return &tmpCtx.transactionContext.extraInfo[index]; +} + +static bool asset_info_is_set(uint8_t index) { + if (index >= MAX_ITEMS) { + return false; + } + return tmpCtx.transactionContext.tokenSet[index] != 0; +} + extraInfo_t *get_asset_info_by_addr(const uint8_t *contractAddress) { // Works for ERC-20 & NFT tokens since both structs in the union have the // contract address aligned for (uint8_t i = 0; i < MAX_ITEMS; i++) { extraInfo_t *currentItem = &tmpCtx.transactionContext.extraInfo[i]; - if (tmpCtx.transactionContext.tokenSet[i] && + if (asset_info_is_set(i) && (memcmp(currentItem->token.address, contractAddress, ADDRESS_LENGTH) == 0)) { PRINTF("Token found at index %d\n", i); return currentItem; @@ -18,3 +32,14 @@ extraInfo_t *get_asset_info_by_addr(const uint8_t *contractAddress) { return NULL; } + +extraInfo_t *get_current_asset_info(void) { + return get_asset_info(tmpCtx.transactionContext.currentItemIndex); +} + +void validate_current_asset_info(void) { + // mark it as set + tmpCtx.transactionContext.tokenSet[tmpCtx.transactionContext.currentItemIndex] = 1; + // increment index + tmpCtx.transactionContext.currentItemIndex = (tmpCtx.transactionContext.currentItemIndex + 1) % MAX_ITEMS; +} diff --git a/src/manage_asset_info.h b/src/manage_asset_info.h index 9926801..fa478b4 100644 --- a/src/manage_asset_info.h +++ b/src/manage_asset_info.h @@ -4,3 +4,5 @@ void reset_known_tokens(void); extraInfo_t *get_asset_info_by_addr(const uint8_t *contractAddress); +extraInfo_t *get_current_asset_info(void); +void validate_current_asset_info(void);