9 #include <evmc/helpers.h> 20 explicit EVM(evmc_instance* _instance) noexcept;
22 ~EVM() { evmc_destroy(m_instance); }
27 char const*
name() const noexcept {
return evmc_vm_name(m_instance); }
29 char const*
version() const noexcept {
return evmc_vm_version(m_instance); }
34 explicit Result(evmc_result
const& _result):
41 m_result.release(&m_result);
45 m_result(_other.m_result)
48 _other.m_result.release =
nullptr;
56 return m_result.status_code;
61 return m_result.gas_left;
66 return {m_result.output_data, m_result.output_size};
81 evmc_instance* m_instance =
nullptr;
89 explicit EVMC(evmc_instance* _instance) :
EVM(_instance) {}
owning_bytes_ref exec(u256 &io_gas, ExtVMFace &_ext, OnOpFunc const &_onOp) final
VM implementation.
std::function< void(uint64_t, uint64_t, Instruction, bigint, bigint, bigint, VMFace const *, ExtVMFace const *)> OnOpFunc
Result(evmc_result const &_result)
EVMC(evmc_instance *_instance)
evmc_status_code status() const
char const * version() const noexcept
static evmc_revision toRevision(EVMSchedule const &_schedule)
Translate the EVMSchedule to EVMC revision.
bytesConstRef output() const
EVM(evmc_instance *_instance) noexcept
Result & operator=(Result const &)=delete
Result execute(ExtVMFace &_ext, int64_t gas)
Handy wrapper for evmc_execute().
char const * name() const noexcept
EVM Virtual Machine interface.
Interface and null implementation of the class for specifying VM externalities.
EVM & operator=(EVM)=delete
The RAII wrapper for an EVMC instance.
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
The wrapper implementing the VMFace interface with a EVMC VM as a backend.
Result(Result &&_other) noexcept