Skip to main content

RequestParams

Struct RequestParams 

Source
#[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, }
Available on non-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
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional 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: OfferParams

OfferParams for constructing the Offer to send along with the request.

§requirements: RequirementParams

RequirementParams for constructing the Requirements for the resulting proof.

Implementations§

Source§

impl RequestParams

Source

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.

Source

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.

Source

pub fn with_program(self, value: impl Into<Cow<'static, [u8]>>) -> Self

Sets the program to be executed in the zkVM.

Source

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.

Source

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

Source

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

Source

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.

Source

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")?;
Source

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.

Source

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.

Source

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")?;
Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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));
Source

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")));
Source

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.

Source

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

Source§

type Output = ProofRequest

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &Finalizer, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl<P> Adapt<OfferLayer<P>> for RequestParams
where P: Provider<Ethereum> + 'static + Clone,

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &OfferLayer<P>, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl<D> Adapt<PreflightLayer<D>> for RequestParams

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &PreflightLayer<D>, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl Adapt<PreflightLayer<NotProvided>> for RequestParams

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, _: &PreflightLayer<NotProvided>, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl<P> Adapt<RequestIdLayer<P>> for RequestParams
where P: Provider<Ethereum> + 'static + Clone,

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &RequestIdLayer<P>, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl Adapt<RequirementsLayer> for RequestParams

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &RequirementsLayer, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl Adapt<StorageLayer<NotProvided>> for RequestParams

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &StorageLayer<NotProvided>, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl<S> Adapt<StorageLayer<S>> for RequestParams
where S: StorageUploader,

Source§

type Output = RequestParams

The output type after processing by the layer.
Source§

type Error = Error

Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &StorageLayer<S>, ) -> Result<Self::Output, Self::Error>

Processes this value with the provided layer.
Source§

impl Clone for RequestParams

Source§

fn clone(&self) -> RequestParams

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RequestParams

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Debug implementation that does not print the contents of the program.

Source§

impl Default for RequestParams

Source§

fn default() -> RequestParams

Returns the “default value” for a type. Read more
Source§

impl<Program, Env> From<(Program, Env)> for RequestParams
where Program: Into<Cow<'static, [u8]>>, Env: Into<GuestEnv>,

Source§

fn from(value: (Program, Env)) -> Self

Converts to this type from the input type.
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>,

Source§

type Output = ProofRequest

The output type produced by this layer.
Source§

type Error = Error

Error type that may be returned by this layer.
Source§

async fn process( &self, input: RequestParams, ) -> Result<ProofRequest, Self::Error>

Processes the input and returns the transformed output.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<L, I> Adapt<L> for I
where L: Layer<I>,

Source§

type Output = <L as Layer<I>>::Output

Available on non-target_os=zkvm only.
The output type after processing by the layer.
Source§

type Error = <L as Layer<I>>::Error

Available on non-target_os=zkvm only.
Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &L, ) -> Result<<I as Adapt<L>>::Output, <I as Adapt<L>>::Error>

Available on non-target_os=zkvm only.
Processes this value with the provided layer.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> FmtForward for T

Source§

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,

Causes self to use its Display implementation when Debug-formatted.
Source§

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,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

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,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

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,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

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

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
where Self: Borrow<B>, B: ?Sized,

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
where Self: BorrowMut<B>, B: ?Sized,

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
where Self: AsRef<R>, R: ?Sized,

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
where Self: AsMut<R>, R: ?Sized,

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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more