commit 48ddf9d1bb7b70b2b568396f66cefb3e0f1072d1
parent d2d5cdb78ec6e4139ca5b0bb2f103d0831531177
Author: triesap <tyson@radroots.org>
Date: Wed, 3 Jun 2026 13:21:09 -0700
validation: map SP1 setup failure diagnostics
- map SP1 setup failures to a non-invalid verifier state
- keep verifier setup failures out of invalid proof bucketing
- add focused validation receipt coverage for setup failure mapping
- keep validation receipt test imports clean across feature modes
Diffstat:
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/src/runtime/validation_receipt.rs b/src/runtime/validation_receipt.rs
@@ -1096,6 +1096,12 @@ fn proof_state_from_sp1_error(error: &RadrootsSp1TradeHostError) -> MappedSp1Pro
proof_metadata_binding: "verifier_unavailable",
reason_code: "sp1_verifier_unavailable",
},
+ RadrootsSp1TradeHostError::Sp1SetupFailed(_) => MappedSp1ProofError {
+ state: "sp1_verifier_setup_failed",
+ public_values_hash_binding: "unverified",
+ proof_metadata_binding: "verifier_setup_failed",
+ reason_code: "sp1_verifier_setup_failed",
+ },
_ => MappedSp1ProofError {
state: "sp1_proof_invalid",
public_values_hash_binding: "unverified",
@@ -1342,11 +1348,12 @@ fn relay_failures(failures: Vec<DirectRelayFailure>) -> Vec<RelayFailureView> {
mod tests {
use super::{
RawValidationReceiptWorkerResultPayload, ValidationReceiptWorkerEvidenceSelection,
- ValidationReceiptWorkerEvidenceView, WorkerEvidenceReceiptBinding, proof_state_is_invalid,
- proof_verification_view_for_receipt, validation_receipt_invalid_reason_code,
- worker_payload_binds_receipt,
+ ValidationReceiptWorkerEvidenceView, WorkerEvidenceReceiptBinding,
+ proof_state_from_sp1_error, proof_state_is_invalid, proof_verification_view_for_receipt,
+ validation_receipt_invalid_reason_code, worker_payload_binds_receipt,
};
use radroots_events::kinds::KIND_TRADE_VALIDATION_RECEIPT;
+ use radroots_sp1_host_trade::RadrootsSp1TradeHostError;
use radroots_trade::validation_receipt::{
RadrootsTradeValidationReceipt, RadrootsValidationReceiptError,
RadrootsValidationReceiptProof, RadrootsValidationReceiptProofSystem,
@@ -1644,6 +1651,19 @@ mod tests {
}
#[test]
+ fn sp1_setup_failed_reports_verifier_setup_failure_without_invalid_proof_state() {
+ let mapped = proof_state_from_sp1_error(&RadrootsSp1TradeHostError::Sp1SetupFailed(
+ "runtime unavailable".to_owned(),
+ ));
+
+ assert_eq!(mapped.state, "sp1_verifier_setup_failed");
+ assert_eq!(mapped.public_values_hash_binding, "unverified");
+ assert_eq!(mapped.proof_metadata_binding, "verifier_setup_failed");
+ assert_eq!(mapped.reason_code, "sp1_verifier_setup_failed");
+ assert!(!proof_state_is_invalid(mapped.state));
+ }
+
+ #[test]
fn invalid_receipt_errors_get_specific_reason_codes() {
assert_eq!(
validation_receipt_invalid_reason_code(