commit 07d414a7061ecf9778346f72ccc68f4620ebbb68
parent a6f2d79a513a649a8acfa0e09dac0f058137aadd
Author: triesap <tyson@radroots.org>
Date: Wed, 3 Jun 2026 11:44:35 -0700
runtime: split SP1 verification feature
- add a default sp1-verify feature for inline receipt proof verification
- keep no-default-features CLI builds independent of the local SP1 toolchain
- fail closed when inline SP1 receipt verification is requested without verifier support
- retain the existing verifier path for default feature builds
Diffstat:
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
@@ -20,6 +20,10 @@ resolver = "2"
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage_nightly)'] }
+[features]
+default = ["sp1-verify"]
+sp1-verify = ["radroots_sp1_host_trade/sp1_verify"]
+
[dependencies]
chacha20poly1305 = "0.10"
chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
@@ -42,7 +46,7 @@ radroots_runtime_paths = { path = "../lib/crates/runtime_paths" }
radroots_sdk = { path = "../lib/crates/sdk", features = ["radrootsd-client", "relay-client", "signing"] }
radroots_secret_vault = { path = "../lib/crates/secret_vault", features = ["std", "os-keyring"] }
radroots_sql_core = { path = "../lib/crates/sql_core", features = ["native"] }
-radroots_sp1_host_trade = { path = "../lib/crates/sp1_host_trade", features = ["sp1_verify"] }
+radroots_sp1_host_trade = { path = "../lib/crates/sp1_host_trade" }
radroots_trade = { path = "../lib/crates/trade" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
diff --git a/src/runtime/validation_receipt.rs b/src/runtime/validation_receipt.rs
@@ -7,10 +7,12 @@ use radroots_nostr::prelude::{
RadrootsNostrEvent, RadrootsNostrEventId, RadrootsNostrFilter, RadrootsNostrKind,
radroots_event_from_nostr, radroots_nostr_filter_tag,
};
+#[cfg(feature = "sp1-verify")]
+use radroots_sp1_host_trade::verify_order_acceptance_validation_receipt_inline_sp1_proof;
use radroots_sp1_host_trade::{
RadrootsSp1TradeHostError, RadrootsSp1TradeProofMode, RadrootsSp1TradeProverBackend,
RadrootsSp1TradeWorkerResultPayload, RadrootsSp1TradeWorkerResultStatus,
- RadrootsSp1TradeWorkerRole, verify_order_acceptance_validation_receipt_inline_sp1_proof,
+ RadrootsSp1TradeWorkerRole,
};
use radroots_trade::validation_receipt::{
RadrootsTradeValidationReceipt, RadrootsValidationReceiptError,
@@ -1098,6 +1100,7 @@ fn proof_state_from_sp1_error(error: &RadrootsSp1TradeHostError) -> MappedSp1Pro
}
}
+#[cfg(feature = "sp1-verify")]
fn verify_inline_sp1_receipt(
receipt: &RadrootsTradeValidationReceipt,
) -> Result<(), RadrootsSp1TradeHostError> {
@@ -1112,6 +1115,15 @@ fn verify_inline_sp1_receipt(
.map(|_| ())
}
+#[cfg(not(feature = "sp1-verify"))]
+fn verify_inline_sp1_receipt(
+ _receipt: &RadrootsTradeValidationReceipt,
+) -> Result<(), RadrootsSp1TradeHostError> {
+ Err(RadrootsSp1TradeHostError::Sp1ProofVerificationFailed(
+ "SP1 inline proof verification is disabled for this build".to_owned(),
+ ))
+}
+
fn proof_state_is_invalid(state: &str) -> bool {
matches!(
state,