The Ethereum Environment Interface exposes the core Ethereum API to the ewasm environment. The Ethereum module will be implemented in the Ethereum client's native language. All parameters and returns are restricted to 32 or 64 bit integers. Floats are disallowed.
We define the following Ethereum data types:
bytes
: an array of bytes with unrestricted lengthaddress
: a 160 bit number, represented as a 20 bytes long little endian unsigned integer in memoryu128
: a 128 bit number, represented as a 16 bytes long little endian unsigned integer in memoryu256
: a 256 bit number, represented as a 32 bytes long little endian unsigned integer in memory
We also define the following WebAssembly data types:
i32
: same asi32
in WebAssemblyi32ptr
: same asi32
in WebAssembly, but treated as a pointer to a WebAssembly memory offseti64
: same asi64
in WebAssembly
Subtracts an amount to the gas counter
Parameters
amount
i64 the amount to subtract to the gas counter
Returns
nothing
Gets address of currently executing account and stores it in memory at the given offset.
Parameters
resultOffset
i32ptr the memory offset at which the address is to be stored (address
)
Returns
nothing
Gets balance of the given account and loads it into memory at the given offset.
Parameters
addressOffset
i32ptr the memory offset to load the address from (address
)resultOffset
i32ptr the memory offset to load the balance into (u128
)
Returns
nothing
Gets the hash of one of the 256 most recent complete blocks.
Parameters
number
i64 which block to loadresultOffset
i32ptr the memory offset to load the hash into (u256
)
Returns
result
i32 Returns 0 on success and 1 on failure
Note: in case of failure, the output memory pointed by resultOffset
is unchanged.
Sends a message with arbitrary data to a given address path
Parameters
gas
i64 the gas limitaddressOffset
i32ptr the memory offset to load the address from (address
)valueOffset
i32ptr the memory offset to load the value from (u128
)dataOffset
i32ptr the memory offset to load data from (bytes
)dataLength
i32 the length of data
Returns
result
i32 Returns 0 on success, 1 on failure and 2 on revert
Copies the input data in current environment to memory. This pertains to the input data passed with the message call instruction or transaction.
Parameters
resultOffset
i32ptr the memory offset to load data into (bytes
)dataOffset
i32 the offset in the input datalength
i32 the length of data to copy
Returns
nothing
Get size of input data in current environment. This pertains to the input data passed with the message call instruction or transaction.
Parameters
none
Returns
callDataSize
i32
Message-call into this account with an alternative account's code.
Parameters
gas
i64 the gas limitaddressOffset
i32ptr the memory offset to load the address from (address
)valueOffset
i32ptr the memory offset to load the value from (u128
)dataOffset
i32ptr the memory offset to load data from (bytes
)dataLength
i32 the length of data
Returns
result
i32 Returns 0 on success, 1 on failure and 2 on revert
Message-call into this account with an alternative account’s code, but persisting the current values for sender and value.
Parameters
gas
i64 the gas limitaddressOffset
i32ptr the memory offset to load the address from (address
)dataOffset
i32ptr the memory offset to load data from (bytes
)dataLength
i32 the length of data
Returns
result
i32 Returns 0 on success, 1 on failure and 2 on revert
Sends a message with arbitrary data to a given address path, but disallow state
modifications. This includes log
, create
, selfdestruct
and call
with a non-zero
value.
Parameters
gas
i64 the gas limitaddressOffset
i32ptr the memory offset to load the address from (address
)dataOffset
i32ptr the memory offset to load data from (bytes
)dataLength
i32 the length of data
Returns
result
i32 Returns 0 on success, 1 on failure and 2 on revert
Store 256-bit a value in memory to persistent storage
Parameters
pathOffset
i32ptr the memory offset to load the path from (u256
)valueOffset
i32ptr the memory offset to load the value from (u256
)
Returns
nothing
Loads a 256-bit a value to memory from persistent storage
Parameters
pathOffset
i32ptr the memory offset to load the path from (u256
)resultOffset
i32ptr the memory offset to store the result at (u256
)
Returns
nothing
Gets caller address and loads it into memory at the given offset. This is the address of the account that is directly responsible for this execution.
Parameters
resultOffset
i32ptr the memory offset to load the address into (address
)
Returns
nothing
Gets the deposited value by the instruction/transaction responsible for this execution and loads it into memory at the given location.
Parameters
resultOffset
i32ptr the memory offset to load the value into (u128
)
Returns
nothing
Copies the code running in current environment to memory.
Parameters
resultOffset
i32ptr the memory offset to load the result into (bytes
)codeOffset
i32 the offset within the codelength
i32 the length of code to copy
Returns
nothing
Gets the size of code running in current environment.
Parameters
none
Returns
codeSize
i32
Gets the block’s beneficiary address and loads into memory.
Parameters
resultOffset
i32ptr the memory offset to load the coinbase address into (address
)
Returns
nothing
Creates a new contract with a given value.
Parameters
valueOffset
i32ptr the memory offset to load the value from (u128
)dataOffset
i32ptr the memory offset to load the code for the new contract from (bytes
)length
i32 the data lengthresultOffset
i32ptr the memory offset to write the new contract address to (address
)
Note: create
will clear the return buffer in case of success or may fill it with data coming from revert
.
Returns
result
i32 Returns 0 on success, 1 on failure and 2 on revert
Get the block’s difficulty.
Parameters
resultOffset
i32ptr the memory offset to load the difficulty into (u256
)
Returns
nothing
Copies the code of an account to memory.
Parameters
addressOffset
i32ptr the memory offset to load the address from (address
)resultOffset
i32ptr the memory offset to load the result into (bytes
)codeOffset
i32 the offset within the codelength
i32 the length of code to copy
Returns
nothing
Get size of an account’s code.
Parameters
addressOffset
i32ptr the memory offset to load the address from (address
)
Returns
extCodeSize
i32
Returns the current gasCounter
Parameters
none
Returns
gasLeft
i64
Get the block’s gas limit.
Parameters
none
Returns
blockGasLimit
i64
Gets price of gas in current environment.
Parameters
valueOffset
i32ptr the memory offset to write the value to (u128
)
Returns
nothing
Creates a new log in the current environment
Parameters
dataOffset
i32ptr the memory offset to load data from (bytes
)length
i32 the data lengthnumberOfTopics
i32 the number of topics following (0 to 4)topic1
i32ptr the memory offset to load topic1 from (u256
)topic2
i32ptr the memory offset to load topic2 from (u256
)topic3
i32ptr the memory offset to load topic3 from (u256
)topic4
i32ptr the memory offset to load topic4 from (u256
)
Returns
nothing
Get the block’s number.
Parameters
none
Returns
blockNumber
i64
Gets the execution's origination address and loads it into memory at the given offset. This is the sender of original transaction; it is never an account with non-empty associated code.
Parameters
resultOffset
i32ptr the memory offset to load the origin address from (address
)
Returns
nothing
Set the returning output data for the execution. This will cause a trap and the execution will be aborted immediately.
Parameters
dataOffset
i32ptr the memory offset of the output data (bytes
)length
i32 the length of the output data
Returns
doesn't return
Set the returning output data for the execution. This will cause a trap and the execution will be aborted immediately.
Parameters
dataOffset
i32ptr the memory offset of the output data (bytes
)length
i32 the length of the output data
Returns
doesn't return
Get size of current return data buffer to memory. This contains the return data
from the last executed call
, callCode
, callDelegate
, callStatic
or create
.
Note: create
only fills the return data buffer in case of a failure.
Parameters
none
Returns
dataSize
i32
Copies the current return data buffer to memory. This contains the return data
from last executed call
, callCode
, callDelegate
, callStatic
or create
.
Note: create
only fills the return data buffer in case of a failure.
Parameters
resultOffset
i32ptr the memory offset to load data into (bytes
)dataOffset
i32 the offset in the return datalength
i32 the length of data to copy
Returns
nothing
Mark account for later deletion and give the remaining balance to the specified beneficiary address. This will cause a trap and the execution will be aborted immediately.
Parameters
addressOffset
i32ptr the memory offset to load the address from (address
)
Returns
doesn't return
Get the block’s timestamp.
Parameters
none
Returns
blockTimestamp
i64