Struct Client
pub struct Client { /* private fields */ }Expand description
§SP1 Aggregating Proving Client
A cryptographically sound implementation of the Proving trait that uses
SP1 to generate
zero-knowledge proofs for state diff lists (SDLs).
This client optionally proves local laws and aggregates the resulting proof with the proof of the global laws.
The proving client can be configured to generate proofs on the CPU or a prover network, such as Succinct Network.
§Usage Notes
- Proof generation is computationally intensive and may take significant time.
- Consider running the prover on dedicated hardware for production use.
§Example
use delta_crypto::hash::HashDigest;
use delta_proving_clients::{Proving, sp1};
use delta_verifiable::types::{VerifiableWithDiffs, VerificationContext};
async fn generate_real_proof(
sdl_hash: HashDigest,
verifiables: Vec<VerifiableWithDiffs>,
context: VerificationContext
) -> Result<(), Box<dyn std::error::Error>> {
let client = sp1::Client::global_laws_cpu();
// Generate a cryptographically sound proof (also expensive)
let proof = client.prove(sdl_hash, &verifiables, &context, &[])?;
println!("Generated proof for SDL {}", sdl_hash);
Ok(())
}Implementations§
§impl Client
impl Client
pub fn global_laws_cpu() -> Client
pub fn global_laws_cpu() -> Client
Create a new CPU-based proving client for the global laws.
pub fn local_laws_cpu(elf: &[u8]) -> Client
pub fn local_laws_cpu(elf: &[u8]) -> Client
Create a new CPU-based proving client for the global laws and local laws
§Parameters
elf- the raw bytes of the local laws ELF
pub fn with_local_laws_cpu(self, elf: &[u8]) -> Client
pub fn with_local_laws_cpu(self, elf: &[u8]) -> Client
Set a new CPU-based proving client for local laws
§Parameters
elf- the raw bytes of the local laws ELF
pub fn global_laws_succinct(private_key: &str, rpc_url: &str) -> Client
pub fn global_laws_succinct(private_key: &str, rpc_url: &str) -> Client
Create a new succinct network-based proving client for the global laws.
§Parameters
private_key- The Secp256k1 private key of the account used for authentication with the Succinct Network. This key will be used to sign proof requests to ensure they are securely processed. Refer to the SP1 documentation for details on key setup.rpc_url- The RPC URL to connect to the network.
pub fn global_laws_succinct_with_strategy(
private_key: &str,
rpc_url: &str,
strategy: FulfillmentStrategy,
) -> Client
pub fn global_laws_succinct_with_strategy( private_key: &str, rpc_url: &str, strategy: FulfillmentStrategy, ) -> Client
Create a new succinct network-based proving client for the global laws with a specific fulfillment strategy.
§Parameters
private_key- see Self::global_laws_succinctrpc_url- see Self::global_laws_succinctstrategy- the fulfillment strategy to use when dispatching proofs on the network
pub fn local_laws_succinct(
elf: &[u8],
private_key: &str,
rpc_url: &str,
) -> Client
pub fn local_laws_succinct( elf: &[u8], private_key: &str, rpc_url: &str, ) -> Client
Create a new succinct network-based proving client for the global laws and local laws
§Parameters
elf- the raw bytes of the local laws ELFprivate_key- see Self::global_laws_succinctrpc_url- see Self::global_laws_succinct
pub fn local_laws_succinct_with_strategy(
elf: &[u8],
private_key: &str,
rpc_url: &str,
strategy: FulfillmentStrategy,
) -> Client
pub fn local_laws_succinct_with_strategy( elf: &[u8], private_key: &str, rpc_url: &str, strategy: FulfillmentStrategy, ) -> Client
Create a new succinct network-based proving client for the global laws and local laws with a configurable fulfillment strategy for both provers.
pub fn with_local_laws_succinct(
self,
elf: &[u8],
private_key: &str,
rpc_url: &str,
) -> Client
pub fn with_local_laws_succinct( self, elf: &[u8], private_key: &str, rpc_url: &str, ) -> Client
Set a new succinct network-based proving client for local laws
§Parameters
elf- the raw bytes of the local laws ELFprivate_key- see Self::global_laws_succinctrpc_url- see Self::global_laws_succinct
pub fn with_local_laws_succinct_with_strategy(
self,
elf: &[u8],
private_key: &str,
rpc_url: &str,
strategy: FulfillmentStrategy,
) -> Client
pub fn with_local_laws_succinct_with_strategy( self, elf: &[u8], private_key: &str, rpc_url: &str, strategy: FulfillmentStrategy, ) -> Client
Set a new succinct network-based proving client for local laws with a configurable fulfillment strategy.
§Parameters
elf- the raw bytes of the local laws ELF programprivate_key- the Succinct network Secp256k1 private key used to sign requestsrpc_url- the Succinct network RPC endpoint to submit proof jobs tostrategy- how the network should fulfill the proof request
pub fn global_laws_cuda(backend_url: &str) -> Client
pub fn global_laws_cuda(backend_url: &str) -> Client
Create a new network CUDA-based proving client for the global laws.
§Parameters
backend_url: url to the sp1 CUDA backend. cf. the SP1 CUDA backend
pub fn local_laws_cuda(elf: &[u8], backend_url: &str) -> Client
pub fn local_laws_cuda(elf: &[u8], backend_url: &str) -> Client
Create a new CUDA-based proving client for the global laws and local laws
§Parameters
elf- the raw bytes of the local laws ELFbackend_url- url to the sp1 CUDA backend
pub fn with_local_laws_cuda(self, elf: &[u8], backend_url: &str) -> Client
pub fn with_local_laws_cuda(self, elf: &[u8], backend_url: &str) -> Client
Set a new CUDA-based proving client for local laws
§Parameters
elf- the raw bytes of the local laws ELFbackend_url- url to the sp1 CUDA backend
pub fn with_global_mode(self, mode: SP1ProofMode) -> Client
pub fn with_global_mode(self, mode: SP1ProofMode) -> Client
Change the proof mode of the global laws proving.
By default the mode is set to DEFAULT_PROOF_MODE for the global prover. Local laws are always proven in [SP1ProofMode::Compressed] mode for aggregation to work.
Trait Implementations§
§impl Proving for Client
impl Proving for Client
§fn local_laws_vkey(&self) -> Option<HashDigest>
fn local_laws_vkey(&self) -> Option<HashDigest>
§fn prove(
&self,
sdl_hash: HashDigest,
verifiables: &[VerifiableWithDiffs],
context: &VerificationContext,
local_laws_input: &[u8],
) -> Result<SDLProof, <Client as Proving>::Error>
fn prove( &self, sdl_hash: HashDigest, verifiables: &[VerifiableWithDiffs], context: &VerificationContext, local_laws_input: &[u8], ) -> Result<SDLProof, <Client as Proving>::Error>
Auto Trait Implementations§
impl !Freeze for Client
impl !RefUnwindSafe for Client
impl Send for Client
impl Sync for Client
impl Unpin for Client
impl !UnwindSafe for Client
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<F, EF, E> ExtensionOperand<F, EF> for Ewhere
F: Field,
EF: ExtensionField<F>,
E: Any,
impl<F, EF, E> ExtensionOperand<F, EF> for Ewhere
F: Field,
EF: ExtensionField<F>,
E: Any,
fn to_operand(self) -> ExtOperand<F, EF>
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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> 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::Request§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.