pub struct SystemConfig {
pub max_constraint_degree: usize,
pub continuation_enabled: bool,
pub memory_config: MemoryConfig,
pub num_public_values: usize,
pub profiling: bool,
pub segmentation_limits: SegmentationLimits,
}
Expand description
System-level configuration for the virtual machine. Contains all configuration parameters that are managed by the architecture, including configuration for continuations support.
Fields§
§max_constraint_degree: usize
The maximum constraint degree any chip is allowed to use.
continuation_enabled: bool
True if the VM is in continuation mode. In this mode, an execution could be segmented and each segment is proved by a proof. Each proof commits the before and after state of the corresponding segment. False if the VM is in single segment mode. In this mode, an execution is proved by a single proof.
memory_config: MemoryConfig
Memory configuration
num_public_values: usize
num_public_values
has different meanings in single segment mode and continuation mode.
In single segment mode, num_public_values
is the number of public values of
PublicValuesChip
. In this case, verifier can read public values directly.
In continuation mode, public values are stored in a special address space.
num_public_values
indicates the number of allowed addresses in that address space. The
verifier cannot read public values directly, but they can decommit the public values
from the memory merkle root.
profiling: bool
Whether to collect detailed profiling metrics. Warning: this slows down the runtime.
segmentation_limits: SegmentationLimits
Segmentation limits This field is skipped in serde as it’s only used in execution and not needed after any serialize/deserialize.
Implementations§
Source§impl SystemConfig
impl SystemConfig
Sourcepub fn set_segmentation_limits(&mut self, val: SegmentationLimits) -> &mut Self
pub fn set_segmentation_limits(&mut self, val: SegmentationLimits) -> &mut Self
Segmentation limits This field is skipped in serde as it’s only used in execution and not needed after any serialize/deserialize.
Source§impl SystemConfig
impl SystemConfig
Sourcepub fn with_max_constraint_degree(self, val: usize) -> Self
pub fn with_max_constraint_degree(self, val: usize) -> Self
The maximum constraint degree any chip is allowed to use.
Source§impl SystemConfig
impl SystemConfig
pub fn new( max_constraint_degree: usize, memory_config: MemoryConfig, num_public_values: usize, ) -> Self
pub fn default_from_memory(memory_config: MemoryConfig) -> Self
pub fn with_continuations(self) -> Self
pub fn without_continuations(self) -> Self
pub fn with_public_values(self, num_public_values: usize) -> Self
pub fn with_max_segment_len(self, max_segment_len: usize) -> Self
pub fn with_profiling(self) -> Self
pub fn without_profiling(self) -> Self
pub fn has_public_values_chip(&self) -> bool
Sourcepub fn memory_boundary_air_id(&self) -> usize
pub fn memory_boundary_air_id(&self) -> usize
Returns the AIR ID of the memory boundary AIR. Panic if the boundary AIR is not enabled.
Sourcepub fn memory_merkle_air_id(&self) -> Option<usize>
pub fn memory_merkle_air_id(&self) -> Option<usize>
Returns the AIR ID of the memory merkle AIR. Returns None if continuations are not enabled.
Sourcepub fn access_adapter_air_id_offset(&self) -> usize
pub fn access_adapter_air_id_offset(&self) -> usize
AIR ID for the first memory access adapter AIR.
Sourcepub fn num_airs(&self) -> usize
pub fn num_airs(&self) -> usize
This is O(1) and returns the length of
SystemAirInventory::into_airs
.
pub fn initial_block_size(&self) -> usize
Trait Implementations§
Source§impl AsMut<SystemConfig> for SystemConfig
impl AsMut<SystemConfig> for SystemConfig
Source§fn as_mut(&mut self) -> &mut SystemConfig
fn as_mut(&mut self) -> &mut SystemConfig
Source§impl AsRef<SystemConfig> for SystemConfig
impl AsRef<SystemConfig> for SystemConfig
Source§fn as_ref(&self) -> &SystemConfig
fn as_ref(&self) -> &SystemConfig
Source§impl Clone for SystemConfig
impl Clone for SystemConfig
Source§fn clone(&self) -> SystemConfig
fn clone(&self) -> SystemConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for SystemConfig
impl Debug for SystemConfig
Source§impl Default for SystemConfig
impl Default for SystemConfig
Source§impl<'de> Deserialize<'de> for SystemConfig
impl<'de> Deserialize<'de> for SystemConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl InitFileGenerator for SystemConfig
impl InitFileGenerator for SystemConfig
Source§impl Serialize for SystemConfig
impl Serialize for SystemConfig
Source§impl<SC: StarkGenericConfig> VmCircuitConfig<SC> for SystemConfig
impl<SC: StarkGenericConfig> VmCircuitConfig<SC> for SystemConfig
Source§fn create_airs(&self) -> Result<AirInventory<SC>, AirInventoryError>
fn create_airs(&self) -> Result<AirInventory<SC>, AirInventoryError>
Every VM circuit within the OpenVM circuit architecture must be initialized from the SystemConfig.
Source§impl<F: PrimeField32> VmExecutionConfig<F> for SystemConfig
impl<F: PrimeField32> VmExecutionConfig<F> for SystemConfig
Source§fn create_executors(
&self,
) -> Result<ExecutorInventory<Self::Executor>, ExecutorInventoryError>
fn create_executors( &self, ) -> Result<ExecutorInventory<Self::Executor>, ExecutorInventoryError>
The only way to create an ExecutorInventory is from a SystemConfig. This will add an executor for PublicValuesExecutor if continuations is disabled. It will always add an executor for PhantomChip, which handles all phantom sub-executors.
type Executor = SystemExecutor<F>
Auto Trait Implementations§
impl Freeze for SystemConfig
impl RefUnwindSafe for SystemConfig
impl Send for SystemConfig
impl Sync for SystemConfig
impl Unpin for SystemConfig
impl UnwindSafe for SystemConfig
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§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> 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.