49 lines
1.5 KiB
C
49 lines
1.5 KiB
C
#include "manage_asset_info.h"
|
|
#include "shared_context.h"
|
|
|
|
void forget_known_assets(void) {
|
|
memset(tmpCtx.transactionContext.assetSet, false, MAX_ASSETS);
|
|
tmpCtx.transactionContext.currentAssetIndex = 0;
|
|
}
|
|
|
|
static extraInfo_t *get_asset_info(uint8_t index) {
|
|
if (index >= MAX_ASSETS) {
|
|
return NULL;
|
|
}
|
|
return &tmpCtx.transactionContext.extraInfo[index];
|
|
}
|
|
|
|
static bool asset_info_is_set(uint8_t index) {
|
|
if (index >= MAX_ASSETS) {
|
|
return false;
|
|
}
|
|
return tmpCtx.transactionContext.assetSet[index];
|
|
}
|
|
|
|
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_ASSETS; i++) {
|
|
extraInfo_t *currentItem = get_asset_info(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;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
extraInfo_t *get_current_asset_info(void) {
|
|
return get_asset_info(tmpCtx.transactionContext.currentAssetIndex);
|
|
}
|
|
|
|
void validate_current_asset_info(void) {
|
|
// mark it as set
|
|
tmpCtx.transactionContext.assetSet[tmpCtx.transactionContext.currentAssetIndex] = true;
|
|
// increment index
|
|
tmpCtx.transactionContext.currentAssetIndex =
|
|
(tmpCtx.transactionContext.currentAssetIndex + 1) % MAX_ASSETS;
|
|
}
|