Skip to content

Commit dd5d2ad

Browse files
SP1 adapter: separate network error from ProofGenerationError. (#59)
1 parent 0504e55 commit dd5d2ad

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

adapters/sp1/host/src/prover.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
use sp1_sdk::{network::FulfillmentStrategy, ProverClient};
21
#[cfg(feature = "remote-prover")]
32
use sp1_sdk::{network::B256, SP1ProofMode};
3+
use sp1_sdk::{
4+
network::{Error as NetworkError, FulfillmentStrategy},
5+
ProverClient,
6+
};
47
#[cfg(feature = "remote-prover")]
58
use zkaleido::ZkVmRemoteProver;
69
use zkaleido::{
@@ -75,11 +78,23 @@ impl ZkVmProver for SP1Host {
7578
ProofType::Groth16 => network_prover_builder.groth16(),
7679
};
7780

78-
let proof_info = network_prover
79-
.run()
80-
.map_err(|e| ZkVmError::ProofGenerationError(e.to_string()))?;
81+
let proof_result = network_prover.run();
82+
83+
// Some error handling.
84+
// If SP1 network prover returned Network RPC error - transform it to zkaleido
85+
// network error, so the users can handle it gracefully.
86+
// Otherwise, return a general error message wrapped in ProofGeneratedError.
87+
let proof = match proof_result {
88+
Ok(proof) => proof,
89+
Err(e) => match e.downcast_ref::<NetworkError>() {
90+
Some(NetworkError::RpcError(status)) => {
91+
return Err(ZkVmError::NetworkRetryableError(status.to_string()));
92+
}
93+
_ => return Err(ZkVmError::ProofGenerationError(e.to_string())),
94+
},
95+
};
8196

82-
return Ok(proof_info.into());
97+
return Ok(proof.into());
8398
}
8499

85100
let client = ProverClient::from_env();

zkaleido/src/errors.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ pub enum ZkVmError {
1414
#[error("Execution failed: {0}")]
1515
ExecutionError(String),
1616

17+
/// Network (or RPC) error that can occur while using prover network.
18+
#[error("Network error: {0}")]
19+
NetworkRetryableError(String),
20+
1721
/// This error is returned when proof generation fails for any reason.
1822
#[error("Proof generation failed: {0}")]
1923
ProofGenerationError(String),

0 commit comments

Comments
 (0)