pub struct NetworkProver { /* private fields */ }
Expand description
An implementation of crate::ProverClient
that can generate proofs on a remote RPC server.
Implementations§
Source§impl NetworkProver
impl NetworkProver
Sourcepub fn new(signer: impl Into<NetworkSigner>, rpc_url: &str) -> Self
pub fn new(signer: impl Into<NetworkSigner>, rpc_url: &str) -> Self
Creates a new NetworkProver
with the given signer.
§Details
signer
: The network signer to use for signing requests. Can be aNetworkSigner
, private key string, or anything that implementsInto<NetworkSigner>
.rpc_url
: The rpc url to use for the prover network.
§Examples
Using a private key string:
use sp1_sdk::NetworkProver;
let prover = NetworkProver::new("0x...", "...");
Using a NetworkSigner
:
use sp1_sdk::{NetworkProver, NetworkSigner};
let signer = NetworkSigner::local("0x...").unwrap();
let prover = NetworkProver::new(signer, "...");
Sourcepub fn with_tee_signers(self, tee_signers: Vec<Address>) -> Self
pub fn with_tee_signers(self, tee_signers: Vec<Address>) -> Self
Sets the list of TEE signers, used for verifying TEE proofs.
Sourcepub async fn get_balance(&self) -> Result<U256>
pub async fn get_balance(&self) -> Result<U256>
Get the credit balance of your account on the prover network.
§Example
use sp1_sdk::{ProverClient, SP1Stdin};
tokio_test::block_on(async {
let client = ProverClient::builder().network().build();
let balance = client.get_balance().await.unwrap();
})
Sourcepub fn execute<'a>(
&'a self,
elf: &'a [u8],
stdin: &SP1Stdin,
) -> CpuExecuteBuilder<'a>
pub fn execute<'a>( &'a self, elf: &'a [u8], stdin: &SP1Stdin, ) -> CpuExecuteBuilder<'a>
Creates a new CpuExecuteBuilder
for simulating the execution of a program on the CPU.
§Details
Note that this does not use the network in any capacity. The method is provided for convenience.
§Example
use sp1_sdk::{Prover, ProverClient, SP1Stdin};
let elf = &[1, 2, 3];
let stdin = SP1Stdin::new();
let client = ProverClient::builder().cpu().build();
let (public_values, execution_report) = client.execute(elf, &stdin).run().unwrap();
Sourcepub fn prove<'a>(
&'a self,
pk: &'a SP1ProvingKey,
stdin: &'a SP1Stdin,
) -> NetworkProveBuilder<'a>
pub fn prove<'a>( &'a self, pk: &'a SP1ProvingKey, stdin: &'a SP1Stdin, ) -> NetworkProveBuilder<'a>
A request to generate a proof for a given proving key and input.
§Details
pk
: The proving key to use for the proof.stdin
: The input to use for the proof.
§Example
use sp1_sdk::{Prover, ProverClient, SP1Stdin};
let elf = &[1, 2, 3];
let stdin = SP1Stdin::new();
let client = ProverClient::builder().network().build();
let (pk, vk) = client.setup(elf);
let proof = client.prove(&pk, &stdin).run();
Sourcepub async fn register_program(
&self,
vk: &SP1VerifyingKey,
elf: &[u8],
) -> Result<B256>
pub async fn register_program( &self, vk: &SP1VerifyingKey, elf: &[u8], ) -> Result<B256>
Registers a program if it is not already registered.
§Details
vk
: The verifying key to use for the program.elf
: The elf to use for the program.
Note that this method requires that the user honestly registers the program (i.e., the elf matches the vk).
§Example
use sp1_sdk::{Prover, ProverClient, SP1Stdin};
let elf = &[1, 2, 3];
let client = ProverClient::builder().network().build();
let (pk, vk) = client.setup(elf);
let vk_hash = client.register_program(&vk, elf);
Sourcepub async fn get_proof_status(
&self,
request_id: B256,
) -> Result<(GetProofRequestStatusResponse, Option<SP1ProofWithPublicValues>)>
pub async fn get_proof_status( &self, request_id: B256, ) -> Result<(GetProofRequestStatusResponse, Option<SP1ProofWithPublicValues>)>
Gets the status of a proof request. Re-exposes the status response from the client.
§Details
request_id
: The request ID to get the status of.
§Example
use sp1_sdk::{network::B256, ProverClient};
tokio_test::block_on(async {
let request_id = B256::from_slice(&vec![1u8; 32]);
let client = ProverClient::builder().network().build();
let (status, maybe_proof) = client.get_proof_status(request_id).await.unwrap();
})
Sourcepub async fn get_proof_request(
&self,
request_id: B256,
) -> Result<Option<ProofRequest>>
pub async fn get_proof_request( &self, request_id: B256, ) -> Result<Option<ProofRequest>>
Gets the proof request details, if available.
The ProofRequest
type contains useful information about the request, like the cycle
count, or the gas used.
§Details
request_id
: The request ID to get the status of.
§Example
use sp1_sdk::{network::B256, ProverClient};
tokio_test::block_on(async {
let request_id = B256::from_slice(&vec![1u8; 32]);
let client = ProverClient::builder().network().build();
let request = client.get_proof_request(request_id).await.unwrap();
})
Sourcepub async fn process_proof_status(
&self,
request_id: B256,
remaining_timeout: Option<Duration>,
) -> Result<(Option<SP1ProofWithPublicValues>, FulfillmentStatus)>
pub async fn process_proof_status( &self, request_id: B256, remaining_timeout: Option<Duration>, ) -> Result<(Option<SP1ProofWithPublicValues>, FulfillmentStatus)>
Gets the status of a proof request with handling for timeouts and unfulfillable requests.
Returns the proof if it is fulfilled and the fulfillment status. Handles statuses indicating that the proof is unfulfillable or unexecutable with errors.
§Details
request_id
: The request ID to get the status of.remaining_timeout
: The remaining timeout for the proof request.
§Example
use sp1_sdk::{network::B256, ProverClient};
tokio_test::block_on(async {
let request_id = B256::from_slice(&vec![1u8; 32]);
let client = ProverClient::builder().network().build();
let (maybe_proof, fulfillment_status) =
client.process_proof_status(request_id, None).await.unwrap();
})
Sourcepub async fn wait_proof(
&self,
request_id: B256,
timeout: Option<Duration>,
auction_timeout: Option<Duration>,
) -> Result<SP1ProofWithPublicValues>
pub async fn wait_proof( &self, request_id: B256, timeout: Option<Duration>, auction_timeout: Option<Duration>, ) -> Result<SP1ProofWithPublicValues>
Waits for a proof to be generated and returns the proof. If a timeout is supplied, the
function will return an error if the proof is not generated within the timeout.
If auction_timeout
is supplied, the function will return an error if the proof request
remains in “requested” status for longer than the auction timeout.
Trait Implementations§
Source§impl Prover<CpuProverComponents> for NetworkProver
impl Prover<CpuProverComponents> for NetworkProver
Source§fn setup(&self, elf: &[u8]) -> (SP1ProvingKey, SP1VerifyingKey)
fn setup(&self, elf: &[u8]) -> (SP1ProvingKey, SP1VerifyingKey)
Source§fn prove(
&self,
pk: &SP1ProvingKey,
stdin: &SP1Stdin,
mode: SP1ProofMode,
) -> Result<SP1ProofWithPublicValues>
fn prove( &self, pk: &SP1ProvingKey, stdin: &SP1Stdin, mode: SP1ProofMode, ) -> Result<SP1ProofWithPublicValues>
Source§fn verify(
&self,
bundle: &SP1ProofWithPublicValues,
vkey: &SP1VerifyingKey,
) -> Result<(), SP1VerificationError>
fn verify( &self, bundle: &SP1ProofWithPublicValues, vkey: &SP1VerifyingKey, ) -> Result<(), SP1VerificationError>
PlonkBn254
proof match
the hash of the VK and the committed public values of the SP1ProofWithPublicValues
.Source§fn execute(
&self,
elf: &[u8],
stdin: &SP1Stdin,
) -> Result<(SP1PublicValues, ExecutionReport)>
fn execute( &self, elf: &[u8], stdin: &SP1Stdin, ) -> Result<(SP1PublicValues, ExecutionReport)>
Auto Trait Implementations§
impl !Freeze for NetworkProver
impl !RefUnwindSafe for NetworkProver
impl Send for NetworkProver
impl Sync for NetworkProver
impl Unpin for NetworkProver
impl !UnwindSafe for NetworkProver
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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
.Source§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
.Source§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.Source§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.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<F, EF, E> ExtensionOperand<F, EF> for E
impl<F, EF, E> ExtensionOperand<F, EF> for E
fn to_operand(self) -> ExtOperand<F, EF>
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::Request
Source§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.