|Author||Paweł Bylica, Alex Beregszaszi|
The EVMC module with implementations of precompiled contracts SHOULD:
execute()method in the following way:
Validate the incoming execution request requirements:
There is no code provided (the
If the requirements are not fulfilled, abort execution with the
If yes, execute as follows:
Compute the amount of gas left after execution by subtracting the gas cost from the call gas limit (
If gas left is negative, abort execution with the
Precompiled contract implementations are allowed to return two more EVMC error codes:
EVMC_FAILUREif the failure was caused due to something other than out of gas (e.g. input validation error)
EVMC_REVERTif the precompile doesn’t want to forfeit all supplied gas (as of May 2019 no such precompile exists)
The Client is not required to provide the Host interface ([
evmc_context] argument of
execute() is set to NULL).
Therefore, the precompiled contracts implementation MUST NOT access the
It is very unlikely that any precompile will need to access or modify a contract state. Not requiring the Client to implement the EVMC Host interface removes the big portion of work needed for full EVMC integration.
EVMC provides the evmc-vmtester tool for checking compatibility with the EVMC specification.
- Example of Precompiles VM implementation
- ewasm precompiles
- Aleth code for precompiles
- Parity code for precompiles
- EIP-1962 implemented as an EVMC precompile module
- EVMC – Ethereum Client-VM Connector API
- EVMC documentation
- EVMC VM Implementation Guide
- EIP 1352: Specify restricted address range for precompiles/system contracts
Copyright and related rights waived via CC0.