pub struct ExecutorEnvBuilder<'a> { /* private fields */ }
client
and non-target_os="zkvm"
only.Expand description
A builder pattern used to construct an ExecutorEnv.
Implementations§
Source§impl<'a> ExecutorEnvBuilder<'a>
impl<'a> ExecutorEnvBuilder<'a>
Sourcepub fn build(&mut self) -> Result<ExecutorEnv<'a>>
pub fn build(&mut self) -> Result<ExecutorEnv<'a>>
Finalize this builder to construct an ExecutorEnv.
§Example
use risc0_zkvm::ExecutorEnv;
let env = ExecutorEnv::builder().build().unwrap();
After calling build
, the ExecutorEnvBuilder will be reset to
default.
Sourcepub fn segment_limit_po2(&mut self, limit: u32) -> &mut Self
pub fn segment_limit_po2(&mut self, limit: u32) -> &mut Self
Set a segment limit, specified in powers of 2 cycles.
Lowering this value will reduce the memory consumption of the prover. Memory consumption is roughly linear with the segment size, so lowering this value by 1 will cut memory consumpton by about half.
The default value is chosen to be performant on commonly used hardware. Tuning this value, either up or down, may result in better proving performance.
Given value must be between risc0_zkp::MIN_CYCLES_PO2 and risc0_zkp::MAX_CYCLES_PO2 (inclusive).
Sourcepub fn keccak_max_po2(&mut self, limit: u32) -> Result<&mut Self>
pub fn keccak_max_po2(&mut self, limit: u32) -> Result<&mut Self>
Set a segment limit for keccak proofs, specified in powers of 2 cycles.
Lowering this value will reduce the memory consumption of the prover. Memory consumption is roughly linear with the segment size, so lowering this value by 1 will cut memory consumpton by about half.
The default value is chosen to be performant on commonly used hardware. Tuning this value, either up or down, may result in better proving performance.
Given value must be within risc0_circuit_keccak::KECCAK_PO2_RANGE
Sourcepub fn session_limit(&mut self, limit: Option<u64>) -> &mut Self
pub fn session_limit(&mut self, limit: Option<u64>) -> &mut Self
Set a session limit, specified in number of cycles.
§Example
use risc0_zkvm::ExecutorEnv;
let env = ExecutorEnv::builder()
.session_limit(Some(32 * 1024 * 1024)) // 32M cycles
.build()
.unwrap();
Sourcepub fn env_vars(&mut self, vars: HashMap<String, String>) -> &mut Self
pub fn env_vars(&mut self, vars: HashMap<String, String>) -> &mut Self
Add environment variables to the guest environment.
§Example
use std::collections::HashMap;
use risc0_zkvm::ExecutorEnv;
let mut vars = HashMap::new();
vars.insert("VAR1".to_string(), "SOME_VALUE".to_string());
vars.insert("VAR2".to_string(), "SOME_VALUE".to_string());
let env = ExecutorEnv::builder()
.env_vars(vars)
.build()
.unwrap();
Sourcepub fn args(&mut self, args: &[String]) -> &mut Self
pub fn args(&mut self, args: &[String]) -> &mut Self
Add an argument array to the guest environment.
§Example
let env = ExecutorEnv::builder()
.args(&["grep".to_string(), "-c".to_string(), "foo".to_string(), "-".to_string()])
.build()
.unwrap();
Sourcepub fn env_var(&mut self, name: &str, val: &str) -> &mut Self
pub fn env_var(&mut self, name: &str, val: &str) -> &mut Self
Add an environment variable to the guest environment.
§Example
use risc0_zkvm::ExecutorEnv;
let env = ExecutorEnv::builder()
.env_var("VAR1", "SOME_VALUE")
.build()
.unwrap();
Sourcepub fn write<T: Serialize>(&mut self, data: &T) -> Result<&mut Self>
pub fn write<T: Serialize>(&mut self, data: &T) -> Result<&mut Self>
Write input data to the zkVM guest stdin.
This function will serialize data
using a zkVM-optimized codec that
can be deserialized in the guest with a corresponding env::read
with
the same data type.
§Example
use risc0_zkvm::ExecutorEnv;
use serde::Serialize;
#[derive(Serialize)]
struct Input {
a: u32,
b: u32,
}
let input1 = Input{ a: 1, b: 2 };
let input2 = Input{ a: 3, b: 4 };
let env = ExecutorEnv::builder()
.write(&input1).unwrap()
.write(&input2).unwrap()
.build()
.unwrap();
Sourcepub fn write_slice<T: Pod>(&mut self, slice: &[T]) -> &mut Self
pub fn write_slice<T: Pod>(&mut self, slice: &[T]) -> &mut Self
Write input data to the zkVM guest stdin.
This function writes a slice directly to the underlying buffer. A
corresponding env::read_slice
can be used within the guest to read the
data.
§Example
use risc0_zkvm::ExecutorEnv;
let slice1 = [0, 1, 2, 3];
let slice2 = [3, 2, 1, 0];
let env = ExecutorEnv::builder()
.write_slice(&slice1)
.write_slice(&slice2)
.build()
.unwrap();
Sourcepub fn write_frame(&mut self, payload: &[u8]) -> &mut Self
Available on crate feature unstable
only.
pub fn write_frame(&mut self, payload: &[u8]) -> &mut Self
unstable
only.Write a frame to the zkVM guest via stdin.
A frame contains a length header along with the payload. Reading a frame can be more efficient than deserializing a message on-demand. On-demand deserialization can cause many syscalls, whereas a frame will only have two.
§Availability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
Sourcepub fn stdout(&mut self, writer: impl Write + 'a) -> &mut Self
pub fn stdout(&mut self, writer: impl Write + 'a) -> &mut Self
Add a posix-style standard output.
Sourcepub fn stderr(&mut self, writer: impl Write + 'a) -> &mut Self
pub fn stderr(&mut self, writer: impl Write + 'a) -> &mut Self
Add a posix-style standard error.
Sourcepub fn read_fd(&mut self, fd: u32, reader: impl BufRead + 'a) -> &mut Self
pub fn read_fd(&mut self, fd: u32, reader: impl BufRead + 'a) -> &mut Self
Add a posix-style file descriptor for reading.
Sourcepub fn write_fd(&mut self, fd: u32, writer: impl Write + 'a) -> &mut Self
pub fn write_fd(&mut self, fd: u32, writer: impl Write + 'a) -> &mut Self
Add a posix-style file descriptor for writing.
Sourcepub fn slice_io(
&mut self,
channel: &str,
handler: impl SliceIo + 'a,
) -> &mut Self
pub fn slice_io( &mut self, channel: &str, handler: impl SliceIo + 'a, ) -> &mut Self
Add a handler for simple I/O handling.
Sourcepub fn io_callback<C: AsRef<str>>(
&mut self,
channel: C,
callback: impl Fn(Bytes) -> Result<Bytes> + 'a,
) -> &mut Self
pub fn io_callback<C: AsRef<str>>( &mut self, channel: C, callback: impl Fn(Bytes) -> Result<Bytes> + 'a, ) -> &mut Self
Add a handler for simple I/O handling.
Sourcepub fn add_assumption(
&mut self,
assumption: impl Into<AssumptionReceipt>,
) -> &mut Self
pub fn add_assumption( &mut self, assumption: impl Into<AssumptionReceipt>, ) -> &mut Self
Add an AssumptionReceipt to the ExecutorEnv, for use in composition.
During execution, when the guest calls env::verify
or env::verify_integrity
, this
collection will be searched for an AssumptionReceipt that corresponds the verification
call.
Either a crate::Receipt or a crate::ReceiptClaim can be provided. If a crate::Receipt is provided, then an AssumptionReceipt::Proven will be added to the ExecutorEnv and the crate::Receipt generated by proving will be unconditional.
Sourcepub fn trace_callback(&mut self, callback: impl TraceCallback + 'a) -> &mut Self
pub fn trace_callback(&mut self, callback: impl TraceCallback + 'a) -> &mut Self
Add a callback handler for raw trace messages.
Sourcepub fn segment_path<P: AsRef<Path>>(&mut self, path: P) -> &mut Self
pub fn segment_path<P: AsRef<Path>>(&mut self, path: P) -> &mut Self
Set the path where segments will be stored.
Sourcepub fn enable_profiler<P: AsRef<Path>>(&mut self, path: P) -> &mut Self
pub fn enable_profiler<P: AsRef<Path>>(&mut self, path: P) -> &mut Self
Enable the profiler and output results to the specified path.
Sourcepub fn input_digest(&mut self, digest: Digest) -> &mut Self
pub fn input_digest(&mut self, digest: Digest) -> &mut Self
Set the input digest.
Sourcepub fn coprocessor_callback(
&mut self,
callback: impl CoprocessorCallback + 'a,
) -> &mut Self
Available on crate feature unstable
only.
pub fn coprocessor_callback( &mut self, callback: impl CoprocessorCallback + 'a, ) -> &mut Self
unstable
only.Add a callback for coprocessor requests.
§Availability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
Sourcepub fn coprocessor_callback_ref(
&mut self,
callback: Rc<RefCell<dyn CoprocessorCallback + 'a>>,
) -> &mut Self
Available on crate feature unstable
only.
pub fn coprocessor_callback_ref( &mut self, callback: Rc<RefCell<dyn CoprocessorCallback + 'a>>, ) -> &mut Self
unstable
only.Add a callback for coprocessor requests.
§Availability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
Trait Implementations§
Source§impl<'a> Default for ExecutorEnvBuilder<'a>
impl<'a> Default for ExecutorEnvBuilder<'a>
Source§fn default() -> ExecutorEnvBuilder<'a>
fn default() -> ExecutorEnvBuilder<'a>
Auto Trait Implementations§
impl<'a> Freeze for ExecutorEnvBuilder<'a>
impl<'a> !RefUnwindSafe for ExecutorEnvBuilder<'a>
impl<'a> !Send for ExecutorEnvBuilder<'a>
impl<'a> !Sync for ExecutorEnvBuilder<'a>
impl<'a> Unpin for ExecutorEnvBuilder<'a>
impl<'a> !UnwindSafe for ExecutorEnvBuilder<'a>
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> 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, U> OverflowingInto<U> for Twhere
U: OverflowingFrom<T>,
impl<T, U> OverflowingInto<U> for Twhere
U: OverflowingFrom<T>,
fn overflowing_into(self) -> (U, bool)
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> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T, U> RoundingInto<U> for Twhere
U: RoundingFrom<T>,
impl<T, U> RoundingInto<U> for Twhere
U: RoundingFrom<T>,
fn rounding_into(self, rm: RoundingMode) -> (U, Ordering)
Source§impl<T, U> SaturatingInto<U> for Twhere
U: SaturatingFrom<T>,
impl<T, U> SaturatingInto<U> for Twhere
U: SaturatingFrom<T>,
fn saturating_into(self) -> U
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.