lib

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

commit 3d299ea5caa6203207c6c821884fb87b7d9039d9
parent a7bdfa4bcbc9320c60e0d59d1f650829e6356d83
Author: triesap <tyson@radroots.org>
Date:   Wed,  1 Jul 2026 20:53:26 +0000

trade: index validation result root events

Emit marked request, root, and receipt event tags for transition proof results so downstream validation receipt consumers can fetch and bind worker result evidence through standard event references.

Validation: cargo extbuild run -- cargo fmt --all; cargo extbuild run -- cargo test -p radroots_trade dvm::tests::transition_proof_result_tags_bind_stringified_request; cargo extbuild run -- cargo check -p radroots_trade

Diffstat:
Mcrates/trade/src/dvm.rs | 41++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/crates/trade/src/dvm.rs b/crates/trade/src/dvm.rs @@ -448,7 +448,20 @@ pub fn build_transition_proof_result_tags( .map_err(RadrootsTradeDvmError::SerializeRequestEvent)?; let mut tags = vec![ vec![RADROOTS_DVM_TAG_REQUEST.to_string(), request_json], - vec![TAG_E.to_string(), request_event_id.as_str().to_string()], + vec![ + TAG_E.to_string(), + request_event_id.as_str().to_string(), + String::new(), + String::new(), + "request".to_string(), + ], + vec![ + TAG_E.to_string(), + binding.root_event_id.as_str().to_string(), + String::new(), + String::new(), + "root".to_string(), + ], vec![TAG_P.to_string(), customer_pubkey.as_str().to_string()], vec![ RADROOTS_DVM_TAG_LISTING_EVENT.to_string(), @@ -468,6 +481,13 @@ pub fn build_transition_proof_result_tags( RADROOTS_DVM_TAG_VALIDATION_RECEIPT.to_string(), receipt_event_id.as_str().to_string(), ]); + tags.push(vec![ + TAG_E.to_string(), + receipt_event_id.as_str().to_string(), + String::new(), + String::new(), + "receipt".to_string(), + ]); } for input in inputs { tags.push(input_event_tag(input.role, &input.event_id)); @@ -753,6 +773,18 @@ mod tests { RadrootsEventId::parse(format!("{raw:064x}")).expect("event id") } + fn has_marked_event_tag( + tags: &[Vec<String>], + event_id: &RadrootsEventId, + marker: &str, + ) -> bool { + tags.iter().any(|tag| { + tag.first().map(String::as_str) == Some(TAG_E) + && tag.get(1).map(String::as_str) == Some(event_id.as_str()) + && tag.get(4).map(String::as_str) == Some(marker) + }) + } + fn public_key(raw: &str) -> RadrootsPublicKey { RadrootsPublicKey::parse(raw).expect("public key") } @@ -862,6 +894,13 @@ mod tests { assert_eq!(parsed.customer_pubkey, public_key(BUYER)); assert_eq!(parsed.inputs, request_tags.inputs); assert_eq!(parsed.binding, binding); + assert!(has_marked_event_tag(&tags, &event_id(10), "request")); + assert!(has_marked_event_tag( + &tags, + &content.request_event_id, + "root" + )); + assert!(has_marked_event_tag(&tags, &event_id(11), "receipt")); } #[test]