|
1 | | -use sp1_sdk::{network::FulfillmentStrategy, ProverClient}; |
2 | 1 | #[cfg(feature = "remote-prover")] |
3 | 2 | use sp1_sdk::{network::B256, SP1ProofMode}; |
| 3 | +use sp1_sdk::{ |
| 4 | + network::{Error as NetworkError, FulfillmentStrategy}, |
| 5 | + ProverClient, |
| 6 | +}; |
4 | 7 | #[cfg(feature = "remote-prover")] |
5 | 8 | use zkaleido::ZkVmRemoteProver; |
6 | 9 | use zkaleido::{ |
@@ -75,11 +78,23 @@ impl ZkVmProver for SP1Host { |
75 | 78 | ProofType::Groth16 => network_prover_builder.groth16(), |
76 | 79 | }; |
77 | 80 |
|
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 | + }; |
81 | 96 |
|
82 | | - return Ok(proof_info.into()); |
| 97 | + return Ok(proof.into()); |
83 | 98 | } |
84 | 99 |
|
85 | 100 | let client = ProverClient::from_env(); |
|
0 commit comments