Enum ssvm_evmc_sys::evmc_status_code[][src]

#[repr(i32)]pub enum evmc_status_code {
    EVMC_SUCCESS,
    EVMC_FAILURE,
    EVMC_REVERT,
    EVMC_OUT_OF_GAS,
    EVMC_INVALID_INSTRUCTION,
    EVMC_UNDEFINED_INSTRUCTION,
    EVMC_STACK_OVERFLOW,
    EVMC_STACK_UNDERFLOW,
    EVMC_BAD_JUMP_DESTINATION,
    EVMC_INVALID_MEMORY_ACCESS,
    EVMC_CALL_DEPTH_EXCEEDED,
    EVMC_STATIC_MODE_VIOLATION,
    EVMC_PRECOMPILE_FAILURE,
    EVMC_CONTRACT_VALIDATION_FAILURE,
    EVMC_ARGUMENT_OUT_OF_RANGE,
    EVMC_WASM_UNREACHABLE_INSTRUCTION,
    EVMC_WASM_TRAP,
    EVMC_INTERNAL_ERROR,
    EVMC_REJECTED,
    EVMC_OUT_OF_MEMORY,
}

The execution status code.

Successful execution is represented by ::EVMC_SUCCESS having value 0.

Positive values represent failures defined by VM specifications with generic ::EVMC_FAILURE code of value 1.

Status codes with negative values represent VM internal errors not provided by EVM specifications. These errors MUST not be passed back to the caller. They MAY be handled by the Client in predefined manner (see e.g. ::EVMC_REJECTED), otherwise internal errors are not recoverable. The generic representant of errors is ::EVMC_INTERNAL_ERROR but an EVM implementation MAY return negative status codes that are not defined in the EVMC documentation.

@note In case new status codes are needed, please create an issue or pull request in the EVMC repository (https://github.com/ethereum/evmc).

Variants

EVMC_SUCCESS

Execution finished with success.

EVMC_FAILURE

Generic execution failure.

EVMC_REVERT

Execution terminated with REVERT opcode.

In this case the amount of gas left MAY be non-zero and additional output data MAY be provided in ::evmc_result.

EVMC_OUT_OF_GAS

The execution has run out of gas.

EVMC_INVALID_INSTRUCTION

The designated INVALID instruction has been hit during execution.

The EIP-141 (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-141.md) defines the instruction 0xfe as INVALID instruction to indicate execution abortion coming from high-level languages. This status code is reported in case this INVALID instruction has been encountered.

EVMC_UNDEFINED_INSTRUCTION

An undefined instruction has been encountered.

EVMC_STACK_OVERFLOW

The execution has attempted to put more items on the EVM stack than the specified limit.

EVMC_STACK_UNDERFLOW

Execution of an opcode has required more items on the EVM stack.

EVMC_BAD_JUMP_DESTINATION

Execution has violated the jump destination restrictions.

EVMC_INVALID_MEMORY_ACCESS

Tried to read outside memory bounds.

An example is RETURNDATACOPY reading past the available buffer.

EVMC_CALL_DEPTH_EXCEEDED

Call depth has exceeded the limit (if any)

EVMC_STATIC_MODE_VIOLATION

Tried to execute an operation which is restricted in static mode.

EVMC_PRECOMPILE_FAILURE

A call to a precompiled or system contract has ended with a failure.

An example: elliptic curve functions handed invalid EC points.

EVMC_CONTRACT_VALIDATION_FAILURE

Contract validation has failed (e.g. due to EVM 1.5 jump validity, Casper's purity checker or ewasm contract rules).

EVMC_ARGUMENT_OUT_OF_RANGE

An argument to a state accessing method has a value outside of the accepted range of values.

EVMC_WASM_UNREACHABLE_INSTRUCTION

A WebAssembly unreachable instruction has been hit during execution.

EVMC_WASM_TRAP

A WebAssembly trap has been hit during execution. This can be for many reasons, including division by zero, validation errors, etc.

EVMC_INTERNAL_ERROR

EVM implementation generic internal error.

EVMC_REJECTED

The execution of the given code and/or message has been rejected by the EVM implementation.

This error SHOULD be used to signal that the EVM is not able to or willing to execute the given code type or message. If an EVM returns the ::EVMC_REJECTED status code, the Client MAY try to execute it in other EVM implementation. For example, the Client tries running a code in the EVM 1.5. If the code is not supported there, the execution falls back to the EVM 1.0.

EVMC_OUT_OF_MEMORY

The VM failed to allocate the amount of memory needed for execution.

Trait Implementations

impl Clone for evmc_status_code[src]

impl Copy for evmc_status_code[src]

impl Debug for evmc_status_code[src]

impl Eq for evmc_status_code[src]

impl Hash for evmc_status_code[src]

impl PartialEq<evmc_status_code> for evmc_status_code[src]

impl StructuralEq for evmc_status_code[src]

impl StructuralPartialEq for evmc_status_code[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.