mirror of https://github.com/status-im/evmc.git
Update EVM-C examples
This commit is contained in:
parent
5defa1d222
commit
efb73335c2
|
@ -1,8 +1,12 @@
|
|||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
#include "evm.h"
|
||||
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#pragma clang diagnostic ignored "-Wunused-parameter"
|
||||
|
||||
struct evm_uint256 balance(struct evm_env* env, struct evm_hash160 address)
|
||||
{
|
||||
struct evm_uint256 ret = { .words = { 1 } };
|
||||
|
@ -64,7 +68,8 @@ int64_t call(
|
|||
int main(int argc, char *argv[]) {
|
||||
printf("Using VM: %s (%s)\n", evm_get_info(EVM_NAME), evm_get_info(EVM_VERSION));
|
||||
|
||||
struct evm_instance* jit = evm_create(query, update, call);
|
||||
struct evm_fn_table ftab = examplevm_get_fn_table();
|
||||
struct evm_instance* jit = ftab.create(query, update, call);
|
||||
|
||||
char const code[] = "exec()";
|
||||
const size_t code_size = sizeof(code);
|
||||
|
@ -74,23 +79,24 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
int64_t gas = 200000;
|
||||
struct evm_result result =
|
||||
evm_execute(jit, NULL, EVM_HOMESTEAD, code_hash, (const uint8_t *)code, code_size, gas, (const uint8_t *)input,
|
||||
ftab.execute(jit, NULL, EVM_HOMESTEAD, code_hash, (const uint8_t *)code, code_size, gas, (const uint8_t *)input,
|
||||
sizeof(input), value);
|
||||
|
||||
printf("Execution result:\n");
|
||||
if (result.gas_left & EVM_EXCEPTION) {
|
||||
printf(" EVM eception\n");
|
||||
}
|
||||
printf(" Gas used: %lld\n", gas - result.gas_left);
|
||||
printf(" Gas left: %lld\n", result.gas_left);
|
||||
printf(" Gas used: " PRId64 "\n", gas - result.gas_left);
|
||||
printf(" Gas left: " PRId64 "\n", result.gas_left);
|
||||
printf(" Output size: %zd\n", result.output_size);
|
||||
|
||||
printf(" Output: ");
|
||||
for (int i = 0; i < result.output_size; i++) {
|
||||
size_t i = 0;
|
||||
for (i = 0; i < result.output_size; i++) {
|
||||
printf("%02x ", result.output_data[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
evm_destroy_result(result);
|
||||
evm_destroy(jit);
|
||||
ftab.release_result(&result);
|
||||
ftab.destroy(jit);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include <stdbool.h>
|
||||
#include "evm.h"
|
||||
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#pragma clang diagnostic ignored "-Wunused-parameter"
|
||||
|
||||
struct evm_instance {
|
||||
evm_query_fn query_fn;
|
||||
evm_update_fn update_fn;
|
||||
|
@ -19,7 +22,7 @@ EXPORT char const* evm_get_info(enum evm_info_key key)
|
|||
return "";
|
||||
}
|
||||
|
||||
EXPORT struct evm_instance* evm_create(evm_query_fn query_fn,
|
||||
static struct evm_instance* evm_create(evm_query_fn query_fn,
|
||||
evm_update_fn update_fn,
|
||||
evm_call_fn call_fn)
|
||||
{
|
||||
|
@ -34,19 +37,12 @@ EXPORT struct evm_instance* evm_create(evm_query_fn query_fn,
|
|||
return ret;
|
||||
}
|
||||
|
||||
EXPORT void evm_destroy(struct evm_instance* evm)
|
||||
static void evm_destroy(struct evm_instance* evm)
|
||||
{
|
||||
free(evm);
|
||||
}
|
||||
|
||||
EXPORT int evm_set_option(struct evm_instance* evm,
|
||||
char const* name,
|
||||
char const* value)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT struct evm_result evm_execute(struct evm_instance* instance,
|
||||
static struct evm_result evm_execute(struct evm_instance* instance,
|
||||
struct evm_env* env,
|
||||
enum evm_mode mode,
|
||||
struct evm_hash256 code_hash,
|
||||
|
@ -68,21 +64,13 @@ EXPORT struct evm_result evm_execute(struct evm_instance* instance,
|
|||
return ret;
|
||||
}
|
||||
|
||||
EXPORT void evm_destroy_result(struct evm_result result)
|
||||
static void evm_release_result(struct evm_result const* result)
|
||||
{
|
||||
}
|
||||
|
||||
EXPORT bool evmjit_is_code_ready(struct evm_instance* instance,
|
||||
enum evm_mode mode,
|
||||
struct evm_hash256 code_hash)
|
||||
EXPORT struct evm_fn_table examplevm_get_fn_table()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
EXPORT void evmjit_compile(struct evm_instance* instance,
|
||||
enum evm_mode mode,
|
||||
uint8_t const* code,
|
||||
size_t code_size,
|
||||
struct evm_hash256 code_hash)
|
||||
{
|
||||
}
|
||||
struct evm_fn_table ftab = {evm_create, evm_destroy, evm_execute,
|
||||
evm_release_result, 0, 0, 0};
|
||||
return ftab;
|
||||
}
|
|
@ -384,6 +384,10 @@ struct evm_fn_table {
|
|||
evm_set_option_fn set_option;
|
||||
};
|
||||
|
||||
|
||||
struct evm_fn_table examplevm_get_fn_table();
|
||||
|
||||
|
||||
EXPORT struct evm_fn_table evmjit_get_fn_table();
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue