lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit 3e8fa15999ccedcb39b96db8984e5b44ffda80cf
parent cd4ca6facbebbd4374d604a146cbdf74fe7d6fc7
Author: triesap <tyson@radroots.org>
Date:   Sun, 17 May 2026 18:44:57 +0000

sp1: add order acceptance guest entrypoint

- add the feature-gated SP1 order acceptance guest binary
- commit canonical public values through guest io
- expose canonical public value bytes for guest execution
- cover the guest output boundary with deterministic tests

Diffstat:
Mcrates/sp1_guest_trade/Cargo.toml | 5+++++
Acrates/sp1_guest_trade/src/bin/order_acceptance_guest.rs | 14++++++++++++++
Mcrates/sp1_guest_trade/src/lib.rs | 16+++++++++++++++-
3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/crates/sp1_guest_trade/Cargo.toml b/crates/sp1_guest_trade/Cargo.toml @@ -10,6 +10,11 @@ description = "Deterministic Radroots trade public-values reducer for SP1 guests repository.workspace = true homepage.workspace = true +[[bin]] +name = "radroots_sp1_trade_order_acceptance_guest" +path = "src/bin/order_acceptance_guest.rs" +required-features = ["sp1_guest"] + [features] default = [] sp1_guest = ["dep:sp1-zkvm"] diff --git a/crates/sp1_guest_trade/src/bin/order_acceptance_guest.rs b/crates/sp1_guest_trade/src/bin/order_acceptance_guest.rs @@ -0,0 +1,14 @@ +#![cfg_attr(target_os = "zkvm", no_main)] + +use radroots_sp1_guest_trade::{ + RadrootsSp1TradeOrderAcceptanceWitness, reduce_order_acceptance_canonical_public_values, +}; + +sp1_zkvm::entrypoint!(main); + +fn main() { + let witness = sp1_zkvm::io::read::<RadrootsSp1TradeOrderAcceptanceWitness>(); + let public_values = reduce_order_acceptance_canonical_public_values(&witness) + .expect("valid radroots order acceptance witness"); + sp1_zkvm::io::commit_slice(&public_values); +} diff --git a/crates/sp1_guest_trade/src/lib.rs b/crates/sp1_guest_trade/src/lib.rs @@ -220,6 +220,12 @@ pub fn canonical_public_values_bytes( serde_json::to_vec(public_values).map_err(|_| RadrootsSp1TradeGuestError::PublicValuesEncoding) } +pub fn reduce_order_acceptance_canonical_public_values( + witness: &RadrootsSp1TradeOrderAcceptanceWitness, +) -> Result<Vec<u8>, RadrootsSp1TradeGuestError> { + Ok(reduce_order_acceptance_public_values(witness)?.canonical_public_values) +} + pub fn public_values_hash_hex( public_values: &RadrootsSp1TradeProofPublicValues, ) -> Result<String, RadrootsSp1TradeGuestError> { @@ -491,7 +497,7 @@ mod tests { RadrootsSp1TradeGuestError, RadrootsSp1TradeInventoryBinWitness, RadrootsSp1TradeOrderAcceptanceWitness, RadrootsSp1TradeProofResult, RadrootsSp1TradeProofTransitionKind, canonical_public_values_bytes, - reduce_order_acceptance_public_values, + reduce_order_acceptance_canonical_public_values, reduce_order_acceptance_public_values, }; use radroots_core::{ RadrootsCoreCurrency, RadrootsCoreDecimal, RadrootsCoreMoney, RadrootsCoreUnit, @@ -634,6 +640,14 @@ mod tests { } #[test] + fn guest_public_values_output_is_canonical_bytes() { + let execution = reduce_order_acceptance_public_values(&witness()).expect("execution"); + let bytes = + reduce_order_acceptance_canonical_public_values(&witness()).expect("guest bytes"); + assert_eq!(bytes, execution.canonical_public_values); + } + + #[test] fn overcommitted_inventory_is_rejected() { let mut input = witness(); input.inventory_bins[0].listing_capacity = 2;