pub struct Ext {
    pub context: ProcessorContext,
    pub current_counter: CounterType,
    /* private fields */
}
Expand description

Structure providing externalities for running host functions.

Fields§

§context: ProcessorContext

Processor context.

§current_counter: CounterType

Actual gas counter type within wasm module’s global.

Trait Implementations§

source§

impl BackendExternalities for Ext

source§

fn gas_amount(&self) -> GasAmount

source§

fn pre_process_memory_accesses( &mut self, reads: &[MemoryInterval], writes: &[MemoryInterval], gas_counter: &mut u64 ) -> Result<(), ProcessAccessError>

Pre-process memory access if needed.
source§

impl CountersOwner for Ext

source§

fn charge_gas_for_token(&mut self, token: CostToken) -> Result<(), ChargeError>

Charge for runtime api call.
source§

fn charge_gas_if_enough(&mut self, amount: u64) -> Result<(), ChargeError>

Charge gas if enough, else just returns error.
source§

fn gas_left(&self) -> GasLeft

Returns gas limit and gas allowance left.
source§

fn current_counter_type(&self) -> CounterType

Currently set gas counter type.
source§

fn decrease_current_counter_to(&mut self, amount: u64)

Decreases gas left by fetched single numeric of actual counter.
source§

fn define_current_counter(&mut self) -> u64

Returns minimal amount of gas counters and set the type of current counter.
§

fn current_counter_value(&self) -> u64

Returns value of gas counter currently set.
source§

impl Externalities for Ext

§

type UnrecoverableError = UnrecoverableExtError

An error issued in infallible syscall.
§

type FallibleError = FallibleExtError

An error issued in fallible syscall.
§

type AllocError = AllocExtError

An error issued during allocation.
source§

fn alloc( &mut self, pages_num: u32, mem: &mut impl Memory ) -> Result<WasmPage, Self::AllocError>

Allocate number of pages. Read more
source§

fn free(&mut self, page: WasmPage) -> Result<(), Self::AllocError>

Free specific page.
source§

fn free_range( &mut self, start: WasmPage, end: WasmPage ) -> Result<(), Self::AllocError>

Free specific memory range.
source§

fn env_vars(&self, version: u32) -> Result<EnvVars, Self::UnrecoverableError>

Get environment variables currently set in the system and in the form corresponded to the requested version.
source§

fn block_height(&self) -> Result<u32, Self::UnrecoverableError>

Get the current block height.
source§

fn block_timestamp(&self) -> Result<u64, Self::UnrecoverableError>

Get the current block timestamp.
source§

fn send_init(&mut self) -> Result<u32, Self::FallibleError>

Initialize a new incomplete message for another program and return its handle.
source§

fn send_push( &mut self, handle: u32, buffer: &[u8] ) -> Result<(), Self::FallibleError>

Push an extra buffer into message payload by handle.
source§

fn send_push_input( &mut self, handle: u32, offset: u32, len: u32 ) -> Result<(), Self::FallibleError>

Push the incoming message buffer into message payload by handle.
source§

fn send_commit( &mut self, handle: u32, msg: HandlePacket, delay: u32 ) -> Result<MessageId, Self::FallibleError>

Complete message and send it to another program.
source§

fn reservation_send_commit( &mut self, id: ReservationId, handle: u32, msg: HandlePacket, delay: u32 ) -> Result<MessageId, Self::FallibleError>

Complete message and send it to another program using gas from reservation.
source§

fn reply_push(&mut self, buffer: &[u8]) -> Result<(), Self::FallibleError>

Push an extra buffer into reply message.
source§

fn reply_commit( &mut self, msg: ReplyPacket ) -> Result<MessageId, Self::FallibleError>

Complete reply message and send it to source program.
source§

fn reservation_reply_commit( &mut self, id: ReservationId, msg: ReplyPacket ) -> Result<MessageId, Self::FallibleError>

Complete reply message and send it to source program from reservation.
source§

fn reply_to(&self) -> Result<MessageId, Self::FallibleError>

Get the message id of the initial message.
source§

fn signal_from(&self) -> Result<MessageId, Self::FallibleError>

Get the message id which signal issues from.
source§

fn reply_push_input( &mut self, offset: u32, len: u32 ) -> Result<(), Self::FallibleError>

Push the incoming message buffer into reply message.
source§

fn source(&self) -> Result<ProgramId, Self::UnrecoverableError>

Get the source of the message currently being handled.
source§

fn reply_code(&self) -> Result<ReplyCode, Self::FallibleError>

Get the reply code if the message being processed.
source§

fn signal_code(&self) -> Result<SignalCode, Self::FallibleError>

Get the signal code if the message being processed.
source§

fn message_id(&self) -> Result<MessageId, Self::UnrecoverableError>

Get the id of the message currently being handled.
source§

fn program_id(&self) -> Result<ProgramId, Self::UnrecoverableError>

Get the id of program itself
source§

