pub struct Host<DB: ZephyrDatabase, L: LedgerStateRead>(/* private fields */);
Expand description
Zephyr Host State.
Implementations§
source§impl<DB: ZephyrDatabase + Clone + 'static, L: LedgerStateRead + 'static> Host<DB, L>
impl<DB: ZephyrDatabase + Clone + 'static, L: LedgerStateRead + 'static> Host<DB, L>
sourcepub fn get_memory(caller: &Caller<'_, Self>) -> Memory
pub fn get_memory(caller: &Caller<'_, Self>) -> Memory
Returns wasmi’s VM memory handler.
source§impl<DB: ZephyrDatabase + Clone + 'static, L: LedgerStateRead + 'static> Host<DB, L>
impl<DB: ZephyrDatabase + Clone + 'static, L: LedgerStateRead + 'static> Host<DB, L>
sourcepub fn soroban_host(caller: &Caller<'_, Self>) -> Host
pub fn soroban_host(caller: &Caller<'_, Self>) -> Host
Returns the Soroban host object associated to the Zephyr host.
source§impl<DB: ZephyrDatabase + ZephyrStandard, L: LedgerStateRead + ZephyrStandard> Host<DB, L>
impl<DB: ZephyrDatabase + ZephyrStandard, L: LedgerStateRead + ZephyrStandard> Host<DB, L>
sourcepub fn from_id(id: i64, network_id: [u8; 32]) -> Result<Self>
pub fn from_id(id: i64, network_id: [u8; 32]) -> Result<Self>
Creates a standard Host object starting from a given host ID. The host ID is the only relation between the VM and the entity it is bound to. For instance, in Mercury the host id is the id of a Mercury user. This is needed to implement role constraints in Zephyr.
source§impl<DB: ZephyrDatabase + Clone + 'static, L: LedgerStateRead + 'static> Host<DB, L>
impl<DB: ZephyrDatabase + Clone + 'static, L: LedgerStateRead + 'static> Host<DB, L>
sourcepub fn add_ledger_close_meta(
&mut self,
ledger_close_meta: Vec<u8>,
) -> Result<()>
pub fn add_ledger_close_meta( &mut self, ledger_close_meta: Vec<u8>, ) -> Result<()>
Loads the ledger close meta bytes of the ledger the Zephyr VM will have access to.
The ledger close meta is stored as a slice and currenty no type checks occur.
The functions returns a HostError::LedgerCloseMetaOverridden
error when a ledger
close meta is already present in the host object. This is because VMs are not re-usable
between ledgers and need to be created and instantiated for each new invocation to
prevent memory issues.
sourcepub fn add_transmitter(&mut self, transmitter: UnboundedSender<Vec<u8>>)
pub fn add_transmitter(&mut self, transmitter: UnboundedSender<Vec<u8>>)
Adds a transmitter that will be used to send message to the
associated receiver once every time the Self::send_message
host is called.
Current behaviour replaces any existing transmitter.
sourcepub fn as_budget(&self) -> Ref<'_, Budget>
pub fn as_budget(&self) -> Ref<'_, Budget>
Returns a reference to the host’s budget implementation.
sourcepub fn as_stack_mut(&self) -> RefMut<'_, Stack>
pub fn as_stack_mut(&self) -> RefMut<'_, Stack>
Returns a reference to the host’s stack implementation.
sourcepub fn get_host_id(&self) -> i64
pub fn get_host_id(&self) -> i64
Returns the id assigned to the host.
sourcepub fn get_entry_point_info(&self) -> Ref<'_, InvokedFunctionInfo>
pub fn get_entry_point_info(&self) -> Ref<'_, InvokedFunctionInfo>
Returns a reference to the host’s entry point information.
sourcepub fn load_context(&self, vm: Weak<Vm<DB, L>>) -> Result<()>
pub fn load_context(&self, vm: Weak<Vm<DB, L>>) -> Result<()>
Loads VM context in the host if needed.
sourcepub fn send_message(
caller: Caller<'_, Self>,
offset: i64,
size: i64,
) -> Result<()>
pub fn send_message( caller: Caller<'_, Self>, offset: i64, size: i64, ) -> Result<()>
Sends a message to any receiver whose sender has been provided to the host object.
sourcepub fn read_result(&self) -> String
pub fn read_result(&self) -> String
Read a result string potentially written from the guest environment.
sourcepub fn host_functions(
&self,
store: &mut Store<Host<DB, L>>,
) -> Vec<FunctionInfo>
pub fn host_functions( &self, store: &mut Store<Host<DB, L>>, ) -> Vec<FunctionInfo>
Returns all the host functions that must be defined in the linker. This should be the only public function related to foreign functions provided by the VM, the specific host functions should remain private.
§Current host functions
The functions are currently:
- Database write: retrieves instructions and data to be written specified
by the module and calls the [
DB::write_raw()
] function. Writing to the database is streamlined to the [DB
] implementation. - Database read: retrieves instructions for the data to be read by the module
and calls the [
DB::read_raw()
] function. Reading from the database is streamlined to the [DB
] implementation. - Database update: Retrieves and structures instructions and data used by the [
DB
] implementation to update a table. - Log function: takes an integer from the module and logs it in the host.
- Stack push function: pushes an integer from the module to the host’s pseudo stack. This is currently the means of communication for unbound intructions between the guest and the host environment.
- Read ledger close meta: Reads the host’s latest ledger meta (if present) and writes it to the module’s memory. Returns the offset and the size of the bytes written in the binary’s memory.
Trait Implementations§
source§impl<DB: Clone + ZephyrDatabase, L: Clone + LedgerStateRead> Clone for Host<DB, L>
impl<DB: Clone + ZephyrDatabase, L: Clone + LedgerStateRead> Clone for Host<DB, L>
source§impl<DB: ZephyrDatabase + ZephyrMock, L: LedgerStateRead + ZephyrMock> ZephyrMock for Host<DB, L>
impl<DB: ZephyrDatabase + ZephyrMock, L: LedgerStateRead + ZephyrMock> ZephyrMock for Host<DB, L>
Auto Trait Implementations§
impl<DB, L> Freeze for Host<DB, L>
impl<DB, L> !RefUnwindSafe for Host<DB, L>
impl<DB, L> !Send for Host<DB, L>
impl<DB, L> !Sync for Host<DB, L>
impl<DB, L> Unpin for Host<DB, L>
impl<DB, L> !UnwindSafe for Host<DB, L>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W), b: &(T, U, V, W), ) -> Result<Ordering, <C as Compare<(T, U, V, W)>>::Error>
source§impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W, X), b: &(T, U, V, W, X), ) -> Result<Ordering, <C as Compare<(T, U, V, W, X)>>::Error>
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.