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 */
}target_os=zkvm only.Expand description
Builder for the Client with standard implementations for the required components.
Fields§
§offer_layer_config: OfferLayerConfigBuilderConfiguration builder for OfferLayer, part of StandardRequestBuilder.
storage_layer_config: StorageLayerConfigBuilderConfiguration builder for StorageLayer, part of StandardRequestBuilder.
request_id_layer_config: RequestIdLayerConfigBuilderConfiguration builder for RequestIdLayer, part of StandardRequestBuilder.
request_finalizer_config: FinalizerConfigBuilderConfiguration builder for Finalizer, part of StandardRequestBuilder.
funding_mode: FundingModeFunding 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<U, S> ClientBuilder<U, NotProvided, S>
impl<U, S> ClientBuilder<U, NotProvided, S>
Sourcepub async fn build(
self,
) -> Result<Client<DynProvider, U, StandardDownloader, StandardRequestBuilder<DynProvider, U, StandardDownloader>, S>>
pub async fn build( self, ) -> Result<Client<DynProvider, U, StandardDownloader, StandardRequestBuilder<DynProvider, U, StandardDownloader>, S>>
Build the client with the StandardDownloader.
Source§impl<U, D: StorageDownloader, S> ClientBuilder<U, D, S>
impl<U, D: StorageDownloader, S> ClientBuilder<U, D, S>
Sourcepub async fn build(
self,
) -> Result<Client<DynProvider, U, D, StandardRequestBuilder<DynProvider, U, D>, S>>
pub async fn build( self, ) -> Result<Client<DynProvider, U, D, StandardRequestBuilder<DynProvider, U, D>, S>>
Build the client.
Source§impl<U, D, S> ClientBuilder<U, D, S>
impl<U, D, S> ClientBuilder<U, D, S>
Sourcepub fn with_deployment(self, deployment: impl Into<Option<Deployment>>) -> Self
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.
Sourcepub fn with_rpc_url(self, rpc_url: Url) -> Self
pub fn with_rpc_url(self, rpc_url: Url) -> Self
Set the RPC URL
Sourcepub fn with_funding_mode(self, funding_mode: FundingMode) -> Self
pub fn with_funding_mode(self, funding_mode: FundingMode) -> Self
Set the funding mode for onchain requests.
Sourcepub fn with_parameterization_mode(
self,
parameterization_mode: ParameterizationMode,
) -> Self
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());Sourcepub fn with_rpc_urls(self, rpc_urls: Vec<Url>) -> Self
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()]);Sourcepub fn with_private_key(
self,
private_key: impl Into<PrivateKeySigner>,
) -> ClientBuilder<U, D, PrivateKeySigner>
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());Sourcepub fn with_private_key_str(
self,
private_key: impl AsRef<str>,
) -> Result<ClientBuilder<U, D, PrivateKeySigner>, LocalSignerError>
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();Sourcepub fn with_signer<Zi>(
self,
signer: impl Into<Option<Zi>>,
) -> ClientBuilder<U, D, Zi>
pub fn with_signer<Zi>( self, signer: impl Into<Option<Zi>>, ) -> ClientBuilder<U, D, Zi>
Set the signer and wallet.
Sourcepub fn with_timeout(self, tx_timeout: impl Into<Option<Duration>>) -> Self
pub fn with_timeout(self, tx_timeout: impl Into<Option<Duration>>) -> Self
Set the transaction timeout in seconds
Sourcepub fn with_balance_alerts(
self,
config: impl Into<Option<BalanceAlertConfig>>,
) -> Self
pub fn with_balance_alerts( self, config: impl Into<Option<BalanceAlertConfig>>, ) -> Self
Set the balance alerts configuration
Sourcepub fn with_uploader<Z: StorageUploader>(
self,
uploader: Option<Z>,
) -> ClientBuilder<Z, D, S>
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.
Sourcepub fn with_downloader<Z: StorageDownloader>(
self,
downloader: Z,
) -> ClientBuilder<U, Z, S>
pub fn with_downloader<Z: StorageDownloader>( self, downloader: Z, ) -> ClientBuilder<U, Z, S>
Sets the storage downloader for fetching data from URLs.
Sourcepub async fn with_uploader_config(
self,
config: &StorageUploaderConfig,
) -> Result<ClientBuilder<StandardUploader, D, S>, StorageError>
pub async fn with_uploader_config( self, config: &StorageUploaderConfig, ) -> Result<ClientBuilder<StandardUploader, D, S>, StorageError>
Set the storage uploader from the given config
Sourcepub fn with_price_provider(
self,
price_provider: impl Into<Option<PriceProviderArc>>,
) -> Self
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));Sourcepub fn config_offer_layer(
self,
f: impl FnOnce(&mut OfferLayerConfigBuilder) -> &mut OfferLayerConfigBuilder,
) -> Self
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)
);Sourcepub fn config_request_id_layer(
self,
f: impl FnOnce(&mut RequestIdLayerConfigBuilder) -> &mut RequestIdLayerConfigBuilder,
) -> Self
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)
);Sourcepub fn config_storage_layer(
self,
f: impl FnOnce(&mut StorageLayerConfigBuilder) -> &mut StorageLayerConfigBuilder,
) -> Self
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)
);Sourcepub fn config_request_finalizer(
self,
f: impl FnOnce(&mut FinalizerConfigBuilder) -> &mut FinalizerConfigBuilder,
) -> Self
pub fn config_request_finalizer( self, f: impl FnOnce(&mut FinalizerConfigBuilder) -> &mut FinalizerConfigBuilder, ) -> Self
Modify the Finalizer configuration used in the StandardRequestBuilder.
Sourcepub fn with_skip_preflight(self, skip: bool) -> Self
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>
impl<U, D> ClientProviderBuilder for ClientBuilder<U, D, NotProvided>
Source§type Error = Error
type Error = Error
Source§async fn build_provider(
&self,
rpc_urls: Vec<Url>,
) -> Result<DynProvider, Self::Error>
async fn build_provider( &self, rpc_urls: Vec<Url>, ) -> Result<DynProvider, Self::Error>
Source§fn signer_address(&self) -> Option<Address>
fn signer_address(&self) -> Option<Address>
None if no signer.Source§impl<U, D, S> ClientProviderBuilder for ClientBuilder<U, D, S>
impl<U, D, S> ClientProviderBuilder for ClientBuilder<U, D, S>
Source§type Error = Error
type Error = Error
Source§async fn build_provider(
&self,
rpc_urls: Vec<Url>,
) -> Result<DynProvider, Self::Error>
async fn build_provider( &self, rpc_urls: Vec<Url>, ) -> Result<DynProvider, Self::Error>
Source§fn signer_address(&self) -> Option<Address>
fn signer_address(&self) -> Option<Address>
None if no signer.Auto Trait Implementations§
impl<U, D, S> Freeze for ClientBuilder<U, D, S>
impl<U, D, S> !RefUnwindSafe for ClientBuilder<U, D, S>
impl<U, D, S> Send for ClientBuilder<U, D, S>
impl<U, D, S> Sync for ClientBuilder<U, D, S>
impl<U, D, S> Unpin for ClientBuilder<U, D, S>
impl<U, D, S> !UnwindSafe for ClientBuilder<U, D, S>
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.