fixture.rs (5109B)
1 // Authentic public conformance vector generic_operational_listing_009. 2 // Source: contracts/conformance/vectors/event/authored_operations.v1.json 3 // Source SHA-256: 10a7fc63251e23bd7fb9f133a7754be90e6cdb907340ff190bae659d619ce65b 4 use radroots_event::{GenericEventDraft, SignedEvent, wire::v1::Nip01EventWire}; 5 use radroots_event_codec::authoring::AuthoredEventPlan; 6 use radroots_storage::{ 7 atomic::AtomicCommitDigest, 8 authored::{AuthoredArtifact, AuthoredArtifactId, AuthoredOperation, WorkClaim}, 9 authored_atomic::{AuthoredAtomicCommand, PrepareAuthoredOperation, RecordSignedArtifact}, 10 authored_delivery::{AuthoredDeliveryIntent, AuthoredDeliveryPlan, AuthoredDeliveryPlanId}, 11 journal::OperationInstanceId, 12 }; 13 use radroots_transport::{ 14 Target, TargetSet, 15 policy::{SatisfactionClass, SatisfactionPolicy, TargetPolicy}, 16 }; 17 use std::num::NonZeroU64; 18 19 pub(super) const RAW: &str = r###"{"id":"da14c35c4afe472a2ddef6d7298cc736782eaf09b55511c3b5774ad79468ada8","pubkey":"585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df","created_at":1784347200,"kind":30402,"tags":[["d","AAAAAAAAAAAAAAAAAAAAAg"],["p","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],["a","30340:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:AAAAAAAAAAAAAAAAAAAAAA"],["key","carrot-nantes"],["title","Nantes Carrots"],["category","produce"],["summary","Fresh bunches harvested in Saanich"],["published_at","1700000000"],["radroots:primary_bin","bunch"],["radroots:bin","bunch","1","each"],["radroots:price","bunch","4","CAD","1","each"],["price","4","CAD"],["inventory","24"],["status","active"],["delivery","pickup"],["location","Saanich Peninsula","Victoria","BC","CA"],["g","c28hr"]],"content":"# Nantes Carrots\n\nFresh bunches harvested in Saanich","sig":"07edaeab0b05807d4987346c95fd2441b46949be03f455bfbb3678c07b50fa95fb563b509b33f5d547e7cb74f09475c04e281c66362a8db206e57ee757d60dbe"}"###; 20 21 pub(super) fn event(raw: &str) -> SignedEvent { 22 let v: serde_json::Value = serde_json::from_str(raw).unwrap(); 23 let wire = Nip01EventWire { 24 id: v["id"].as_str().unwrap().to_owned(), 25 pubkey: v["pubkey"].as_str().unwrap().to_owned(), 26 created_at: v["created_at"].as_u64().unwrap(), 27 kind: u32::try_from(v["kind"].as_u64().unwrap()).unwrap(), 28 tags: serde_json::from_value(v["tags"].clone()).unwrap(), 29 content: v["content"].as_str().unwrap().to_owned(), 30 sig: v["sig"].as_str().unwrap().to_owned(), 31 extra: Default::default(), 32 }; 33 SignedEvent::from_wire_verified_id(wire, raw.to_owned()).unwrap() 34 } 35 36 pub(super) fn ids() -> ( 37 OperationInstanceId, 38 AuthoredArtifactId, 39 AuthoredDeliveryPlanId, 40 ) { 41 ( 42 OperationInstanceId::new([1; 16]).unwrap(), 43 AuthoredArtifactId::new([2; 16]).unwrap(), 44 AuthoredDeliveryPlanId::new([3; 16]).unwrap(), 45 ) 46 } 47 48 pub(super) fn prepare() -> (AuthoredAtomicCommand, SignedEvent) { 49 let event = event(RAW); 50 let wire = event.wire(); 51 let plan = AuthoredEventPlan::from_generic( 52 GenericEventDraft::new( 53 "radroots.operational_listing.published.v1", 54 wire.kind, 55 wire.created_at, 56 wire.tags.clone(), 57 wire.content.clone(), 58 wire.pubkey.clone(), 59 ) 60 .unwrap(), 61 ) 62 .unwrap(); 63 let (operation, artifact, delivery) = ids(); 64 let intent = AuthoredDeliveryIntent::new( 65 "signed-fact", 66 TargetSet::new(vec![Target::nostr_relay("wss://one.example").unwrap()]).unwrap(), 67 SatisfactionPolicy::new(SatisfactionClass::Accepted, TargetPolicy::any()), 68 100, 69 ) 70 .unwrap(); 71 let preparation = PrepareAuthoredOperation::new( 72 AuthoredOperation::new(operation, vec![artifact], 10).unwrap(), 73 vec![AuthoredArtifact::planned(artifact, operation, 0, &plan, 10).unwrap()], 74 vec![AuthoredDeliveryPlan::new(delivery, artifact, intent, 10).unwrap()], 75 AtomicCommitDigest::new([7; 32]), 76 10, 77 ) 78 .unwrap(); 79 (AuthoredAtomicCommand::Prepare(preparation), event) 80 } 81 82 pub(super) fn claim(revision: NonZeroU64, token: u8, at: u64) -> WorkClaim { 83 WorkClaim::new( 84 [token; 16], 85 format!("worker-{token}"), 86 NonZeroU64::new(u64::from(token)).unwrap(), 87 at, 88 at + 20, 89 revision, 90 ) 91 .unwrap() 92 } 93 94 pub(super) fn record(event: SignedEvent, claim: WorkClaim, at: u64) -> AuthoredAtomicCommand { 95 AuthoredAtomicCommand::RecordSigned( 96 RecordSignedArtifact::new(ids().0, ids().1, claim, event, at).unwrap(), 97 ) 98 } 99 100 // Authentic sibling vector typed_update_escaping_002, deliberately a different plan. 101 pub(super) const OTHER_RAW: &str = r###"{"id":"11bcbaeab205194e26ae4d950190c03d18edb1b65f428048e589e4bbdcfa9d50","pubkey":"585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df","created_at":1784347200,"kind":1,"tags":[],"content":"Farm update: \"ready\"\\\nš","sig":"a6a323774f1ce4aafa6c479e758eb350a7e5c4bdc55c7690beba2ccb1631839a1246a83e62f4b29e74f9afda62802794981570e10c7d4ad41c392dab4066b88c"}"###;