#[non_exhaustive]pub struct RequestParams {
pub program: Option<Cow<'static, [u8]>>,
pub env: Option<GuestEnv>,
pub program_url: Option<Url>,
pub request_input: Option<RequestInput>,
pub cycles: Option<u64>,
pub image_id: Option<Digest>,
pub journal: Option<Journal>,
pub request_id: Option<RequestId>,
pub offer: OfferParams,
pub requirements: RequirementParams,
}target_os=zkvm only.Expand description
Parameters for building a proof request.
This struct holds all the necessary information for constructing a ProofRequest. It provides a builder pattern for incrementally setting fields and methods for validating and accessing the parameters.
Most fields are optional and can be populated during the request building process by various layers. The structure serves as the central data container that passes through the request builder pipeline.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.program: Option<Cow<'static, [u8]>>RISC-V guest program that will be run in the zkVM.
env: Option<GuestEnv>Guest execution environment, providing the input for the guest. See GuestEnv.
program_url: Option<Url>Uploaded program URL, from which provers will fetch the program.
request_input: Option<RequestInput>Prepared input for the ProofRequest, containing either a URL or inline input. See RequestInput.
cycles: Option<u64>Count of the RISC Zero execution cycles. Used to estimate proving cost.
image_id: Option<Digest>Image ID identifying the program being executed.
journal: Option<Journal>Contents of the Journal that results from the execution.
request_id: Option<RequestId>RequestId to use for the proof request.
offer: OfferParamsOfferParams for constructing the Offer to send along with the request.
requirements: RequirementParamsRequirementParams for constructing the Requirements for the resulting proof.
Implementations§
Source§impl RequestParams
impl RequestParams
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new empty instance of RequestParams.
This is equivalent to calling Default::default() and is provided as a
convenience method for better readability when building requests.
Sourcepub fn require_program(&self) -> Result<&[u8], MissingFieldError>
pub fn require_program(&self) -> Result<&[u8], MissingFieldError>
Gets the program bytes, returning an error if not set.
This method is used by layers in the request building pipeline to access the program when it’s required for processing.
Sourcepub fn with_program(self, value: impl Into<Cow<'static, [u8]>>) -> Self
pub fn with_program(self, value: impl Into<Cow<'static, [u8]>>) -> Self
Sets the program to be executed in the zkVM.
Sourcepub fn require_env(&self) -> Result<&GuestEnv, MissingFieldError>
pub fn require_env(&self) -> Result<&GuestEnv, MissingFieldError>
Gets the guest environment, returning an error if not set.
The guest environment contains the input data for the program.
Sourcepub fn with_env(self, value: impl Into<GuestEnv>) -> Self
pub fn with_env(self, value: impl Into<GuestEnv>) -> Self
Sets the GuestEnv, providing the guest with input.
Can be constructed with GuestEnvBuilder.
use boundless_market::GuestEnv;
RequestParams::new()
.with_program(ECHO_ELF)
.with_env(GuestEnv::builder()
.write_frame(b"hello!")
.write_frame(b"goodbye."));See also Self::with_env and GuestEnvBuilder
Sourcepub fn with_stdin(self, value: impl Into<Vec<u8>>) -> Self
pub fn with_stdin(self, value: impl Into<Vec<u8>>) -> Self
Sets the GuestEnv to be contain the given bytes as stdin.
Note that the bytes are passed directly to the guest without encoding. If your guest
expects the input to be encoded in any way (e.g. bincode), the caller must encode the
data before passing it.
If the GuestEnv is already set, this replaces it.
RequestParams::new()
.with_program(ECHO_ELF)
.with_stdin(b"hello!");See also Self::with_env and GuestEnvBuilder
Sourcepub fn require_program_url(&self) -> Result<&Url, MissingFieldError>
pub fn require_program_url(&self) -> Result<&Url, MissingFieldError>
Gets the program URL, returning an error if not set.
The program URL is where provers will download the program to execute.
Sourcepub fn with_program_url<T: TryInto<Url>>(
self,
value: T,
) -> Result<Self, T::Error>
pub fn with_program_url<T: TryInto<Url>>( self, value: T, ) -> Result<Self, T::Error>
Set the program URL, where provers can download the program to be proven.
RequestParams::new()
.with_program_url("https://fileserver.example/guest.bin")?;Sourcepub fn require_request_input(&self) -> Result<&RequestInput, MissingFieldError>
pub fn require_request_input(&self) -> Result<&RequestInput, MissingFieldError>
Gets the request input, returning an error if not set.
The request input contains the input data for the guest program, either inline or as a URL.
Sourcepub fn with_request_input(self, value: impl Into<RequestInput>) -> Self
pub fn with_request_input(self, value: impl Into<RequestInput>) -> Self
Sets the encoded input data for the request. This data will be decoded by the prover into a GuestEnv that will be used to run the guest.
If not provided, the this will be constructed from the data given via RequestParams::with_env or RequestParams::with_stdin. If the input is set with both this method and one of those two, the input specified here takes precedence.
Sourcepub fn with_input_url<T: TryInto<Url>>(self, value: T) -> Result<Self, T::Error>
pub fn with_input_url<T: TryInto<Url>>(self, value: T) -> Result<Self, T::Error>
Sets the input as a URL from which provers can download the input data.
This is a convenience method that creates a RequestInput with URL type.
RequestParams::new()
.with_input_url("https://fileserver.example/input.bin")?;Sourcepub fn require_cycles(&self) -> Result<u64, MissingFieldError>
pub fn require_cycles(&self) -> Result<u64, MissingFieldError>
Gets the cycle count, returning an error if not set.
The cycle count is used to estimate proving costs.
Sourcepub fn with_cycles(self, value: u64) -> Self
pub fn with_cycles(self, value: u64) -> Self
Sets the cycle count for the proof request.
This is used to estimate proving costs and determine appropriate pricing.
Sourcepub fn require_journal(&self) -> Result<&Journal, MissingFieldError>
pub fn require_journal(&self) -> Result<&Journal, MissingFieldError>
Gets the journal, returning an error if not set.
The journal contains the output from the guest program execution.
Sourcepub fn with_journal(self, value: impl Into<Journal>) -> Self
pub fn with_journal(self, value: impl Into<Journal>) -> Self
Sets the journal for the request.
The journal is the output from the guest program execution and is used to configure verification requirements.
Sourcepub fn require_image_id(&self) -> Result<Digest, MissingFieldError>
pub fn require_image_id(&self) -> Result<Digest, MissingFieldError>
Gets the image ID, returning an error if not set.
The image ID uniquely identifies the program being executed.
Sourcepub fn with_image_id(self, value: impl Into<Digest>) -> Self
pub fn with_image_id(self, value: impl Into<Digest>) -> Self
Sets the image ID for the request.
The image ID is the hash of the program binary and uniquely identifies the program being executed.
Sourcepub fn require_request_id(&self) -> Result<&RequestId, MissingFieldError>
pub fn require_request_id(&self) -> Result<&RequestId, MissingFieldError>
Gets the request ID, returning an error if not set.
The request ID contains the requestor’s address and a unique index, and is used to track the request throughout its lifecycle.
Sourcepub fn with_request_id(self, value: impl Into<RequestId>) -> Self
pub fn with_request_id(self, value: impl Into<RequestId>) -> Self
Sets the request ID for the proof request.
The request ID contains the requestor’s address and a unique index, and is used to track the request throughout its lifecycle.
Sourcepub fn with_offer(self, value: impl Into<OfferParams>) -> Self
pub fn with_offer(self, value: impl Into<OfferParams>) -> Self
Configure the Offer on the ProofRequest by either providing a complete offer, or a partial offer via OfferParams.
use alloy::primitives::utils::parse_units;
RequestParams::new()
.with_offer(OfferParams::builder()
.max_price(parse_units("0.01", "ether").unwrap())
.ramp_up_period(30)
.lock_timeout(120)
.timeout(240));Sourcepub fn with_requirements(self, value: impl Into<RequirementParams>) -> Self
pub fn with_requirements(self, value: impl Into<RequirementParams>) -> Self
Configure the Requirements on the ProofRequest by either providing the complete requirements, or partial requirements via RequirementParams.
use alloy::primitives::address;
RequestParams::new()
.with_requirements(RequirementParams::builder()
.callback_address(address!("0x00000000000000000000000000000000deadbeef")));Sourcepub fn with_groth16_proof(self) -> Self
pub fn with_groth16_proof(self) -> Self
Request a stand-alone Groth16 proof for this request.
This is a convinience method to set the selector on the requirements. Note that calling RequestParams::with_requirements after this function will overwrite the change.
Sourcepub fn with_blake3_groth16_proof(self) -> Self
pub fn with_blake3_groth16_proof(self) -> Self
Request a stand-alone Blake3 Groth16 proof for this request.
This is a convinience method to set the selector on the requirements. Note that calling RequestParams::with_requirements after this function will overwrite the change.
Trait Implementations§
Source§impl Adapt<Finalizer> for RequestParams
impl Adapt<Finalizer> for RequestParams
Source§impl<P> Adapt<OfferLayer<P>> for RequestParams
impl<P> Adapt<OfferLayer<P>> for RequestParams
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
layer: &OfferLayer<P>,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, layer: &OfferLayer<P>, ) -> Result<Self::Output, Self::Error>
Source§impl<D> Adapt<PreflightLayer<D>> for RequestParamswhere
D: StorageDownloader,
impl<D> Adapt<PreflightLayer<D>> for RequestParamswhere
D: StorageDownloader,
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
layer: &PreflightLayer<D>,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, layer: &PreflightLayer<D>, ) -> Result<Self::Output, Self::Error>
Source§impl Adapt<PreflightLayer<NotProvided>> for RequestParams
impl Adapt<PreflightLayer<NotProvided>> for RequestParams
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
_: &PreflightLayer<NotProvided>,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, _: &PreflightLayer<NotProvided>, ) -> Result<Self::Output, Self::Error>
Source§impl<P> Adapt<RequestIdLayer<P>> for RequestParams
impl<P> Adapt<RequestIdLayer<P>> for RequestParams
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
layer: &RequestIdLayer<P>,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, layer: &RequestIdLayer<P>, ) -> Result<Self::Output, Self::Error>
Source§impl Adapt<RequirementsLayer> for RequestParams
impl Adapt<RequirementsLayer> for RequestParams
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
layer: &RequirementsLayer,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, layer: &RequirementsLayer, ) -> Result<Self::Output, Self::Error>
Source§impl Adapt<StorageLayer<NotProvided>> for RequestParams
impl Adapt<StorageLayer<NotProvided>> for RequestParams
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
layer: &StorageLayer<NotProvided>,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, layer: &StorageLayer<NotProvided>, ) -> Result<Self::Output, Self::Error>
Source§impl<S> Adapt<StorageLayer<S>> for RequestParamswhere
S: StorageUploader,
impl<S> Adapt<StorageLayer<S>> for RequestParamswhere
S: StorageUploader,
Source§type Output = RequestParams
type Output = RequestParams
Source§async fn process_with(
self,
layer: &StorageLayer<S>,
) -> Result<Self::Output, Self::Error>
async fn process_with( self, layer: &StorageLayer<S>, ) -> Result<Self::Output, Self::Error>
Source§impl Clone for RequestParams
impl Clone for RequestParams
Source§fn clone(&self) -> RequestParams
fn clone(&self) -> RequestParams
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RequestParams
impl Debug for RequestParams
Source§impl Default for RequestParams
impl Default for RequestParams
Source§fn default() -> RequestParams
fn default() -> RequestParams
Source§impl<Program, Env> From<(Program, Env)> for RequestParams
impl<Program, Env> From<(Program, Env)> for RequestParams
Source§fn from(value: (Program, Env)) -> Self
fn from(value: (Program, Env)) -> Self
Source§impl<P, S, D> Layer<RequestParams> for StandardRequestBuilder<P, S, D>where
P: Provider<Ethereum> + 'static + Clone,
D: StorageDownloader,
RequestParams: Adapt<StorageLayer<S>, Output = RequestParams, Error = Error> + Adapt<PreflightLayer<D>, Output = RequestParams, Error = Error>,
impl<P, S, D> Layer<RequestParams> for StandardRequestBuilder<P, S, D>where
P: Provider<Ethereum> + 'static + Clone,
D: StorageDownloader,
RequestParams: Adapt<StorageLayer<S>, Output = RequestParams, Error = Error> + Adapt<PreflightLayer<D>, Output = RequestParams, Error = Error>,
Source§type Output = ProofRequest
type Output = ProofRequest
Source§async fn process(
&self,
input: RequestParams,
) -> Result<ProofRequest, Self::Error>
async fn process( &self, input: RequestParams, ) -> Result<ProofRequest, Self::Error>
Auto Trait Implementations§
impl !Freeze for RequestParams
impl RefUnwindSafe for RequestParams
impl Send for RequestParams
impl Sync for RequestParams
impl Unpin for RequestParams
impl UnwindSafe for RequestParams
Blanket Implementations§
Source§impl<L, I> Adapt<L> for Iwhere
L: Layer<I>,
impl<L, I> Adapt<L> for Iwhere
L: Layer<I>,
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§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> 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.