diff --git a/include/evm.h b/include/evm.h index 20f2648..406e020 100644 --- a/include/evm.h +++ b/include/evm.h @@ -36,18 +36,6 @@ enum { EVM_ABI_VERSION = 0 }; -/// Opaque structure representing execution context managed by the Host. -/// -/// The Host MAY pass the pointer to the Host execution context to -/// ::evm_execute_fn. The EVM MUST pass the same pointer back to the Host in -/// every callback function. -struct evm_context { - - /// @todo Move evm_host here. We need it now, because structs cannot be - /// empty in C. - void* future_fn_table; -}; - /// Big-endian 256-bit integer. /// /// 32 bytes of data representing big-endian 256-bit integer. I.e. bytes[0] is @@ -101,6 +89,8 @@ struct evm_tx_context { struct evm_uint256be block_difficulty; }; +struct evm_context; + typedef void (*evm_get_tx_context_fn)(struct evm_tx_context* result, struct evm_context* context); @@ -325,6 +315,21 @@ struct evm_host { }; +/// Execution context managed by the Host. +/// +/// The Host MUST pass the pointer to the execution context to +/// ::evm_execute_fn. The EVM MUST pass the same pointer back to the Host in +/// every callback function. +/// The context MUST contain at least the function table defining the context +/// callback interface. +/// Optionally, The Host MAY include in the context additional data. +struct evm_context { + + /// Function table defining the context interface. + const struct evm_host* fn_table; +}; + + struct evm_instance; ///< Forward declaration. /// Creates the EVM instance. @@ -332,10 +337,8 @@ struct evm_instance; ///< Forward declaration. /// Creates and initializes an EVM instance by providing the information /// about runtime callback functions. /// -/// @param host Pointer to an EVM Host controlling the created EVM -/// instance. MUST NOT be null. /// @return Pointer to the created EVM instance. -typedef struct evm_instance* (*evm_create_fn)(const struct evm_host* host); +typedef struct evm_instance* (*evm_create_fn)(); /// Destroys the EVM instance. ///