EVMC
evmc::Host Class Reference

Abstract class to be used by Host implementations. More...

#include <evmc.hpp>

Inheritance diagram for evmc::Host:
evmc::HostInterface evmc::MockedHost

Public Member Functions

evmc_host_contextto_context () noexcept
 Converts the Host object to the opaque host context pointer.
 
- Public Member Functions inherited from evmc::HostInterface
virtual bool account_exists (const address &addr) const noexcept=0
 Check account existence callback function.
 
virtual bytes32 get_storage (const address &addr, const bytes32 &key) const noexcept=0
 Get storage callback function.
 
virtual evmc_storage_status set_storage (const address &addr, const bytes32 &key, const bytes32 &value) noexcept=0
 Set storage callback function.
 
virtual uint256be get_balance (const address &addr) const noexcept=0
 Get balance callback function.
 
virtual size_t get_code_size (const address &addr) const noexcept=0
 Get code size callback function.
 
virtual bytes32 get_code_hash (const address &addr) const noexcept=0
 Get code hash callback function.
 
virtual size_t copy_code (const address &addr, size_t code_offset, uint8_t *buffer_data, size_t buffer_size) const noexcept=0
 Copy code callback function.
 
virtual bool selfdestruct (const address &addr, const address &beneficiary) noexcept=0
 Selfdestruct callback function.
 
virtual Result call (const evmc_message &msg) noexcept=0
 Call callback function.
 
virtual evmc_tx_context get_tx_context () const noexcept=0
 Get transaction context callback function.
 
virtual bytes32 get_block_hash (int64_t block_number) const noexcept=0
 Get block hash callback function.
 
virtual void emit_log (const address &addr, const uint8_t *data, size_t data_size, const bytes32 topics[], size_t num_topics) noexcept=0
 Emit log callback function.
 
virtual evmc_access_status access_account (const address &addr) noexcept=0
 Access account callback function.
 
virtual evmc_access_status access_storage (const address &addr, const bytes32 &key) noexcept=0
 Access storage callback function.
 
virtual bytes32 get_transient_storage (const address &addr, const bytes32 &key) const noexcept=0
 Get transient storage callback function.
 
virtual void set_transient_storage (const address &addr, const bytes32 &key, const bytes32 &value) noexcept=0
 Set transient storage callback function.
 

Static Public Member Functions

static const evmc_host_interfaceget_interface () noexcept
 Provides access to the global host interface.
 
template<typename DerivedClass = Host>
static DerivedClass * from_context (evmc_host_context *context) noexcept
 Converts the opaque host context pointer back to the original Host object.
 

Detailed Description

Abstract class to be used by Host implementations.

When implementing EVMC Host, you can directly inherit from the evmc::Host class. This way your implementation will be simpler by avoiding manual handling of the evmc_host_context and the evmc_host_interface.

Definition at line 623 of file evmc.hpp.

Member Function Documentation

◆ from_context()

template<typename DerivedClass = Host>
static DerivedClass * evmc::Host::from_context ( evmc_host_context context)
inlinestaticnoexcept

Converts the opaque host context pointer back to the original Host object.

Template Parameters
DerivedClassThe class derived from the Host class.
Parameters
contextThe opaque host context pointer.
Returns
The pointer to DerivedClass.

Definition at line 639 of file evmc.hpp.

640 {
641 // Get pointer of the Host base class.
642 auto* h = reinterpret_cast<Host*>(context);
643
644 // Additional downcast, only possible if DerivedClass inherits from Host.
645 return static_cast<DerivedClass*>(h);
646 }

◆ get_interface()

const evmc_host_interface & evmc::Host::get_interface ( )
inlinestaticnoexcept

Provides access to the global host interface.

Returns
Reference to the host interface object.

Definition at line 885 of file evmc.hpp.

886{
887 static constexpr evmc_host_interface interface = {
888 ::evmc::internal::account_exists,
889 ::evmc::internal::get_storage,
890 ::evmc::internal::set_storage,
891 ::evmc::internal::get_balance,
892 ::evmc::internal::get_code_size,
893 ::evmc::internal::get_code_hash,
894 ::evmc::internal::copy_code,
895 ::evmc::internal::selfdestruct,
896 ::evmc::internal::call,
897 ::evmc::internal::get_tx_context,
898 ::evmc::internal::get_block_hash,
899 ::evmc::internal::emit_log,
900 ::evmc::internal::access_account,
901 ::evmc::internal::access_storage,
902 ::evmc::internal::get_transient_storage,
903 ::evmc::internal::set_transient_storage,
904 };
905 return interface;
906}
The Host interface.
Definition: evmc.h:845

◆ to_context()

evmc_host_context * evmc::Host::to_context ( )
inlinenoexcept

Converts the Host object to the opaque host context pointer.

Returns
Pointer to evmc_host_context.

Definition at line 632 of file evmc.hpp.

632{ return reinterpret_cast<evmc_host_context*>(this); }
The opaque data type representing the Host execution context.

The documentation for this class was generated from the following file: