Skip to main content

ClientBuilder

Struct ClientBuilder 

Source
pub struct ClientBuilder<U, D, S> {
    pub offer_layer_config: OfferLayerConfigBuilder,
    pub storage_layer_config: StorageLayerConfigBuilder,
    pub request_id_layer_config: RequestIdLayerConfigBuilder,
    pub request_finalizer_config: FinalizerConfigBuilder,
    pub funding_mode: FundingMode,
    pub skip_preflight: Option<bool>,
    /* private fields */
}
Available on non-target_os=zkvm only.
Expand description

Builder for the Client with standard implementations for the required components.

Fields§

§offer_layer_config: OfferLayerConfigBuilder

Configuration builder for OfferLayer, part of StandardRequestBuilder.

§storage_layer_config: StorageLayerConfigBuilder

Configuration builder for StorageLayer, part of StandardRequestBuilder.

§request_id_layer_config: RequestIdLayerConfigBuilder

Configuration builder for RequestIdLayer, part of StandardRequestBuilder.

§request_finalizer_config: FinalizerConfigBuilder

Configuration builder for Finalizer, part of StandardRequestBuilder.

§funding_mode: FundingMode

Funding mode for onchain requests.

Defaults to FundingMode::Always. FundingMode::Never can be used to never send value with the request. FundingMode::AvailableBalance can be used to only send value if the current onchain balance is insufficient. FundingMode::BelowThreshold can be used to send value only if the balance is below a configurable threshold. FundingMode::MinMaxBalance can be used to maintain a minimum balance by funding requests accordingly.

§skip_preflight: Option<bool>

Whether to skip preflight/pricing checks.

If Some(true), preflight checks are skipped. If Some(false), preflight checks are run. If None, falls back to checking the BOUNDLESS_IGNORE_PREFLIGHT environment variable.

Implementations§

Source§

impl ClientBuilder<NotProvided, NotProvided, NotProvided>

Source

pub fn new() -> Self

Create a new client builder.

Source§

impl<U, S> ClientBuilder<U, NotProvided, S>

Source§

impl<U, D: StorageDownloader, S> ClientBuilder<U, D, S>

Source

pub async fn build( self, ) -> Result<Client<DynProvider, U, D, StandardRequestBuilder<DynProvider, U, D>, S>>
where U: Clone, D: Clone, Self: ClientProviderBuilder<Error = Error>,

Build the client.

Source§

impl<U, D, S> ClientBuilder<U, D, S>

Source

pub fn with_deployment(self, deployment: impl Into<Option<Deployment>>) -> Self

Set the Deployment of the Boundless Market that this client will use.

If None, the builder will attempt to infer the deployment from the chain ID.

Source

pub fn with_rpc_url(self, rpc_url: Url) -> Self

Set the RPC URL

Source

pub fn with_funding_mode(self, funding_mode: FundingMode) -> Self

Set the funding mode for onchain requests.

Source

pub fn with_parameterization_mode( self, parameterization_mode: ParameterizationMode, ) -> Self

Set the parameterization mode for the offer layer.

The parameterization mode is used to define the offering parameters for the request. The default is ParameterizationMode::fulfillment(), which is conservative and ensures more provers can fulfill the request.

§Example
use boundless_market::request_builder::ParameterizationMode;

Client::builder().with_parameterization_mode(ParameterizationMode::fulfillment());
Source

pub fn with_rpc_urls(self, rpc_urls: Vec<Url>) -> Self

Set additional RPC URLs for automatic failover.

When multiple URLs are provided (via with_rpc_url and/or with_rpc_urls), they are merged into a single list. If 2+ URLs are provided, the client will use Alloy’s FallbackLayer to distribute requests across multiple RPC endpoints with automatic failover. If only 1 URL is provided, a regular provider is used.

§Example
// Multiple URLs - uses fallback provider
Client::builder()
    .with_rpc_urls(vec![
        Url::parse("https://rpc2.example.com").unwrap(),
        Url::parse("https://rpc3.example.com").unwrap(),
    ]);

// Single URL - uses regular provider
Client::builder()
    .with_rpc_urls(vec![Url::parse("https://rpc.example.com").unwrap()]);
Source

pub fn with_private_key( self, private_key: impl Into<PrivateKeySigner>, ) -> ClientBuilder<U, D, PrivateKeySigner>

Set the signer from the given private key.

use alloy::signers::local::PrivateKeySigner;

Client::builder().with_private_key(PrivateKeySigner::random());
Source

pub fn with_private_key_str( self, private_key: impl AsRef<str>, ) -> Result<ClientBuilder<U, D, PrivateKeySigner>, LocalSignerError>

Set the signer from the given private key as a string.


Client::builder().with_private_key_str(
    "0x1cee2499e12204c2ed600d780a22a67b3c5fff3310d984cca1f24983d565265c"
).unwrap();
Source

pub fn with_signer<Zi>( self, signer: impl Into<Option<Zi>>, ) -> ClientBuilder<U, D, Zi>
where Zi: Signer + Clone + TxSigner<Signature> + Send + Sync + 'static,

Set the signer and wallet.

Source

pub fn with_timeout(self, tx_timeout: impl Into<Option<Duration>>) -> Self

Set the transaction timeout in seconds

Source

pub fn with_balance_alerts( self, config: impl Into<Option<BalanceAlertConfig>>, ) -> Self

Set the balance alerts configuration

Source

pub fn with_uploader<Z: StorageUploader>( self, uploader: Option<Z>, ) -> ClientBuilder<Z, D, S>

Set the storage uploader.

The returned ClientBuilder will be generic over the provider StorageUploader type.

Source

pub fn with_downloader<Z: StorageDownloader>( self, downloader: Z, ) -> ClientBuilder<U, Z, S>

Sets the storage downloader for fetching data from URLs.

Source

pub async fn with_uploader_config( self, config: &StorageUploaderConfig, ) -> Result<ClientBuilder<StandardUploader, D, S>, StorageError>

Set the storage uploader from the given config

Source

pub fn with_price_provider( self, price_provider: impl Into<Option<PriceProviderArc>>, ) -> Self

Set a custom price provider for fetching market prices.

If provided, the OfferLayer will use market prices (p10 and p99 percentiles) when OfferParams doesn’t explicitly set min_price or max_price.

This method allows you to use any implementation of PriceProvider, not just IndexerClient. This is useful for testing with mock providers or using alternative price data sources.

If not set, the indexer URL from the Deployment will be used to create an IndexerClient. The price provider takes precedence over the deployment’s indexer URL.

// Example: Use a custom price provider
// let custom_provider: PriceProviderArc = ...;
// ClientBuilder::new().with_price_provider(Some(custom_provider));
Source

pub fn config_offer_layer( self, f: impl FnOnce(&mut OfferLayerConfigBuilder) -> &mut OfferLayerConfigBuilder, ) -> Self

Modify the OfferLayer configuration used in the StandardRequestBuilder.

use alloy::primitives::utils::parse_units;

ClientBuilder::new().config_offer_layer(|config| config
    .max_price_per_cycle(parse_units("0.1", "gwei").unwrap())
    .ramp_up_period(36)
    .lock_timeout(120)
    .timeout(300)
);
Source

pub fn config_request_id_layer( self, f: impl FnOnce(&mut RequestIdLayerConfigBuilder) -> &mut RequestIdLayerConfigBuilder, ) -> Self

Modify the RequestIdLayer configuration used in the StandardRequestBuilder.

use boundless_market::request_builder::RequestIdLayerMode;

ClientBuilder::new().config_request_id_layer(|config| config
    .mode(RequestIdLayerMode::Nonce)
);
Source

pub fn config_storage_layer( self, f: impl FnOnce(&mut StorageLayerConfigBuilder) -> &mut StorageLayerConfigBuilder, ) -> Self

Modify the StorageLayer configuration used in the StandardRequestBuilder.

ClientBuilder::new().config_storage_layer(|config| config
    .inline_input_max_bytes(10240)
);
Source

pub fn config_request_finalizer( self, f: impl FnOnce(&mut FinalizerConfigBuilder) -> &mut FinalizerConfigBuilder, ) -> Self

Modify the Finalizer configuration used in the StandardRequestBuilder.

Source

pub fn with_skip_preflight(self, skip: bool) -> Self

Set whether to skip preflight/pricing checks on the request builder.

If true, preflight checks are skipped. If false, preflight checks are run. If not called, falls back to checking the BOUNDLESS_IGNORE_PREFLIGHT environment variable.

Trait Implementations§

Source§

impl<U, D> ClientProviderBuilder for ClientBuilder<U, D, NotProvided>

Source§

type Error = Error

Error returned by methods on this ClientProviderBuilder.
Source§

async fn build_provider( &self, rpc_urls: Vec<Url>, ) -> Result<DynProvider, Self::Error>

Build a provider connected to the given RPC URLs.
Source§

fn signer_address(&self) -> Option<Address>

Get the default signer address that will be used by this provider, or None if no signer.
Source§

impl<U, D, S> ClientProviderBuilder for ClientBuilder<U, D, S>
where S: TxSigner<Signature> + Send + Sync + Clone + 'static,

Source§

type Error = Error

Error returned by methods on this ClientProviderBuilder.
Source§

async fn build_provider( &self, rpc_urls: Vec<Url>, ) -> Result<DynProvider, Self::Error>

Build a provider connected to the given RPC URLs.
Source§

fn signer_address(&self) -> Option<Address>

Get the default signer address that will be used by this provider, or None if no signer.
Source§

impl<U: Clone, D: Clone, S: Clone> Clone for ClientBuilder<U, D, S>

Source§

fn clone(&self) -> ClientBuilder<U, D, S>

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<U, D, S> Default for ClientBuilder<U, D, S>

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<U, D, S> Freeze for ClientBuilder<U, D, S>
where S: Freeze, U: Freeze, D: Freeze,

§

impl<U, D, S> !RefUnwindSafe for ClientBuilder<U, D, S>

§

impl<U, D, S> Send for ClientBuilder<U, D, S>
where S: Send, U: Send, D: Send,

§

impl<U, D, S> Sync for ClientBuilder<U, D, S>
where S: Sync, U: Sync, D: Sync,

§

impl<U, D, S> Unpin for ClientBuilder<U, D, S>
where S: Unpin, U: Unpin, D: Unpin,

§

impl<U, D, S> !UnwindSafe for ClientBuilder<U, D, S>

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