(
&self,
- request_id: &[u8],
+ request_id: B256,
) -> Result<(GetProofRequestStatusResponse, Option)> {
let mut rpc = self.prover_network_client().await?;
let res = rpc
@@ -175,7 +214,7 @@ impl NetworkClient {
#[allow(clippy::too_many_arguments)]
pub async fn request_proof(
&self,
- vk_hash: &[u8],
+ vk_hash: B256,
stdin: &SP1Stdin,
mode: ProofMode,
version: &str,
@@ -190,7 +229,8 @@ impl NetworkClient {
// Create the stdin artifact.
let mut store = self.artifact_store_client().await?;
- let stdin_uri = self.create_artifact_with_content(&mut store, &stdin).await?;
+ let stdin_uri =
+ self.create_artifact_with_content(&mut store, ArtifactType::Stdin, &stdin).await?;
// Send the request.
let mut rpc = self.prover_network_client().await?;
@@ -248,10 +288,14 @@ impl NetworkClient {
pub(crate) async fn create_artifact_with_content(
&self,
store: &mut ArtifactStoreClient,
+ artifact_type: ArtifactType,
item: &T,
) -> Result {
let signature = self.signer.sign_message_sync("create_artifact".as_bytes())?;
- let request = CreateArtifactRequest { signature: signature.as_bytes().to_vec() };
+ let request = CreateArtifactRequest {
+ artifact_type: artifact_type.into(),
+ signature: signature.as_bytes().to_vec(),
+ };
let response = store.create_artifact(request).await?.into_inner();
let presigned_url = response.artifact_presigned_url;
diff --git a/crates/sdk/src/network/error.rs b/crates/sdk/src/network/error.rs
new file mode 100644
index 0000000000..3cde6d6047
--- /dev/null
+++ b/crates/sdk/src/network/error.rs
@@ -0,0 +1,39 @@
+use thiserror::Error;
+use tonic::Status;
+
+/// An error that can occur when interacting with the prover network.
+#[derive(Error, Debug)]
+pub enum Error {
+ /// The program execution failed.
+ #[error("Program simulation failed")]
+ SimulationFailed,
+
+ /// The proof request is unexecutable.
+ #[error("Proof request 0x{} is unexecutable", hex::encode(.request_id))]
+ RequestUnexecutable {
+ /// The ID of the request that cannot be executed.
+ request_id: Vec,
+ },
+
+ /// The proof request is unfulfillable.
+ #[error("Proof request 0x{} is unfulfillable", hex::encode(.request_id))]
+ RequestUnfulfillable {
+ /// The ID of the request that cannot be fulfilled.
+ request_id: Vec,
+ },
+
+ /// The proof request timed out.
+ #[error("Proof request 0x{} timed out", hex::encode(.request_id))]
+ RequestTimedOut {
+ /// The ID of the request that timed out.
+ request_id: Vec,
+ },
+
+ /// An error occurred while interacting with the RPC server.
+ #[error("RPC error")]
+ RpcError(#[from] Status),
+
+ /// An unknown error occurred.
+ #[error("Other error: {0}")]
+ Other(#[from] anyhow::Error),
+}
diff --git a/crates/sdk/src/network/mod.rs b/crates/sdk/src/network/mod.rs
index 6cc201f327..bcec52ab1c 100644
--- a/crates/sdk/src/network/mod.rs
+++ b/crates/sdk/src/network/mod.rs
@@ -4,19 +4,30 @@
pub mod client;
pub mod prover;
-mod sign_message;
#[rustfmt::skip]
#[allow(missing_docs)]
#[allow(clippy::default_trait_access)]
#[allow(clippy::too_many_lines)]
pub mod proto;
pub mod builder;
+mod error;
pub mod prove;
pub mod utils;
+pub use error::*;
+
pub use crate::network::client::NetworkClient;
pub use crate::network::proto::network::FulfillmentStrategy;
+// Re-export for verification key hash + request ID.
+pub use alloy_primitives::B256;
+
+/// The default RPC URL for the prover network.
+pub(crate) const DEFAULT_NETWORK_RPC_URL: &str = "https://rpc.production.succinct.tools/";
-pub(crate) const DEFAULT_PROVER_NETWORK_RPC: &str = "https://rpc.production.succinct.tools/";
+/// The default timeout for the prover network (4 hours).
pub(crate) const DEFAULT_TIMEOUT_SECS: u64 = 14400;
+
+/// The default cycle limit for the prover network (100M cycles).
+///
+/// This will only be used if both simulation is skipped and the cycle limit is not explicitly set.
pub(crate) const DEFAULT_CYCLE_LIMIT: u64 = 100_000_000;
diff --git a/crates/sdk/src/network/proto/artifact.rs b/crates/sdk/src/network/proto/artifact.rs
index e1ff3ad034..bda90769e9 100644
--- a/crates/sdk/src/network/proto/artifact.rs
+++ b/crates/sdk/src/network/proto/artifact.rs
@@ -4,6 +4,9 @@ pub struct CreateArtifactRequest {
/// The signature of the user on a pre-defined message. Used for authentication.
#[prost(bytes = "vec", tag = "1")]
pub signature: ::prost::alloc::vec::Vec,
+ /// The type of artifact to create.
+ #[prost(enumeration = "ArtifactType", tag = "2")]
+ pub artifact_type: i32,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
pub struct CreateArtifactResponse {
@@ -14,11 +17,58 @@ pub struct CreateArtifactResponse {
#[prost(string, tag = "2")]
pub artifact_presigned_url: ::prost::alloc::string::String,
}
+#[derive(
+ serde::Serialize,
+ serde::Deserialize,
+ Clone,
+ Copy,
+ Debug,
+ PartialEq,
+ Eq,
+ Hash,
+ PartialOrd,
+ Ord,
+ ::prost::Enumeration,
+)]
+#[repr(i32)]
+pub enum ArtifactType {
+ UnspecifiedArtifactType = 0,
+ /// A program artifact.
+ Program = 1,
+ /// A stdin artifact.
+ Stdin = 2,
+ /// A proof artifact.
+ Proof = 3,
+}
+impl ArtifactType {
+ /// String value of the enum field names used in the ProtoBuf definition.
+ ///
+ /// The values are not transformed in any way and thus are considered stable
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
+ match self {
+ Self::UnspecifiedArtifactType => "UNSPECIFIED_ARTIFACT_TYPE",
+ Self::Program => "PROGRAM",
+ Self::Stdin => "STDIN",
+ Self::Proof => "PROOF",
+ }
+ }
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
+ match value {
+ "UNSPECIFIED_ARTIFACT_TYPE" => Some(Self::UnspecifiedArtifactType),
+ "PROGRAM" => Some(Self::Program),
+ "STDIN" => Some(Self::Stdin),
+ "PROOF" => Some(Self::Proof),
+ _ => None,
+ }
+ }
+}
/// Generated client implementations.
pub mod artifact_store_client {
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
use tonic::codegen::http::Uri;
- use tonic::codegen::{Body, Bytes, CompressionEncoding, GrpcMethod, InterceptedService, StdError, http};
+ use tonic::codegen::*;
#[derive(Debug, Clone)]
pub struct ArtifactStoreClient {
inner: tonic::client::Grpc,
@@ -57,11 +107,11 @@ pub mod artifact_store_client {
F: tonic::service::Interceptor,
T::ResponseBody: Default,
T: tonic::codegen::Service<
- http::Request,
- Response = http::Response<
- >::ResponseBody,
- >,
+ http::Request,
+ Response = http::Response<
+ >::ResponseBody,
>,
+ >,
>>::Error:
Into + std::marker::Send + std::marker::Sync,
{
@@ -123,7 +173,7 @@ pub mod artifact_store_client {
/// Generated server implementations.
pub mod artifact_store_server {
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
- use tonic::codegen::{Arc, Body, BoxFuture, CompressionEncoding, Context, EnabledCompressionEncodings, InterceptedService, Poll, StdError, async_trait, empty_body, http};
+ use tonic::codegen::*;
/// Generated trait containing gRPC methods that should be implemented for use with ArtifactStoreServer.
#[async_trait]
pub trait ArtifactStore: std::marker::Send + std::marker::Sync + 'static {
diff --git a/crates/sdk/src/network/proto/mod.rs b/crates/sdk/src/network/proto/mod.rs
index 48eb63675a..95ba33205e 100644
--- a/crates/sdk/src/network/proto/mod.rs
+++ b/crates/sdk/src/network/proto/mod.rs
@@ -1,2 +1,4 @@
+#![allow(clippy::doc_markdown, clippy::must_use_candidate, clippy::wildcard_imports)]
+
pub mod artifact;
pub mod network;
diff --git a/crates/sdk/src/network/proto/network.rs b/crates/sdk/src/network/proto/network.rs
index 52691b93ab..6c411f84ab 100644
--- a/crates/sdk/src/network/proto/network.rs
+++ b/crates/sdk/src/network/proto/network.rs
@@ -254,20 +254,28 @@ pub struct ProofRequest {
/// The unix timestamp of when the request was updated.
#[prost(uint64, tag = "19")]
pub updated_at: u64,
- /// The unix timestamp of when the request was fulfilled.
+ /// The unix timestamp of when the request was fulfilled. Only included if
+ /// the request has a fulfillment status of FULFILLED.
#[prost(uint64, optional, tag = "20")]
pub fulfilled_at: ::core::option::Option,
/// The transaction hash of the request.
#[prost(bytes = "vec", tag = "21")]
pub tx_hash: ::prost::alloc::vec::Vec,
- /// The cycle count for the request.
+ /// The cycle used during the execution of the request. Only included if the
+ /// request has an execution status of EXECUTED.
#[prost(uint64, optional, tag = "22")]
pub cycles: ::core::option::Option,
- /// The amount deducted from the fulfiller's balance.
- #[prost(string, optional, tag = "23")]
- pub deduction_amount: ::core::option::Option<::prost::alloc::string::String>,
- /// The amount refunded to the fulfiller's balance.
+ /// The public values hash from the execution of the request. Only included if
+ /// the request has an execution status of EXECUTED.
+ #[prost(bytes = "vec", optional, tag = "23")]
+ pub public_values_hash: ::core::option::Option<::prost::alloc::vec::Vec>,
+ /// The amount deducted from the fulfiller's balance. Only included if the
+ /// request has a fulfillment status of ASSIGNED.
#[prost(string, optional, tag = "24")]
+ pub deduction_amount: ::core::option::Option<::prost::alloc::string::String>,
+ /// The amount refunded to the fulfiller's balance. Only included if the
+ /// request has a fulfillment status of EXECUTED.
+ #[prost(string, optional, tag = "25")]
pub refund_amount: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
@@ -287,14 +295,22 @@ pub struct GetProofRequestStatusResponse {
/// The transaction hash of the request.
#[prost(bytes = "vec", tag = "3")]
pub request_tx_hash: ::prost::alloc::vec::Vec,
+ /// The deadline of the request. A request should be ignored if it is past
+ /// its deadline.
+ #[prost(uint64, tag = "4")]
+ pub deadline: u64,
/// The optional transaction hash of the proof fulfill. Only included if the
/// request has a fulfillment status of FULFILLED.
- #[prost(bytes = "vec", optional, tag = "4")]
+ #[prost(bytes = "vec", optional, tag = "5")]
pub fulfill_tx_hash: ::core::option::Option<::prost::alloc::vec::Vec>,
/// The optional proof URI, where you can download the result of the request.
/// Only included if the request has a fulfillment status of FULFILLED.
- #[prost(string, optional, tag = "5")]
+ #[prost(string, optional, tag = "6")]
pub proof_uri: ::core::option::Option<::prost::alloc::string::String>,
+ /// The optional public values hash from the execution of the request. Only
+ /// included if the request has an execution status of EXECUTED.
+ #[prost(bytes = "vec", optional, tag = "7")]
+ pub public_values_hash: ::core::option::Option<::prost::alloc::vec::Vec>,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
pub struct GetProofRequestDetailsRequest {
@@ -557,6 +573,38 @@ pub struct RemoveDelegationResponse {
#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, ::prost::Message)]
pub struct RemoveDelegationResponseBody {}
#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
+pub struct TerminateDelegationRequest {
+ /// The message format of the body.
+ #[prost(enumeration = "MessageFormat", tag = "1")]
+ pub format: i32,
+ /// The signature of the sender.
+ #[prost(bytes = "vec", tag = "2")]
+ pub signature: ::prost::alloc::vec::Vec,
+ /// The body of the request.
+ #[prost(message, optional, tag = "3")]
+ pub body: ::core::option::Option,
+}
+#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
+pub struct TerminateDelegationRequestBody {
+ /// The account nonce of the sender.
+ #[prost(uint64, tag = "1")]
+ pub nonce: u64,
+ /// The address of the owner whose delegation to terminate.
+ #[prost(bytes = "vec", tag = "2")]
+ pub owner: ::prost::alloc::vec::Vec,
+}
+#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
+pub struct TerminateDelegationResponse {
+ /// The transaction hash.
+ #[prost(bytes = "vec", tag = "1")]
+ pub tx_hash: ::prost::alloc::vec::Vec,
+ /// The body of the response.
+ #[prost(message, optional, tag = "2")]
+ pub body: ::core::option::Option,
+}
+#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, ::prost::Message)]
+pub struct TerminateDelegationResponseBody {}
+#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
pub struct AcceptDelegationRequest {
/// The message format of the body.
#[prost(enumeration = "MessageFormat", tag = "1")]
@@ -949,14 +997,17 @@ pub struct Reservation {
#[prost(uint64, tag = "5")]
pub created_at: u64,
}
-#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, PartialEq, ::prost::Message)]
+#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
pub struct GetFilteredReservationsRequest {
+ /// Requester address to filter for.
+ #[prost(bytes = "vec", optional, tag = "1")]
+ pub requester: ::core::option::Option<::prost::alloc::vec::Vec>,
/// The optional maximum number of reservations to return (default is 10,
/// maximum is 100).
- #[prost(uint32, optional, tag = "1")]
+ #[prost(uint32, optional, tag = "2")]
pub limit: ::core::option::Option,
/// The optional page number to return (default is 1).
- #[prost(uint32, optional, tag = "2")]
+ #[prost(uint32, optional, tag = "3")]
pub page: ::core::option::Option,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, PartialEq, ::prost::Message)]
@@ -1120,19 +1171,19 @@ pub enum MessageFormat {
Json = 2,
}
impl MessageFormat {
- /// String value of the enum field names used in the `ProtoBuf` definition.
+ /// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
- /// (if the `ProtoBuf` definition does not change) and safe for programmatic use.
- #[must_use] pub fn as_str_name(&self) -> &'static str {
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
match self {
Self::UnspecifiedMessageFormat => "UNSPECIFIED_MESSAGE_FORMAT",
Self::Binary => "BINARY",
Self::Json => "JSON",
}
}
- /// Creates an enum from field names used in the `ProtoBuf` definition.
- #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option {
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
match value {
"UNSPECIFIED_MESSAGE_FORMAT" => Some(Self::UnspecifiedMessageFormat),
"BINARY" => Some(Self::Binary),
@@ -1167,11 +1218,11 @@ pub enum ProofMode {
Groth16 = 4,
}
impl ProofMode {
- /// String value of the enum field names used in the `ProtoBuf` definition.
+ /// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
- /// (if the `ProtoBuf` definition does not change) and safe for programmatic use.
- #[must_use] pub fn as_str_name(&self) -> &'static str {
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
match self {
Self::UnspecifiedProofMode => "UNSPECIFIED_PROOF_MODE",
Self::Core => "CORE",
@@ -1180,8 +1231,8 @@ impl ProofMode {
Self::Groth16 => "GROTH16",
}
}
- /// Creates an enum from field names used in the `ProtoBuf` definition.
- #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option {
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
match value {
"UNSPECIFIED_PROOF_MODE" => Some(Self::UnspecifiedProofMode),
"CORE" => Some(Self::Core),
@@ -1219,11 +1270,11 @@ pub enum FulfillmentStrategy {
Auction = 3,
}
impl FulfillmentStrategy {
- /// String value of the enum field names used in the `ProtoBuf` definition.
+ /// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
- /// (if the `ProtoBuf` definition does not change) and safe for programmatic use.
- #[must_use] pub fn as_str_name(&self) -> &'static str {
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
match self {
Self::UnspecifiedFulfillmentStrategy => "UNSPECIFIED_FULFILLMENT_STRATEGY",
Self::Hosted => "HOSTED",
@@ -1231,8 +1282,8 @@ impl FulfillmentStrategy {
Self::Auction => "AUCTION",
}
}
- /// Creates an enum from field names used in the `ProtoBuf` definition.
- #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option {
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
match value {
"UNSPECIFIED_FULFILLMENT_STRATEGY" => Some(Self::UnspecifiedFulfillmentStrategy),
"HOSTED" => Some(Self::Hosted),
@@ -1269,11 +1320,11 @@ pub enum FulfillmentStatus {
Unfulfillable = 4,
}
impl FulfillmentStatus {
- /// String value of the enum field names used in the `ProtoBuf` definition.
+ /// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
- /// (if the `ProtoBuf` definition does not change) and safe for programmatic use.
- #[must_use] pub fn as_str_name(&self) -> &'static str {
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
match self {
Self::UnspecifiedFulfillmentStatus => "UNSPECIFIED_FULFILLMENT_STATUS",
Self::Requested => "REQUESTED",
@@ -1282,8 +1333,8 @@ impl FulfillmentStatus {
Self::Unfulfillable => "UNFULFILLABLE",
}
}
- /// Creates an enum from field names used in the `ProtoBuf` definition.
- #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option {
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
match value {
"UNSPECIFIED_FULFILLMENT_STATUS" => Some(Self::UnspecifiedFulfillmentStatus),
"REQUESTED" => Some(Self::Requested),
@@ -1319,11 +1370,11 @@ pub enum ExecutionStatus {
Unexecutable = 3,
}
impl ExecutionStatus {
- /// String value of the enum field names used in the `ProtoBuf` definition.
+ /// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
- /// (if the `ProtoBuf` definition does not change) and safe for programmatic use.
- #[must_use] pub fn as_str_name(&self) -> &'static str {
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
match self {
Self::UnspecifiedExecutionStatus => "UNSPECIFIED_EXECUTION_STATUS",
Self::Unexecuted => "UNEXECUTED",
@@ -1331,8 +1382,8 @@ impl ExecutionStatus {
Self::Unexecutable => "UNEXECUTABLE",
}
}
- /// Creates an enum from field names used in the `ProtoBuf` definition.
- #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option {
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
match value {
"UNSPECIFIED_EXECUTION_STATUS" => Some(Self::UnspecifiedExecutionStatus),
"UNEXECUTED" => Some(Self::Unexecuted),
@@ -1373,11 +1424,11 @@ pub enum BalanceOperation {
Bid = 6,
}
impl BalanceOperation {
- /// String value of the enum field names used in the `ProtoBuf` definition.
+ /// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
- /// (if the `ProtoBuf` definition does not change) and safe for programmatic use.
- #[must_use] pub fn as_str_name(&self) -> &'static str {
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
match self {
Self::UnspecifiedBalanceChangeOperation => "UNSPECIFIED_BALANCE_CHANGE_OPERATION",
Self::Deposit => "DEPOSIT",
@@ -1388,8 +1439,8 @@ impl BalanceOperation {
Self::Bid => "BID",
}
}
- /// Creates an enum from field names used in the `ProtoBuf` definition.
- #[must_use] pub fn from_str_name(value: &str) -> ::core::option::Option {
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
match value {
"UNSPECIFIED_BALANCE_CHANGE_OPERATION" => Some(Self::UnspecifiedBalanceChangeOperation),
"DEPOSIT" => Some(Self::Deposit),
@@ -1406,7 +1457,7 @@ impl BalanceOperation {
pub mod prover_network_client {
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
use tonic::codegen::http::Uri;
- use tonic::codegen::{Body, Bytes, CompressionEncoding, GrpcMethod, InterceptedService, StdError, http};
+ use tonic::codegen::*;
#[derive(Debug, Clone)]
pub struct ProverNetworkClient {
inner: tonic::client::Grpc,
@@ -1806,6 +1857,26 @@ pub mod prover_network_client {
.insert(GrpcMethod::new("network.ProverNetwork", "RemoveDelegation"));
self.inner.unary(req, path, codec).await
}
+ /// Terminate a delegation. Only callable by the delegate of a delegation.
+ pub async fn terminate_delegation(
+ &mut self,
+ request: impl tonic::IntoRequest,
+ ) -> std::result::Result, tonic::Status>
+ {
+ self.inner.ready().await.map_err(|e| {
+ tonic::Status::new(
+ tonic::Code::Unknown,
+ format!("Service was not ready: {}", e.into()),
+ )
+ })?;
+ let codec = tonic::codec::ProstCodec::default();
+ let path =
+ http::uri::PathAndQuery::from_static("/network.ProverNetwork/TerminateDelegation");
+ let mut req = request.into_request();
+ req.extensions_mut()
+ .insert(GrpcMethod::new("network.ProverNetwork", "TerminateDelegation"));
+ self.inner.unary(req, path, codec).await
+ }
/// Accept a delegation. Only callable by the delegate of a delegation.
pub async fn accept_delegation(
&mut self,
@@ -2181,7 +2252,7 @@ pub mod prover_network_client {
/// Generated server implementations.
pub mod prover_network_server {
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
- use tonic::codegen::{Arc, Body, BoxFuture, CompressionEncoding, Context, EnabledCompressionEncodings, InterceptedService, Poll, StdError, async_trait, empty_body, http};
+ use tonic::codegen::*;
/// Generated trait containing gRPC methods that should be implemented for use with ProverNetworkServer.
#[async_trait]
pub trait ProverNetwork: std::marker::Send + std::marker::Sync + 'static {
@@ -2277,6 +2348,11 @@ pub mod prover_network_server {
&self,
request: tonic::Request,
) -> std::result::Result, tonic::Status>;
+ /// Terminate a delegation. Only callable by the delegate of a delegation.
+ async fn terminate_delegation(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status>;
/// Accept a delegation. Only callable by the delegate of a delegation.
async fn accept_delegation(
&self,
@@ -3123,6 +3199,48 @@ pub mod prover_network_server {
};
Box::pin(fut)
}
+ "/network.ProverNetwork/TerminateDelegation" => {
+ #[allow(non_camel_case_types)]
+ struct TerminateDelegationSvc(pub Arc);
+ impl
+ tonic::server::UnaryService
+ for TerminateDelegationSvc
+ {
+ type Response = super::TerminateDelegationResponse;
+ type Future = BoxFuture, tonic::Status>;
+ fn call(
+ &mut self,
+ request: tonic::Request,
+ ) -> Self::Future {
+ let inner = Arc::clone(&self.0);
+ let fut = async move {
+ ::terminate_delegation(&inner, request).await
+ };
+ Box::pin(fut)
+ }
+ }
+ let accept_compression_encodings = self.accept_compression_encodings;
+ let send_compression_encodings = self.send_compression_encodings;
+ let max_decoding_message_size = self.max_decoding_message_size;
+ let max_encoding_message_size = self.max_encoding_message_size;
+ let inner = self.inner.clone();
+ let fut = async move {
+ let method = TerminateDelegationSvc(inner);
+ let codec = tonic::codec::ProstCodec::default();
+ let mut grpc = tonic::server::Grpc::new(codec)
+ .apply_compression_config(
+ accept_compression_encodings,
+ send_compression_encodings,
+ )
+ .apply_max_message_size_config(
+ max_decoding_message_size,
+ max_encoding_message_size,
+ );
+ let res = grpc.unary(method, req).await;
+ Ok(res)
+ };
+ Box::pin(fut)
+ }
"/network.ProverNetwork/AcceptDelegation" => {
#[allow(non_camel_case_types)]
struct AcceptDelegationSvc(pub Arc);
diff --git a/crates/sdk/src/network/prove.rs b/crates/sdk/src/network/prove.rs
index 2d33ea628a..f7f9a0b676 100644
--- a/crates/sdk/src/network/prove.rs
+++ b/crates/sdk/src/network/prove.rs
@@ -4,6 +4,7 @@
use std::time::Duration;
+use alloy_primitives::B256;
use anyhow::Result;
use sp1_core_machine::io::SP1Stdin;
use sp1_prover::SP1ProvingKey;
@@ -23,6 +24,7 @@ pub struct NetworkProveBuilder<'a> {
pub(crate) timeout: Option,
pub(crate) strategy: FulfillmentStrategy,
pub(crate) skip_simulation: bool,
+ pub(crate) cycle_limit: Option,
}
impl<'a> NetworkProveBuilder<'a> {
@@ -231,6 +233,92 @@ impl<'a> NetworkProveBuilder<'a> {
self
}
+ /// Sets the cycle limit for the proof request.
+ ///
+ /// # Details
+ /// The cycle limit determines the maximum number of cycles that the program should take to
+ /// execute. By default, the cycle limit is determined by simulating the program locally.
+ /// However, you can manually set it if you know the exact cycle count needed and want to skip
+ /// the simulation step locally.
+ ///
+ /// The cycle limit ensures that a prover on the network will stop generating a proof once the
+ /// cycle limit is reached, which prevents denial of service attacks.
+ ///
+ /// # Example
+ /// ```rust,no_run
+ /// use sp1_sdk::{ProverClient, SP1Stdin, Prover};
+ ///
+ /// 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)
+ /// .cycle_limit(1_000_000) // Set 1M cycle limit.
+ /// .skip_simulation(true) // Skip simulation since the limit is set manually.
+ /// .run()
+ /// .unwrap();
+ /// ```
+ #[must_use]
+ pub fn cycle_limit(mut self, cycle_limit: u64) -> Self {
+ self.cycle_limit = Some(cycle_limit);
+ self
+ }
+
+ /// Request a proof from the prover network.
+ ///
+ /// # Details
+ /// This method will request a proof from the prover network. If the prover fails to request
+ /// a proof, the method will return an error. It will not wait for the proof to be generated.
+ ///
+ /// # Example
+ /// ```rust,no_run
+ /// use sp1_sdk::{ProverClient, SP1Stdin, Prover};
+ ///
+ /// let elf = &[1, 2, 3];
+ /// let stdin = SP1Stdin::new();
+ ///
+ /// let client = ProverClient::builder().network().build();
+ /// let (pk, vk) = client.setup(elf);
+ /// let request_id = client.prove(&pk, &stdin)
+ /// .request()
+ /// .unwrap();
+ /// ```
+ pub fn request(self) -> Result {
+ block_on(self.request_async())
+ }
+
+ /// Request a proof from the prover network asynchronously.
+ ///
+ /// # Details
+ /// This method will request a proof from the prover network asynchronously. If the prover fails
+ /// to request a proof, the method will return an error. It will not wait for the proof to be
+ /// generated.
+ ///
+ /// # Example
+ /// ```rust,no_run
+ /// use sp1_sdk::{ProverClient, SP1Stdin, Prover};
+ ///
+ /// tokio_test::block_on(async {
+ /// let elf = &[1, 2, 3];
+ /// let stdin = SP1Stdin::new();
+ ///
+ /// let client = ProverClient::builder().network().build();
+ /// let (pk, vk) = client.setup(elf);
+ /// let request_id = client.prove(&pk, &stdin)
+ /// .request_async()
+ /// .await
+ /// .unwrap();
+ /// })
+ /// ```
+ pub async fn request_async(self) -> Result {
+ let Self { prover, mode, pk, stdin, timeout, strategy, skip_simulation, cycle_limit } =
+ self;
+ prover
+ .request_proof_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit)
+ .await
+ }
+
/// Run the prover with the built arguments.
///
/// # Details
@@ -251,19 +339,7 @@ impl<'a> NetworkProveBuilder<'a> {
/// .unwrap();
/// ```
pub fn run(self) -> Result {
- let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation } = self;
-
- // Check for deprecated environment variable
- if let Ok(val) = std::env::var("SKIP_SIMULATION") {
- eprintln!(
- "Warning: SKIP_SIMULATION environment variable is deprecated. Please use .skip_simulation() instead."
- );
- skip_simulation = matches!(val.to_lowercase().as_str(), "true" | "1");
- }
-
- sp1_dump(&pk.elf, &stdin);
-
- block_on(prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation))
+ block_on(self.run_async())
}
/// Run the prover with the built arguments asynchronously.
@@ -284,7 +360,8 @@ impl<'a> NetworkProveBuilder<'a> {
/// .run_async();
/// ```
pub async fn run_async(self) -> Result {
- let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation } = self;
+ let Self { prover, mode, pk, stdin, timeout, strategy, mut skip_simulation, cycle_limit } =
+ self;
// Check for deprecated environment variable
if let Ok(val) = std::env::var("SKIP_SIMULATION") {
@@ -296,6 +373,6 @@ impl<'a> NetworkProveBuilder<'a> {
sp1_dump(&pk.elf, &stdin);
- prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation).await
+ prover.prove_impl(pk, &stdin, mode, strategy, timeout, skip_simulation, cycle_limit).await
}
}
diff --git a/crates/sdk/src/network/prover.rs b/crates/sdk/src/network/prover.rs
index 4927acca35..7208e65fe3 100644
--- a/crates/sdk/src/network/prover.rs
+++ b/crates/sdk/src/network/prover.rs
@@ -9,12 +9,14 @@ use super::prove::NetworkProveBuilder;
use super::DEFAULT_CYCLE_LIMIT;
use crate::cpu::execute::CpuExecuteBuilder;
use crate::cpu::CpuProver;
-use crate::network::{DEFAULT_PROVER_NETWORK_RPC, DEFAULT_TIMEOUT_SECS};
+use crate::network::proto::network::GetProofRequestStatusResponse;
+use crate::network::{Error, DEFAULT_NETWORK_RPC_URL, DEFAULT_TIMEOUT_SECS};
use crate::{
network::client::NetworkClient,
network::proto::network::{ExecutionStatus, FulfillmentStatus, FulfillmentStrategy, ProofMode},
Prover, SP1ProofMode, SP1ProofWithPublicValues, SP1ProvingKey, SP1VerifyingKey,
};
+use alloy_primitives::B256;
use anyhow::Result;
use backoff::{future::retry, Error as BackoffError, ExponentialBackoff};
use serde::de::DeserializeOwned;
@@ -108,6 +110,7 @@ impl NetworkProver {
timeout: None,
strategy: FulfillmentStrategy::Hosted,
skip_simulation: false,
+ cycle_limit: None,
}
}
@@ -130,20 +133,49 @@ impl NetworkProver {
///
/// let vk_hash = client.register_program(&vk, elf);
/// ```
- pub async fn register_program(&self, vk: &SP1VerifyingKey, elf: &[u8]) -> Result> {
+ pub async fn register_program(&self, vk: &SP1VerifyingKey, elf: &[u8]) -> Result {
self.client.register_program(vk, elf).await
}
+ /// Gets the status of a proof request.
+ ///
+ /// # Details
+ /// * `request_id`: The request ID to get the status of.
+ ///
+ /// # Example
+ /// ```rust,no_run
+ /// use sp1_sdk::{ProverClient, network::B256};
+ ///
+ /// 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();
+ /// })
+ /// ```
+ pub async fn get_proof_status(
+ &self,
+ request_id: B256,
+ ) -> Result<(GetProofRequestStatusResponse, Option)> {
+ self.client.get_proof_request_status(request_id).await
+ }
+
/// Requests a proof from the prover network, returning the request ID.
+ ///
+ /// # Details
+ /// * `vk_hash`: The hash of the verifying key to use for the proof.
+ /// * `stdin`: The input to use for the proof.
+ /// * `mode`: The proof mode to use for the proof.
+ /// * `strategy`: The fulfillment strategy to use for the proof.
+ /// * `cycle_limit`: The cycle limit to use for the proof.
pub(crate) async fn request_proof(
&self,
- vk_hash: &[u8],
+ vk_hash: B256,
stdin: &SP1Stdin,
mode: ProofMode,
strategy: FulfillmentStrategy,
cycle_limit: u64,
timeout: Option,
- ) -> Result> {
+ ) -> Result {
// Get the timeout.
let timeout_secs = timeout.map_or(DEFAULT_TIMEOUT_SECS, |dur| dur.as_secs());
@@ -176,15 +208,14 @@ impl NetworkProver {
.await?;
// Log the request ID and transaction hash.
- let tx_hash_hex = "0x".to_string() + &hex::encode(response.tx_hash);
- let request_id = response.body.unwrap().request_id;
- let request_id_hex = "0x".to_string() + &hex::encode(request_id.clone());
- log::info!("Created request {} in transaction {}", request_id_hex, tx_hash_hex);
+ let tx_hash = B256::from_slice(&response.tx_hash);
+ let request_id = B256::from_slice(&response.body.unwrap().request_id);
+ log::info!("Created request {} in transaction {:?}", request_id, tx_hash);
- if self.client.rpc_url == DEFAULT_PROVER_NETWORK_RPC {
+ if self.client.rpc_url == DEFAULT_NETWORK_RPC_URL {
log::info!(
"View request status at: https://network.succinct.xyz/request/{}",
- request_id_hex
+ request_id
);
}
@@ -193,9 +224,9 @@ impl NetworkProver {
/// 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.
- pub(crate) async fn wait_proof(
+ pub async fn wait_proof(
&self,
- request_id: &[u8],
+ request_id: B256,
timeout: Option,
) -> Result {
let mut is_assigned = false;
@@ -205,25 +236,36 @@ impl NetworkProver {
// Calculate the remaining timeout.
if let Some(timeout) = timeout {
if start_time.elapsed() > timeout {
- return Err(anyhow::anyhow!("proof request timed out."));
+ return Err(Error::RequestTimedOut { request_id: request_id.to_vec() }.into());
}
}
let remaining_timeout = timeout.map(|t| {
let elapsed = start_time.elapsed();
- if elapsed < t { t - elapsed } else { Duration::from_secs(0) }
+ if elapsed < t {
+ t - elapsed
+ } else {
+ Duration::from_secs(0)
+ }
});
- // Get status with retries.
+ // Get the status with retries.
let (status, maybe_proof) = with_retry(
- || async { self.client.get_proof_request_status::
(request_id).await },
+ || async { self.client.get_proof_request_status(request_id).await },
remaining_timeout,
"getting proof request status",
)
.await?;
+ // Check the deadline.
+ if status.deadline < Instant::now().elapsed().as_secs() {
+ return Err(Error::RequestTimedOut { request_id: request_id.to_vec() }.into());
+ }
+
// Check the execution status.
- if status.execution_status == ExecutionStatus::Unexecutable as i32 {
- return Err(anyhow::anyhow!("proof request is unexecutable"));
+ if let Ok(ExecutionStatus::Unexecutable) =
+ ExecutionStatus::try_from(status.execution_status)
+ {
+ return Err(Error::RequestUnexecutable { request_id: request_id.to_vec() }.into());
}
// Check the fulfillment status.
@@ -233,12 +275,14 @@ impl NetworkProver {
}
Ok(FulfillmentStatus::Assigned) => {
if !is_assigned {
- log::info!("proof request assigned, proving...");
+ log::info!("Proof request assigned, proving...");
is_assigned = true;
}
}
Ok(FulfillmentStatus::Unfulfillable) => {
- return Err(anyhow::anyhow!("proof request is unfulfillable"));
+ return Err(
+ Error::RequestUnfulfillable { request_id: request_id.to_vec() }.into()
+ );
}
_ => {}
}
@@ -247,7 +291,23 @@ impl NetworkProver {
}
}
- /// Requests a proof from the prover network and waits for it to be generated.
+ #[allow(clippy::too_many_arguments)]
+ pub(crate) async fn request_proof_impl(
+ &self,
+ pk: &SP1ProvingKey,
+ stdin: &SP1Stdin,
+ mode: SP1ProofMode,
+ strategy: FulfillmentStrategy,
+ timeout: Option,
+ skip_simulation: bool,
+ cycle_limit: Option,
+ ) -> Result {
+ let vk_hash = self.register_program(&pk.vk, &pk.elf).await?;
+ let cycle_limit = self.get_cycle_limit(cycle_limit, &pk.elf, stdin, skip_simulation)?;
+ self.request_proof(vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout).await
+ }
+
+ #[allow(clippy::too_many_arguments)]
pub(crate) async fn prove_impl(
&self,
pk: &SP1ProvingKey,
@@ -256,22 +316,39 @@ impl NetworkProver {
strategy: FulfillmentStrategy,
timeout: Option,
skip_simulation: bool,
+ cycle_limit: Option,
) -> Result {
- let vk_hash = self.register_program(&pk.vk, &pk.elf).await?;
- let cycle_limit = self.get_cycle_limit(&pk.elf, stdin, skip_simulation)?;
let request_id = self
- .request_proof(&vk_hash, stdin, mode.into(), strategy, cycle_limit, timeout)
+ .request_proof_impl(pk, stdin, mode, strategy, timeout, skip_simulation, cycle_limit)
.await?;
- self.wait_proof(&request_id, timeout).await
+ self.wait_proof(request_id, timeout).await
}
- fn get_cycle_limit(&self, elf: &[u8], stdin: &SP1Stdin, skip_simulation: bool) -> Result {
+ /// The cycle limit is determined according to the following priority:
+ ///
+ /// 1. If a cycle limit was explicitly set by the requester, use the specified value.
+ /// 2. If simulation is enabled, calculate the limit by simulating the
+ /// execution of the program. This is the default behavior.
+ /// 3. Otherwise, use the default cycle limit ([`DEFAULT_CYCLE_LIMIT`]).
+ fn get_cycle_limit(
+ &self,
+ cycle_limit: Option,
+ elf: &[u8],
+ stdin: &SP1Stdin,
+ skip_simulation: bool,
+ ) -> Result {
+ if let Some(cycle_limit) = cycle_limit {
+ return Ok(cycle_limit);
+ }
+
if skip_simulation {
Ok(DEFAULT_CYCLE_LIMIT)
} else {
- let (_, report) = self.prover.inner().execute(elf, stdin, SP1Context::default())?;
- let cycles = report.total_instruction_count();
- Ok(cycles)
+ self.prover
+ .inner()
+ .execute(elf, stdin, SP1Context::default())
+ .map(|(_, report)| report.total_instruction_count())
+ .map_err(|_| Error::SimulationFailed.into())
}
}
}
@@ -291,7 +368,7 @@ impl Prover for NetworkProver {
stdin: &SP1Stdin,
mode: SP1ProofMode,
) -> Result {
- block_on(self.prove_impl(pk, stdin, mode, FulfillmentStrategy::Hosted, None, false))
+ block_on(self.prove_impl(pk, stdin, mode, FulfillmentStrategy::Hosted, None, false, None))
}
}
diff --git a/crates/sdk/src/network/sign_message.rs b/crates/sdk/src/network/sign_message.rs
deleted file mode 100644
index 9d12891525..0000000000
--- a/crates/sdk/src/network/sign_message.rs
+++ /dev/null
@@ -1,97 +0,0 @@
-use alloy_primitives::{Address, Signature};
-use prost::Message;
-use thiserror::Error;
-
-use crate::network::proto::network::{FulfillProofRequest, MessageFormat, RequestProofRequest};
-use crate::network::utils::{format_json_message, JsonFormatError};
-
-#[allow(dead_code)]
-pub trait SignedMessage {
- fn signature(&self) -> Vec;
- fn nonce(&self) -> Result;
- fn message(&self) -> Result, MessageError>;
- fn recover_sender(&self) -> Result<(Address, Vec), RecoverSenderError>;
-}
-
-#[derive(Error, Debug)]
-#[allow(dead_code)]
-pub enum MessageError {
- #[error("Empty message")]
- EmptyMessage,
- #[error("JSON error: {0}")]
- JsonError(String),
- #[error("Binary error: {0}")]
- BinaryError(String),
-}
-
-#[derive(Error, Debug)]
-pub enum RecoverSenderError {
- #[error("Failed to deserialize signature: {0}")]
- SignatureDeserializationError(String),
- #[error("Empty message")]
- EmptyMessage,
- #[error("Failed to recover address: {0}")]
- AddressRecoveryError(String),
-}
-
-macro_rules! impl_signed_message {
- ($type:ty) => {
- impl SignedMessage for $type {
- fn signature(&self) -> Vec {
- self.signature.clone()
- }
-
- fn nonce(&self) -> Result {
- match &self.body {
- Some(body) => Ok(body.nonce as u64),
- None => Err(MessageError::EmptyMessage),
- }
- }
-
- fn message(&self) -> Result, MessageError> {
- let format = MessageFormat::try_from(self.format).unwrap_or(MessageFormat::Binary);
-
- match &self.body {
- Some(body) => match format {
- MessageFormat::Json => format_json_message(body).map_err(|e| match e {
- JsonFormatError::SerializationError(msg) => {
- MessageError::JsonError(msg)
- }
- }),
- MessageFormat::Binary => {
- let proto_bytes = body.encode_to_vec();
- Ok(proto_bytes)
- }
- MessageFormat::UnspecifiedMessageFormat => {
- let proto_bytes = body.encode_to_vec();
- Ok(proto_bytes)
- }
- },
- None => Err(MessageError::EmptyMessage),
- }
- }
-
- fn recover_sender(&self) -> Result<(Address, Vec), RecoverSenderError> {
- let message = self.message().map_err(|_| RecoverSenderError::EmptyMessage)?;
- let sender = recover_sender_raw(self.signature.clone(), message.clone())?;
- Ok((sender, message))
- }
- }
- };
-}
-
-impl_signed_message!(RequestProofRequest);
-impl_signed_message!(FulfillProofRequest);
-
-#[allow(clippy::needless_pass_by_value)]
-pub fn recover_sender_raw(
- signature: Vec,
- message: Vec,
-) -> Result {
- let signature = Signature::try_from(signature.as_slice())
- .map_err(|e| RecoverSenderError::SignatureDeserializationError(e.to_string()))?;
-
- signature
- .recover_address_from_msg(message)
- .map_err(|e| RecoverSenderError::AddressRecoveryError(e.to_string()))
-}
diff --git a/crates/sdk/src/network/utils.rs b/crates/sdk/src/network/utils.rs
index e1b7d749b5..22ded7c94b 100644
--- a/crates/sdk/src/network/utils.rs
+++ b/crates/sdk/src/network/utils.rs
@@ -1,11 +1,11 @@
+#![allow(deprecated)]
+
//! # Network Utils
//!
//! This module provides utility functions for the network module.
use alloy_signer::{Signature, SignerSync};
use prost::Message;
-use serde::Serialize;
-use thiserror::Error;
pub(crate) trait Signable: Message {
fn sign(&self, signer: &S) -> Signature;
@@ -16,55 +16,3 @@ impl Signable for T {
signer.sign_message_sync(&self.encode_to_vec()).unwrap()
}
}
-
-#[derive(Error, Debug)]
-pub(crate) enum JsonFormatError {
- #[error("Serialization error: {0}")]
- SerializationError(String),
-}
-
-pub(crate) fn format_json_message(body: &T) -> Result, JsonFormatError>
-where
- T: Message + Serialize,
-{
- match serde_json::to_string(body) {
- Ok(json_str) => {
- if json_str.starts_with('"') && json_str.ends_with('"') {
- let inner = &json_str[1..json_str.len() - 1];
- let unescaped = inner.replace("\\\"", "\"");
- Ok(unescaped.into_bytes())
- } else {
- Ok(json_str.into_bytes())
- }
- }
- Err(e) => Err(JsonFormatError::SerializationError(e.to_string())),
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use prost::Message as ProstMessage;
- use serde::{Deserialize, Serialize};
-
- // Test message for JSON formatting.
- #[derive(Clone, ProstMessage, Serialize, Deserialize)]
- struct TestMessage {
- #[prost(string, tag = 1)]
- value: String,
- }
-
- #[test]
- fn test_format_json_message_simple() {
- let msg = TestMessage { value: "hello".to_string() };
- let result = format_json_message(&msg).unwrap();
- assert_eq!(result, b"{\"value\":\"hello\"}");
- }
-
- #[test]
- fn test_format_json_message_with_quotes() {
- let msg = TestMessage { value: "hello \"world\"".to_string() };
- let result = format_json_message(&msg).unwrap();
- assert_eq!(result, b"{\"value\":\"hello \\\"world\\\"\"}");
- }
-}
diff --git a/examples/Cargo.lock b/examples/Cargo.lock
index 7e8cbf164b..2c51170f21 100644
--- a/examples/Cargo.lock
+++ b/examples/Cargo.lock
@@ -68,17 +68,17 @@ dependencies = [
[[package]]
name = "allocator-api2"
-version = "0.2.20"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9"
+checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
name = "alloy-chains"
-version = "0.1.47"
+version = "0.1.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18c5c520273946ecf715c0010b4e3503d7eba9893cd9ce6b7fff5654c4a3c470"
+checksum = "830045a4421ee38d3ab570d36d4d2b5152c066e72797139224da8de5d5981fd0"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"num_enum 0.7.3",
"serde",
@@ -92,7 +92,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "629b62e38d471cc15fea534eb7283d2f8a4e8bdb1811bcc5d66dda6cfce6fae1"
dependencies = [
"alloy-eips 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-serde 0.3.6",
"c-kzg",
@@ -101,27 +101,42 @@ dependencies = [
[[package]]
name = "alloy-consensus"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed961a48297c732a5d97ee321aa8bb5009ecadbcb077d8bec90cb54e651629"
+checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326"
dependencies = [
- "alloy-eips 0.5.4",
- "alloy-primitives 0.8.14",
+ "alloy-eips 0.8.3",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
- "alloy-serde 0.5.4",
+ "alloy-serde 0.8.3",
+ "alloy-trie 0.7.6",
"auto_impl",
"c-kzg",
"derive_more 1.0.0",
"serde",
]
+[[package]]
+name = "alloy-consensus-any"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65"
+dependencies = [
+ "alloy-consensus 0.8.3",
+ "alloy-eips 0.8.3",
+ "alloy-primitives 0.8.15",
+ "alloy-rlp",
+ "alloy-serde 0.8.3",
+ "serde",
+]
+
[[package]]
name = "alloy-eip2930"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"serde",
]
@@ -132,7 +147,7 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea59dc42102bc9a1905dc57901edc6dd48b9f38115df86c7d252acba70d71d04"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"k256",
"serde",
@@ -140,11 +155,11 @@ dependencies = [
[[package]]
name = "alloy-eip7702"
-version = "0.3.2"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64ffc577390ce50234e02d841214b3dc0bea6aaaae8e04bbf3cb82e9a45da9eb"
+checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"derive_more 1.0.0",
"serde",
@@ -158,7 +173,7 @@ checksum = "f923dd5fca5f67a43d81ed3ebad0880bd41f6dd0ada930030353ac356c54cd0f"
dependencies = [
"alloy-eip2930",
"alloy-eip7702 0.1.1",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-serde 0.3.6",
"c-kzg",
@@ -170,15 +185,15 @@ dependencies = [
[[package]]
name = "alloy-eips"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b69e06cf9c37be824b9d26d6d101114fdde6af0c87de2828b414c05c4b3daa71"
+checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3"
dependencies = [
"alloy-eip2930",
- "alloy-eip7702 0.3.2",
- "alloy-primitives 0.8.14",
+ "alloy-eip7702 0.4.2",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
- "alloy-serde 0.5.4",
+ "alloy-serde 0.8.3",
"c-kzg",
"derive_more 1.0.0",
"once_cell",
@@ -192,18 +207,18 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a7a18afb0b318616b6b2b0e2e7ac5529d32a966c673b48091c9919e284e6aca"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-serde 0.3.6",
"serde",
]
[[package]]
name = "alloy-json-abi"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac4b22b3e51cac09fd2adfcc73b55f447b4df669f983c13f7894ec82b607c63f"
+checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-sol-type-parser",
"serde",
"serde_json",
@@ -211,37 +226,41 @@ dependencies = [
[[package]]
name = "alloy-json-rpc"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af5979e0d5a7bf9c7eb79749121e8256e59021af611322aee56e77e20776b4b3"
+checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-sol-types",
"serde",
"serde_json",
- "thiserror 1.0.69",
+ "thiserror 2.0.8",
"tracing",
]
[[package]]
name = "alloy-network"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "204237129086ce5dc17a58025e93739b01b45313841f98fa339eb1d780511e57"
+checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4"
dependencies = [
- "alloy-consensus 0.5.4",
- "alloy-eips 0.5.4",
+ "alloy-consensus 0.8.3",
+ "alloy-consensus-any",
+ "alloy-eips 0.8.3",
"alloy-json-rpc",
- "alloy-network-primitives 0.5.4",
- "alloy-primitives 0.8.14",
- "alloy-rpc-types-eth 0.5.4",
- "alloy-serde 0.5.4",
+ "alloy-network-primitives 0.8.3",
+ "alloy-primitives 0.8.15",
+ "alloy-rpc-types-any",
+ "alloy-rpc-types-eth 0.8.3",
+ "alloy-serde 0.8.3",
"alloy-signer",
"alloy-sol-types",
"async-trait",
"auto_impl",
"futures-utils-wasm",
- "thiserror 1.0.69",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.8",
]
[[package]]
@@ -251,21 +270,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94ad40869867ed2d9cd3842b1e800889e5b49e6b92da346e93862b4a741bedf3"
dependencies = [
"alloy-eips 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-serde 0.3.6",
"serde",
]
[[package]]
name = "alloy-network-primitives"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "514f70ee2a953db21631cd817b13a1571474ec77ddc03d47616d5e8203489fde"
+checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550"
dependencies = [
- "alloy-consensus 0.5.4",
- "alloy-eips 0.5.4",
- "alloy-primitives 0.8.14",
- "alloy-serde 0.5.4",
+ "alloy-consensus 0.8.3",
+ "alloy-eips 0.8.3",
+ "alloy-primitives 0.8.15",
+ "alloy-serde 0.8.3",
"serde",
]
@@ -293,9 +312,9 @@ dependencies = [
[[package]]
name = "alloy-primitives"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9db948902dfbae96a73c2fbf1f7abec62af034ab883e4c777c3fd29702bd6e2c"
+checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430"
dependencies = [
"alloy-rlp",
"bytes",
@@ -306,7 +325,7 @@ dependencies = [
"getrandom",
"hashbrown 0.15.2",
"hex-literal",
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"itoa",
"k256",
"keccak-asm",
@@ -314,7 +333,7 @@ dependencies = [
"proptest",
"rand 0.8.5",
"ruint",
- "rustc-hash 2.0.0",
+ "rustc-hash 2.1.0",
"serde",
"sha3",
"tiny-keccak",
@@ -322,9 +341,9 @@ dependencies = [
[[package]]
name = "alloy-rlp"
-version = "0.3.9"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f"
+checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097"
dependencies = [
"alloy-rlp-derive",
"arrayvec 0.7.6",
@@ -333,9 +352,9 @@ dependencies = [
[[package]]
name = "alloy-rlp-derive"
-version = "0.3.9"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f"
+checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a"
dependencies = [
"proc-macro2",
"quote",
@@ -353,6 +372,17 @@ dependencies = [
"serde",
]
+[[package]]
+name = "alloy-rpc-types-any"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e"
+dependencies = [
+ "alloy-consensus-any",
+ "alloy-rpc-types-eth 0.8.3",
+ "alloy-serde 0.8.3",
+]
+
[[package]]
name = "alloy-rpc-types-eth"
version = "0.3.6"
@@ -362,7 +392,7 @@ dependencies = [
"alloy-consensus 0.3.6",
"alloy-eips 0.3.6",
"alloy-network-primitives 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-serde 0.3.6",
"alloy-sol-types",
@@ -376,16 +406,17 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-eth"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b034779a4850b4b03f5be5ea674a1cf7d746b2da762b34d1860ab45e48ca27"
+checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1"
dependencies = [
- "alloy-consensus 0.5.4",
- "alloy-eips 0.5.4",
- "alloy-network-primitives 0.5.4",
- "alloy-primitives 0.8.14",
+ "alloy-consensus 0.8.3",
+ "alloy-consensus-any",
+ "alloy-eips 0.8.3",
+ "alloy-network-primitives 0.8.3",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
- "alloy-serde 0.5.4",
+ "alloy-serde 0.8.3",
"alloy-sol-types",
"derive_more 1.0.0",
"itertools 0.13.0",
@@ -399,57 +430,57 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "731f75ec5d383107fd745d781619bd9cedf145836c51ecb991623d41278e71fa"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"serde",
"serde_json",
]
[[package]]
name = "alloy-serde"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "028e72eaa9703e4882344983cfe7636ce06d8cce104a78ea62fd19b46659efc4"
+checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"serde",
"serde_json",
]
[[package]]
name = "alloy-signer"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "592c185d7100258c041afac51877660c7bf6213447999787197db4842f0e938e"
+checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"async-trait",
"auto_impl",
"elliptic-curve",
"k256",
- "thiserror 1.0.69",
+ "thiserror 2.0.8",
]
[[package]]
name = "alloy-signer-local"
-version = "0.5.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6614f02fc1d5b079b2a4a5320018317b506fd0a6d67c1fd5542a71201724986c"
+checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172"
dependencies = [
- "alloy-consensus 0.5.4",
+ "alloy-consensus 0.8.3",
"alloy-network",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-signer",
"async-trait",
"k256",
"rand 0.8.5",
- "thiserror 1.0.69",
+ "thiserror 2.0.8",
]
[[package]]
name = "alloy-sol-macro"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bfd7853b65a2b4f49629ec975fee274faf6dff15ab8894c620943398ef283c0"
+checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a"
dependencies = [
"alloy-sol-macro-expander",
"alloy-sol-macro-input",
@@ -461,14 +492,14 @@ dependencies = [
[[package]]
name = "alloy-sol-macro-expander"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82ec42f342d9a9261699f8078e57a7a4fda8aaa73c1a212ed3987080e6a9cd13"
+checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f"
dependencies = [
"alloy-sol-macro-input",
"const-hex",
"heck",
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"proc-macro-error2",
"proc-macro2",
"quote",
@@ -479,9 +510,9 @@ dependencies = [
[[package]]
name = "alloy-sol-macro-input"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed2c50e6a62ee2b4f7ab3c6d0366e5770a21cad426e109c2f40335a1b3aff3df"
+checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee"
dependencies = [
"const-hex",
"dunce",
@@ -494,9 +525,9 @@ dependencies = [
[[package]]
name = "alloy-sol-type-parser"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac17c6e89a50fb4a758012e4b409d9a0ba575228e69b539fe37d7a1bd507ca4a"
+checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73"
dependencies = [
"serde",
"winnow 0.6.20",
@@ -504,12 +535,12 @@ dependencies = [
[[package]]
name = "alloy-sol-types"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9dc0fffe397aa17628160e16b89f704098bf3c9d74d5d369ebc239575936de5"
+checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8"
dependencies = [
"alloy-json-abi",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-sol-macro",
"const-hex",
"serde",
@@ -521,7 +552,7 @@ version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a46c9c4fdccda7982e7928904bd85fe235a0404ee3d7e197fff13d61eac8b4f"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"derive_more 1.0.0",
"hashbrown 0.14.5",
@@ -531,6 +562,22 @@ dependencies = [
"tracing",
]
+[[package]]
+name = "alloy-trie"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a5fd8fea044cc9a8c8a50bb6f28e31f0385d820f116c5b98f6f4e55d6e5590b"
+dependencies = [
+ "alloy-primitives 0.8.15",
+ "alloy-rlp",
+ "arrayvec 0.7.6",
+ "derive_more 1.0.0",
+ "nybbles",
+ "serde",
+ "smallvec",
+ "tracing",
+]
+
[[package]]
name = "android-tzdata"
version = "0.1.1"
@@ -606,9 +653,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.93"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775"
+checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
[[package]]
name = "ark-ff"
@@ -751,6 +798,9 @@ name = "arrayvec"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+dependencies = [
+ "serde",
+]
[[package]]
name = "async-stream"
@@ -844,9 +894,9 @@ dependencies = [
"serde_json",
"serde_path_to_error",
"serde_urlencoded",
- "sync_wrapper 1.0.2",
+ "sync_wrapper",
"tokio",
- "tower 0.5.1",
+ "tower 0.5.2",
"tower-layer",
"tower-service",
"tracing",
@@ -867,7 +917,7 @@ dependencies = [
"mime",
"pin-project-lite",
"rustversion",
- "sync_wrapper 1.0.2",
+ "sync_wrapper",
"tower-layer",
"tower-service",
"tracing",
@@ -958,18 +1008,18 @@ dependencies = [
[[package]]
name = "bit-set"
-version = "0.5.3"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
dependencies = [
"bit-vec",
]
[[package]]
name = "bit-vec"
-version = "0.6.3"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
[[package]]
name = "bitflags"
@@ -1120,18 +1170,18 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c"
[[package]]
name = "bytemuck"
-version = "1.20.0"
+version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
+checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
dependencies = [
"bytemuck_derive",
]
[[package]]
name = "bytemuck_derive"
-version = "1.8.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec"
+checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a"
dependencies = [
"proc-macro2",
"quote",
@@ -1194,7 +1244,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
dependencies = [
"camino",
"cargo-platform",
- "semver 1.0.23",
+ "semver 1.0.24",
"serde",
"serde_json",
"thiserror 1.0.69",
@@ -1202,9 +1252,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.2"
+version = "1.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc"
+checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e"
dependencies = [
"jobserver",
"libc",
@@ -1262,9 +1312,9 @@ dependencies = [
[[package]]
name = "chrono"
-version = "0.4.38"
+version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
dependencies = [
"android-tzdata",
"iana-time-zone",
@@ -1286,9 +1336,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.21"
+version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f"
+checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
dependencies = [
"clap_builder",
"clap_derive",
@@ -1296,9 +1346,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.5.21"
+version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec"
+checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
dependencies = [
"anstream",
"anstyle",
@@ -1320,9 +1370,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7"
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
[[package]]
name = "colorchoice"
@@ -1332,15 +1382,15 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
[[package]]
name = "console"
-version = "0.15.8"
+version = "0.15.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
+checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b"
dependencies = [
"encode_unicode",
- "lazy_static",
"libc",
- "unicode-width 0.1.14",
- "windows-sys 0.52.0",
+ "once_cell",
+ "unicode-width",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1440,9 +1490,9 @@ dependencies = [
[[package]]
name = "crossbeam-deque"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
dependencies = [
"crossbeam-epoch",
"crossbeam-utils",
@@ -1459,9 +1509,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.20"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crunchy"
@@ -1848,15 +1898,18 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
[[package]]
name = "ecdsa"
-version = "0.16.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+version = "0.16.8"
+source = "git+https://github.com/sp1-patches/signatures?branch=umadayal/secp256r1#49b6288468aff7f88f0be8cfd3719c7c20b2ba47"
dependencies = [
+ "anyhow",
+ "cfg-if",
"der 0.7.9",
"digest 0.10.7",
"elliptic-curve",
+ "hex-literal",
"rfc6979",
"signature",
+ "sp1-lib 3.0.0",
"spki 0.7.3",
]
@@ -1947,9 +2000,9 @@ dependencies = [
[[package]]
name = "encode_unicode"
-version = "0.3.6"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
name = "enr"
@@ -2049,9 +2102,9 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "fastrlp"
@@ -2155,9 +2208,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2"
+checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"
[[package]]
name = "form_urlencoded"
@@ -2385,7 +2438,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http",
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"slab",
"tokio",
"tokio-util",
@@ -2488,9 +2541,9 @@ dependencies = [
[[package]]
name = "http"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
dependencies = [
"bytes",
"fnv",
@@ -2534,9 +2587,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
-version = "1.5.1"
+version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f"
+checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0"
dependencies = [
"bytes",
"futures-channel",
@@ -2555,9 +2608,9 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.27.3"
+version = "0.27.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333"
+checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
dependencies = [
"futures-util",
"http",
@@ -2810,9 +2863,9 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.6.0"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
+checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
dependencies = [
"equivalent",
"hashbrown 0.15.2",
@@ -2828,7 +2881,7 @@ dependencies = [
"console",
"number_prefix",
"portable-atomic",
- "unicode-width 0.2.0",
+ "unicode-width",
"web-time",
]
@@ -2929,10 +2982,11 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.73"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb15147158e79fd8b8afd0252522769c4f48725460b37338544d8379d94fc8f9"
+checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
+ "once_cell",
"wasm-bindgen",
]
@@ -2983,7 +3037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
dependencies = [
"cfg-if",
- "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ecdsa 0.16.8",
"elliptic-curve",
"once_cell",
"sha2 0.10.8",
@@ -3033,9 +3087,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.167"
+version = "0.2.169"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc"
+checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
[[package]]
name = "libgit2-sys"
@@ -3147,9 +3201,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memuse"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a"
+checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964"
[[package]]
name = "mime"
@@ -3165,9 +3219,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
-version = "0.8.0"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394"
dependencies = [
"adler2",
]
@@ -3493,7 +3547,7 @@ checksum = "21aad1fbf80d2bcd7406880efc7ba109365f44bbb72896758ddcbfa46bf1592c"
dependencies = [
"alloy-consensus 0.3.6",
"alloy-eips 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-serde 0.3.6",
"derive_more 1.0.0",
@@ -3509,7 +3563,7 @@ checksum = "e281fbfc2198b7c0c16457d6524f83d192662bc9f3df70f24c3038d4521616df"
dependencies = [
"alloy-eips 0.3.6",
"alloy-network-primitives 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rpc-types-eth 0.3.6",
"alloy-serde 0.3.6",
"cfg-if",
@@ -3549,7 +3603,7 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
dependencies = [
- "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ecdsa 0.16.8",
"elliptic-curve",
"primeorder",
"sha2 0.10.8",
@@ -3805,29 +3859,28 @@ dependencies = [
[[package]]
name = "parity-scale-codec"
-version = "3.7.0"
+version = "3.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590"
+checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee"
dependencies = [
"arrayvec 0.7.6",
"bitvec",
"byte-slice-cast",
"impl-trait-for-tuples",
"parity-scale-codec-derive",
- "rustversion",
"serde",
]
[[package]]
name = "parity-scale-codec-derive"
-version = "3.7.0"
+version = "3.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b"
+checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c"
dependencies = [
"proc-macro-crate 3.2.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 1.0.109",
]
[[package]]
@@ -3893,7 +3946,7 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
name = "patch-testing-program"
version = "1.1.0"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"curve25519-dalek",
"curve25519-dalek-ng 4.1.1 (git+https://github.com/sp1-patches/curve25519-dalek-ng?tag=curve25519_dalek_ng-v4.1.1-patch-v1)",
"ed25519-consensus",
@@ -3943,12 +3996,12 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pest"
-version = "2.7.14"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442"
+checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc"
dependencies = [
"memchr",
- "thiserror 1.0.69",
+ "thiserror 2.0.8",
"ucd-trie",
]
@@ -4136,9 +4189,9 @@ dependencies = [
[[package]]
name = "proptest"
-version = "1.5.0"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d"
+checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50"
dependencies = [
"bit-set",
"bit-vec",
@@ -4166,12 +4219,12 @@ dependencies = [
[[package]]
name = "prost"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f"
+checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec"
dependencies = [
"bytes",
- "prost-derive 0.13.3",
+ "prost-derive 0.13.4",
]
[[package]]
@@ -4189,9 +4242,9 @@ dependencies = [
[[package]]
name = "prost-derive"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5"
+checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3"
dependencies = [
"anyhow",
"itertools 0.13.0",
@@ -4225,10 +4278,10 @@ dependencies = [
"pin-project-lite",
"quinn-proto",
"quinn-udp",
- "rustc-hash 2.0.0",
+ "rustc-hash 2.1.0",
"rustls",
"socket2",
- "thiserror 2.0.3",
+ "thiserror 2.0.8",
"tokio",
"tracing",
]
@@ -4243,11 +4296,11 @@ dependencies = [
"getrandom",
"rand 0.8.5",
"ring",
- "rustc-hash 2.0.0",
+ "rustc-hash 2.1.0",
"rustls",
"rustls-pki-types",
"slab",
- "thiserror 2.0.3",
+ "thiserror 2.0.8",
"tinyvec",
"tracing",
"web-time",
@@ -4255,9 +4308,9 @@ dependencies = [
[[package]]
name = "quinn-udp"
-version = "0.5.7"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da"
+checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904"
dependencies = [
"cfg_aliases",
"libc",
@@ -4399,9 +4452,9 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.5.7"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
+checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
dependencies = [
"bitflags",
]
@@ -4507,7 +4560,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
- "sync_wrapper 1.0.2",
+ "sync_wrapper",
"tokio",
"tokio-rustls",
"tokio-util",
@@ -4556,8 +4609,8 @@ dependencies = [
"alloy-chains",
"alloy-eips 0.3.6",
"alloy-genesis",
- "alloy-primitives 0.8.14",
- "alloy-trie",
+ "alloy-primitives 0.8.15",
+ "alloy-trie 0.5.3",
"auto_impl",
"derive_more 1.0.0",
"once_cell",
@@ -4578,8 +4631,8 @@ dependencies = [
"alloy-consensus 0.3.6",
"alloy-eips 0.3.6",
"alloy-genesis",
- "alloy-primitives 0.8.14",
- "alloy-trie",
+ "alloy-primitives 0.8.15",
+ "alloy-trie 0.5.3",
"bytes",
"modular-bitfield",
"reth-codecs-derive",
@@ -4660,13 +4713,13 @@ version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
"alloy-chains",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"auto_impl",
"crc",
"dyn-clone",
"once_cell",
- "rustc-hash 2.0.0",
+ "rustc-hash 2.1.0",
"serde",
"thiserror-no-std",
]
@@ -4733,7 +4786,7 @@ version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
"alloy-eips 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"derive_more 1.0.0",
"nybbles",
@@ -4770,7 +4823,7 @@ name = "reth-network-peers"
version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"enr",
"serde_with",
@@ -4784,7 +4837,7 @@ version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
"alloy-chains",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"derive_more 1.0.0",
"once_cell",
"reth-chainspec",
@@ -4813,7 +4866,7 @@ dependencies = [
"alloy-consensus 0.3.6",
"alloy-eips 0.3.6",
"alloy-genesis",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-rpc-types",
"alloy-serde 0.3.6",
@@ -4842,7 +4895,7 @@ dependencies = [
"alloy-consensus 0.3.6",
"alloy-eips 0.3.6",
"alloy-genesis",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-rpc-types-eth 0.3.6",
"byteorder",
@@ -4860,7 +4913,7 @@ name = "reth-prune-types"
version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"bytes",
"derive_more 1.0.0",
"modular-bitfield",
@@ -4889,7 +4942,7 @@ name = "reth-stages-types"
version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"bytes",
"modular-bitfield",
"reth-codecs",
@@ -4902,7 +4955,7 @@ name = "reth-static-file-types"
version = "1.0.6"
source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374182a43a3602aaa953d37aa9217b"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"derive_more 1.0.0",
"serde",
"strum",
@@ -4961,9 +5014,9 @@ source = "git+https://github.com/sp1-patches/reth?tag=rsp-20240830#260c7ed2c9374
dependencies = [
"alloy-consensus 0.3.6",
"alloy-genesis",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
- "alloy-trie",
+ "alloy-trie 0.5.3",
"bytes",
"derive_more 1.0.0",
"itertools 0.13.0",
@@ -5026,7 +5079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7a6bff9dbde3370a5ac9555104117f7e6039b3cc76e8d5d9d01899088beca2a"
dependencies = [
"alloy-eips 0.3.6",
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"auto_impl",
"bitflags",
"bitvec",
@@ -5043,8 +5096,7 @@ dependencies = [
[[package]]
name = "rfc6979"
version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+source = "git+https://github.com/sp1-patches/signatures?branch=umadayal/secp256r1#49b6288468aff7f88f0be8cfd3719c7c20b2ba47"
dependencies = [
"hmac",
"subtle",
@@ -5086,9 +5138,9 @@ dependencies = [
[[package]]
name = "roaring"
-version = "0.10.7"
+version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f81dc953b2244ddd5e7860cb0bb2a790494b898ef321d4aff8e260efab60cc88"
+checksum = "41589aba99537475bf697f2118357cad1c31590c5a1b9f6d9fc4ad6d07503661"
dependencies = [
"bytemuck",
"byteorder",
@@ -5168,7 +5220,7 @@ name = "rsp-client-executor"
version = "0.1.0"
source = "git+https://github.com/succinctlabs/rsp/?rev=3647076#3647076da6580e30384dd911a3fc50d4bcdb5bc1"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"eyre",
"futures",
@@ -5201,7 +5253,7 @@ name = "rsp-mpt"
version = "0.1.0"
source = "git+https://github.com/succinctlabs/rsp/?rev=3647076#3647076da6580e30384dd911a3fc50d4bcdb5bc1"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-rlp",
"alloy-rpc-types",
"anyhow",
@@ -5251,7 +5303,7 @@ dependencies = [
name = "rsp-script"
version = "0.1.0"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"bincode",
"clap",
"rsp-client-executor",
@@ -5315,9 +5367,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc-hash"
-version = "2.0.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
+checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497"
dependencies = [
"rand 0.8.5",
]
@@ -5343,27 +5395,27 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [
- "semver 1.0.23",
+ "semver 1.0.24",
]
[[package]]
name = "rustix"
-version = "0.38.41"
+version = "0.38.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6"
+checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85"
dependencies = [
"bitflags",
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
name = "rustls"
-version = "0.23.19"
+version = "0.23.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1"
+checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b"
dependencies = [
"log",
"once_cell",
@@ -5397,9 +5449,9 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
-version = "1.10.0"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b"
+checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
dependencies = [
"web-time",
]
@@ -5465,9 +5517,9 @@ dependencies = [
[[package]]
name = "scc"
-version = "2.2.5"
+version = "2.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66b202022bb57c049555430e11fc22fea12909276a80a4c3d368da36ac1d88ed"
+checksum = "94b13f8ea6177672c49d12ed964cca44836f59621981b04a3e26b87e675181de"
dependencies = [
"sdd",
]
@@ -5489,9 +5541,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sdd"
-version = "3.0.4"
+version = "3.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95"
+checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9"
[[package]]
name = "sec1"
@@ -5513,7 +5565,7 @@ version = "0.29.0"
source = "git+https://github.com/sp1-patches/rust-secp256k1?tag=secp256k1-v0.29.0-patch-v1#c78195abe3c5bc11163d69588a5559ef21bdff31"
dependencies = [
"cfg-if",
- "ecdsa 0.16.9 (git+https://github.com/sp1-patches/signatures?branch=patch-ecdsa-v0.16.9)",
+ "ecdsa 0.16.9",
"elliptic-curve",
"k256",
"rand 0.8.5",
@@ -5562,9 +5614,9 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.23"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
dependencies = [
"serde",
]
@@ -5580,9 +5632,9 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.215"
+version = "1.0.216"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
+checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e"
dependencies = [
"serde_derive",
]
@@ -5608,9 +5660,9 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.215"
+version = "1.0.216"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
+checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e"
dependencies = [
"proc-macro2",
"quote",
@@ -5623,7 +5675,7 @@ version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
dependencies = [
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"itoa",
"memchr",
"ryu",
@@ -5673,7 +5725,7 @@ dependencies = [
"chrono",
"hex",
"indexmap 1.9.3",
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"serde",
"serde_derive",
"serde_json",
@@ -5798,9 +5850,9 @@ dependencies = [
[[package]]
name = "signature"
-version = "2.2.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
dependencies = [
"digest 0.10.7",
"rand_core 0.6.4",
@@ -5945,7 +5997,7 @@ version = "3.4.0"
dependencies = [
"bincode",
"ctrlc",
- "prost 0.13.3",
+ "prost 0.13.4",
"serde",
"sp1-core-machine",
"sp1-prover",
@@ -5996,6 +6048,15 @@ dependencies = [
"snowbridge-amcl",
]
+[[package]]
+name = "sp1-lib"
+version = "3.0.0"
+source = "git+https://github.com/succinctlabs/sp1.git?rev=e443fc9ca17edbfffb8af8a6d3834659739f7705#e443fc9ca17edbfffb8af8a6d3834659739f7705"
+dependencies = [
+ "bincode",
+ "serde",
+]
+
[[package]]
name = "sp1-lib"
version = "3.4.0"
@@ -6188,7 +6249,7 @@ dependencies = [
name = "sp1-sdk"
version = "3.4.0"
dependencies = [
- "alloy-primitives 0.8.14",
+ "alloy-primitives 0.8.15",
"alloy-signer",
"alloy-signer-local",
"alloy-sol-types",
@@ -6207,7 +6268,7 @@ dependencies = [
"p3-baby-bear",
"p3-field",
"p3-fri",
- "prost 0.13.3",
+ "prost 0.13.4",
"reqwest",
"reqwest-middleware",
"serde",
@@ -6497,9 +6558,9 @@ dependencies = [
[[package]]
name = "syn-solidity"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da0523f59468a2696391f2a772edc089342aacd53c3caa2ac3264e598edf119b"
+checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0"
dependencies = [
"paste",
"proc-macro2",
@@ -6507,12 +6568,6 @@ dependencies = [
"syn 2.0.90",
]
-[[package]]
-name = "sync_wrapper"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
-
[[package]]
name = "sync_wrapper"
version = "1.0.2"
@@ -6670,11 +6725,11 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.3"
+version = "2.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa"
+checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a"
dependencies = [
- "thiserror-impl 2.0.3",
+ "thiserror-impl 2.0.8",
]
[[package]]
@@ -6690,9 +6745,9 @@ dependencies = [
[[package]]
name = "thiserror-impl"
-version = "2.0.3"
+version = "2.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568"
+checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943"
dependencies = [
"proc-macro2",
"quote",
@@ -6740,9 +6795,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.36"
+version = "0.3.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
dependencies = [
"deranged",
"itoa",
@@ -6763,9 +6818,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.18"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
dependencies = [
"num-conv",
"time-core",
@@ -6792,9 +6847,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.8.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8"
dependencies = [
"tinyvec_macros",
]
@@ -6807,9 +6862,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.41.1"
+version = "1.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"
+checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
dependencies = [
"backtrace",
"bytes",
@@ -6836,12 +6891,11 @@ dependencies = [
[[package]]
name = "tokio-rustls"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37"
dependencies = [
"rustls",
- "rustls-pki-types",
"tokio",
]
@@ -6858,9 +6912,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.12"
+version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
+checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078"
dependencies = [
"bytes",
"futures-core",
@@ -6881,7 +6935,7 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"toml_datetime",
"winnow 0.5.40",
]
@@ -6892,7 +6946,7 @@ version = "0.22.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
dependencies = [
- "indexmap 2.6.0",
+ "indexmap 2.7.0",
"toml_datetime",
"winnow 0.6.20",
]
@@ -6917,7 +6971,7 @@ dependencies = [
"hyper-util",
"percent-encoding",
"pin-project",
- "prost 0.13.3",
+ "prost 0.13.4",
"rustls-native-certs",
"rustls-pemfile",
"socket2",
@@ -6952,14 +7006,14 @@ dependencies = [
[[package]]
name = "tower"
-version = "0.5.1"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
"futures-core",
"futures-util",
"pin-project-lite",
- "sync_wrapper 0.1.2",
+ "sync_wrapper",
"tokio",
"tower-layer",
"tower-service",
@@ -7083,13 +7137,13 @@ dependencies = [
"http",
"http-body-util",
"hyper",
- "prost 0.13.3",
+ "prost 0.13.4",
"reqwest",
"serde",
"serde_json",
"thiserror 1.0.69",
"tokio",
- "tower 0.5.1",
+ "tower 0.5.2",
"url",
]
@@ -7135,12 +7189,6 @@ version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
-[[package]]
-name = "unicode-width"
-version = "0.1.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
-
[[package]]
name = "unicode-width"
version = "0.2.0"
@@ -7254,9 +7302,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.96"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21d3b25c3ea1126a2ad5f4f9068483c2af1e64168f847abe863a526b8dbfe00b"
+checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
"cfg-if",
"once_cell",
@@ -7265,13 +7313,12 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.96"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52857d4c32e496dc6537646b5b117081e71fd2ff06de792e3577a150627db283"
+checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
"syn 2.0.90",
@@ -7280,9 +7327,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.46"
+version = "0.4.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "951fe82312ed48443ac78b66fa43eded9999f738f6022e67aead7b708659e49a"
+checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2"
dependencies = [
"cfg-if",
"js-sys",
@@ -7293,9 +7340,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.96"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "920b0ffe069571ebbfc9ddc0b36ba305ef65577c94b06262ed793716a1afd981"
+checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -7303,9 +7350,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.96"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf59002391099644be3524e23b781fa43d2be0c5aa0719a18c0731b9d195cab6"
+checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
"proc-macro2",
"quote",
@@ -7316,9 +7363,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.96"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5047c5392700766601942795a436d7d2599af60dcc3cc1248c9120bfb0827b0"
+checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
[[package]]
name = "wasm-streams"
@@ -7335,9 +7382,9 @@ dependencies = [
[[package]]
name = "web-sys"
-version = "0.3.73"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "476364ff87d0ae6bfb661053a9104ab312542658c3d8f963b7ace80b6f9b26b9"
+checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -7755,11 +7802,6 @@ dependencies = [
"subtle",
]
-[[patch.unused]]
-name = "ecdsa"
-version = "0.16.8"
-source = "git+https://github.com/sp1-patches/signatures?branch=umadayal/secp256r1#49b6288468aff7f88f0be8cfd3719c7c20b2ba47"
-
[[patch.unused]]
name = "sha2"
version = "0.10.6"
diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs
index 2b1227d6c4..554e2c6de8 100644
--- a/examples/aggregation/script/src/main.rs
+++ b/examples/aggregation/script/src/main.rs
@@ -34,17 +34,17 @@ fn main() {
let proof_1 = tracing::info_span!("generate fibonacci proof n=10").in_scope(|| {
let mut stdin = SP1Stdin::new();
stdin.write(&10);
- client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed")
+ client.prove(&fibonacci_pk, &stdin).compressed().run().expect("proving failed")
});
let proof_2 = tracing::info_span!("generate fibonacci proof n=20").in_scope(|| {
let mut stdin = SP1Stdin::new();
stdin.write(&20);
- client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed")
+ client.prove(&fibonacci_pk, &stdin).compressed().run().expect("proving failed")
});
let proof_3 = tracing::info_span!("generate fibonacci proof n=30").in_scope(|| {
let mut stdin = SP1Stdin::new();
stdin.write(&30);
- client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed")
+ client.prove(&fibonacci_pk, &stdin).compressed().run().expect("proving failed")
});
// Setup the inputs to the aggregation program.
@@ -76,6 +76,6 @@ fn main() {
}
// Generate the plonk bn254 proof.
- client.prove(&aggregation_pk, stdin).plonk().run().expect("proving failed");
+ client.prove(&aggregation_pk, &stdin).plonk().run().expect("proving failed");
});
}
diff --git a/examples/bls12381/script/src/main.rs b/examples/bls12381/script/src/main.rs
index 7e6c02fd40..096c805db1 100644
--- a/examples/bls12381/script/src/main.rs
+++ b/examples/bls12381/script/src/main.rs
@@ -7,7 +7,7 @@ fn main() {
let stdin = SP1Stdin::new();
let client = ProverClient::from_env();
- let (_public_values, report) = client.execute(ELF, stdin).run().expect("failed to prove");
+ let (_public_values, report) = client.execute(ELF, &stdin).run().expect("failed to prove");
println!("executed: {}", report);
}
diff --git a/examples/bn254/script/src/main.rs b/examples/bn254/script/src/main.rs
index cd9c6e5057..7aa091e1f1 100644
--- a/examples/bn254/script/src/main.rs
+++ b/examples/bn254/script/src/main.rs
@@ -7,7 +7,7 @@ fn main() {
let stdin = SP1Stdin::new();
let client = ProverClient::from_env();
- let (_public_values, report) = client.execute(ELF, stdin).run().expect("failed to prove");
+ let (_public_values, report) = client.execute(ELF, &stdin).run().expect("failed to prove");
println!("executed: {}", report);
}
diff --git a/examples/chess/script/src/main.rs b/examples/chess/script/src/main.rs
index 3a1df33e50..a08496647a 100644
--- a/examples/chess/script/src/main.rs
+++ b/examples/chess/script/src/main.rs
@@ -15,7 +15,7 @@ fn main() {
let client = ProverClient::from_env();
let (pk, vk) = client.setup(ELF);
- let mut proof = client.prove(&pk, stdin).run().unwrap();
+ let mut proof = client.prove(&pk, &stdin).run().unwrap();
// Read output.
let is_valid_move = proof.public_values.read::();
diff --git a/examples/cycle-tracking/script/src/main.rs b/examples/cycle-tracking/script/src/main.rs
index 03a76a80f2..ee845c6ced 100644
--- a/examples/cycle-tracking/script/src/main.rs
+++ b/examples/cycle-tracking/script/src/main.rs
@@ -10,10 +10,11 @@ fn main() {
// Execute the normal program.
let client = ProverClient::from_env();
- let (_, _) = client.execute(NORMAL_ELF, SP1Stdin::new()).run().expect("proving failed");
+ let stdin = SP1Stdin::new();
+ let (_, _) = client.execute(NORMAL_ELF, &stdin).run().expect("proving failed");
// Execute the report program.
- let (_, report) = client.execute(REPORT_ELF, SP1Stdin::new()).run().expect("proving failed");
+ let (_, report) = client.execute(REPORT_ELF, &stdin).run().expect("proving failed");
// Get the "setup" cycle count from the report program.
let setup_cycles = report.cycle_tracker.get("setup").unwrap();
diff --git a/examples/elf/riscv32im-succinct-zkvm-elf b/examples/elf/riscv32im-succinct-zkvm-elf
index dbd4cfab99..e2873d98e0 100755
Binary files a/examples/elf/riscv32im-succinct-zkvm-elf and b/examples/elf/riscv32im-succinct-zkvm-elf differ
diff --git a/examples/fibonacci/script/Cargo.toml b/examples/fibonacci/script/Cargo.toml
index 308d3eeede..a7ffb4d7a1 100644
--- a/examples/fibonacci/script/Cargo.toml
+++ b/examples/fibonacci/script/Cargo.toml
@@ -28,6 +28,10 @@ path = "bin/compressed.rs"
name = "execute"
path = "bin/execute.rs"
+[[bin]]
+name = "network"
+path = "bin/network.rs"
+
[[bin]]
name = "fibonacci-script"
path = "src/main.rs"
diff --git a/examples/fibonacci/script/bin/compressed.rs b/examples/fibonacci/script/bin/compressed.rs
index 632f9cd15f..c14b23736c 100644
--- a/examples/fibonacci/script/bin/compressed.rs
+++ b/examples/fibonacci/script/bin/compressed.rs
@@ -15,7 +15,7 @@ fn main() {
// Generate the constant-sized proof for the given program and input.
let client = ProverClient::from_env();
let (pk, vk) = client.setup(ELF);
- let mut proof = client.prove(&pk, stdin).compressed().run().unwrap();
+ let mut proof = client.prove(&pk, &stdin).compressed().run().unwrap();
println!("generated proof");
// Read and verify the output.
diff --git a/examples/fibonacci/script/bin/execute.rs b/examples/fibonacci/script/bin/execute.rs
index 7b92525a71..7ded48ad37 100644
--- a/examples/fibonacci/script/bin/execute.rs
+++ b/examples/fibonacci/script/bin/execute.rs
@@ -15,7 +15,7 @@ fn main() {
// Only execute the program and get a `SP1PublicValues` object.
let client = ProverClient::from_env();
- let (mut public_values, execution_report) = client.execute(ELF, stdin).run().unwrap();
+ let (mut public_values, execution_report) = client.execute(ELF, &stdin).run().unwrap();
// Print the total number of cycles executed and the full execution report with a breakdown of
// the RISC-V opcode and syscall counts.
diff --git a/examples/fibonacci/script/bin/groth16_bn254.rs b/examples/fibonacci/script/bin/groth16_bn254.rs
index 98e9fa96af..55f421b9c9 100644
--- a/examples/fibonacci/script/bin/groth16_bn254.rs
+++ b/examples/fibonacci/script/bin/groth16_bn254.rs
@@ -19,7 +19,7 @@ fn main() {
println!("vk: {:?}", vk.bytes32());
// Generate the Groth16 proof.
- let proof = client.prove(&pk, stdin).groth16().run().unwrap();
+ let proof = client.prove(&pk, &stdin).groth16().run().unwrap();
println!("generated proof");
// Get the public values as bytes.
diff --git a/examples/fibonacci/script/bin/network.rs b/examples/fibonacci/script/bin/network.rs
new file mode 100644
index 0000000000..153a60949a
--- /dev/null
+++ b/examples/fibonacci/script/bin/network.rs
@@ -0,0 +1,77 @@
+use sp1_sdk::network::Error;
+use sp1_sdk::{include_elf, utils, ProverClient, SP1ProofWithPublicValues, SP1Stdin};
+
+/// The ELF we want to execute inside the zkVM.
+const ELF: &[u8] = include_elf!("fibonacci-program");
+
+fn main() {
+ // Setup logging.
+ utils::setup_logger();
+
+ // Create an input stream and write '500' to it.
+ let n = 1000u32;
+
+ // The input stream that the program will read from using `sp1_zkvm::io::read`. Note that the
+ // types of the elements in the input stream must match the types being read in the program.
+ let mut stdin = SP1Stdin::new();
+ stdin.write(&n);
+
+ // Create a `ProverClient` method.
+ let client = ProverClient::from_env();
+
+ // Generate the proof for the given program and input.
+ let (pk, vk) = client.setup(ELF);
+ let proof_result = client.prove(&pk, &stdin).compressed().run();
+
+ // Handle possible prover network errors.
+ let mut proof = match proof_result {
+ Ok(proof) => proof,
+ Err(e) => {
+ if let Some(network_error) = e.downcast_ref::() {
+ match network_error {
+ Error::RequestUnexecutable { request_id: _ } => {
+ eprintln!("Program is unexecutable: {}", e);
+ std::process::exit(1);
+ }
+ Error::RequestUnfulfillable { request_id: _ } => {
+ eprintln!("Proof request cannot be fulfilled: {}", e);
+ std::process::exit(1);
+ }
+ _ => {
+ eprintln!("Unexpected error: {}", e);
+ std::process::exit(1);
+ }
+ }
+ } else {
+ eprintln!("Unexpected error: {}", e);
+ std::process::exit(1);
+ }
+ }
+ };
+
+ println!("generated proof");
+
+ // Read and verify the output.
+ //
+ // Note that this output is read from values committed to in the program using
+ // `sp1_zkvm::io::commit`.
+ let _ = proof.public_values.read::();
+ let a = proof.public_values.read::();
+ let b = proof.public_values.read::();
+
+ println!("a: {}", a);
+ println!("b: {}", b);
+
+ // Verify proof and public values
+ client.verify(&proof, &vk).expect("verification failed");
+
+ // Test a round trip of proof serialization and deserialization.
+ proof.save("proof-with-pis.bin").expect("saving proof failed");
+ let deserialized_proof =
+ SP1ProofWithPublicValues::load("proof-with-pis.bin").expect("loading proof failed");
+
+ // Verify the deserialized proof.
+ client.verify(&deserialized_proof, &vk).expect("verification failed");
+
+ println!("successfully generated and verified proof for the program!")
+}
diff --git a/examples/fibonacci/script/bin/plonk_bn254.rs b/examples/fibonacci/script/bin/plonk_bn254.rs
index 48f9c51a37..5f7b3be903 100644
--- a/examples/fibonacci/script/bin/plonk_bn254.rs
+++ b/examples/fibonacci/script/bin/plonk_bn254.rs
@@ -19,7 +19,7 @@ fn main() {
println!("vk: {:?}", vk.bytes32());
// Generate the Plonk proof.
- let proof = client.prove(&pk, stdin).plonk().run().unwrap();
+ let proof = client.prove(&pk, &stdin).plonk().run().unwrap();
println!("generated proof");
// Get the public values as bytes.
diff --git a/examples/fibonacci/script/src/main.rs b/examples/fibonacci/script/src/main.rs
index 442fce04c5..eb3a16f4da 100644
--- a/examples/fibonacci/script/src/main.rs
+++ b/examples/fibonacci/script/src/main.rs
@@ -19,12 +19,12 @@ fn main() {
let client = ProverClient::from_env();
// Execute the program using the `ProverClient.execute` method, without generating a proof.
- let (_, report) = client.execute(ELF, stdin.clone()).run().unwrap();
+ let (_, report) = client.execute(ELF, &stdin).run().unwrap();
println!("executed program with {} cycles", report.total_instruction_count());
// Generate the proof for the given program and input.
let (pk, vk) = client.setup(ELF);
- let mut proof = client.prove(&pk, stdin).run().unwrap();
+ let mut proof = client.prove(&pk, &stdin).run().unwrap();
println!("generated proof");
diff --git a/examples/groth16/script/src/main.rs b/examples/groth16/script/src/main.rs
index 2fecb5493a..498a2e65ca 100644
--- a/examples/groth16/script/src/main.rs
+++ b/examples/groth16/script/src/main.rs
@@ -28,7 +28,7 @@ fn generate_fibonacci_proof() -> (Vec, Vec, String) {
// Generate the groth16 proof for the Fibonacci program.
let (pk, vk) = client.setup(FIBONACCI_ELF);
println!("vk: {:?}", vk.bytes32());
- let proof = client.prove(&pk, stdin).groth16().run().unwrap();
+ let proof = client.prove(&pk, &stdin).groth16().run().unwrap();
(proof.bytes(), proof.public_values.to_vec(), vk.bytes32())
}
@@ -49,7 +49,7 @@ fn main() {
let client = ProverClient::from_env();
// Execute the program using the `ProverClient.execute` method, without generating a proof.
- let (_, report) = client.execute(GROTH16_ELF, stdin.clone()).run().unwrap();
+ let (_, report) = client.execute(GROTH16_ELF, &stdin).run().unwrap();
println!("executed groth16 program with {} cycles", report.total_instruction_count());
println!("{}", report);
}
diff --git a/examples/io/script/src/main.rs b/examples/io/script/src/main.rs
index 008c69e09d..fa8812c389 100644
--- a/examples/io/script/src/main.rs
+++ b/examples/io/script/src/main.rs
@@ -25,7 +25,7 @@ fn main() {
// Generate the proof for the given program.
let client = ProverClient::from_env();
let (pk, vk) = client.setup(ELF);
- let mut proof = client.prove(&pk, stdin).run().unwrap();
+ let mut proof = client.prove(&pk, &stdin).run().unwrap();
// Read the output.
let r = proof.public_values.read::();
diff --git a/examples/is-prime/script/src/main.rs b/examples/is-prime/script/src/main.rs
index c965775743..1d866645e9 100644
--- a/examples/is-prime/script/src/main.rs
+++ b/examples/is-prime/script/src/main.rs
@@ -16,7 +16,7 @@ fn main() {
// Generate and verify the proof
let client = ProverClient::from_env();
let (pk, vk) = client.setup(ELF);
- let mut proof = client.prove(&pk, stdin).run().unwrap();
+ let mut proof = client.prove(&pk, &stdin).run().unwrap();
let is_prime = proof.public_values.read::();
println!("Is 29 prime? {}", is_prime);
diff --git a/examples/json/script/src/main.rs b/examples/json/script/src/main.rs
index 4c3eaa03a4..6c98a6e48d 100644
--- a/examples/json/script/src/main.rs
+++ b/examples/json/script/src/main.rs
@@ -36,7 +36,7 @@ fn main() {
let client = ProverClient::from_env();
let (pk, vk) = client.setup(JSON_ELF);
- let mut proof = client.prove(&pk, stdin).run().expect("proving failed");
+ let mut proof = client.prove(&pk, &stdin).run().expect("proving failed");
// Read output.
let val = proof.public_values.read::();
diff --git a/examples/patch-testing/script/src/main.rs b/examples/patch-testing/script/src/main.rs
index 5e85f2b825..7195bfee41 100644
--- a/examples/patch-testing/script/src/main.rs
+++ b/examples/patch-testing/script/src/main.rs
@@ -9,7 +9,7 @@ pub fn main() {
let stdin = SP1Stdin::new();
let client = ProverClient::from_env();
- let (_, report) = client.execute(PATCH_TEST_ELF, stdin).run().expect("executing failed");
+ let (_, report) = client.execute(PATCH_TEST_ELF, &stdin).run().expect("executing failed");
// Confirm there was at least 1 SHA_COMPUTE syscall.
assert_ne!(report.syscall_counts[sp1_core_executor::syscalls::SyscallCode::SHA_COMPRESS], 0);
diff --git a/examples/regex/script/src/main.rs b/examples/regex/script/src/main.rs
index 63c8c6fe66..e5ddb0c07f 100644
--- a/examples/regex/script/src/main.rs
+++ b/examples/regex/script/src/main.rs
@@ -20,7 +20,7 @@ fn main() {
// Generate the proof for the given program and input.
let client = ProverClient::from_env();
let (pk, vk) = client.setup(REGEX_IO_ELF);
- let mut proof = client.prove(&pk, stdin).run().expect("proving failed");
+ let mut proof = client.prove(&pk, &stdin).run().expect("proving failed");
// Read the output.
let res = proof.public_values.read::();
diff --git a/examples/rsa/script/src/main.rs b/examples/rsa/script/src/main.rs
index 991a458d7d..1b7cae8484 100644
--- a/examples/rsa/script/src/main.rs
+++ b/examples/rsa/script/src/main.rs
@@ -54,7 +54,7 @@ fn main() {
// Generate the proof for the given program and input.
let client = ProverClient::from_env();
let (pk, vk) = client.setup(RSA_ELF);
- let proof = client.prove(&pk, stdin).run().expect("proving failed");
+ let proof = client.prove(&pk, &stdin).run().expect("proving failed");
// Verify proof.
client.verify(&proof, &vk).expect("verification failed");
diff --git a/examples/rsp/script/src/main.rs b/examples/rsp/script/src/main.rs
index 08ded491e0..f1dabacebf 100644
--- a/examples/rsp/script/src/main.rs
+++ b/examples/rsp/script/src/main.rs
@@ -42,8 +42,7 @@ fn main() {
stdin.write_vec(buffer);
// Only execute the program.
- let (mut public_values, execution_report) =
- client.execute(&pk.elf, stdin.clone()).run().unwrap();
+ let (mut public_values, execution_report) = client.execute(&pk.elf, &stdin).run().unwrap();
println!(
"Finished executing the block in {} cycles",
execution_report.total_instruction_count()
@@ -57,7 +56,7 @@ fn main() {
// It is strongly recommended you use the network prover given the size of these programs.
if args.prove {
println!("Starting proof generation.");
- let proof = client.prove(&pk, stdin).run().expect("Proving should work.");
+ let proof = client.prove(&pk, &stdin).run().expect("Proving should work.");
println!("Proof generation finished.");
client.verify(&proof, &vk).expect("proof verification should succeed");
diff --git a/examples/ssz-withdrawals/script/src/main.rs b/examples/ssz-withdrawals/script/src/main.rs
index 9a6450bc7d..0da0683968 100644
--- a/examples/ssz-withdrawals/script/src/main.rs
+++ b/examples/ssz-withdrawals/script/src/main.rs
@@ -10,7 +10,7 @@ fn main() {
let stdin = SP1Stdin::new();
let client = ProverClient::from_env();
let (pk, vk) = client.setup(ELF);
- let proof = client.prove(&pk, stdin).run().expect("proving failed");
+ let proof = client.prove(&pk, &stdin).run().expect("proving failed");
// Verify proof.
client.verify(&proof, &vk).expect("verification failed");
diff --git a/examples/tendermint/script/Cargo.toml b/examples/tendermint/script/Cargo.toml
index 8c9e343b84..d7231ebbbe 100644
--- a/examples/tendermint/script/Cargo.toml
+++ b/examples/tendermint/script/Cargo.toml
@@ -6,7 +6,7 @@ publish = false
[dependencies]
sp1-sdk = { workspace = true }
-serde_json = { workspace = true, default-features = false, features = ["alloc"] }
+serde_json = { workspace = true }
tendermint-light-client-verifier = { version = "0.35.0", default-features = false, features = [
"rust-crypto",
] }
diff --git a/examples/tendermint/script/src/main.rs b/examples/tendermint/script/src/main.rs
index 298b8ee75f..43ac8cbef4 100644
--- a/examples/tendermint/script/src/main.rs
+++ b/examples/tendermint/script/src/main.rs
@@ -44,9 +44,9 @@ pub fn main() {
let client = ProverClient::from_env();
let (pk, vk) = client.setup(TENDERMINT_ELF);
- client.execute(TENDERMINT_ELF, stdin.clone()).run().expect("proving failed");
+ client.execute(TENDERMINT_ELF, &stdin).run().expect("proving failed");
- let proof = client.prove(&pk, stdin).run().expect("proving failed");
+ let proof = client.prove(&pk, &stdin).run().expect("proving failed");
// Verify proof.
client.verify(&proof, &vk).expect("verification failed");
diff --git a/sp1up/src/toolchain.rs b/sp1up/src/toolchain.rs
new file mode 100644
index 0000000000..595a7ebd49
--- /dev/null
+++ b/sp1up/src/toolchain.rs
@@ -0,0 +1,37 @@
+pub fn install_toolchain() -> Result<(), Error> {
+ // Add error handling and logging
+ let target_triple = get_host_target()?;
+
+ info!("Installing toolchain for target: {}", target_triple);
+
+ // Add version check for Ubuntu 24.04
+ #[cfg(target_os = "linux")]
+ if let Ok(release) = std::fs::read_to_string("/etc/os-release") {
+ if release.contains("24.04") {
+ warn!("Ubuntu 24.04 detected - using compatible toolchain settings");
+ // Adjust toolchain settings for Ubuntu 24.04
+ return install_toolchain_ubuntu_24(target_triple);
+ }
+ }
+
+ // Original installation logic
+ // ... existing code ...
+}
+
+#[cfg(target_os = "linux")]
+fn install_toolchain_ubuntu_24(target: String) -> Result<(), Error> {
+ // Use specific compiler flags for Ubuntu 24.04
+ let mut cmd = std::process::Command::new("rustc");
+ cmd.args(&[
+ "+nightly",
+ "-C", "target-feature=+crt-static",
+ "--target", &target,
+ ]);
+
+ // Add additional error handling
+ if !cmd.status()?.success() {
+ return Err(Error::ToolchainInstallFailed);
+ }
+
+ Ok(())
+}
diff --git a/sp1up/toolchain_tests.rs b/sp1up/toolchain_tests.rs
new file mode 100644
index 0000000000..0a855f0c33
--- /dev/null
+++ b/sp1up/toolchain_tests.rs
@@ -0,0 +1,5 @@
+#[test]
+fn test_toolchain_install_ubuntu24() {
+ // Test installation on Ubuntu 24.04
+ // ...
+}