pub struct VM(/* private fields */);Expand description
The Virtual Machine (VM) for executing smart contracts in the Dusk Network.
The VM struct serves as the core for managing the network’s state,
executing smart contracts, and interfacing with host functions. It supports
both persistent and ephemeral sessions for handling transactions, contract
queries and contract deployments.
Implementations§
Source§impl VM
impl VM
Sourcepub fn new(root_dir: impl AsRef<Path> + Into<PathBuf>) -> Result<Self, Error>
pub fn new(root_dir: impl AsRef<Path> + Into<PathBuf>) -> Result<Self, Error>
Creates a new instance of the virtual machine.
This method initializes the VM with a given root directory and registers the necessary host-queries for contract execution.
§Arguments
root_dir- The path to the root directory for the VM’s state storage. This directory will be used to save any future session commits made by thisVMinstance.
§Returns
A new VM instance.
§Errors
If the directory contains unparseable or inconsistent data.
§Examples
use dusk_vm::VM;
let vm = VM::new("/path/to/root_dir");Sourcepub fn ephemeral() -> Result<VM, Error>
pub fn ephemeral() -> Result<VM, Error>
Creates an ephemeral VM instance.
This method initializes a VM that operates in memory without persisting state. It is useful for testing or temporary computations.
§Returns
A new ephemeral VM instance.
§Errors
If creating a temporary directory fails.
§Examples
use dusk_vm::VM;
let vm = VM::ephemeral();Sourcepub fn session(
&self,
base: [u8; 32],
chain_id: u8,
block_height: u64,
) -> Result<Session, Error>
pub fn session( &self, base: [u8; 32], chain_id: u8, block_height: u64, ) -> Result<Session, Error>
Creates a new session for transaction execution.
This method initializes a session with a specific base state commit, chain identifier, and block height. Sessions allow for isolated transaction execution without directly affecting the persistent VM state until finalized.
§Arguments
base- A 32-byte array representing the base state from which the session begins.chain_id- The identifier of the network.block_height- The current block height at which the session is created.
§Returns
A Result containing a Session instance for executing transactions,
or an error if the session cannot be initialized.
§Errors
If base commit is provided but does not exist.
§Examples
use dusk_vm::VM;
const CHAIN_ID: u8 = 42;
// create a genesis session
let vm = VM::ephemeral().unwrap();
let session = vm.genesis_session(CHAIN_ID);
// [...] apply changes to the network through the running session
// commit the changes
let base = session.commit().unwrap();
// spawn a new session on top of the base-commit
let block_height = 21;
let session = vm.session(base, CHAIN_ID, block_height).unwrap();Sourcepub fn genesis_session(&self, chain_id: u8) -> Session
pub fn genesis_session(&self, chain_id: u8) -> Session
Initializes a session for setting up the genesis block.
This method creates a session specifically for defining the genesis block, which serves as the starting state of the network. The genesis session uses the specified chain ID.
§Arguments
chain_id- The identifier of the blockchain chain for which the genesis state is initialized.
§Returns
A Session instance for defining the genesis block.
§Examples
use dusk_vm::VM;
const CHAIN_ID: u8 = 42;
let vm = VM::ephemeral().unwrap();
let genesis_session = vm.genesis_session(CHAIN_ID);Sourcepub fn commits(&self) -> Vec<[u8; 32]>
pub fn commits(&self) -> Vec<[u8; 32]>
Retrieves all pending commits in the VM.
This method fetches unfinalized state changes for inspection or processing.
§Returns
A vector of commits.
Sourcepub fn finalize_commit(&self, root: [u8; 32]) -> Result<(), Error>
pub fn finalize_commit(&self, root: [u8; 32]) -> Result<(), Error>
Finalizes a specified commit, applying its state changes permanently.
§Arguments
commit- The commit to be finalized.
Sourcepub fn root_dir(&self) -> &Path
pub fn root_dir(&self) -> &Path
Returns the root directory of the VM.
This is either the directory passed in by using [new], or the
temporary directory created using [ephemeral].
Sourcepub fn sync_thread(&self) -> &Thread
pub fn sync_thread(&self) -> &Thread
Returns a reference to the synchronization thread.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for VM
impl !RefUnwindSafe for VM
impl Send for VM
impl Sync for VM
impl Unpin for VM
impl !UnwindSafe for VM
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: *const T) -> Layout
fn layout_raw(_: *const T) -> Layout
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.