pub struct VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,{
pub vm: VirtualMachine<E, VB>,
pub interpreter: PreflightInterpretedInstance<Val<E::SC>, <VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor>,
/* private fields */
}
Expand description
Virtual machine prover instance for a fixed VM config and a fixed program. For use in proving a program directly on bare metal.
This struct contains the VmState itself to avoid re-allocating guest memory. The memory is reset with zeros before execution.
Fields§
§vm: VirtualMachine<E, VB>
§interpreter: PreflightInterpretedInstance<Val<E::SC>, <VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor>
Implementations§
Source§impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,
impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,
Source§impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,
impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,
Source§impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,
impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
VB: VmBuilder<E>,
pub fn new( vm: VirtualMachine<E, VB>, exe: Arc<VmExe<Val<E::SC>>>, cached_program_trace: CommittedTraceData<E::PB>, ) -> Result<Self, StaticProgramError>
pub fn reset_state(&mut self, inputs: impl Into<Streams<Val<E::SC>>>)
Source§impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
Val<E::SC>: PrimeField32,
VB: VmBuilder<E>,
<VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor: Executor<Val<E::SC>> + MeteredExecutor<Val<E::SC>> + PreflightExecutor<Val<E::SC>, VB::RecordArena>,
impl<E, VB> VmInstance<E, VB>where
E: StarkEngine,
Val<E::SC>: PrimeField32,
VB: VmBuilder<E>,
<VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor: Executor<Val<E::SC>> + MeteredExecutor<Val<E::SC>> + PreflightExecutor<Val<E::SC>, VB::RecordArena>,
Sourcepub fn prove_continuations(
&mut self,
input: impl Into<Streams<Val<E::SC>>>,
modify_ctx: impl FnMut(usize, &mut ProvingContext<E::PB>),
) -> Result<ContinuationVmProof<E::SC>, VirtualMachineError>
pub fn prove_continuations( &mut self, input: impl Into<Streams<Val<E::SC>>>, modify_ctx: impl FnMut(usize, &mut ProvingContext<E::PB>), ) -> Result<ContinuationVmProof<E::SC>, VirtualMachineError>
For internal use to resize trace matrices before proving.
The closure modify_ctx(seg_idx, &mut ctx)
is called sequentially for each segment.
Trait Implementations§
Source§impl<E, VB> ContinuationVmProver<<E as StarkEngine>::SC> for VmInstance<E, VB>where
E: StarkEngine,
Val<E::SC>: PrimeField32,
VB: VmBuilder<E>,
<VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor: Executor<Val<E::SC>> + MeteredExecutor<Val<E::SC>> + PreflightExecutor<Val<E::SC>, VB::RecordArena>,
impl<E, VB> ContinuationVmProver<<E as StarkEngine>::SC> for VmInstance<E, VB>where
E: StarkEngine,
Val<E::SC>: PrimeField32,
VB: VmBuilder<E>,
<VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor: Executor<Val<E::SC>> + MeteredExecutor<Val<E::SC>> + PreflightExecutor<Val<E::SC>, VB::RecordArena>,
Source§fn prove(
&mut self,
input: impl Into<Streams<Val<E::SC>>>,
) -> Result<ContinuationVmProof<E::SC>, VirtualMachineError>
fn prove( &mut self, input: impl Into<Streams<Val<E::SC>>>, ) -> Result<ContinuationVmProof<E::SC>, VirtualMachineError>
First performs metered execution (E2) to determine segments. Then sequentially proves each segment. The proof for each segment uses the specified [ProverBackend], but the proof for the next segment does not start before the current proof finishes.
Source§impl<E, VB> SingleSegmentVmProver<<E as StarkEngine>::SC> for VmInstance<E, VB>where
E: StarkEngine,
Val<E::SC>: PrimeField32,
VB: VmBuilder<E>,
<VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor: PreflightExecutor<Val<E::SC>, VB::RecordArena>,
impl<E, VB> SingleSegmentVmProver<<E as StarkEngine>::SC> for VmInstance<E, VB>where
E: StarkEngine,
Val<E::SC>: PrimeField32,
VB: VmBuilder<E>,
<VB::VmConfig as VmExecutionConfig<Val<E::SC>>>::Executor: PreflightExecutor<Val<E::SC>, VB::RecordArena>,
Auto Trait Implementations§
impl<E, VB> Freeze for VmInstance<E, VB>where
<<<E as StarkEngine>::SC as StarkGenericConfig>::Pcs as Pcs<<<E as StarkEngine>::SC as StarkGenericConfig>::Challenge, <<E as StarkEngine>::SC as StarkGenericConfig>::Challenger>>::Commitment: Freeze,
E: Freeze,
<VB as VmBuilder<E>>::VmConfig: Freeze,
<VB as VmBuilder<E>>::SystemChipInventory: Freeze,
impl<E, VB> !RefUnwindSafe for VmInstance<E, VB>
impl<E, VB> !Send for VmInstance<E, VB>
impl<E, VB> !Sync for VmInstance<E, VB>
impl<E, VB> Unpin for VmInstance<E, VB>where
<<<E as StarkEngine>::SC as StarkGenericConfig>::Pcs as Pcs<<<E as StarkEngine>::SC as StarkGenericConfig>::Challenge, <<E as StarkEngine>::SC as StarkGenericConfig>::Challenger>>::Commitment: Unpin,
E: Unpin,
<VB as VmBuilder<E>>::VmConfig: Unpin,
<VB as VmBuilder<E>>::SystemChipInventory: Unpin,
<<<<E as StarkEngine>::SC as StarkGenericConfig>::Pcs as Pcs<<<E as StarkEngine>::SC as StarkGenericConfig>::Challenge, <<E as StarkEngine>::SC as StarkGenericConfig>::Challenger>>::Domain as PolynomialSpace>::Val: Unpin,
<<E as StarkEngine>::PB as ProverBackend>::RapPartialProvingKey: Unpin,
<<E as StarkEngine>::PB as ProverBackend>::Matrix: Unpin,
<<E as StarkEngine>::PB as ProverBackend>::PcsData: Unpin,
impl<E, VB> !UnwindSafe for VmInstance<E, VB>
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
Mutably borrows from an owned value. Read more
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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>
Converts
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>
Converts
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> 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,
Pipes by value. This is generally the method you want to use. Read more
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,
Borrows
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,
Mutably borrows
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
Borrows
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
Mutably borrows
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
Borrows
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
Immutable access to the
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
Mutable access to the
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
Immutable access to the
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
Mutable access to the
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
Immutable access to the
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
Mutable access to the
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
Calls
.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
Calls
.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
Calls
.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
Calls
.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
Calls
.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
Calls
.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
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.