|
| 1 | +# EVMC Host Implementation Guide {#hostguide} |
| 2 | + |
| 3 | +> How to bring EVMC support to Your Ethereum Client. |
| 4 | +
|
| 5 | +## Host interface |
| 6 | + |
| 7 | +First of all, you have to implement the Host interface. The Host interface |
| 8 | +allows VMs to query and modify Ethereum state during the execution. |
| 9 | + |
| 10 | +The implementation can be done in object-oriented manner. |
| 11 | +The ::evmc_host_interface lists the methods any Host must implement. |
| 12 | + |
| 13 | +Moreover, each of methods has a pointer to ::evmc_context |
| 14 | +as a parameter. The context is owned entirely to the Host allowing a Host instance |
| 15 | +to behave as an object with data. |
| 16 | + |
| 17 | +## VM usage |
| 18 | + |
| 19 | +When Host implementation is ready it's time to start using EVMC VMs. |
| 20 | + |
| 21 | +1. Firstly, create a VM instance. You need to know what is the name of the "create" |
| 22 | + function in particular VM implementation. The EVMC recommends to name the |
| 23 | + function by the VM codename, e.g. ::evmc_create_examplevm(). |
| 24 | + Invoking the create function will give you the VM instance (::evmc_instance). |
| 25 | + It is recommended to create the VM instance once. |
| 26 | + |
| 27 | +2. If you are interested in loading VMs dynamically (i.e. to use DLLs) |
| 28 | + check out the [EVMC Loader](@ref loader) library. |
| 29 | + |
| 30 | +3. The ::evmc_instance contains information about the VM like |
| 31 | + name (::evmc_instance::name) or ABI version (::evmc_instance::abi_version) |
| 32 | + and methods. |
| 33 | + |
| 34 | +4. To execute code in the VM use the "execute()" method (::evmc_instance::execute). |
| 35 | + You will need: |
| 36 | + - the code to execute, |
| 37 | + - the message (::evmc_message) object that describes the execution context, |
| 38 | + - the Host instance, passed as ::evmc_context pointer. |
| 39 | + |
| 40 | +5. When execution finishes you will receive ::evmc_result object that describes |
| 41 | + the results of the execution. |
| 42 | + |
| 43 | +Have fun! |
0 commit comments