cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

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:
MCargo.toml | 6+++++-
Msrc/runtime/validation_receipt.rs | 14+++++++++++++-
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,