Plugins support WIP
This commit is contained in:
committed by
TamtamHero
parent
3d40be2db0
commit
38da718b00
63
src_plugins/erc20/erc20_plugin.c
Normal file
63
src_plugins/erc20/erc20_plugin.c
Normal file
@@ -0,0 +1,63 @@
|
||||
#include <string.h>
|
||||
#include "eth_plugin_interface.h"
|
||||
|
||||
typedef struct erc20_parameters_t {
|
||||
|
||||
uint8_t destinationAddress[20];
|
||||
uint8_t amount[32];
|
||||
|
||||
} erc20_parameters_t;
|
||||
|
||||
void erc20_plugin_call(int message, void *parameters) {
|
||||
|
||||
switch(message) {
|
||||
case ETH_PLUGIN_INIT_CONTRACT: {
|
||||
ethPluginInitContract_t *msg = (ethPluginInitContract_t*)parameters;
|
||||
PRINTF("erc20 plugin init\n");
|
||||
msg->result = ETH_PLUGIN_RESULT_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case ETH_PLUGIN_PROVIDE_PARAMETER : {
|
||||
ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t*)parameters;
|
||||
erc20_parameters_t *context = (erc20_parameters_t*)msg->pluginContext;
|
||||
PRINTF("erc20 plugin provide parameter %d %.*H\n", msg->parameterOffset, 32, msg->parameter);
|
||||
switch(msg->parameterOffset) {
|
||||
case 4:
|
||||
memmove(context->destinationAddress, msg->parameter + 12, 20);
|
||||
msg->result = ETH_PLUGIN_RESULT_OK;
|
||||
break;
|
||||
case 4 + 32:
|
||||
memmove(context->amount, msg->parameter, 32);
|
||||
msg->result = ETH_PLUGIN_RESULT_OK;
|
||||
break;
|
||||
default:
|
||||
PRINTF("Unhandled parameter offset\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ETH_PLUGIN_FINALIZE: {
|
||||
ethPluginFinalize_t *msg = (ethPluginFinalize_t*)parameters;
|
||||
erc20_parameters_t *context = (erc20_parameters_t*)msg->pluginContext;
|
||||
PRINTF("erc20 plugin finalize\n");
|
||||
msg->tokenLookup1 = msg->pluginSharedRO->txContent->destination;
|
||||
msg->amount = context->amount;
|
||||
msg->address = context->destinationAddress;
|
||||
msg->uiType = ETH_UI_TYPE_AMOUNT_ADDRESS;
|
||||
msg->result = ETH_PLUGIN_RESULT_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case ETH_PLUGIN_PROVIDE_TOKEN: {
|
||||
ethPluginProvideToken_t *msg = (ethPluginProvideToken_t*)parameters;
|
||||
PRINTF("erc20 plugin provide token %d\n", (msg->token1 != NULL));
|
||||
msg->result = (msg->token1 != NULL ? ETH_PLUGIN_RESULT_OK : ETH_PLUGIN_RESULT_FALLBACK);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
PRINTF("Unhandled message %d\n", message);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user