fn debug(&self, data: &str) -> Result<(), Self::UnrecoverableError>

Send debug message. Read more
source§

fn lock_payload( &mut self, at: u32, len: u32 ) -> Result<PayloadSliceLock, Self::FallibleError>

Takes ownership over payload of the executing message and returns it in the wrapper [PayloadSliceLock], which acts like lock. Read more
source§

fn unlock_payload( &mut self, payload_holder: &mut PayloadSliceLock ) -> UnlockPayloadBound

Reclaims ownership from the payload lock over previously taken payload from the currently executing message.. Read more
source§

fn size(&self) -> Result<usize, Self::UnrecoverableError>

Size of currently handled message payload.
source§

fn reserve_gas( &mut self, amount: u64, duration: u32 ) -> Result<ReservationId, Self::FallibleError>

Reserve some gas for a few blocks.
source§

fn unreserve_gas( &mut self, id: ReservationId ) -> Result<u64, Self::FallibleError>

Unreserve gas using reservation ID.
source§

fn system_reserve_gas(&mut self, amount: u64) -> Result<(), Self::FallibleError>

Do system reservation.
source§

fn gas_available(&self) -> Result<u64, Self::UnrecoverableError>

Tell how much gas is left in running context.
source§

fn value(&self) -> Result<u128, Self::UnrecoverableError>

Value associated with message.
source§

fn value_available(&self) -> Result<u128, Self::UnrecoverableError>

Tell how much value is left in running context.
source§

fn wait(&mut self) -> Result<(), Self::UnrecoverableError>

Interrupt the program and reschedule execution for maximum.
source§

fn wait_for(&mut self, duration: u32) -> Result<(), Self::UnrecoverableError>

Interrupt the program and reschedule execution in duration.
source§

fn wait_up_to( &mut self, duration: u32 ) -> Result<bool, Self::UnrecoverableError>

Interrupt the program and reschedule execution for maximum, but not more than duration.
source§

fn wake( &mut self, waker_id: MessageId, delay: u32 ) -> Result<(), Self::FallibleError>

Wake the waiting message and move it to the processing queue.
source§

fn create_program( &mut self, packet: InitPacket, delay: u32 ) -> Result<(MessageId, ProgramId), Self::FallibleError>

Send init message to create a new program.
source§

fn reply_deposit( &mut self, message_id: MessageId, amount: u64 ) -> Result<(), Self::FallibleError>

Create deposit to handle reply on given message.
source§

fn random(&self) -> Result<(&[u8], u32), Self::UnrecoverableError>

Returns a random seed for the current block with message id as a subject, along with the time in the past since when it was determinable by chain observers.
source§

fn forbidden_funcs(&self) -> &BTreeSet<SyscallName>

Return the set of functions that are forbidden to be called.
§

fn send( &mut self, msg: HandlePacket, delay: u32 ) -> Result<MessageId, Self::FallibleError>

Send message to another program.
§

fn reservation_send( &mut self, id: ReservationId, msg: HandlePacket, delay: u32 ) -> Result<MessageId, Self::FallibleError>

Send message to another program using gas from reservation.
§

fn reply(&mut self, msg: ReplyPacket) -> Result<MessageId, Self::FallibleError>

Produce reply to the current message.
§

fn reservation_reply( &mut self, id: ReservationId, msg: ReplyPacket ) -> Result<MessageId, Self::FallibleError>

Produce reply to the current message from reservation.
source§

impl ProcessorExternalities for Ext

Empty implementation for non-substrate (and non-lazy-pages) using

source§

fn new(context: ProcessorContext) -> Self

Create new
source§

fn into_ext_info(self, memory: &impl Memory) -> Result<ExtInfo, MemoryError>

Convert externalities into info.
source§

fn lazy_pages_init_for_program( mem: &mut impl Memory, prog_id: ProgramId, memory_infix: MemoryInfix, stack_end: Option<WasmPage>, globals_config: GlobalsAccessConfig, lazy_pages_costs: LazyPagesCosts )

Protect and save storage keys for pages which has no data
source§

fn lazy_pages_post_execution_actions(mem: &mut impl Memory)

Lazy pages program post execution actions
source§

fn lazy_pages_status() -> Status

Returns lazy pages status

Auto Trait Implementations§

§

impl RefUnwindSafe for Ext

§

impl Send for Ext

§

impl Sync for Ext

§

impl Unpin for Ext

§

impl UnwindSafe for Ext

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
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<F, W, T, D> Deserialize<With<T, W>, D> for F
where W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

§

fn deserialize( &self, deserializer: &mut D ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
§

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

§

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.
§

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.
§

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.
§

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.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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

§

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.
§

impl<S, T> UncheckedInto<T> for S
where T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T> Upcastable for T
where T: Any + Send + Sync + 'static,

§

fn upcast_any_ref(&self) -> &(dyn Any + 'static)

upcast ref
§

fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)

upcast mut ref
§

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

upcast boxed dyn
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for T
where T: RefUnwindSafe,