From b5ec557fdd9a969ffe124470fc1139bc81954d7d Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Thu, 18 Sep 2025 14:50:05 -0700 Subject: [PATCH 1/2] wip --- crates/sdk/src/network/client.rs | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/crates/sdk/src/network/client.rs b/crates/sdk/src/network/client.rs index 25014ff06..310b428f2 100644 --- a/crates/sdk/src/network/client.rs +++ b/crates/sdk/src/network/client.rs @@ -16,6 +16,7 @@ use serde::{de::DeserializeOwned, Serialize}; use sp1_core_machine::io::SP1Stdin; use sp1_prover::{HashableKey, SP1VerifyingKey}; use tonic::{transport::Channel, Code}; +use tokio::sync::OnceCell; use super::{ grpc, @@ -47,6 +48,7 @@ pub struct NetworkClient { pub(crate) signer: NetworkSigner, pub(crate) http: HttpClientWithMiddleware, pub(crate) rpc_url: String, + pub(crate) channel: OnceCell, } #[async_trait] @@ -85,7 +87,7 @@ impl NetworkClient { .pool_idle_timeout(Duration::from_secs(240)) .build() .unwrap(); - Self { signer, http: client.into(), rpc_url: rpc_url.into() } + Self { signer, http: client.into(), rpc_url: rpc_url.into(), channel: OnceCell::new() } } /// Get the latest nonce for this account's address. @@ -475,26 +477,20 @@ impl NetworkClient { .await } + pub(crate) async fn get_channel(&self) -> Result { + Ok(self.channel.get_or_try_init(|| async { + let channel = grpc::configure_endpoint(&self.rpc_url)?.connect().await?; + Ok(channel) + }) + .await.map_err(|e| anyhow::anyhow!("Failed to connect: {:?}", e))?.clone()) + } + pub(crate) async fn prover_network_client(&self) -> Result> { - self.with_retry( - || async { - let channel = grpc::configure_endpoint(&self.rpc_url)?.connect().await?; - Ok(ProverNetworkClient::new(channel)) - }, - "creating network client", - ) - .await + Ok(ProverNetworkClient::new(self.get_channel().await?)) } pub(crate) async fn artifact_store_client(&self) -> Result> { - self.with_retry( - || async { - let channel = grpc::configure_endpoint(&self.rpc_url)?.connect().await?; - Ok(ArtifactStoreClient::new(channel)) - }, - "creating artifact client", - ) - .await + Ok(ArtifactStoreClient::new(self.get_channel().await?)) } pub(crate) async fn create_artifact_with_content( From 38ca777838ebd18b2dcc2fb135315be46368f682 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Thu, 18 Sep 2025 14:52:05 -0700 Subject: [PATCH 2/2] wip --- crates/sdk/src/network/client.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/crates/sdk/src/network/client.rs b/crates/sdk/src/network/client.rs index 310b428f2..df30724ea 100644 --- a/crates/sdk/src/network/client.rs +++ b/crates/sdk/src/network/client.rs @@ -15,8 +15,8 @@ use reqwest_middleware::ClientWithMiddleware as HttpClientWithMiddleware; use serde::{de::DeserializeOwned, Serialize}; use sp1_core_machine::io::SP1Stdin; use sp1_prover::{HashableKey, SP1VerifyingKey}; -use tonic::{transport::Channel, Code}; use tokio::sync::OnceCell; +use tonic::{transport::Channel, Code}; use super::{ grpc, @@ -478,11 +478,20 @@ impl NetworkClient { } pub(crate) async fn get_channel(&self) -> Result { - Ok(self.channel.get_or_try_init(|| async { - let channel = grpc::configure_endpoint(&self.rpc_url)?.connect().await?; - Ok(channel) - }) - .await.map_err(|e| anyhow::anyhow!("Failed to connect: {:?}", e))?.clone()) + Ok(self + .channel + .get_or_try_init(|| { + self.with_retry( + || async { + let channel = grpc::configure_endpoint(&self.rpc_url)?.connect().await?; + Ok(channel) + }, + "connecting to network rpc", + ) + }) + .await + .map_err(|e| anyhow::anyhow!("Failed to connect: {:?}", e))? + .clone()) } pub(crate) async fn prover_network_client(&self) -> Result> {