lib

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

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"}"###;