zephyr_vm::host

Struct Host

source
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>

source

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>

source

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>

source

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>

source

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.

source

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.

source

pub fn as_budget(&self) -> Ref<'_, Budget>

Returns a reference to the host’s budget implementation.

source

pub fn as_stack_mut(&self) -> RefMut<'_, Stack>

Returns a reference to the host’s stack implementation.

source

pub fn get_host_id(&self) -> i64

Returns the id assigned to the host.

source

pub fn get_entry_point_info(&self) -> Ref<'_, InvokedFunctionInfo>

Returns a reference to the host’s entry point information.

source

pub fn load_context(&self, vm: Weak<Vm<DB, L>>) -> Result<()>

Loads VM context in the host if needed.

source

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.

source

pub fn read_result(&self) -> String

Read a result string potentially written from the guest environment.

source

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>

source§

fn clone(&self) -> Host<DB, L>

Returns a copy of the value. Read more
1.6.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<DB: ZephyrDatabase + ZephyrMock, L: LedgerStateRead + ZephyrMock> ZephyrMock for Host<DB, L>

source§

fn mocked() -> Result<Self>

Creates a Host object designed to be used in tests with potentially mocked data such as host id, databases and context.

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> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T, C> Compare<&T> for C
where C: Compare<T>,

source§

type Error = <C as Compare<T>>::Error

source§

fn compare(&self, a: &&T, b: &&T) -> Result<Ordering, <C as Compare<&T>>::Error>

source§

impl<T, U, E, C> Compare<(T, U)> for C
where C: Compare<T, Error = E, Error = E> + Compare<U>,

source§

type Error = E

source§

fn compare( &self, a: &(T, U), b: &(T, U), ) -> Result<Ordering, <C as Compare<(T, U)>>::Error>

source§

impl<T, U, V, E, C> Compare<(T, U, V)> for C
where C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,

source§

impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
where C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,

source§

impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
where C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,

source§

impl<T, C> Compare<Box<T>> for C
where C: Compare<T>,

source§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Box<T>, b: &Box<T>, ) -> Result<Ordering, <C as Compare<Box<T>>>::Error>

source§

impl<T, C> Compare<Option<T>> for C
where C: Compare<T>,

source§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Option<T>, b: &Option<T>, ) -> Result<Ordering, <C as Compare<Option<T>>>::Error>

source§

impl<T, C> Compare<Rc<T>> for C
where C: Compare<T>,

source§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Rc<T>, b: &Rc<T>, ) -> Result<Ordering, <C as Compare<Rc<T>>>::Error>

source§

impl<T, C> Compare<Vec<T>> for C
where C: Compare<T>,

source§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Vec<T>, b: &Vec<T>, ) -> Result<Ordering, <C as Compare<Vec<T>>>::Error>

source§

impl<T> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<E, T, U> TryIntoVal<E, T> for U
where E: Env, T: TryFromVal<E, U>,

source§

type Error = <T as TryFromVal<E, U>>::Error

source§

fn try_into_val(&self, env: &E) -> Result<T, <U as TryIntoVal<E, T>>::Error>

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more