commit 49e30c66dad8b1263f673e8c9d783177dbdcc7c4
parent edd69a0c12d033c6fc3aae1c17015925168762ea
Author: triesap <tyson@radroots.org>
Date: Wed, 15 Jul 2026 01:18:45 +0000
runtime: align event envelope accessors
- replace direct event-envelope field reads with typed accessors
- raise the RHI Rust floor to 1.97.0 for the SDK/runtime stack
Diffstat:
5 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
@@ -3,7 +3,7 @@ name = "rhi"
version = "0.1.0"
edition = "2024"
authors = ["Radroots Authors"]
-rust-version = "1.92.0"
+rust-version = "1.97.0"
license = "AGPL-3.0-or-later"
description = "Radroots trade validation and receipt worker"
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
@@ -1,2 +1,2 @@
[toolchain]
-channel = "1.92.0"
+channel = "1.97.0"
diff --git a/src/adapters/nostr/event.rs b/src/adapters/nostr/event.rs
@@ -57,8 +57,8 @@ impl JobEventLike for NostrEventAdapter<'_> {
fn raw_author(&self) -> String {
self.author_hex.clone()
}
- fn raw_published_at(&self) -> u32 {
- self.evt.created_at.as_secs() as u32
+ fn raw_published_at(&self) -> u64 {
+ self.evt.created_at.as_secs()
}
fn raw_kind(&self) -> u32 {
match self.evt.kind {
@@ -139,7 +139,7 @@ mod tests {
assert_eq!(JobEventLike::raw_kind(&adapter), 0);
assert_eq!(
JobEventLike::raw_published_at(&adapter),
- event.created_at.as_secs() as u32
+ event.created_at.as_secs()
);
}
}
diff --git a/src/features/trade_listing/handlers/dvm.rs b/src/features/trade_listing/handlers/dvm.rs
@@ -352,7 +352,7 @@ fn ensure_service_recipient(
event: &RadrootsNostrEvent,
keys: &RadrootsNostrKeys,
) -> Result<(), TradeListingDvmError> {
- let tags = radroots_event_from_nostr(event).tags;
+ let tags = radroots_event_from_nostr(event).tags_as_vec();
if tag_has_value(&tags, "p", &keys.public_key().to_string()) {
Ok(())
} else {
@@ -394,7 +394,8 @@ async fn handle_listing_validate_request(
}
}
let rr_event = radroots_event_from_nostr(event);
- let listing_addr = required_tag_value(&rr_event.tags, "a")?;
+ let rr_tags = rr_event.tags_as_vec();
+ let listing_addr = required_tag_value(&rr_tags, "a")?;
parse_listing_address(&listing_addr).map_err(|_| TradeListingDvmError::InvalidListingAddr)?;
let payload: TradeListingValidateRequest = serde_json::from_str(&event.content)?;
let listing_event = resolve_listing_event(client, &listing_addr, payload.listing_event).await;
@@ -511,7 +512,8 @@ async fn handle_order_request(
if request.payload.seller_pubkey != listing_addr.seller_pubkey {
return Err(TradeListingDvmError::InvalidListingAddr);
}
- let listing_event = parse_order_listing_event_tag(&rr_event.tags)
+ let rr_tags = rr_event.tags_as_vec();
+ let listing_event = parse_order_listing_event_tag(&rr_tags)
.map_err(|error| TradeListingDvmError::InvalidPayload(error.to_string()))?
.ok_or(TradeListingDvmError::MissingTag("listing_event"))?;
let listing_snapshot_event_id =
@@ -736,7 +738,7 @@ async fn validate_farm_dependencies(
let has_profile = profile_event
.map(|event| {
let rr_event = radroots_event_from_nostr(&event);
- tag_has_value(&rr_event.tags, "t", "radroots:type:farm")
+ tag_has_value(&rr_event.tags_as_vec(), "t", "radroots:type:farm")
})
.unwrap_or(false);
if !has_profile {
diff --git a/src/features/trade_validation_receipt.rs b/src/features/trade_validation_receipt.rs
@@ -9,6 +9,7 @@ use radroots_event::kinds::{
use radroots_event::order::{
RadrootsOrderDecision, RadrootsOrderDecisionOutcome, RadrootsOrderRequest,
};
+use radroots_event::{RadrootsEventEnvelope, RadrootsEventEnvelopeParts};
use radroots_event_codec::order::{
order_decision_from_event, order_request_from_event, parse_order_listing_event_tag,
parse_order_prev_tag, parse_order_root_tag,
@@ -930,7 +931,10 @@ async fn process_trade_validation_receipt_job_request(
TradeValidationReceiptJobError::InvalidActiveTradeEvent(error.to_string())
})?;
- let listing_event_ptr = parse_order_listing_event_tag(&request_rr.tags)
+ let request_tags = request_rr.tags_as_vec();
+ let decision_tags = decision_rr.tags_as_vec();
+
+ let listing_event_ptr = parse_order_listing_event_tag(&request_tags)
.map_err(|error| {
TradeValidationReceiptJobError::InvalidActiveTradeEvent(error.to_string())
})?
@@ -939,10 +943,10 @@ async fn process_trade_validation_receipt_job_request(
return Err(TradeValidationReceiptJobError::EventSetMismatch);
}
- let root_event_id = parse_order_root_tag(&decision_rr.tags).map_err(|error| {
+ let root_event_id = parse_order_root_tag(&decision_tags).map_err(|error| {
TradeValidationReceiptJobError::InvalidActiveTradeEvent(error.to_string())
})?;
- let prev_event_id = parse_order_prev_tag(&decision_rr.tags).map_err(|error| {
+ let prev_event_id = parse_order_prev_tag(&decision_tags).map_err(|error| {
TradeValidationReceiptJobError::InvalidActiveTradeEvent(error.to_string())
})?;
if root_event_id.as_deref() != Some(request.request_event_id.as_str())
@@ -982,7 +986,7 @@ async fn process_trade_validation_receipt_job_request(
let receipt = validation_receipt_for_order_acceptance_proof(&proof_outcome.bundle)?;
let receipt_parts = validation_receipt_event_build(&witness.request.order_id, &receipt)?;
let verified_receipt = verify_validation_receipt_event(
- &radroots_event::RadrootsEventEnvelope {
+ &RadrootsEventEnvelope::new(RadrootsEventEnvelopeParts {
id: zero_event_id(),
author: keys.public_key().to_string(),
created_at: 0,
@@ -990,7 +994,8 @@ async fn process_trade_validation_receipt_job_request(
tags: receipt_parts.tags.clone(),
content: receipt_parts.content.clone(),
sig: zero_signature(),
- },
+ })
+ .map_err(|_| TradeValidationReceiptJobError::InvalidSignedEvent)?,
expected_receipt_binding(
request,
prover_policy,
@@ -1819,7 +1824,7 @@ fn result_tags_from_dvm(
.map_err(|_| TradeValidationReceiptJobError::EventSetMismatch)?,
),
};
- let customer_pubkey = radroots_event::ids::RadrootsPublicKey::parse(request.author.as_str())
+ let customer_pubkey = radroots_event::ids::RadrootsPublicKey::parse(request.author_str())
.map_err(|_| TradeValidationReceiptJobError::EventSetMismatch)?;
build_transition_proof_result_tags(&request, &customer_pubkey, inputs, &binding)
.map_err(TradeValidationReceiptJobError::from)
@@ -6891,7 +6896,7 @@ mod tests {
let mut request_json: serde_json::Value =
serde_json::from_str(&job.content).expect("request json");
request_json["prover_backend"] = serde_json::Value::String("local_cpu_prove".to_string());
- let tags = radroots_event_from_nostr(&job).tags;
+ let tags = radroots_event_from_nostr(&job).tags_as_vec();
let job = signed_event(
&requester,
KIND_TRADE_TRANSITION_PROOF_REQUEST,
@@ -7206,7 +7211,7 @@ mod tests {
)
.is_ok()
);
- assert_eq!(request_rr.kind, 3422);
- assert_eq!(decision_rr.kind, 3423);
+ assert_eq!(request_rr.kind_u32(), 3422);
+ assert_eq!(decision_rr.kind_u32(), 3423);
}
}