Add contract address and selector to setExternalPlugin

This commit is contained in:
TamtamHero
2021-03-22 14:41:35 +01:00
committed by pscott
parent 93083ecb4b
commit f096e91690
3 changed files with 32 additions and 4 deletions

View File

@@ -63,6 +63,17 @@ eth_plugin_result_t eth_plugin_perform_init(uint8_t *contractAddress,
PRINTF("Selector %.*H\n", 4, init->selector);
if (tmpCtx.transactionContext.externalPluginIsSet) {
// check if the registered external plugin matches the TX contract address / method selector
if (memcmp(contractAddress,
dataContext.tokenContext.contract_address,
sizeof(dataContext.tokenContext.contract_address)) != 0) {
os_sched_exit(0);
}
if (memcmp(init->selector,
dataContext.tokenContext.method_selector,
sizeof(dataContext.tokenContext.method_selector)) != 0) {
os_sched_exit(0);
}
PRINTF("External plugin will be used\n");
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_OK;
contractAddress = NULL;

View File

@@ -58,7 +58,13 @@ typedef struct tokenContext_t {
uint8_t pluginUiCurrentItem;
uint8_t pluginUiState;
uint8_t pluginContext[3 * 32];
union {
struct {
uint8_t contract_address[20];
uint8_t method_selector[4];
};
uint8_t pluginContext[3 * 32];
};
#ifdef HAVE_STARKWARE
uint8_t quantum[32];