name | category |
---|---|
EVM JIT Binary Interface |
#include <stdint.h>
// JIT object opaque type
typedef struct evm_jit evm_jit;
// Contract execution return code
typedef int evm_jit_return_code;
// Host-endian 256-bit integer type
typedef struct i256 i256;
// Big-endian right aligned 256-bit hash
typedef struct h256 h256;
// Runtime data struct - must be provided by external language (Go, C++, Python)
typedef struct evm_jit_rt evm_jit_rt;
// Runtime callback functions - implementations must be provided by external language (Go, C++, Python)
void evm_jit_rt_sload(evm_jit_rt* _rt, i256* _index, i256* _ret);
void evm_jit_rt_sstore(evm_jit_rt* _rt, i256* _index, i256* _value);
void evm_jit_rt_balance(evm_jit_rt* _rt, h256* _address, i256* _ret);
// And so on...
evm_jit* evm_jit_create(evm_jit_rt* _runtime_data);
evm_jit_return_code evm_jit_execute(evm_jit* _jit);
void evm_jit_get_return_data(evm_jit* _jit, char* _return_data_offset, size_t* _return_data_size);
void evm_jit_destroy(evm_jit* _jit);
Informs user about contract exit status:
Code | Exit Status |
---|---|
0 | Stop |
1 | Return |
2 | Suicide |
101 | Bad Jump Destination |
102 | Out Of Gas |
103 | Stack Underflow |
104 | Bad Instruction |
A set of data possibly needed by running contract, sometimes by the compiler itself. Can be called ExtVM data in C++, VMEnv data in Go.
Name | Type | Access | Description |
---|---|---|---|
Gas | i256 | inout | Gas counter. |
Address | h256 | in | Account address. |
Caller | h256 | in | |
Origin | h256 | in | |
CallValue | i256 | in | |
CallDataSize | i256 | in | |
GasPrice | i256 | in | |
PrevHash | i256 | in | |
CoinBase | h256 | in | |
TimeStamp | i256 | in | |
Number | i256 | in | |
Difficulty | i256 | in | |
GasLimit | i256 | in | |
CodeSize | i256 | const | |
CallData | byte* | in | |
Code | byte* | const |