cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

commit be7a2541f6391da355a9bc258a8197f192adf54e
parent 31be69136f0517c2346f11453a6b2906d31d266b
Author: triesap <tyson@radroots.org>
Date:   Fri, 12 Jun 2026 19:28:30 -0700

cli: align order event consumer APIs

- switch CLI order workflows to canonical rr-rs order event, codec, and reducer names

- refresh listing, signer, and validation receipt call sites for the current contracts

- update tests and lockfile for the new rr-rs dependency graph

- verify with nix check, nix test, no-default cargo checks, and stale-symbol scan

Diffstat:
MCargo.lock | 66------------------------------------------------------------------
Msrc/ops/exec/basket.rs | 8++++----
Msrc/runtime/listing.rs | 31++++++++++++++++---------------
Msrc/runtime/order.rs | 2699++++++++++++++++++++++++++++++++++++-------------------------------------------
Msrc/runtime/signer.rs | 64++++++++++++++++++++++++++++++++--------------------------------
Msrc/runtime/validation_receipt.rs | 6++----
Msrc/view/runtime.rs | 28++++++++++++++--------------
Mtests/support/mod.rs | 6+++---
Mtests/target_cli.rs | 32+++++++++++++++-----------------
9 files changed, 1317 insertions(+), 1623 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -3561,7 +3561,6 @@ dependencies = [ "rust_decimal", "rust_decimal_macros", "serde", - "typeshare", ] [[package]] @@ -3570,8 +3569,6 @@ version = "0.1.0-alpha.2" dependencies = [ "radroots_core", "serde", - "ts-rs", - "typeshare", ] [[package]] @@ -3835,7 +3832,6 @@ dependencies = [ "serde_json", "sha2", "thiserror 1.0.69", - "ts-rs", ] [[package]] @@ -5819,15 +5815,6 @@ dependencies = [ ] [[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] name = "termtree" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6338,28 +6325,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "ts-rs" -version = "11.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4994acea2522cd2b3b85c1d9529a55991e3ad5e25cdcd3de9d505972c4379424" -dependencies = [ - "thiserror 2.0.18", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-macros" -version = "11.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6ff59666c9cbaec3533964505d39154dc4e0a56151fdea30a09ed0301f62e2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "termcolor", -] - -[[package]] name = "tungstenite" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6406,28 +6371,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] -name = "typeshare" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1bf9fe204f358ffea7f8f779b53923a20278b3ab8e8d97962c5e1b3a54edb7" -dependencies = [ - "chrono", - "serde", - "serde_json", - "typeshare-annotation", -] - -[[package]] -name = "typeshare-annotation" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621963e302416b389a1ec177397e9e62de849a78bd8205d428608553def75350" -dependencies = [ - "quote", - "syn 2.0.117", -] - -[[package]] name = "ucd-trie" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6754,15 +6697,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/src/ops/exec/basket.rs b/src/ops/exec/basket.rs @@ -3,7 +3,7 @@ use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicU64, Ordering}; use std::time::{SystemTime, UNIX_EPOCH}; -use radroots_events::trade::RadrootsTradeOrderEconomics; +use radroots_events::order::RadrootsOrderEconomics; use radroots_replica_db::{ReplicaSql, trade_product}; use radroots_replica_db_schema::trade_product::{ITradeProductFieldsFilter, ITradeProductFindMany}; use radroots_sql_core::SqliteExecutor; @@ -82,7 +82,7 @@ struct BasketQuote { order_id: String, order_file: String, #[serde(default, skip_serializing_if = "Option::is_none")] - economics: Option<RadrootsTradeOrderEconomics>, + economics: Option<RadrootsOrderEconomics>, ready_for_submit: bool, created_at_unix: u64, #[serde(default, skip_serializing_if = "Vec::is_empty")] @@ -1316,7 +1316,7 @@ mod tests { use radroots_events::RadrootsNostrEvent; use radroots_events::kinds::{KIND_FARM, KIND_LISTING}; - use radroots_events_codec::trade::RadrootsTradeListingAddress; + use radroots_events_codec::order::RadrootsOrderListingAddress; use radroots_replica_sync::{RadrootsReplicaIngestOutcome, radroots_replica_ingest_event}; use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; @@ -1770,7 +1770,7 @@ mod tests { fn seed_current_listing(config: &RuntimeConfig) { crate::runtime::store::init(config).expect("store init"); - let parsed = RadrootsTradeListingAddress::parse(LISTING_ADDR).expect("listing addr"); + let parsed = RadrootsOrderListingAddress::parse(LISTING_ADDR).expect("listing addr"); let event = RadrootsNostrEvent { id: "2".repeat(64), author: parsed.seller_pubkey.clone(), diff --git a/src/runtime/listing.rs b/src/runtime/listing.rs @@ -17,7 +17,7 @@ use radroots_events::listing::{ RadrootsListingDeliveryMethod, RadrootsListingLocation, RadrootsListingProduct, RadrootsListingStatus, }; -use radroots_events::trade::RadrootsTradeListingValidationError; +use radroots_events::trade_validation::RadrootsTradeValidationListingError; use radroots_events_codec::d_tag::is_d_tag_base64url; use radroots_events_codec::listing::encode::to_wire_parts_with_kind; use radroots_events_codec::wire::WireEventParts; @@ -2209,6 +2209,7 @@ fn canonicalize_draft( let listing = RadrootsListing { d_tag: listing_id.clone(), + published_at: None, farm: RadrootsFarmRef { pubkey: seller_pubkey.clone(), d_tag: farm_d_tag.clone(), @@ -3064,47 +3065,47 @@ fn relay_failures(failures: Vec<DirectRelayFailure>) -> Vec<RelayFailureView> { } fn issue_from_trade_validation( - error: RadrootsTradeListingValidationError, + error: RadrootsTradeValidationListingError, contents: &str, ) -> ListingValidationIssueView { match error { - RadrootsTradeListingValidationError::InvalidSeller => issue_for_field( + RadrootsTradeValidationListingError::InvalidSeller => issue_for_field( contents, "seller_actor.pubkey", "listing author does not match the farm pubkey", ), - RadrootsTradeListingValidationError::MissingTitle => { + RadrootsTradeValidationListingError::MissingTitle => { issue_for_field(contents, "product.title", "missing listing title") } - RadrootsTradeListingValidationError::MissingDescription => { + RadrootsTradeValidationListingError::MissingDescription => { issue_for_field(contents, "product.summary", "missing listing description") } - RadrootsTradeListingValidationError::MissingProductType => { + RadrootsTradeValidationListingError::MissingProductType => { issue_for_field(contents, "product.category", "missing listing product type") } - RadrootsTradeListingValidationError::MissingBins - | RadrootsTradeListingValidationError::MissingPrimaryBin - | RadrootsTradeListingValidationError::InvalidBin => { + RadrootsTradeValidationListingError::MissingBins + | RadrootsTradeValidationListingError::MissingPrimaryBin + | RadrootsTradeValidationListingError::InvalidBin => { issue_for_field(contents, "primary_bin.bin_id", error.to_string()) } - RadrootsTradeListingValidationError::InvalidPrice => issue_for_field( + RadrootsTradeValidationListingError::InvalidPrice => issue_for_field( contents, "primary_bin.price_amount", "invalid listing price", ), - RadrootsTradeListingValidationError::MissingInventory - | RadrootsTradeListingValidationError::InvalidInventory => { + RadrootsTradeValidationListingError::MissingInventory + | RadrootsTradeValidationListingError::InvalidInventory => { issue_for_field(contents, "inventory.available", error.to_string()) } - RadrootsTradeListingValidationError::MissingAvailability => issue_for_field( + RadrootsTradeValidationListingError::MissingAvailability => issue_for_field( contents, "availability.status", "missing listing availability", ), - RadrootsTradeListingValidationError::MissingLocation => { + RadrootsTradeValidationListingError::MissingLocation => { issue_for_field(contents, "location.primary", "missing listing location") } - RadrootsTradeListingValidationError::MissingDeliveryMethod => issue_for_field( + RadrootsTradeValidationListingError::MissingDeliveryMethod => issue_for_field( contents, "delivery.method", "missing listing delivery method", diff --git a/src/runtime/order.rs b/src/runtime/order.rs @@ -13,38 +13,34 @@ use radroots_core::{ }; use radroots_events::RadrootsNostrEventPtr; use radroots_events::kinds::{ - KIND_LISTING, KIND_TRADE_CANCEL, KIND_TRADE_FULFILLMENT_UPDATE, KIND_TRADE_ORDER_DECISION, - KIND_TRADE_ORDER_REQUEST, KIND_TRADE_ORDER_REVISION, KIND_TRADE_ORDER_REVISION_RESPONSE, - KIND_TRADE_PAYMENT_RECORDED, KIND_TRADE_RECEIPT, KIND_TRADE_SETTLEMENT_DECISION, + KIND_LISTING, KIND_ORDER_CANCELLATION, KIND_ORDER_DECISION, KIND_ORDER_FULFILLMENT_UPDATE, + KIND_ORDER_PAYMENT_RECORD, KIND_ORDER_RECEIPT, KIND_ORDER_REQUEST, + KIND_ORDER_REVISION_DECISION, KIND_ORDER_REVISION_PROPOSAL, KIND_ORDER_SETTLEMENT_DECISION, }; use radroots_events::listing::{ RadrootsListing, RadrootsListingAvailability, RadrootsListingStatus, }; -use radroots_events::trade::{ - RadrootsActiveTradeFulfillmentState, RadrootsActiveTradeMessageType, RadrootsTradeBuyerReceipt, - RadrootsTradeEconomicActor, RadrootsTradeEconomicEffect, RadrootsTradeEconomicLineKind, - RadrootsTradeFulfillmentUpdated, RadrootsTradeInventoryCommitment, RadrootsTradeOrderCancelled, - RadrootsTradeOrderDecision, RadrootsTradeOrderDecisionEvent, RadrootsTradeOrderEconomicItem, - RadrootsTradeOrderEconomicLine, RadrootsTradeOrderEconomics, RadrootsTradeOrderItem, - RadrootsTradeOrderRequested, RadrootsTradeOrderRevisionDecision, - RadrootsTradeOrderRevisionDecisionEvent, RadrootsTradeOrderRevisionProposed, - RadrootsTradePaymentMethod, RadrootsTradePaymentRecorded, RadrootsTradePricingBasis, - RadrootsTradeSettlementDecision, RadrootsTradeSettlementDecisionEvent, +use radroots_events::order::{ + RadrootsOrderCancellation, RadrootsOrderDecision, RadrootsOrderDecisionOutcome, + RadrootsOrderEconomicActor, RadrootsOrderEconomicEffect, RadrootsOrderEconomicItem, + RadrootsOrderEconomicLine, RadrootsOrderEconomicLineKind, RadrootsOrderEconomics, + RadrootsOrderEventType, RadrootsOrderFulfillmentState, RadrootsOrderFulfillmentUpdate, + RadrootsOrderInventoryCommitment, RadrootsOrderItem, RadrootsOrderPaymentMethod, + RadrootsOrderPaymentRecord, RadrootsOrderPricingBasis, RadrootsOrderReceipt, + RadrootsOrderRequest, RadrootsOrderRevisionDecision, RadrootsOrderRevisionOutcome, + RadrootsOrderRevisionProposal, RadrootsOrderSettlementDecision, RadrootsOrderSettlementOutcome, }; use radroots_events_codec::d_tag::is_d_tag_base64url; use radroots_events_codec::listing::decode::listing_from_event; -use radroots_events_codec::trade::{ - RadrootsTradeListingAddress, active_trade_buyer_receipt_event_build, - active_trade_buyer_receipt_from_event, active_trade_envelope_from_event, - active_trade_event_context_from_tags, active_trade_fulfillment_update_event_build, - active_trade_fulfillment_update_from_event, active_trade_order_cancel_event_build, - active_trade_order_cancel_from_event, active_trade_order_decision_event_build, - active_trade_order_request_from_event, active_trade_order_revision_decision_event_build, - active_trade_order_revision_decision_from_event, - active_trade_order_revision_proposal_event_build, - active_trade_order_revision_proposal_from_event, active_trade_payment_recorded_event_build, - active_trade_payment_recorded_from_event, active_trade_settlement_decision_event_build, - active_trade_settlement_decision_from_event, +use radroots_events_codec::order::{ + RadrootsOrderListingAddress, order_cancellation_event_build, order_cancellation_from_event, + order_decision_event_build, order_envelope_from_event, order_event_context_from_tags, + order_fulfillment_update_event_build, order_fulfillment_update_from_event, + order_payment_record_event_build, order_payment_record_from_event, order_receipt_event_build, + order_receipt_from_event, order_request_from_event, order_revision_decision_event_build, + order_revision_decision_from_event, order_revision_proposal_event_build, + order_revision_proposal_from_event, order_settlement_decision_event_build, + order_settlement_decision_from_event, }; use radroots_events_codec::wire::WireEventParts; use radroots_local_events::{ @@ -71,17 +67,15 @@ use radroots_sdk::{ }; use radroots_sql_core::SqliteExecutor; use radroots_trade::order::{ - RadrootsActiveOrderCancellationRecord, RadrootsActiveOrderDecisionRecord, - RadrootsActiveOrderFulfillmentRecord, RadrootsActiveOrderPaymentProjection, - RadrootsActiveOrderPaymentRecord, RadrootsActiveOrderPaymentState, - RadrootsActiveOrderReceiptRecord, RadrootsActiveOrderReducerIssue, - RadrootsActiveOrderRequestRecord, RadrootsActiveOrderRevisionDecisionRecord, - RadrootsActiveOrderRevisionProposalRecord, RadrootsActiveOrderSettlementRecord, - RadrootsActiveOrderSettlementState, RadrootsActiveOrderStatus, RadrootsListingInventoryAccountingIssue, RadrootsListingInventoryAccountingProjection, - RadrootsListingInventoryBinAvailability, canonicalize_active_order_decision_for_signer, - canonicalize_active_order_request_for_signer, radroots_trade_order_economics_digest, - reduce_active_order_events, reduce_listing_inventory_accounting, + RadrootsListingInventoryBinAvailability, RadrootsOrderCancellationRecord, + RadrootsOrderDecisionRecord, RadrootsOrderFulfillmentRecord, RadrootsOrderIssue, + RadrootsOrderPaymentEventRecord, RadrootsOrderPaymentProjection, RadrootsOrderPaymentState, + RadrootsOrderReceiptRecord, RadrootsOrderRequestRecord, RadrootsOrderRevisionDecisionRecord, + RadrootsOrderRevisionProposalRecord, RadrootsOrderSettlementRecord, + RadrootsOrderSettlementState, RadrootsOrderStatus, canonicalize_order_decision_for_signer, + canonicalize_order_request_for_signer, radroots_order_economics_digest, + reduce_listing_inventory_accounting, reduce_order_events, }; use serde::{Deserialize, Serialize}; use serde_json::{Value, json}; @@ -178,7 +172,7 @@ struct OrderDraft { #[serde(default, skip_serializing_if = "Vec::is_empty")] items: Vec<OrderDraftItem>, #[serde(default, skip_serializing_if = "Option::is_none")] - economics: Option<RadrootsTradeOrderEconomics>, + economics: Option<RadrootsOrderEconomics>, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -282,21 +276,21 @@ struct ResolvedSellerOrderRequest { listing_addr: String, buyer_pubkey: String, seller_pubkey: String, - items: Vec<RadrootsTradeOrderItem>, - economics: RadrootsTradeOrderEconomics, + items: Vec<RadrootsOrderItem>, + economics: RadrootsOrderEconomics, } #[derive(Debug, Clone)] struct ResolvedOrderSubmitRequest { request_event_id: String, listing_event_id: Option<String>, - payload: RadrootsTradeOrderRequested, + payload: RadrootsOrderRequest, } #[derive(Debug, Clone)] struct ResolvedAccountingRequest { listing_event_id: Option<String>, - record: RadrootsActiveOrderRequestRecord, + record: RadrootsOrderRequestRecord, } #[derive(Debug, Clone)] @@ -1658,7 +1652,7 @@ pub fn fulfillment_update( let mut view = order_fulfillment_base_view(config, args, "invalid", config.output.dry_run); view.fulfillment_state = - fulfillment_state_name(RadrootsActiveTradeFulfillmentState::AcceptedNotFulfilled) + fulfillment_state_name(RadrootsOrderFulfillmentState::AcceptedNotFulfilled) .to_owned(); view.reason = Some( "`accepted_not_fulfilled` is derived from an accepted order and cannot be published" @@ -2246,20 +2240,20 @@ pub fn status( enum OrderStatusRecord { Request { listing_event_id: Option<String>, - record: RadrootsActiveOrderRequestRecord, + record: RadrootsOrderRequestRecord, }, - Decision(RadrootsActiveOrderDecisionRecord), + Decision(RadrootsOrderDecisionRecord), RevisionProposal(OrderRevisionProposalRecord), RevisionDecision(OrderRevisionDecisionRecord), - Fulfillment(RadrootsActiveOrderFulfillmentRecord), - Cancellation(RadrootsActiveOrderCancellationRecord), - Receipt(RadrootsActiveOrderReceiptRecord), - Payment(RadrootsActiveOrderPaymentRecord), - Settlement(RadrootsActiveOrderSettlementRecord), + Fulfillment(RadrootsOrderFulfillmentRecord), + Cancellation(RadrootsOrderCancellationRecord), + Receipt(RadrootsOrderReceiptRecord), + Payment(RadrootsOrderPaymentEventRecord), + Settlement(RadrootsOrderSettlementRecord), } -type OrderRevisionProposalRecord = RadrootsActiveOrderRevisionProposalRecord; -type OrderRevisionDecisionRecord = RadrootsActiveOrderRevisionDecisionRecord; +type OrderRevisionProposalRecord = RadrootsOrderRevisionProposalRecord; +type OrderRevisionDecisionRecord = RadrootsOrderRevisionDecisionRecord; #[derive(Debug, Clone)] struct OrderRevisionProposalCandidates { @@ -2271,7 +2265,7 @@ struct OrderRevisionProposalCandidates { struct OrderStatusReduction { view: OrderStatusView, fulfillment_event_id: Option<String>, - fulfillment_status: Option<RadrootsActiveTradeFulfillmentState>, + fulfillment_status: Option<RadrootsOrderFulfillmentState>, } #[derive(Debug, Clone, Copy)] @@ -2440,7 +2434,7 @@ fn order_status_reduction_from_receipt_inner( let fulfillment_records = fulfillments.clone(); let cancellation_records = cancellations.clone(); let receipt_records = receipts.clone(); - let projection = reduce_active_order_events( + let projection = reduce_order_events( order_id, requests, decisions.clone(), @@ -2616,7 +2610,7 @@ fn order_status_reduction_from_receipt_inner( } fn order_status_request_matches_context( - record: &RadrootsActiveOrderRequestRecord, + record: &RadrootsOrderRequestRecord, context: OrderStatusContext<'_>, ) -> bool { if record.payload.order_id != context.order_id { @@ -2708,7 +2702,7 @@ fn enrich_order_status_inventory( revision_decisions, fulfillments, cancellations, - Vec::<RadrootsActiveOrderReceiptRecord>::new(), + Vec::<RadrootsOrderReceiptRecord>::new(), ); let mut relevant_event_ids = Vec::new(); relevant_event_ids.push(decision_event_id); @@ -2786,13 +2780,13 @@ fn fetch_listing_accounting_requests_for_status( seller_pubkey: &str, listing_addr: &str, listing_event_id: &str, -) -> Result<Vec<RadrootsActiveOrderRequestRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderRequestRecord>, RuntimeError> { let filter = order_listing_request_filter(seller_pubkey, listing_addr)?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_ORDER_REQUEST + if event_kind_u32(&event) != KIND_ORDER_REQUEST || !event_matches_tag_value(&event, "a", listing_addr) { continue; @@ -2809,13 +2803,13 @@ fn fetch_listing_accounting_requests_for_status( fn fetch_listing_accounting_decisions_for_status( config: &RuntimeConfig, listing_addr: &str, -) -> Result<Vec<RadrootsActiveOrderDecisionRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderDecisionRecord>, RuntimeError> { let filter = order_listing_decision_filter(listing_addr)?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_ORDER_DECISION + if event_kind_u32(&event) != KIND_ORDER_DECISION || !event_matches_tag_value(&event, "a", listing_addr) { continue; @@ -2830,13 +2824,13 @@ fn fetch_listing_accounting_decisions_for_status( fn fetch_listing_accounting_revision_proposals_for_status( config: &RuntimeConfig, listing_addr: &str, -) -> Result<Vec<RadrootsActiveOrderRevisionProposalRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderRevisionProposalRecord>, RuntimeError> { let filter = order_listing_revision_proposal_filter(listing_addr)?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_ORDER_REVISION + if event_kind_u32(&event) != KIND_ORDER_REVISION_PROPOSAL || !event_matches_tag_value(&event, "a", listing_addr) { continue; @@ -2853,13 +2847,13 @@ fn fetch_listing_accounting_revision_proposals_for_status( fn fetch_listing_accounting_revision_decisions_for_status( config: &RuntimeConfig, listing_addr: &str, -) -> Result<Vec<RadrootsActiveOrderRevisionDecisionRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderRevisionDecisionRecord>, RuntimeError> { let filter = order_listing_revision_decision_filter(listing_addr)?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_ORDER_REVISION_RESPONSE + if event_kind_u32(&event) != KIND_ORDER_REVISION_DECISION || !event_matches_tag_value(&event, "a", listing_addr) { continue; @@ -2876,13 +2870,13 @@ fn fetch_listing_accounting_revision_decisions_for_status( fn fetch_listing_accounting_fulfillments_for_status( config: &RuntimeConfig, listing_addr: &str, -) -> Result<Vec<RadrootsActiveOrderFulfillmentRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderFulfillmentRecord>, RuntimeError> { let filter = order_listing_fulfillment_filter(listing_addr)?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_FULFILLMENT_UPDATE + if event_kind_u32(&event) != KIND_ORDER_FULFILLMENT_UPDATE || !event_matches_tag_value(&event, "a", listing_addr) { continue; @@ -2897,13 +2891,13 @@ fn fetch_listing_accounting_fulfillments_for_status( fn fetch_listing_accounting_cancellations_for_status( config: &RuntimeConfig, listing_addr: &str, -) -> Result<Vec<RadrootsActiveOrderCancellationRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderCancellationRecord>, RuntimeError> { let filter = order_listing_cancellation_filter(listing_addr)?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_CANCEL + if event_kind_u32(&event) != KIND_ORDER_CANCELLATION || !event_matches_tag_value(&event, "a", listing_addr) { continue; @@ -2922,7 +2916,7 @@ fn listing_inventory_issue_involves_order( event_ids: &[String], ) -> bool { match issue { - RadrootsListingInventoryAccountingIssue::InvalidActiveOrder { + RadrootsListingInventoryAccountingIssue::InvalidOrder { order_id: issue_order_id, event_ids: issue_event_ids, } => issue_order_id == order_id || issue_event_ids.iter().any(|id| event_ids.contains(id)), @@ -2945,7 +2939,7 @@ fn order_status_request_candidate( event: &RadrootsNostrEvent, context: OrderStatusContext<'_>, ) -> bool { - if event_kind_u32(event) != KIND_TRADE_ORDER_REQUEST + if event_kind_u32(event) != KIND_ORDER_REQUEST || !event_matches_tag_value(event, "d", context.order_id) { return false; @@ -2973,7 +2967,7 @@ fn order_request_candidate_matches( event: &RadrootsNostrEvent, context: OrderRequestCandidateContext<'_>, ) -> bool { - if event_kind_u32(event) != KIND_TRADE_ORDER_REQUEST + if event_kind_u32(event) != KIND_ORDER_REQUEST || !event_matches_tag_value(event, "d", context.order_id) { return false; @@ -2987,24 +2981,22 @@ fn order_status_record_from_event( event: &RadrootsNostrEvent, ) -> Result<OrderStatusRecord, RuntimeError> { match event_kind_u32(event) { - KIND_TRADE_ORDER_REQUEST => { + KIND_ORDER_REQUEST => { let event = radroots_event_from_nostr(event); - let envelope = active_trade_envelope_from_event::<RadrootsTradeOrderRequested>(&event) - .map_err(|error| { + let envelope = + order_envelope_from_event::<RadrootsOrderRequest>(&event).map_err(|error| { RuntimeError::Config(format!("decode active order request event: {error}")) })?; - if envelope.message_type != RadrootsActiveTradeMessageType::TradeOrderRequested { + if envelope.message_type != RadrootsOrderEventType::OrderRequested { return Err(RuntimeError::Config( "active order request event used the wrong message type".to_owned(), )); } - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRequested, - &event.tags, - ) - .map_err(|error| { - RuntimeError::Config(format!("decode active order request tags: {error}")) - })?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderRequested, &event.tags) + .map_err(|error| { + RuntimeError::Config(format!("decode active order request tags: {error}")) + })?; if context.counterparty_pubkey != envelope.payload.seller_pubkey { return Err(RuntimeError::Config( "active order request p tag does not match seller_pubkey".to_owned(), @@ -3023,53 +3015,47 @@ fn order_status_record_from_event( } Ok(OrderStatusRecord::Request { listing_event_id: context.listing_event.as_ref().map(|event| event.id.clone()), - record: RadrootsActiveOrderRequestRecord { + record: RadrootsOrderRequestRecord { event_id: event.id, author_pubkey: event.author, payload: envelope.payload, }, }) } - KIND_TRADE_ORDER_DECISION => { + KIND_ORDER_DECISION => { let event = radroots_event_from_nostr(event); let envelope = - active_trade_envelope_from_event::<RadrootsTradeOrderDecisionEvent>(&event) - .map_err(|error| { - RuntimeError::Config(format!("decode active order decision event: {error}")) - })?; - if envelope.message_type != RadrootsActiveTradeMessageType::TradeOrderDecision { + order_envelope_from_event::<RadrootsOrderDecision>(&event).map_err(|error| { + RuntimeError::Config(format!("decode active order decision event: {error}")) + })?; + if envelope.message_type != RadrootsOrderEventType::OrderDecision { return Err(RuntimeError::Config( "active order decision event used the wrong message type".to_owned(), )); } - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderDecision, - &event.tags, - ) - .map_err(|error| { - RuntimeError::Config(format!("decode active order decision tags: {error}")) - })?; - Ok(OrderStatusRecord::Decision( - RadrootsActiveOrderDecisionRecord { - event_id: event.id, - author_pubkey: event.author, - counterparty_pubkey: context.counterparty_pubkey, - root_event_id: context.root_event_id.unwrap_or_default(), - prev_event_id: context.prev_event_id.unwrap_or_default(), - payload: envelope.payload, - }, - )) + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderDecision, &event.tags) + .map_err(|error| { + RuntimeError::Config(format!("decode active order decision tags: {error}")) + })?; + Ok(OrderStatusRecord::Decision(RadrootsOrderDecisionRecord { + event_id: event.id, + author_pubkey: event.author, + counterparty_pubkey: context.counterparty_pubkey, + root_event_id: context.root_event_id.unwrap_or_default(), + prev_event_id: context.prev_event_id.unwrap_or_default(), + payload: envelope.payload, + })) } - KIND_TRADE_ORDER_REVISION => { + KIND_ORDER_REVISION_PROPOSAL => { let event = radroots_event_from_nostr(event); - let envelope = - active_trade_order_revision_proposal_from_event(&event).map_err(|error| { - RuntimeError::Config(format!( - "decode active order revision proposal event: {error}" - )) - })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRevisionProposed, + let envelope = order_revision_proposal_from_event(&event).map_err(|error| { + RuntimeError::Config(format!( + "decode active order revision proposal event: {error}" + )) + })?; + let context = order_event_context_from_tags( + RadrootsOrderEventType::OrderRevisionProposed, &event.tags, ) .map_err(|error| { @@ -3078,7 +3064,7 @@ fn order_status_record_from_event( )) })?; Ok(OrderStatusRecord::RevisionProposal( - RadrootsActiveOrderRevisionProposalRecord { + RadrootsOrderRevisionProposalRecord { event_id: event.id, author_pubkey: event.author, counterparty_pubkey: context.counterparty_pubkey, @@ -3088,16 +3074,15 @@ fn order_status_record_from_event( }, )) } - KIND_TRADE_ORDER_REVISION_RESPONSE => { + KIND_ORDER_REVISION_DECISION => { let event = radroots_event_from_nostr(event); - let envelope = - active_trade_order_revision_decision_from_event(&event).map_err(|error| { - RuntimeError::Config(format!( - "decode active order revision decision event: {error}" - )) - })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRevisionDecision, + let envelope = order_revision_decision_from_event(&event).map_err(|error| { + RuntimeError::Config(format!( + "decode active order revision decision event: {error}" + )) + })?; + let context = order_event_context_from_tags( + RadrootsOrderEventType::OrderRevisionDecision, &event.tags, ) .map_err(|error| { @@ -3106,7 +3091,7 @@ fn order_status_record_from_event( )) })?; Ok(OrderStatusRecord::RevisionDecision( - RadrootsActiveOrderRevisionDecisionRecord { + RadrootsOrderRevisionDecisionRecord { event_id: event.id, author_pubkey: event.author, counterparty_pubkey: context.counterparty_pubkey, @@ -3116,20 +3101,20 @@ fn order_status_record_from_event( }, )) } - KIND_TRADE_FULFILLMENT_UPDATE => { + KIND_ORDER_FULFILLMENT_UPDATE => { let event = radroots_event_from_nostr(event); - let envelope = active_trade_fulfillment_update_from_event(&event).map_err(|error| { + let envelope = order_fulfillment_update_from_event(&event).map_err(|error| { RuntimeError::Config(format!("decode active fulfillment update event: {error}")) })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeFulfillmentUpdated, + let context = order_event_context_from_tags( + RadrootsOrderEventType::FulfillmentUpdated, &event.tags, ) .map_err(|error| { RuntimeError::Config(format!("decode active fulfillment update tags: {error}")) })?; Ok(OrderStatusRecord::Fulfillment( - RadrootsActiveOrderFulfillmentRecord { + RadrootsOrderFulfillmentRecord { event_id: event.id, author_pubkey: event.author, counterparty_pubkey: context.counterparty_pubkey, @@ -3139,20 +3124,20 @@ fn order_status_record_from_event( }, )) } - KIND_TRADE_CANCEL => { + KIND_ORDER_CANCELLATION => { let event = radroots_event_from_nostr(event); - let envelope = active_trade_order_cancel_from_event(&event).map_err(|error| { + let envelope = order_cancellation_from_event(&event).map_err(|error| { RuntimeError::Config(format!("decode active order cancellation event: {error}")) })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderCancelled, - &event.tags, - ) - .map_err(|error| { - RuntimeError::Config(format!("decode active order cancellation tags: {error}")) - })?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderCancelled, &event.tags) + .map_err(|error| { + RuntimeError::Config(format!( + "decode active order cancellation tags: {error}" + )) + })?; Ok(OrderStatusRecord::Cancellation( - RadrootsActiveOrderCancellationRecord { + RadrootsOrderCancellationRecord { event_id: event.id, author_pubkey: event.author, counterparty_pubkey: context.counterparty_pubkey, @@ -3162,43 +3147,39 @@ fn order_status_record_from_event( }, )) } - KIND_TRADE_RECEIPT => { + KIND_ORDER_RECEIPT => { let event = radroots_event_from_nostr(event); - let envelope = active_trade_buyer_receipt_from_event(&event).map_err(|error| { + let envelope = order_receipt_from_event(&event).map_err(|error| { RuntimeError::Config(format!("decode active buyer receipt event: {error}")) })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeBuyerReceipt, - &event.tags, - ) - .map_err(|error| { - RuntimeError::Config(format!("decode active buyer receipt tags: {error}")) - })?; - Ok(OrderStatusRecord::Receipt( - RadrootsActiveOrderReceiptRecord { - event_id: event.id, - author_pubkey: event.author, - counterparty_pubkey: context.counterparty_pubkey, - root_event_id: context.root_event_id.unwrap_or_default(), - prev_event_id: context.prev_event_id.unwrap_or_default(), - payload: envelope.payload, - }, - )) + let context = + order_event_context_from_tags(RadrootsOrderEventType::BuyerReceipt, &event.tags) + .map_err(|error| { + RuntimeError::Config(format!("decode active buyer receipt tags: {error}")) + })?; + Ok(OrderStatusRecord::Receipt(RadrootsOrderReceiptRecord { + event_id: event.id, + author_pubkey: event.author, + counterparty_pubkey: context.counterparty_pubkey, + root_event_id: context.root_event_id.unwrap_or_default(), + prev_event_id: context.prev_event_id.unwrap_or_default(), + payload: envelope.payload, + })) } - KIND_TRADE_PAYMENT_RECORDED => { + KIND_ORDER_PAYMENT_RECORD => { let event = radroots_event_from_nostr(event); - let envelope = active_trade_payment_recorded_from_event(&event).map_err(|error| { + let envelope = order_payment_record_from_event(&event).map_err(|error| { RuntimeError::Config(format!("decode active payment recorded event: {error}")) })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradePaymentRecorded, - &event.tags, - ) - .map_err(|error| { - RuntimeError::Config(format!("decode active payment recorded tags: {error}")) - })?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::PaymentRecorded, &event.tags) + .map_err(|error| { + RuntimeError::Config(format!( + "decode active payment recorded tags: {error}" + )) + })?; Ok(OrderStatusRecord::Payment( - RadrootsActiveOrderPaymentRecord { + RadrootsOrderPaymentEventRecord { event_id: event.id, author_pubkey: event.author, counterparty_pubkey: context.counterparty_pubkey, @@ -3208,23 +3189,20 @@ fn order_status_record_from_event( }, )) } - KIND_TRADE_SETTLEMENT_DECISION => { + KIND_ORDER_SETTLEMENT_DECISION => { let event = radroots_event_from_nostr(event); - let envelope = - active_trade_settlement_decision_from_event(&event).map_err(|error| { - RuntimeError::Config(format!( - "decode active settlement decision event: {error}" - )) - })?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeSettlementDecision, + let envelope = order_settlement_decision_from_event(&event).map_err(|error| { + RuntimeError::Config(format!("decode active settlement decision event: {error}")) + })?; + let context = order_event_context_from_tags( + RadrootsOrderEventType::SettlementDecision, &event.tags, ) .map_err(|error| { RuntimeError::Config(format!("decode active settlement decision tags: {error}")) })?; Ok(OrderStatusRecord::Settlement( - RadrootsActiveOrderSettlementRecord { + RadrootsOrderSettlementRecord { event_id: event.id, author_pubkey: event.author, counterparty_pubkey: context.counterparty_pubkey, @@ -3247,7 +3225,7 @@ fn order_revision_proposals_from_events( let mut records = Vec::new(); let mut issues = Vec::new(); for event in events { - if event_kind_u32(event) != KIND_TRADE_ORDER_REVISION + if event_kind_u32(event) != KIND_ORDER_REVISION_PROPOSAL || !event_matches_tag_value(event, "d", order_id) { continue; @@ -3274,44 +3252,44 @@ fn order_revision_proposals_from_events( OrderRevisionProposalCandidates { records, issues } } -fn active_order_status_state(status: &RadrootsActiveOrderStatus) -> &'static str { +fn active_order_status_state(status: &RadrootsOrderStatus) -> &'static str { match status { - RadrootsActiveOrderStatus::Missing => "missing", - RadrootsActiveOrderStatus::Requested => "requested", - RadrootsActiveOrderStatus::Accepted => "accepted", - RadrootsActiveOrderStatus::Declined => "declined", - RadrootsActiveOrderStatus::Cancelled => "cancelled", - RadrootsActiveOrderStatus::Completed => "completed", - RadrootsActiveOrderStatus::Disputed => "disputed", - RadrootsActiveOrderStatus::Invalid => "invalid", + RadrootsOrderStatus::Missing => "missing", + RadrootsOrderStatus::Requested => "requested", + RadrootsOrderStatus::Accepted => "accepted", + RadrootsOrderStatus::Declined => "declined", + RadrootsOrderStatus::Cancelled => "cancelled", + RadrootsOrderStatus::Completed => "completed", + RadrootsOrderStatus::Disputed => "disputed", + RadrootsOrderStatus::Invalid => "invalid", } } -fn active_order_payment_state(status: &RadrootsActiveOrderPaymentState) -> &'static str { +fn active_order_payment_state(status: &RadrootsOrderPaymentState) -> &'static str { match status { - RadrootsActiveOrderPaymentState::NotRecorded => "not_recorded", - RadrootsActiveOrderPaymentState::Recorded => "recorded", - RadrootsActiveOrderPaymentState::Settled => "settled", - RadrootsActiveOrderPaymentState::Rejected => "rejected", - RadrootsActiveOrderPaymentState::Invalid => "invalid", + RadrootsOrderPaymentState::NotRecorded => "not_recorded", + RadrootsOrderPaymentState::Recorded => "recorded", + RadrootsOrderPaymentState::Settled => "settled", + RadrootsOrderPaymentState::Rejected => "rejected", + RadrootsOrderPaymentState::Invalid => "invalid", } } -fn active_order_settlement_state(status: &RadrootsActiveOrderSettlementState) -> &'static str { +fn active_order_settlement_state(status: &RadrootsOrderSettlementState) -> &'static str { match status { - RadrootsActiveOrderSettlementState::NotRequired => "not_required", - RadrootsActiveOrderSettlementState::Pending => "pending", - RadrootsActiveOrderSettlementState::Accepted => "accepted", - RadrootsActiveOrderSettlementState::Rejected => "rejected", - RadrootsActiveOrderSettlementState::Invalid => "invalid", + RadrootsOrderSettlementState::NotRequired => "not_required", + RadrootsOrderSettlementState::Pending => "pending", + RadrootsOrderSettlementState::Accepted => "accepted", + RadrootsOrderSettlementState::Rejected => "rejected", + RadrootsOrderSettlementState::Invalid => "invalid", } } -fn parse_payment_method(value: &str) -> Result<RadrootsTradePaymentMethod, RuntimeError> { +fn parse_payment_method(value: &str) -> Result<RadrootsOrderPaymentMethod, RuntimeError> { match value.trim() { - "cash" => Ok(RadrootsTradePaymentMethod::Cash), - "manual_transfer" => Ok(RadrootsTradePaymentMethod::ManualTransfer), - "other" => Ok(RadrootsTradePaymentMethod::Other), + "cash" => Ok(RadrootsOrderPaymentMethod::Cash), + "manual_transfer" => Ok(RadrootsOrderPaymentMethod::ManualTransfer), + "other" => Ok(RadrootsOrderPaymentMethod::Other), other => Err(RuntimeError::Config(format!( "unsupported payment method `{other}`" ))), @@ -3337,15 +3315,12 @@ fn parse_payment_currency(value: &str) -> Result<RadrootsCoreCurrency, RuntimeEr .map_err(|error| RuntimeError::Config(format!("payment currency is invalid: {error}"))) } -fn active_order_status_reason( - status: &RadrootsActiveOrderStatus, - order_id: &str, -) -> Option<String> { +fn active_order_status_reason(status: &RadrootsOrderStatus, order_id: &str) -> Option<String> { match status { - RadrootsActiveOrderStatus::Missing => { + RadrootsOrderStatus::Missing => { Some(format!("no active order events matched `{order_id}`")) } - RadrootsActiveOrderStatus::Invalid => Some(format!( + RadrootsOrderStatus::Invalid => Some(format!( "active order events for `{order_id}` failed reducer validation" )), _ => None, @@ -3353,10 +3328,10 @@ fn active_order_status_reason( } fn order_status_inventory_view( - status: &RadrootsActiveOrderStatus, + status: &RadrootsOrderStatus, listing_event_id: Option<String>, decision_event_id: Option<&str>, - decisions: &[RadrootsActiveOrderDecisionRecord], + decisions: &[RadrootsOrderDecisionRecord], reducer_issues: &[OrderIssueView], ) -> Option<OrderInventoryView> { let inventory_issues = reducer_issues @@ -3377,9 +3352,9 @@ fn order_status_inventory_view( .collect::<Vec<_>>(); match status { - RadrootsActiveOrderStatus::Accepted - | RadrootsActiveOrderStatus::Completed - | RadrootsActiveOrderStatus::Disputed => { + RadrootsOrderStatus::Accepted + | RadrootsOrderStatus::Completed + | RadrootsOrderStatus::Disputed => { let bins = decision_event_id .and_then(|event_id| { decisions @@ -3400,7 +3375,7 @@ fn order_status_inventory_view( issues: inventory_issues, }) } - RadrootsActiveOrderStatus::Cancelled => Some(OrderInventoryView { + RadrootsOrderStatus::Cancelled => Some(OrderInventoryView { state: if decision_event_id.is_some() { "released".to_owned() } else { @@ -3411,34 +3386,32 @@ fn order_status_inventory_view( bins: Vec::new(), issues: inventory_issues, }), - RadrootsActiveOrderStatus::Declined => Some(OrderInventoryView { + RadrootsOrderStatus::Declined => Some(OrderInventoryView { state: "not_reserved".to_owned(), listing_event_id, commitment_valid: true, bins: Vec::new(), issues: inventory_issues, }), - RadrootsActiveOrderStatus::Invalid if !inventory_issues.is_empty() => { - Some(OrderInventoryView { - state: "invalid".to_owned(), - listing_event_id, - commitment_valid: false, - bins: Vec::new(), - issues: inventory_issues, - }) - } + RadrootsOrderStatus::Invalid if !inventory_issues.is_empty() => Some(OrderInventoryView { + state: "invalid".to_owned(), + listing_event_id, + commitment_valid: false, + bins: Vec::new(), + issues: inventory_issues, + }), _ => None, } } fn order_status_fulfillment_view( - status: &RadrootsActiveOrderStatus, + status: &RadrootsOrderStatus, request_event_id: Option<String>, decision_event_id: Option<String>, fulfillment_event_id: Option<String>, fulfillment_root_event_id: Option<String>, fulfillment_prev_event_id: Option<String>, - fulfillment_status: Option<RadrootsActiveTradeFulfillmentState>, + fulfillment_status: Option<RadrootsOrderFulfillmentState>, reducer_issues: &[OrderIssueView], ) -> Option<OrderStatusFulfillmentView> { let issues = reducer_issues @@ -3459,21 +3432,20 @@ fn order_status_fulfillment_view( } if !matches!( status, - RadrootsActiveOrderStatus::Accepted - | RadrootsActiveOrderStatus::Completed - | RadrootsActiveOrderStatus::Disputed + RadrootsOrderStatus::Accepted + | RadrootsOrderStatus::Completed + | RadrootsOrderStatus::Disputed ) { return None; } let fulfillment_status = fulfillment_status?; let terminal = matches!( fulfillment_status, - RadrootsActiveTradeFulfillmentState::Delivered - | RadrootsActiveTradeFulfillmentState::SellerCancelled + RadrootsOrderFulfillmentState::Delivered | RadrootsOrderFulfillmentState::SellerCancelled ); let inventory_released = matches!( fulfillment_status, - RadrootsActiveTradeFulfillmentState::SellerCancelled + RadrootsOrderFulfillmentState::SellerCancelled ); let prev_event_id = fulfillment_prev_event_id.or_else(|| { if fulfillment_event_id.is_none() { @@ -3494,7 +3466,7 @@ fn order_status_fulfillment_view( } fn order_status_payment_view( - projection: RadrootsActiveOrderPaymentProjection, + projection: RadrootsOrderPaymentProjection, reducer_issues: &[OrderIssueView], ) -> OrderStatusPaymentView { OrderStatusPaymentView { @@ -3517,10 +3489,10 @@ fn order_status_payment_view( } fn order_status_lifecycle_view( - status: &RadrootsActiveOrderStatus, + status: &RadrootsOrderStatus, request_event_id: Option<String>, last_event_id: Option<String>, - fulfillment_status: Option<RadrootsActiveTradeFulfillmentState>, + fulfillment_status: Option<RadrootsOrderFulfillmentState>, cancellation_event_id: Option<String>, cancellation_root_event_id: Option<String>, cancellation_prev_event_id: Option<String>, @@ -3536,10 +3508,10 @@ fn order_status_lifecycle_view( let phase = order_status_lifecycle_phase(status, fulfillment_status).to_owned(); let terminal = matches!( status, - RadrootsActiveOrderStatus::Cancelled - | RadrootsActiveOrderStatus::Completed - | RadrootsActiveOrderStatus::Disputed - | RadrootsActiveOrderStatus::Invalid + RadrootsOrderStatus::Cancelled + | RadrootsOrderStatus::Completed + | RadrootsOrderStatus::Disputed + | RadrootsOrderStatus::Invalid ); let cancellation = cancellation_event_id @@ -3584,8 +3556,8 @@ fn order_status_lifecycle_view( fn order_status_revision_view( last_event_id: Option<&str>, agreement_event_id: Option<&str>, - proposals: &[RadrootsActiveOrderRevisionProposalRecord], - decisions: &[RadrootsActiveOrderRevisionDecisionRecord], + proposals: &[RadrootsOrderRevisionProposalRecord], + decisions: &[RadrootsOrderRevisionDecisionRecord], ) -> Option<OrderStatusRevisionView> { if let Some(proposal) = last_event_id .and_then(|event_id| proposals.iter().find(|record| record.event_id == event_id)) @@ -3617,14 +3589,12 @@ fn order_status_revision_view( } fn order_status_revision_view_from_decision( - decision: &RadrootsActiveOrderRevisionDecisionRecord, + decision: &RadrootsOrderRevisionDecisionRecord, agreement_event_id: Option<&str>, ) -> OrderStatusRevisionView { let (state, reason) = match &decision.payload.decision { - RadrootsTradeOrderRevisionDecision::Accepted => ("accepted", None), - RadrootsTradeOrderRevisionDecision::Declined { reason } => { - ("declined", Some(reason.clone())) - } + RadrootsOrderRevisionOutcome::Accepted => ("accepted", None), + RadrootsOrderRevisionOutcome::Declined { reason } => ("declined", Some(reason.clone())), }; OrderStatusRevisionView { state: state.to_owned(), @@ -3639,29 +3609,27 @@ fn order_status_revision_view_from_decision( } fn order_status_lifecycle_phase( - status: &RadrootsActiveOrderStatus, - fulfillment_status: Option<RadrootsActiveTradeFulfillmentState>, + status: &RadrootsOrderStatus, + fulfillment_status: Option<RadrootsOrderFulfillmentState>, ) -> &'static str { match status { - RadrootsActiveOrderStatus::Missing => "missing", - RadrootsActiveOrderStatus::Requested => "requested", - RadrootsActiveOrderStatus::Accepted => match fulfillment_status { - Some(RadrootsActiveTradeFulfillmentState::Preparing) - | Some(RadrootsActiveTradeFulfillmentState::OutForDelivery) => { - "fulfillment_in_progress" - } + RadrootsOrderStatus::Missing => "missing", + RadrootsOrderStatus::Requested => "requested", + RadrootsOrderStatus::Accepted => match fulfillment_status { + Some(RadrootsOrderFulfillmentState::Preparing) + | Some(RadrootsOrderFulfillmentState::OutForDelivery) => "fulfillment_in_progress", Some( - RadrootsActiveTradeFulfillmentState::ReadyForPickup - | RadrootsActiveTradeFulfillmentState::Delivered - | RadrootsActiveTradeFulfillmentState::SellerCancelled, + RadrootsOrderFulfillmentState::ReadyForPickup + | RadrootsOrderFulfillmentState::Delivered + | RadrootsOrderFulfillmentState::SellerCancelled, ) => "fulfilled", - Some(RadrootsActiveTradeFulfillmentState::AcceptedNotFulfilled) | None => "accepted", + Some(RadrootsOrderFulfillmentState::AcceptedNotFulfilled) | None => "accepted", }, - RadrootsActiveOrderStatus::Declined => "declined", - RadrootsActiveOrderStatus::Cancelled => "cancelled", - RadrootsActiveOrderStatus::Completed => "completed", - RadrootsActiveOrderStatus::Disputed => "disputed", - RadrootsActiveOrderStatus::Invalid => "invalid", + RadrootsOrderStatus::Declined => "declined", + RadrootsOrderStatus::Cancelled => "cancelled", + RadrootsOrderStatus::Completed => "completed", + RadrootsOrderStatus::Disputed => "disputed", + RadrootsOrderStatus::Invalid => "invalid", } } @@ -3686,10 +3654,10 @@ fn fulfillment_issue_code(code: &str) -> bool { } fn inventory_bins_from_decision( - decision: &RadrootsTradeOrderDecision, + decision: &RadrootsOrderDecisionOutcome, ) -> Vec<OrderInventoryBinView> { match decision { - RadrootsTradeOrderDecision::Accepted { + RadrootsOrderDecisionOutcome::Accepted { inventory_commitments, } => { let mut bins = inventory_commitments @@ -3705,152 +3673,138 @@ fn inventory_bins_from_decision( bins.sort_by(|left, right| left.bin_id.cmp(&right.bin_id)); bins } - RadrootsTradeOrderDecision::Declined { .. } => Vec::new(), + RadrootsOrderDecisionOutcome::Declined { .. } => Vec::new(), } } -fn active_order_reducer_issue_view(issue_value: RadrootsActiveOrderReducerIssue) -> OrderIssueView { +fn active_order_reducer_issue_view(issue_value: RadrootsOrderIssue) -> OrderIssueView { match issue_value { - RadrootsActiveOrderReducerIssue::MissingRequest => issue_with_code( + RadrootsOrderIssue::MissingRequest => issue_with_code( "missing_request", "request_event_id", "active order reducer reported missing request", ), - RadrootsActiveOrderReducerIssue::MultipleRequests { event_ids } => issue_with_events( + RadrootsOrderIssue::MultipleRequests { event_ids } => issue_with_events( "multiple_requests", "request_event_id", "active order reducer reported multiple request events", event_ids, ), - RadrootsActiveOrderReducerIssue::RequestPayloadInvalid { event_id } => issue_with_events( + RadrootsOrderIssue::RequestPayloadInvalid { event_id } => issue_with_events( "invalid_request_payload", "request_payload", "active order reducer reported invalid request payload", vec![event_id], ), - RadrootsActiveOrderReducerIssue::RequestOrderIdMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::RequestOrderIdMismatch { event_id } => issue_with_events( "request_order_id_mismatch", "order_id", "active order reducer reported request order id mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::RequestAuthorMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::RequestAuthorMismatch { event_id } => issue_with_events( "request_author_mismatch", "buyer_pubkey", "active order reducer reported request author mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::RequestListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_request_listing_address", - "listing_addr", - "active order reducer reported invalid request listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RequestSellerListingMismatch { event_id } => { - issue_with_events( - "request_seller_listing_mismatch", - "seller_pubkey", - "active order reducer reported request seller/listing mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DecisionPayloadInvalid { event_id } => issue_with_events( + RadrootsOrderIssue::RequestListingAddressInvalid { event_id } => issue_with_events( + "invalid_request_listing_address", + "listing_addr", + "active order reducer reported invalid request listing address", + vec![event_id], + ), + RadrootsOrderIssue::RequestSellerListingMismatch { event_id } => issue_with_events( + "request_seller_listing_mismatch", + "seller_pubkey", + "active order reducer reported request seller/listing mismatch", + vec![event_id], + ), + RadrootsOrderIssue::DecisionPayloadInvalid { event_id } => issue_with_events( "invalid_decision_payload", "decision_payload", "active order reducer reported invalid decision payload", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionOrderIdMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionOrderIdMismatch { event_id } => issue_with_events( "decision_order_id_mismatch", "order_id", "active order reducer reported decision order id mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionAuthorMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionAuthorMismatch { event_id } => issue_with_events( "decision_author_mismatch", "seller_pubkey", "active order reducer reported decision author mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionCounterpartyMismatch { event_id } => { - issue_with_events( - "decision_counterparty_mismatch", - "buyer_pubkey", - "active order reducer reported decision counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DecisionBuyerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionCounterpartyMismatch { event_id } => issue_with_events( + "decision_counterparty_mismatch", + "buyer_pubkey", + "active order reducer reported decision counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::DecisionBuyerMismatch { event_id } => issue_with_events( "decision_buyer_mismatch", "buyer_pubkey", "active order reducer reported decision buyer mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionSellerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionSellerMismatch { event_id } => issue_with_events( "decision_seller_mismatch", "seller_pubkey", "active order reducer reported decision seller mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_decision_listing_address", - "listing_addr", - "active order reducer reported invalid decision listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DecisionListingMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionListingAddressInvalid { event_id } => issue_with_events( + "invalid_decision_listing_address", + "listing_addr", + "active order reducer reported invalid decision listing address", + vec![event_id], + ), + RadrootsOrderIssue::DecisionListingMismatch { event_id } => issue_with_events( "decision_listing_mismatch", "listing_addr", "active order reducer reported decision listing mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionRootMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionRootMismatch { event_id } => issue_with_events( "decision_root_mismatch", "root_event_id", "active order reducer reported decision root mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DecisionPreviousMismatch { event_id } => { - issue_with_events( - "decision_previous_mismatch", - "prev_event_id", - "active order reducer reported decision previous mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DecisionMissingInventoryCommitments { event_id } => { - issue_with_events( - "missing_decision_inventory_commitments", - "inventory_commitments", - "active order reducer reported missing decision inventory commitments", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DecisionInventoryCommitmentMismatch { event_id } => { - issue_with_events( - "decision_inventory_commitment_mismatch", - "inventory_commitments", - "active order reducer reported decision inventory commitment mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DecisionMissingReason { event_id } => issue_with_events( + RadrootsOrderIssue::DecisionPreviousMismatch { event_id } => issue_with_events( + "decision_previous_mismatch", + "prev_event_id", + "active order reducer reported decision previous mismatch", + vec![event_id], + ), + RadrootsOrderIssue::DecisionMissingInventoryCommitments { event_id } => issue_with_events( + "missing_decision_inventory_commitments", + "inventory_commitments", + "active order reducer reported missing decision inventory commitments", + vec![event_id], + ), + RadrootsOrderIssue::DecisionInventoryCommitmentMismatch { event_id } => issue_with_events( + "decision_inventory_commitment_mismatch", + "inventory_commitments", + "active order reducer reported decision inventory commitment mismatch", + vec![event_id], + ), + RadrootsOrderIssue::DecisionMissingReason { event_id } => issue_with_events( "missing_decision_decline_reason", "reason", "active order reducer reported missing decision decline reason", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ConflictingDecisions { event_ids } => issue_with_events( + RadrootsOrderIssue::ConflictingDecisions { event_ids } => issue_with_events( "conflicting_decisions", "decision_event_id", "active order reducer reported conflicting decisions", event_ids, ), - RadrootsActiveOrderReducerIssue::RevisionProposalWithoutAcceptedDecision { event_id } => { + RadrootsOrderIssue::RevisionProposalWithoutAcceptedDecision { event_id } => { issue_with_events( "revision_proposal_without_accepted_decision", "revision_event_id", @@ -3858,55 +3812,43 @@ fn active_order_reducer_issue_view(issue_value: RadrootsActiveOrderReducerIssue) vec![event_id], ) } - RadrootsActiveOrderReducerIssue::RevisionProposalPayloadInvalid { event_id } => { - issue_with_events( - "invalid_revision_proposal_payload", - "revision_payload", - "active order reducer reported invalid revision proposal payload", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalOrderIdMismatch { event_id } => { - issue_with_events( - "revision_proposal_order_id_mismatch", - "order_id", - "active order reducer reported revision proposal order id mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalAuthorMismatch { event_id } => { - issue_with_events( - "revision_proposal_author_mismatch", - "seller_pubkey", - "active order reducer reported revision proposal author mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalCounterpartyMismatch { event_id } => { - issue_with_events( - "revision_proposal_counterparty_mismatch", - "buyer_pubkey", - "active order reducer reported revision proposal counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalBuyerMismatch { event_id } => { - issue_with_events( - "revision_proposal_buyer_mismatch", - "buyer_pubkey", - "active order reducer reported revision proposal buyer mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalSellerMismatch { event_id } => { - issue_with_events( - "revision_proposal_seller_mismatch", - "seller_pubkey", - "active order reducer reported revision proposal seller mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalListingAddressInvalid { event_id } => { + RadrootsOrderIssue::RevisionProposalPayloadInvalid { event_id } => issue_with_events( + "invalid_revision_proposal_payload", + "revision_payload", + "active order reducer reported invalid revision proposal payload", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalOrderIdMismatch { event_id } => issue_with_events( + "revision_proposal_order_id_mismatch", + "order_id", + "active order reducer reported revision proposal order id mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalAuthorMismatch { event_id } => issue_with_events( + "revision_proposal_author_mismatch", + "seller_pubkey", + "active order reducer reported revision proposal author mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalCounterpartyMismatch { event_id } => issue_with_events( + "revision_proposal_counterparty_mismatch", + "buyer_pubkey", + "active order reducer reported revision proposal counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalBuyerMismatch { event_id } => issue_with_events( + "revision_proposal_buyer_mismatch", + "buyer_pubkey", + "active order reducer reported revision proposal buyer mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalSellerMismatch { event_id } => issue_with_events( + "revision_proposal_seller_mismatch", + "seller_pubkey", + "active order reducer reported revision proposal seller mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalListingAddressInvalid { event_id } => { issue_with_events( "invalid_revision_proposal_listing_address", "listing_addr", @@ -3914,87 +3856,67 @@ fn active_order_reducer_issue_view(issue_value: RadrootsActiveOrderReducerIssue) vec![event_id], ) } - RadrootsActiveOrderReducerIssue::RevisionProposalListingMismatch { event_id } => { - issue_with_events( - "revision_proposal_listing_mismatch", - "listing_addr", - "active order reducer reported revision proposal listing mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalRootMismatch { event_id } => { - issue_with_events( - "revision_proposal_root_mismatch", - "root_event_id", - "active order reducer reported revision proposal root mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionProposalPreviousMismatch { event_id } => { - issue_with_events( - "revision_proposal_previous_mismatch", - "prev_event_id", - "active order reducer reported revision proposal previous mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionWithoutProposal { event_id } => { - issue_with_events( - "revision_decision_without_proposal", - "revision_decision_event_id", - "active order reducer reported revision decision without proposal", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionPayloadInvalid { event_id } => { - issue_with_events( - "invalid_revision_decision_payload", - "revision_decision_payload", - "active order reducer reported invalid revision decision payload", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionOrderIdMismatch { event_id } => { - issue_with_events( - "revision_decision_order_id_mismatch", - "order_id", - "active order reducer reported revision decision order id mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionAuthorMismatch { event_id } => { - issue_with_events( - "revision_decision_author_mismatch", - "buyer_pubkey", - "active order reducer reported revision decision author mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionCounterpartyMismatch { event_id } => { - issue_with_events( - "revision_decision_counterparty_mismatch", - "seller_pubkey", - "active order reducer reported revision decision counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionBuyerMismatch { event_id } => { - issue_with_events( - "revision_decision_buyer_mismatch", - "buyer_pubkey", - "active order reducer reported revision decision buyer mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionSellerMismatch { event_id } => { - issue_with_events( - "revision_decision_seller_mismatch", - "seller_pubkey", - "active order reducer reported revision decision seller mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionListingAddressInvalid { event_id } => { + RadrootsOrderIssue::RevisionProposalListingMismatch { event_id } => issue_with_events( + "revision_proposal_listing_mismatch", + "listing_addr", + "active order reducer reported revision proposal listing mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalRootMismatch { event_id } => issue_with_events( + "revision_proposal_root_mismatch", + "root_event_id", + "active order reducer reported revision proposal root mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionProposalPreviousMismatch { event_id } => issue_with_events( + "revision_proposal_previous_mismatch", + "prev_event_id", + "active order reducer reported revision proposal previous mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionWithoutProposal { event_id } => issue_with_events( + "revision_decision_without_proposal", + "revision_decision_event_id", + "active order reducer reported revision decision without proposal", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionPayloadInvalid { event_id } => issue_with_events( + "invalid_revision_decision_payload", + "revision_decision_payload", + "active order reducer reported invalid revision decision payload", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionOrderIdMismatch { event_id } => issue_with_events( + "revision_decision_order_id_mismatch", + "order_id", + "active order reducer reported revision decision order id mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionAuthorMismatch { event_id } => issue_with_events( + "revision_decision_author_mismatch", + "buyer_pubkey", + "active order reducer reported revision decision author mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionCounterpartyMismatch { event_id } => issue_with_events( + "revision_decision_counterparty_mismatch", + "seller_pubkey", + "active order reducer reported revision decision counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionBuyerMismatch { event_id } => issue_with_events( + "revision_decision_buyer_mismatch", + "buyer_pubkey", + "active order reducer reported revision decision buyer mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionSellerMismatch { event_id } => issue_with_events( + "revision_decision_seller_mismatch", + "seller_pubkey", + "active order reducer reported revision decision seller mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionListingAddressInvalid { event_id } => { issue_with_events( "invalid_revision_decision_listing_address", "listing_addr", @@ -4002,593 +3924,487 @@ fn active_order_reducer_issue_view(issue_value: RadrootsActiveOrderReducerIssue) vec![event_id], ) } - RadrootsActiveOrderReducerIssue::RevisionDecisionListingMismatch { event_id } => { - issue_with_events( - "revision_decision_listing_mismatch", - "listing_addr", - "active order reducer reported revision decision listing mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionRootMismatch { event_id } => { - issue_with_events( - "revision_decision_root_mismatch", - "root_event_id", - "active order reducer reported revision decision root mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionPreviousMismatch { event_id } => { - issue_with_events( - "revision_decision_previous_mismatch", - "prev_event_id", - "active order reducer reported revision decision previous mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionDecisionRevisionIdMismatch { event_id } => { - issue_with_events( - "revision_decision_revision_id_mismatch", - "revision_id", - "active order reducer reported revision decision revision id mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentWithoutAcceptedDecision { event_id } => { - issue_with_events( - "fulfillment_without_accepted_decision", - "fulfillment_event_id", - "active order reducer reported fulfillment without accepted decision", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentPayloadInvalid { event_id } => { - issue_with_events( - "invalid_fulfillment_payload", - "fulfillment_payload", - "active order reducer reported invalid fulfillment payload", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentOrderIdMismatch { event_id } => { - issue_with_events( - "fulfillment_order_id_mismatch", - "order_id", - "active order reducer reported fulfillment order id mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentAuthorMismatch { event_id } => { - issue_with_events( - "fulfillment_author_mismatch", - "seller_pubkey", - "active order reducer reported fulfillment author mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentCounterpartyMismatch { event_id } => { - issue_with_events( - "fulfillment_counterparty_mismatch", - "buyer_pubkey", - "active order reducer reported fulfillment counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentBuyerMismatch { event_id } => { - issue_with_events( - "fulfillment_buyer_mismatch", - "buyer_pubkey", - "active order reducer reported fulfillment buyer mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentSellerMismatch { event_id } => { - issue_with_events( - "fulfillment_seller_mismatch", - "seller_pubkey", - "active order reducer reported fulfillment seller mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_fulfillment_listing_address", - "listing_addr", - "active order reducer reported invalid fulfillment listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentListingMismatch { event_id } => { - issue_with_events( - "fulfillment_listing_mismatch", - "listing_addr", - "active order reducer reported fulfillment listing mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentRootMismatch { event_id } => issue_with_events( - "fulfillment_root_mismatch", + RadrootsOrderIssue::RevisionDecisionListingMismatch { event_id } => issue_with_events( + "revision_decision_listing_mismatch", + "listing_addr", + "active order reducer reported revision decision listing mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionRootMismatch { event_id } => issue_with_events( + "revision_decision_root_mismatch", "root_event_id", - "active order reducer reported fulfillment root mismatch", + "active order reducer reported revision decision root mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::FulfillmentPreviousMismatch { event_id } => { - issue_with_events( - "fulfillment_previous_mismatch", - "prev_event_id", - "active order reducer reported fulfillment previous mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentStatusNotPublishable { event_id } => { - issue_with_events( - "fulfillment_status_not_publishable", - "fulfillment_state", - "active order reducer reported non-publishable fulfillment status", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::FulfillmentUnsupportedTransition { event_id } => { - issue_with_events( - "fulfillment_unsupported_transition", - "fulfillment_state", - "active order reducer reported unsupported fulfillment transition", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::ForkedFulfillments { event_ids } => issue_with_events( - "forked_fulfillments", + RadrootsOrderIssue::RevisionDecisionPreviousMismatch { event_id } => issue_with_events( + "revision_decision_previous_mismatch", + "prev_event_id", + "active order reducer reported revision decision previous mismatch", + vec![event_id], + ), + RadrootsOrderIssue::RevisionDecisionRevisionIdMismatch { event_id } => issue_with_events( + "revision_decision_revision_id_mismatch", + "revision_id", + "active order reducer reported revision decision revision id mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentWithoutAcceptedDecision { event_id } => issue_with_events( + "fulfillment_without_accepted_decision", "fulfillment_event_id", - "active order reducer reported forked fulfillment updates", - event_ids, + "active order reducer reported fulfillment without accepted decision", + vec![event_id], ), - RadrootsActiveOrderReducerIssue::CancellationWithoutCancellableOrder { event_id } => { - issue_with_events( - "cancellation_without_cancellable_order", - "cancellation_event_id", - "active order reducer reported cancellation without cancellable order", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationPayloadInvalid { event_id } => { - issue_with_events( - "invalid_cancellation_payload", - "cancellation_payload", - "active order reducer reported invalid cancellation payload", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationOrderIdMismatch { event_id } => { - issue_with_events( - "cancellation_order_id_mismatch", - "order_id", - "active order reducer reported cancellation order id mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationAuthorMismatch { event_id } => { - issue_with_events( - "cancellation_author_mismatch", - "buyer_pubkey", - "active order reducer reported cancellation author mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationCounterpartyMismatch { event_id } => { - issue_with_events( - "cancellation_counterparty_mismatch", - "seller_pubkey", - "active order reducer reported cancellation counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationBuyerMismatch { event_id } => { - issue_with_events( - "cancellation_buyer_mismatch", - "buyer_pubkey", - "active order reducer reported cancellation buyer mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationSellerMismatch { event_id } => { - issue_with_events( - "cancellation_seller_mismatch", - "seller_pubkey", - "active order reducer reported cancellation seller mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_cancellation_listing_address", - "listing_addr", - "active order reducer reported invalid cancellation listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationListingMismatch { event_id } => { - issue_with_events( - "cancellation_listing_mismatch", - "listing_addr", - "active order reducer reported cancellation listing mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationRootMismatch { event_id } => { - issue_with_events( - "cancellation_root_mismatch", - "root_event_id", - "active order reducer reported cancellation root mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationPreviousMismatch { event_id } => { - issue_with_events( - "cancellation_previous_mismatch", - "prev_event_id", - "active order reducer reported cancellation previous mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::CancellationAfterFulfillment { event_id } => { - issue_with_events( - "cancellation_after_fulfillment", - "fulfillment_event_id", - "active order reducer reported cancellation after fulfillment", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::ReceiptWithoutEligibleFulfillment { event_id } => { - issue_with_events( - "receipt_without_eligible_fulfillment", - "receipt_event_id", - "active order reducer reported receipt without eligible fulfillment", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::ReceiptPayloadInvalid { event_id } => issue_with_events( + RadrootsOrderIssue::FulfillmentPayloadInvalid { event_id } => issue_with_events( + "invalid_fulfillment_payload", + "fulfillment_payload", + "active order reducer reported invalid fulfillment payload", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentOrderIdMismatch { event_id } => issue_with_events( + "fulfillment_order_id_mismatch", + "order_id", + "active order reducer reported fulfillment order id mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentAuthorMismatch { event_id } => issue_with_events( + "fulfillment_author_mismatch", + "seller_pubkey", + "active order reducer reported fulfillment author mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentCounterpartyMismatch { event_id } => issue_with_events( + "fulfillment_counterparty_mismatch", + "buyer_pubkey", + "active order reducer reported fulfillment counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentBuyerMismatch { event_id } => issue_with_events( + "fulfillment_buyer_mismatch", + "buyer_pubkey", + "active order reducer reported fulfillment buyer mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentSellerMismatch { event_id } => issue_with_events( + "fulfillment_seller_mismatch", + "seller_pubkey", + "active order reducer reported fulfillment seller mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentListingAddressInvalid { event_id } => issue_with_events( + "invalid_fulfillment_listing_address", + "listing_addr", + "active order reducer reported invalid fulfillment listing address", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentListingMismatch { event_id } => issue_with_events( + "fulfillment_listing_mismatch", + "listing_addr", + "active order reducer reported fulfillment listing mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentRootMismatch { event_id } => issue_with_events( + "fulfillment_root_mismatch", + "root_event_id", + "active order reducer reported fulfillment root mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentPreviousMismatch { event_id } => issue_with_events( + "fulfillment_previous_mismatch", + "prev_event_id", + "active order reducer reported fulfillment previous mismatch", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentStatusNotPublishable { event_id } => issue_with_events( + "fulfillment_status_not_publishable", + "fulfillment_state", + "active order reducer reported non-publishable fulfillment status", + vec![event_id], + ), + RadrootsOrderIssue::FulfillmentUnsupportedTransition { event_id } => issue_with_events( + "fulfillment_unsupported_transition", + "fulfillment_state", + "active order reducer reported unsupported fulfillment transition", + vec![event_id], + ), + RadrootsOrderIssue::ForkedFulfillments { event_ids } => issue_with_events( + "forked_fulfillments", + "fulfillment_event_id", + "active order reducer reported forked fulfillment updates", + event_ids, + ), + RadrootsOrderIssue::CancellationWithoutCancellableOrder { event_id } => issue_with_events( + "cancellation_without_cancellable_order", + "cancellation_event_id", + "active order reducer reported cancellation without cancellable order", + vec![event_id], + ), + RadrootsOrderIssue::CancellationPayloadInvalid { event_id } => issue_with_events( + "invalid_cancellation_payload", + "cancellation_payload", + "active order reducer reported invalid cancellation payload", + vec![event_id], + ), + RadrootsOrderIssue::CancellationOrderIdMismatch { event_id } => issue_with_events( + "cancellation_order_id_mismatch", + "order_id", + "active order reducer reported cancellation order id mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationAuthorMismatch { event_id } => issue_with_events( + "cancellation_author_mismatch", + "buyer_pubkey", + "active order reducer reported cancellation author mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationCounterpartyMismatch { event_id } => issue_with_events( + "cancellation_counterparty_mismatch", + "seller_pubkey", + "active order reducer reported cancellation counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationBuyerMismatch { event_id } => issue_with_events( + "cancellation_buyer_mismatch", + "buyer_pubkey", + "active order reducer reported cancellation buyer mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationSellerMismatch { event_id } => issue_with_events( + "cancellation_seller_mismatch", + "seller_pubkey", + "active order reducer reported cancellation seller mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationListingAddressInvalid { event_id } => issue_with_events( + "invalid_cancellation_listing_address", + "listing_addr", + "active order reducer reported invalid cancellation listing address", + vec![event_id], + ), + RadrootsOrderIssue::CancellationListingMismatch { event_id } => issue_with_events( + "cancellation_listing_mismatch", + "listing_addr", + "active order reducer reported cancellation listing mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationRootMismatch { event_id } => issue_with_events( + "cancellation_root_mismatch", + "root_event_id", + "active order reducer reported cancellation root mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationPreviousMismatch { event_id } => issue_with_events( + "cancellation_previous_mismatch", + "prev_event_id", + "active order reducer reported cancellation previous mismatch", + vec![event_id], + ), + RadrootsOrderIssue::CancellationAfterFulfillment { event_id } => issue_with_events( + "cancellation_after_fulfillment", + "fulfillment_event_id", + "active order reducer reported cancellation after fulfillment", + vec![event_id], + ), + RadrootsOrderIssue::ReceiptWithoutEligibleFulfillment { event_id } => issue_with_events( + "receipt_without_eligible_fulfillment", + "receipt_event_id", + "active order reducer reported receipt without eligible fulfillment", + vec![event_id], + ), + RadrootsOrderIssue::ReceiptPayloadInvalid { event_id } => issue_with_events( "invalid_receipt_payload", "receipt_payload", "active order reducer reported invalid receipt payload", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptOrderIdMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptOrderIdMismatch { event_id } => issue_with_events( "receipt_order_id_mismatch", "order_id", "active order reducer reported receipt order id mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptAuthorMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptAuthorMismatch { event_id } => issue_with_events( "receipt_author_mismatch", "buyer_pubkey", "active order reducer reported receipt author mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptCounterpartyMismatch { event_id } => { - issue_with_events( - "receipt_counterparty_mismatch", - "seller_pubkey", - "active order reducer reported receipt counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::ReceiptBuyerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptCounterpartyMismatch { event_id } => issue_with_events( + "receipt_counterparty_mismatch", + "seller_pubkey", + "active order reducer reported receipt counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::ReceiptBuyerMismatch { event_id } => issue_with_events( "receipt_buyer_mismatch", "buyer_pubkey", "active order reducer reported receipt buyer mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptSellerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptSellerMismatch { event_id } => issue_with_events( "receipt_seller_mismatch", "seller_pubkey", "active order reducer reported receipt seller mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_receipt_listing_address", - "listing_addr", - "active order reducer reported invalid receipt listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::ReceiptListingMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptListingAddressInvalid { event_id } => issue_with_events( + "invalid_receipt_listing_address", + "listing_addr", + "active order reducer reported invalid receipt listing address", + vec![event_id], + ), + RadrootsOrderIssue::ReceiptListingMismatch { event_id } => issue_with_events( "receipt_listing_mismatch", "listing_addr", "active order reducer reported receipt listing mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptRootMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptRootMismatch { event_id } => issue_with_events( "receipt_root_mismatch", "root_event_id", "active order reducer reported receipt root mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::ReceiptPreviousMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::ReceiptPreviousMismatch { event_id } => issue_with_events( "receipt_previous_mismatch", "prev_event_id", "active order reducer reported receipt previous mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentWithoutAcceptedAgreement { event_id } => { - issue_with_events( - "payment_without_accepted_agreement", - "payment_event_id", - "active order reducer reported payment without accepted agreement", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::PaymentPayloadInvalid { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentWithoutAcceptedAgreement { event_id } => issue_with_events( + "payment_without_accepted_agreement", + "payment_event_id", + "active order reducer reported payment without accepted agreement", + vec![event_id], + ), + RadrootsOrderIssue::PaymentPayloadInvalid { event_id } => issue_with_events( "invalid_payment_payload", "payment_payload", "active order reducer reported invalid payment payload", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentOrderIdMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentOrderIdMismatch { event_id } => issue_with_events( "payment_order_id_mismatch", "order_id", "active order reducer reported payment order id mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentAuthorMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentAuthorMismatch { event_id } => issue_with_events( "payment_author_mismatch", "buyer_pubkey", "active order reducer reported payment author mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentCounterpartyMismatch { event_id } => { - issue_with_events( - "payment_counterparty_mismatch", - "seller_pubkey", - "active order reducer reported payment counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::PaymentBuyerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentCounterpartyMismatch { event_id } => issue_with_events( + "payment_counterparty_mismatch", + "seller_pubkey", + "active order reducer reported payment counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::PaymentBuyerMismatch { event_id } => issue_with_events( "payment_buyer_mismatch", "buyer_pubkey", "active order reducer reported payment buyer mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentSellerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentSellerMismatch { event_id } => issue_with_events( "payment_seller_mismatch", "seller_pubkey", "active order reducer reported payment seller mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_payment_listing_address", - "listing_addr", - "active order reducer reported invalid payment listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::PaymentListingMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentListingAddressInvalid { event_id } => issue_with_events( + "invalid_payment_listing_address", + "listing_addr", + "active order reducer reported invalid payment listing address", + vec![event_id], + ), + RadrootsOrderIssue::PaymentListingMismatch { event_id } => issue_with_events( "payment_listing_mismatch", "listing_addr", "active order reducer reported payment listing mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentRootMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentRootMismatch { event_id } => issue_with_events( "payment_root_mismatch", "root_event_id", "active order reducer reported payment root mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentPreviousMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentPreviousMismatch { event_id } => issue_with_events( "payment_previous_mismatch", "prev_event_id", "active order reducer reported payment previous mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentAgreementMismatch { event_id } => { - issue_with_events( - "payment_agreement_mismatch", - "agreement_event_id", - "active order reducer reported payment agreement mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::PaymentQuoteMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentAgreementMismatch { event_id } => issue_with_events( + "payment_agreement_mismatch", + "agreement_event_id", + "active order reducer reported payment agreement mismatch", + vec![event_id], + ), + RadrootsOrderIssue::PaymentQuoteMismatch { event_id } => issue_with_events( "payment_quote_mismatch", "quote_id", "active order reducer reported payment quote mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentQuoteVersionMismatch { event_id } => { - issue_with_events( - "payment_quote_version_mismatch", - "quote_version", - "active order reducer reported payment quote version mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::PaymentEconomicsDigestMismatch { event_id } => { - issue_with_events( - "payment_economics_digest_mismatch", - "economics_digest", - "active order reducer reported payment economics digest mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::PaymentAmountMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentQuoteVersionMismatch { event_id } => issue_with_events( + "payment_quote_version_mismatch", + "quote_version", + "active order reducer reported payment quote version mismatch", + vec![event_id], + ), + RadrootsOrderIssue::PaymentEconomicsDigestMismatch { event_id } => issue_with_events( + "payment_economics_digest_mismatch", + "economics_digest", + "active order reducer reported payment economics digest mismatch", + vec![event_id], + ), + RadrootsOrderIssue::PaymentAmountMismatch { event_id } => issue_with_events( "payment_amount_mismatch", "amount", "active order reducer reported payment amount mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentCurrencyMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentCurrencyMismatch { event_id } => issue_with_events( "payment_currency_mismatch", "currency", "active order reducer reported payment currency mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::PaymentAfterCancellation { event_id } => { - issue_with_events( - "payment_after_cancellation", - "payment_event_id", - "active order reducer reported payment after cancellation", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::RevisionAfterPayment { event_id } => issue_with_events( + RadrootsOrderIssue::PaymentAfterCancellation { event_id } => issue_with_events( + "payment_after_cancellation", + "payment_event_id", + "active order reducer reported payment after cancellation", + vec![event_id], + ), + RadrootsOrderIssue::RevisionAfterPayment { event_id } => issue_with_events( "revision_after_payment", "revision_event_id", "active order reducer reported revision after payment", vec![event_id], ), - RadrootsActiveOrderReducerIssue::DuplicatePayments { event_ids } => issue_with_events( + RadrootsOrderIssue::DuplicatePayments { event_ids } => issue_with_events( "duplicate_payments", "payment_event_id", "active order reducer reported duplicate payment events", event_ids, ), - RadrootsActiveOrderReducerIssue::SettlementWithoutValidPayment { event_id } => { - issue_with_events( - "settlement_without_valid_payment", - "settlement_event_id", - "active order reducer reported settlement without valid payment", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementPayloadInvalid { event_id } => { - issue_with_events( - "invalid_settlement_payload", - "settlement_payload", - "active order reducer reported invalid settlement payload", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementOrderIdMismatch { event_id } => { - issue_with_events( - "settlement_order_id_mismatch", - "order_id", - "active order reducer reported settlement order id mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementAuthorMismatch { event_id } => { - issue_with_events( - "settlement_author_mismatch", - "seller_pubkey", - "active order reducer reported settlement author mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementCounterpartyMismatch { event_id } => { - issue_with_events( - "settlement_counterparty_mismatch", - "buyer_pubkey", - "active order reducer reported settlement counterparty mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementBuyerMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::SettlementWithoutValidPayment { event_id } => issue_with_events( + "settlement_without_valid_payment", + "settlement_event_id", + "active order reducer reported settlement without valid payment", + vec![event_id], + ), + RadrootsOrderIssue::SettlementPayloadInvalid { event_id } => issue_with_events( + "invalid_settlement_payload", + "settlement_payload", + "active order reducer reported invalid settlement payload", + vec![event_id], + ), + RadrootsOrderIssue::SettlementOrderIdMismatch { event_id } => issue_with_events( + "settlement_order_id_mismatch", + "order_id", + "active order reducer reported settlement order id mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementAuthorMismatch { event_id } => issue_with_events( + "settlement_author_mismatch", + "seller_pubkey", + "active order reducer reported settlement author mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementCounterpartyMismatch { event_id } => issue_with_events( + "settlement_counterparty_mismatch", + "buyer_pubkey", + "active order reducer reported settlement counterparty mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementBuyerMismatch { event_id } => issue_with_events( "settlement_buyer_mismatch", "buyer_pubkey", "active order reducer reported settlement buyer mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::SettlementSellerMismatch { event_id } => { - issue_with_events( - "settlement_seller_mismatch", - "seller_pubkey", - "active order reducer reported settlement seller mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementListingAddressInvalid { event_id } => { - issue_with_events( - "invalid_settlement_listing_address", - "listing_addr", - "active order reducer reported invalid settlement listing address", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementListingMismatch { event_id } => { - issue_with_events( - "settlement_listing_mismatch", - "listing_addr", - "active order reducer reported settlement listing mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementRootMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::SettlementSellerMismatch { event_id } => issue_with_events( + "settlement_seller_mismatch", + "seller_pubkey", + "active order reducer reported settlement seller mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementListingAddressInvalid { event_id } => issue_with_events( + "invalid_settlement_listing_address", + "listing_addr", + "active order reducer reported invalid settlement listing address", + vec![event_id], + ), + RadrootsOrderIssue::SettlementListingMismatch { event_id } => issue_with_events( + "settlement_listing_mismatch", + "listing_addr", + "active order reducer reported settlement listing mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementRootMismatch { event_id } => issue_with_events( "settlement_root_mismatch", "root_event_id", "active order reducer reported settlement root mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::SettlementPreviousMismatch { event_id } => { - issue_with_events( - "settlement_previous_mismatch", - "prev_event_id", - "active order reducer reported settlement previous mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementPaymentEventMismatch { event_id } => { - issue_with_events( - "settlement_payment_event_mismatch", - "payment_event_id", - "active order reducer reported settlement payment event mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementAgreementMismatch { event_id } => { - issue_with_events( - "settlement_agreement_mismatch", - "agreement_event_id", - "active order reducer reported settlement agreement mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementQuoteMismatch { event_id } => issue_with_events( + RadrootsOrderIssue::SettlementPreviousMismatch { event_id } => issue_with_events( + "settlement_previous_mismatch", + "prev_event_id", + "active order reducer reported settlement previous mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementPaymentEventMismatch { event_id } => issue_with_events( + "settlement_payment_event_mismatch", + "payment_event_id", + "active order reducer reported settlement payment event mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementAgreementMismatch { event_id } => issue_with_events( + "settlement_agreement_mismatch", + "agreement_event_id", + "active order reducer reported settlement agreement mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementQuoteMismatch { event_id } => issue_with_events( "settlement_quote_mismatch", "quote_id", "active order reducer reported settlement quote mismatch", vec![event_id], ), - RadrootsActiveOrderReducerIssue::SettlementQuoteVersionMismatch { event_id } => { - issue_with_events( - "settlement_quote_version_mismatch", - "quote_version", - "active order reducer reported settlement quote version mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementEconomicsDigestMismatch { event_id } => { - issue_with_events( - "settlement_economics_digest_mismatch", - "economics_digest", - "active order reducer reported settlement economics digest mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementAmountMismatch { event_id } => { - issue_with_events( - "settlement_amount_mismatch", - "amount", - "active order reducer reported settlement amount mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::SettlementCurrencyMismatch { event_id } => { - issue_with_events( - "settlement_currency_mismatch", - "currency", - "active order reducer reported settlement currency mismatch", - vec![event_id], - ) - } - RadrootsActiveOrderReducerIssue::DuplicateSettlements { event_ids } => issue_with_events( + RadrootsOrderIssue::SettlementQuoteVersionMismatch { event_id } => issue_with_events( + "settlement_quote_version_mismatch", + "quote_version", + "active order reducer reported settlement quote version mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementEconomicsDigestMismatch { event_id } => issue_with_events( + "settlement_economics_digest_mismatch", + "economics_digest", + "active order reducer reported settlement economics digest mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementAmountMismatch { event_id } => issue_with_events( + "settlement_amount_mismatch", + "amount", + "active order reducer reported settlement amount mismatch", + vec![event_id], + ), + RadrootsOrderIssue::SettlementCurrencyMismatch { event_id } => issue_with_events( + "settlement_currency_mismatch", + "currency", + "active order reducer reported settlement currency mismatch", + vec![event_id], + ), + RadrootsOrderIssue::DuplicateSettlements { event_ids } => issue_with_events( "duplicate_settlements", "settlement_event_id", "active order reducer reported duplicate settlement events", event_ids, ), - RadrootsActiveOrderReducerIssue::ForkedLifecycle { event_ids } => issue_with_events( + RadrootsOrderIssue::ForkedLifecycle { event_ids } => issue_with_events( "forked_lifecycle", "event_id", "active order reducer reported forked lifecycle events", @@ -5030,10 +4846,10 @@ fn order_settlement_base_view( const fn settlement_decision_protocol( decision: OrderSettlementDecisionArg, -) -> RadrootsTradeSettlementDecision { +) -> RadrootsOrderSettlementOutcome { match decision { - OrderSettlementDecisionArg::Accept => RadrootsTradeSettlementDecision::Accepted, - OrderSettlementDecisionArg::Reject => RadrootsTradeSettlementDecision::Rejected, + OrderSettlementDecisionArg::Accept => RadrootsOrderSettlementOutcome::Accepted, + OrderSettlementDecisionArg::Reject => RadrootsOrderSettlementOutcome::Rejected, } } @@ -5115,7 +4931,7 @@ fn apply_order_payment_status(view: &mut OrderPaymentView, status: &OrderStatusV if let Some(economics) = status.economics.as_ref() { view.quote_id = Some(economics.quote_id.clone()); view.quote_version = Some(economics.quote_version); - view.economics_digest = radroots_trade_order_economics_digest(economics).ok(); + view.economics_digest = radroots_order_economics_digest(economics).ok(); view.amount = Some(economics.total.amount); view.currency = Some(economics.total.currency); } @@ -5151,7 +4967,7 @@ fn apply_order_settlement_status(view: &mut OrderSettlementView, status: &OrderS view.event_kind = payment .settlement_event_id .as_ref() - .map(|_| KIND_TRADE_SETTLEMENT_DECISION); + .map(|_| KIND_ORDER_SETTLEMENT_DECISION); view.agreement_event_id = payment.agreement_event_id.clone(); view.prev_event_id = payment.payment_event_id.clone(); view.quote_id = payment.quote_id.clone(); @@ -5243,7 +5059,7 @@ fn order_cancellation_preflight_view_from_status( .lifecycle .as_ref() .and_then(|lifecycle| lifecycle.event_id.clone()); - view.event_kind = Some(KIND_TRADE_CANCEL); + view.event_kind = Some(KIND_ORDER_CANCELLATION); } view.reason = Some(match state { "missing" => format!("no active order events matched `{}`", args.key), @@ -5356,7 +5172,7 @@ fn order_receipt_preflight_view_from_status( .lifecycle .as_ref() .and_then(|lifecycle| lifecycle.event_id.clone()); - view.event_kind = Some(KIND_TRADE_RECEIPT); + view.event_kind = Some(KIND_ORDER_RECEIPT); if let Some(receipt) = status .lifecycle .as_ref() @@ -5527,7 +5343,7 @@ fn order_payment_preflight_view_from_status( view.event_kind = payment .payment_event_id .as_ref() - .map(|_| KIND_TRADE_PAYMENT_RECORDED); + .map(|_| KIND_ORDER_PAYMENT_RECORD); view.quote_id = payment.quote_id.clone().or(view.quote_id); view.quote_version = payment.quote_version.or(view.quote_version); view.economics_digest = payment.economics_digest.clone().or(view.economics_digest); @@ -5820,7 +5636,7 @@ fn order_fulfillment_preflight_view_from_status( config: &RuntimeConfig, args: &OrderFulfillmentArgs, status: &OrderStatusView, - current_fulfillment_status: Option<RadrootsActiveTradeFulfillmentState>, + current_fulfillment_status: Option<RadrootsOrderFulfillmentState>, current_fulfillment_event_id: Option<&str>, ) -> Option<OrderFulfillmentView> { let state = match status.state.as_str() { @@ -5828,8 +5644,8 @@ fn order_fulfillment_preflight_view_from_status( if matches!( current_fulfillment_status, Some( - RadrootsActiveTradeFulfillmentState::Delivered - | RadrootsActiveTradeFulfillmentState::SellerCancelled + RadrootsOrderFulfillmentState::Delivered + | RadrootsOrderFulfillmentState::SellerCancelled ) ) { "invalid" @@ -5859,8 +5675,8 @@ fn order_fulfillment_preflight_view_from_status( if matches!( current_fulfillment_status, Some( - RadrootsActiveTradeFulfillmentState::Delivered - | RadrootsActiveTradeFulfillmentState::SellerCancelled + RadrootsOrderFulfillmentState::Delivered + | RadrootsOrderFulfillmentState::SellerCancelled ) ) => { @@ -6078,7 +5894,7 @@ fn order_decision_preflight_view_from_status( apply_order_decision_status(&mut view, status); if let Some(decision_event_id) = &status.decision_event_id { view.event_id = Some(decision_event_id.clone()); - view.event_kind = Some(KIND_TRADE_ORDER_DECISION); + view.event_kind = Some(KIND_ORDER_DECISION); } view.reason = Some(match status.state.as_str() { "accepted" | "declined" => format!( @@ -6265,7 +6081,7 @@ fn order_revision_preflight_view_from_status( apply_order_revision_status(&mut view, status); if let Some(record) = pending_revision { view.event_id = Some(record.event_id.clone()); - view.event_kind = Some(KIND_TRADE_ORDER_REVISION); + view.event_kind = Some(KIND_ORDER_REVISION_PROPOSAL); view.revision_id = Some(record.payload.revision_id.clone()); } view.reason = Some(match state { @@ -6400,7 +6216,7 @@ fn order_revision_decision_preflight_view_from_status( if let Some(record) = pending_revision { apply_order_revision_decision_proposal(&mut view, record); view.event_id = Some(record.event_id.clone()); - view.event_kind = Some(KIND_TRADE_ORDER_REVISION); + view.event_kind = Some(KIND_ORDER_REVISION_PROPOSAL); } view.reason = Some(match state { "missing" if status.state == "accepted" => format!( @@ -6587,7 +6403,7 @@ fn order_accept_inventory_preflight_view( revision_decisions, fulfillments, cancellations, - Vec::<RadrootsActiveOrderReceiptRecord>::new(), + Vec::<RadrootsOrderReceiptRecord>::new(), ); Ok(order_accept_inventory_preflight_view_from_projection( config, args, request, resolution, status, projection, @@ -6746,7 +6562,7 @@ fn current_inventory_listing_from_receipt( } fn current_inventory_listing_from_parts( - parsed: RadrootsTradeListingAddress, + parsed: RadrootsOrderListingAddress, receipt: DirectRelayFetchReceipt, ) -> Result<Option<ResolvedInventoryListing>, RuntimeError> { let mut candidates = Vec::new(); @@ -6829,7 +6645,7 @@ fn fetch_listing_accounting_requests( .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_ORDER_REQUEST + if event_kind_u32(&event) != KIND_ORDER_REQUEST || !event_matches_tag_value(&event, "a", request.listing_addr.as_str()) { continue; @@ -6846,13 +6662,13 @@ fn fetch_listing_accounting_requests( fn fetch_listing_accounting_decisions( config: &RuntimeConfig, request: &ResolvedSellerOrderRequest, -) -> Result<Vec<RadrootsActiveOrderDecisionRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderDecisionRecord>, RuntimeError> { let filter = order_listing_decision_filter(request.listing_addr.as_str())?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_ORDER_DECISION + if event_kind_u32(&event) != KIND_ORDER_DECISION || !event_matches_tag_value(&event, "a", request.listing_addr.as_str()) { continue; @@ -6867,13 +6683,13 @@ fn fetch_listing_accounting_decisions( fn fetch_listing_accounting_fulfillments( config: &RuntimeConfig, request: &ResolvedSellerOrderRequest, -) -> Result<Vec<RadrootsActiveOrderFulfillmentRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderFulfillmentRecord>, RuntimeError> { let filter = order_listing_fulfillment_filter(request.listing_addr.as_str())?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_FULFILLMENT_UPDATE + if event_kind_u32(&event) != KIND_ORDER_FULFILLMENT_UPDATE || !event_matches_tag_value(&event, "a", request.listing_addr.as_str()) { continue; @@ -6888,13 +6704,13 @@ fn fetch_listing_accounting_fulfillments( fn fetch_listing_accounting_cancellations( config: &RuntimeConfig, request: &ResolvedSellerOrderRequest, -) -> Result<Vec<RadrootsActiveOrderCancellationRecord>, RuntimeError> { +) -> Result<Vec<RadrootsOrderCancellationRecord>, RuntimeError> { let filter = order_listing_cancellation_filter(request.listing_addr.as_str())?; let receipt = fetch_events_from_relays(&config.relay.urls, filter) .map_err(|error| RuntimeError::Network(error.to_string()))?; let mut records = Vec::new(); for event in receipt.events { - if event_kind_u32(&event) != KIND_TRADE_CANCEL + if event_kind_u32(&event) != KIND_ORDER_CANCELLATION || !event_matches_tag_value(&event, "a", request.listing_addr.as_str()) { continue; @@ -6911,16 +6727,14 @@ fn listing_accounting_request_from_event( event: &RadrootsNostrEvent, ) -> Result<ResolvedAccountingRequest, RuntimeError> { let event = radroots_event_from_nostr(event); - let envelope = active_trade_order_request_from_event(&event) + let envelope = order_request_from_event(&event) .map_err(|error| RuntimeError::Config(format!("decode order request event: {error}")))?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRequested, - &event.tags, - ) - .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderRequested, &event.tags) + .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; Ok(ResolvedAccountingRequest { listing_event_id: context.listing_event.as_ref().map(|event| event.id.clone()), - record: RadrootsActiveOrderRequestRecord { + record: RadrootsOrderRequestRecord { event_id: event.id, author_pubkey: event.author, payload: envelope.payload, @@ -6930,11 +6744,11 @@ fn listing_accounting_request_from_event( fn active_request_record_from_resolved( request: &ResolvedSellerOrderRequest, -) -> RadrootsActiveOrderRequestRecord { - RadrootsActiveOrderRequestRecord { +) -> RadrootsOrderRequestRecord { + RadrootsOrderRequestRecord { event_id: request.request_event_id.clone(), author_pubkey: request.buyer_pubkey.clone(), - payload: RadrootsTradeOrderRequested { + payload: RadrootsOrderRequest { order_id: request.order_id.clone(), listing_addr: request.listing_addr.clone(), buyer_pubkey: request.buyer_pubkey.clone(), @@ -6947,14 +6761,13 @@ fn active_request_record_from_resolved( fn proposed_accept_decision_record( request: &ResolvedSellerOrderRequest, -) -> Result<RadrootsActiveOrderDecisionRecord, RuntimeError> { +) -> Result<RadrootsOrderDecisionRecord, RuntimeError> { let payload = accepted_order_decision_payload_from_request(request); - let payload = - canonicalize_active_order_decision_for_signer(payload, request.seller_pubkey.as_str()) - .map_err(|error| { - RuntimeError::Config(format!("canonicalize order decision: {error}")) - })?; - Ok(RadrootsActiveOrderDecisionRecord { + let payload = canonicalize_order_decision_for_signer(payload, request.seller_pubkey.as_str()) + .map_err(|error| { + RuntimeError::Config(format!("canonicalize order decision: {error}")) + })?; + Ok(RadrootsOrderDecisionRecord { event_id: format!("pending_accept:{}", request.order_id), author_pubkey: request.seller_pubkey.clone(), counterparty_pubkey: request.buyer_pubkey.clone(), @@ -6986,7 +6799,7 @@ fn order_decision_inventory_invalid_view( fn deferred_payment_status_event(event: &RadrootsNostrEvent) -> bool { matches!( event_kind_u32(event), - KIND_TRADE_PAYMENT_RECORDED | KIND_TRADE_SETTLEMENT_DECISION + KIND_ORDER_PAYMENT_RECORD | KIND_ORDER_SETTLEMENT_DECISION ) } @@ -6994,7 +6807,7 @@ fn listing_inventory_accounting_issue_view( issue_value: RadrootsListingInventoryAccountingIssue, ) -> OrderIssueView { match issue_value { - RadrootsListingInventoryAccountingIssue::InvalidActiveOrder { + RadrootsListingInventoryAccountingIssue::InvalidOrder { order_id, event_ids, } => issue_with_events( @@ -7096,7 +6909,7 @@ fn order_revision_dry_run_view( config: &RuntimeConfig, args: &OrderRevisionProposeArgs, status: &OrderStatusView, - payload: &RadrootsTradeOrderRevisionProposed, + payload: &RadrootsOrderRevisionProposal, ) -> OrderRevisionProposalView { let mut view = order_revision_base_view(config, args, "dry_run", true); apply_order_revision_status(&mut view, status); @@ -7112,7 +6925,7 @@ fn order_revision_decision_dry_run_view( args: &OrderRevisionDecisionArgs, status: &OrderStatusView, proposal: &OrderRevisionProposalRecord, - payload: &RadrootsTradeOrderRevisionDecisionEvent, + payload: &RadrootsOrderRevisionDecision, ) -> OrderRevisionDecisionView { let mut view = order_revision_decision_base_view(config, args, "dry_run", true); apply_order_revision_decision_status(&mut view, status); @@ -7129,7 +6942,7 @@ fn order_fulfillment_dry_run_view( config: &RuntimeConfig, args: &OrderFulfillmentArgs, status: &OrderStatusView, - fulfillment_state: RadrootsActiveTradeFulfillmentState, + fulfillment_state: RadrootsOrderFulfillmentState, ) -> OrderFulfillmentView { let mut view = order_fulfillment_base_view(config, args, "dry_run", true); apply_order_fulfillment_status(&mut view, status); @@ -7143,7 +6956,7 @@ fn order_fulfillment_dry_run_view( fn order_revision_payload_from_status( args: &OrderRevisionProposeArgs, status: &OrderStatusView, -) -> Result<RadrootsTradeOrderRevisionProposed, RuntimeError> { +) -> Result<RadrootsOrderRevisionProposal, RuntimeError> { let revision_id = next_revision_id(); let economics = status.economics.clone().ok_or_else(|| { RuntimeError::Config("accepted order is missing current agreement economics".to_owned()) @@ -7152,12 +6965,12 @@ fn order_revision_payload_from_status( let items = economics .items .iter() - .map(|item| RadrootsTradeOrderItem { + .map(|item| RadrootsOrderItem { bin_id: item.bin_id.clone(), bin_count: item.bin_count, }) .collect::<Vec<_>>(); - Ok(RadrootsTradeOrderRevisionProposed { + Ok(RadrootsOrderRevisionProposal { revision_id, order_id: status.order_id.clone(), listing_addr: status.listing_addr.clone().ok_or_else(|| { @@ -7188,8 +7001,8 @@ fn order_revision_payload_from_status( fn revised_order_economics( args: &OrderRevisionProposeArgs, revision_id: &str, - current: &RadrootsTradeOrderEconomics, -) -> Result<RadrootsTradeOrderEconomics, RuntimeError> { + current: &RadrootsOrderEconomics, +) -> Result<RadrootsOrderEconomics, RuntimeError> { let mut current_canonical = current.clone(); current_canonical.canonicalize(); let mut economics = current_canonical.clone(); @@ -7253,7 +7066,7 @@ fn revised_order_economics( fn revision_adjustment_line( args: &OrderRevisionProposeArgs, expected_currency: RadrootsCoreCurrency, -) -> Result<Option<RadrootsTradeOrderEconomicLine>, RuntimeError> { +) -> Result<Option<RadrootsOrderEconomicLine>, RuntimeError> { let Some(id) = args.adjustment_id.as_deref().and_then(non_empty_ref) else { return Ok(None); }; @@ -7263,8 +7076,8 @@ fn revision_adjustment_line( .and_then(non_empty_ref) .ok_or_else(|| RuntimeError::Config("revision adjustment effect is required".to_owned()))? { - "increase" => RadrootsTradeEconomicEffect::Increase, - "decrease" => RadrootsTradeEconomicEffect::Decrease, + "increase" => RadrootsOrderEconomicEffect::Increase, + "decrease" => RadrootsOrderEconomicEffect::Decrease, other => { return Err(RuntimeError::Config(format!( "revision adjustment effect `{other}` is invalid" @@ -7304,10 +7117,10 @@ fn revision_adjustment_line( .as_deref() .and_then(non_empty_ref) .ok_or_else(|| RuntimeError::Config("revision adjustment reason is required".to_owned()))?; - Ok(Some(RadrootsTradeOrderEconomicLine { + Ok(Some(RadrootsOrderEconomicLine { id: id.to_owned(), - kind: RadrootsTradeEconomicLineKind::RevisionAdjustment, - actor: RadrootsTradeEconomicActor::Seller, + kind: RadrootsOrderEconomicLineKind::RevisionAdjustment, + actor: RadrootsOrderEconomicActor::Seller, effect, amount: RadrootsCoreMoney::new(amount, currency), reason: reason.to_owned(), @@ -7316,7 +7129,7 @@ fn revision_adjustment_line( fn order_revision_event_parts( status: &OrderStatusView, - payload: &RadrootsTradeOrderRevisionProposed, + payload: &RadrootsOrderRevisionProposal, ) -> Result<WireEventParts, RuntimeError> { let root_event_id = status.request_event_id.as_deref().ok_or_else(|| { RuntimeError::Config("accepted order is missing request_event_id".to_owned()) @@ -7333,16 +7146,16 @@ fn order_revision_event_parts( "order revision proposal payload chain does not match order status".to_owned(), )); } - active_trade_order_revision_proposal_event_build(root_event_id, prev_event_id, payload).map_err( - |error| RuntimeError::Config(format!("encode order revision proposal event: {error}")), - ) + order_revision_proposal_event_build(root_event_id, prev_event_id, payload).map_err(|error| { + RuntimeError::Config(format!("encode order revision proposal event: {error}")) + }) } fn order_revision_inventory_preflight_view( config: &RuntimeConfig, args: &OrderRevisionProposeArgs, status: &OrderStatusView, - payload: &RadrootsTradeOrderRevisionProposed, + payload: &RadrootsOrderRevisionProposal, ) -> Option<OrderRevisionProposalView> { let issues = order_revision_inventory_issues(status, payload); if issues.is_empty() { @@ -7361,7 +7174,7 @@ fn order_revision_inventory_preflight_view( fn order_revision_inventory_issues( status: &OrderStatusView, - payload: &RadrootsTradeOrderRevisionProposed, + payload: &RadrootsOrderRevisionProposal, ) -> Vec<OrderIssueView> { let Some(current) = status.economics.as_ref() else { return vec![issue_with_code( @@ -7431,7 +7244,7 @@ fn order_revision_inventory_issues( fn apply_order_revision_payload( view: &mut OrderRevisionProposalView, - payload: &RadrootsTradeOrderRevisionProposed, + payload: &RadrootsOrderRevisionProposal, ) { view.revision_id = Some(payload.revision_id.clone()); view.root_event_id = Some(payload.root_event_id.clone()); @@ -7455,7 +7268,7 @@ fn apply_order_revision_decision_proposal( view.root_event_id = Some(proposal.payload.root_event_id.clone()); view.prev_event_id = Some(proposal.event_id.clone()); view.event_id = Some(proposal.event_id.clone()); - view.event_kind = Some(KIND_TRADE_ORDER_REVISION); + view.event_kind = Some(KIND_ORDER_REVISION_PROPOSAL); if view.decision.as_deref() == Some("accepted") { view.economics = Some(proposal.payload.economics.clone()); } @@ -7464,22 +7277,19 @@ fn apply_order_revision_decision_proposal( fn apply_order_revision_decision_payload( view: &mut OrderRevisionDecisionView, proposal: &OrderRevisionProposalRecord, - payload: &RadrootsTradeOrderRevisionDecisionEvent, + payload: &RadrootsOrderRevisionDecision, ) { view.revision_id = Some(payload.revision_id.clone()); view.root_event_id = Some(payload.root_event_id.clone()); view.prev_event_id = Some(payload.prev_event_id.clone()); view.decision = Some( match &payload.decision { - RadrootsTradeOrderRevisionDecision::Accepted => "accepted", - RadrootsTradeOrderRevisionDecision::Declined { .. } => "declined", + RadrootsOrderRevisionOutcome::Accepted => "accepted", + RadrootsOrderRevisionOutcome::Declined { .. } => "declined", } .to_owned(), ); - if matches!( - payload.decision, - RadrootsTradeOrderRevisionDecision::Accepted - ) { + if matches!(payload.decision, RadrootsOrderRevisionOutcome::Accepted) { view.agreement_event_id = view.event_id.clone(); view.economics = Some(proposal.payload.economics.clone()); } @@ -7488,9 +7298,9 @@ fn apply_order_revision_decision_payload( fn order_revision_decision_payload_from_proposal( args: &OrderRevisionDecisionArgs, proposal: &OrderRevisionProposalRecord, -) -> Result<RadrootsTradeOrderRevisionDecisionEvent, RuntimeError> { +) -> Result<RadrootsOrderRevisionDecision, RuntimeError> { let decision = match args.decision { - OrderRevisionDecisionArg::Accept => RadrootsTradeOrderRevisionDecision::Accepted, + OrderRevisionDecisionArg::Accept => RadrootsOrderRevisionOutcome::Accepted, OrderRevisionDecisionArg::Decline => { let reason = args .reason @@ -7502,12 +7312,12 @@ fn order_revision_decision_payload_from_proposal( "order revision decline requires a non-empty reason".to_owned(), ) })?; - RadrootsTradeOrderRevisionDecision::Declined { + RadrootsOrderRevisionOutcome::Declined { reason: reason.to_owned(), } } }; - Ok(RadrootsTradeOrderRevisionDecisionEvent { + Ok(RadrootsOrderRevisionDecision { revision_id: proposal.payload.revision_id.clone(), order_id: proposal.payload.order_id.clone(), listing_addr: proposal.payload.listing_addr.clone(), @@ -7520,9 +7330,9 @@ fn order_revision_decision_payload_from_proposal( } fn order_revision_decision_event_parts( - payload: &RadrootsTradeOrderRevisionDecisionEvent, + payload: &RadrootsOrderRevisionDecision, ) -> Result<WireEventParts, RuntimeError> { - active_trade_order_revision_decision_event_build( + order_revision_decision_event_build( payload.root_event_id.as_str(), payload.prev_event_id.as_str(), payload, @@ -7532,9 +7342,9 @@ fn order_revision_decision_event_parts( fn order_fulfillment_payload_from_status( status: &OrderStatusView, - fulfillment_state: RadrootsActiveTradeFulfillmentState, -) -> Result<RadrootsTradeFulfillmentUpdated, RuntimeError> { - Ok(RadrootsTradeFulfillmentUpdated { + fulfillment_state: RadrootsOrderFulfillmentState, +) -> Result<RadrootsOrderFulfillmentUpdate, RuntimeError> { + Ok(RadrootsOrderFulfillmentUpdate { order_id: status.order_id.clone(), listing_addr: status.listing_addr.clone().ok_or_else(|| { RuntimeError::Config("accepted order is missing listing_addr".to_owned()) @@ -7551,7 +7361,7 @@ fn order_fulfillment_payload_from_status( fn order_fulfillment_event_parts( status: &OrderStatusView, - payload: &RadrootsTradeFulfillmentUpdated, + payload: &RadrootsOrderFulfillmentUpdate, ) -> Result<WireEventParts, RuntimeError> { let root_event_id = status.request_event_id.as_deref().ok_or_else(|| { RuntimeError::Config("accepted order is missing request_event_id".to_owned()) @@ -7563,15 +7373,15 @@ fn order_fulfillment_event_parts( .ok_or_else(|| { RuntimeError::Config("accepted order is missing previous event id".to_owned()) })?; - active_trade_fulfillment_update_event_build(root_event_id, prev_event_id, payload) + order_fulfillment_update_event_build(root_event_id, prev_event_id, payload) .map_err(|error| RuntimeError::Config(format!("encode fulfillment update event: {error}"))) } fn order_cancellation_payload_from_status( args: &OrderCancelArgs, status: &OrderStatusView, -) -> Result<RadrootsTradeOrderCancelled, RuntimeError> { - Ok(RadrootsTradeOrderCancelled { +) -> Result<RadrootsOrderCancellation, RuntimeError> { + Ok(RadrootsOrderCancellation { order_id: status.order_id.clone(), listing_addr: status.listing_addr.clone().ok_or_else(|| { RuntimeError::Config("cancellable order is missing listing_addr".to_owned()) @@ -7588,7 +7398,7 @@ fn order_cancellation_payload_from_status( fn order_cancellation_event_parts( status: &OrderStatusView, - payload: &RadrootsTradeOrderCancelled, + payload: &RadrootsOrderCancellation, ) -> Result<WireEventParts, RuntimeError> { let root_event_id = status.request_event_id.as_deref().ok_or_else(|| { RuntimeError::Config("cancellable order is missing request_event_id".to_owned()) @@ -7596,15 +7406,15 @@ fn order_cancellation_event_parts( let prev_event_id = order_cancellation_prev_event_id(status).ok_or_else(|| { RuntimeError::Config("cancellable order is missing previous event id".to_owned()) })?; - active_trade_order_cancel_event_build(root_event_id, prev_event_id.as_str(), payload) + order_cancellation_event_build(root_event_id, prev_event_id.as_str(), payload) .map_err(|error| RuntimeError::Config(format!("encode order cancellation event: {error}"))) } fn order_receipt_payload_from_status( args: &OrderReceiptArgs, status: &OrderStatusView, -) -> Result<RadrootsTradeBuyerReceipt, RuntimeError> { - Ok(RadrootsTradeBuyerReceipt { +) -> Result<RadrootsOrderReceipt, RuntimeError> { + Ok(RadrootsOrderReceipt { order_id: status.order_id.clone(), listing_addr: status.listing_addr.clone().ok_or_else(|| { RuntimeError::Config("receiptable order is missing listing_addr".to_owned()) @@ -7638,7 +7448,7 @@ fn order_receipt_payload_from_status( fn order_receipt_event_parts( status: &OrderStatusView, - payload: &RadrootsTradeBuyerReceipt, + payload: &RadrootsOrderReceipt, ) -> Result<WireEventParts, RuntimeError> { let root_event_id = status.request_event_id.as_deref().ok_or_else(|| { RuntimeError::Config("receiptable order is missing request_event_id".to_owned()) @@ -7648,14 +7458,14 @@ fn order_receipt_event_parts( "receiptable order is missing eligible fulfillment event id".to_owned(), ) })?; - active_trade_buyer_receipt_event_build(root_event_id, prev_event_id.as_str(), payload) + order_receipt_event_build(root_event_id, prev_event_id.as_str(), payload) .map_err(|error| RuntimeError::Config(format!("encode buyer receipt event: {error}"))) } fn order_payment_payload_from_status( args: &OrderPaymentArgs, status: &OrderStatusView, -) -> Result<RadrootsTradePaymentRecorded, RuntimeError> { +) -> Result<RadrootsOrderPaymentRecord, RuntimeError> { let economics = status .economics .as_ref() @@ -7675,7 +7485,7 @@ fn order_payment_payload_from_status( "payment currency must match accepted agreement currency".to_owned(), )); } - Ok(RadrootsTradePaymentRecorded { + Ok(RadrootsOrderPaymentRecord { order_id: status.order_id.clone(), listing_addr: status.listing_addr.clone().ok_or_else(|| { RuntimeError::Config("payable order is missing listing_addr".to_owned()) @@ -7695,7 +7505,7 @@ fn order_payment_payload_from_status( agreement_event_id, quote_id: economics.quote_id.clone(), quote_version: economics.quote_version, - economics_digest: radroots_trade_order_economics_digest(economics) + economics_digest: radroots_order_economics_digest(economics) .map_err(|error| RuntimeError::Config(error.to_string()))?, amount, currency, @@ -7712,7 +7522,7 @@ fn order_payment_payload_from_status( fn order_payment_event_parts( status: &OrderStatusView, - payload: &RadrootsTradePaymentRecorded, + payload: &RadrootsOrderPaymentRecord, ) -> Result<WireEventParts, RuntimeError> { let root_event_id = status.request_event_id.as_deref().ok_or_else(|| { RuntimeError::Config("payable order is missing request_event_id".to_owned()) @@ -7720,14 +7530,14 @@ fn order_payment_event_parts( let prev_event_id = order_payment_prev_event_id(status).ok_or_else(|| { RuntimeError::Config("payable order is missing payment previous event id".to_owned()) })?; - active_trade_payment_recorded_event_build(root_event_id, prev_event_id.as_str(), payload) + order_payment_record_event_build(root_event_id, prev_event_id.as_str(), payload) .map_err(|error| RuntimeError::Config(format!("encode payment recorded event: {error}"))) } fn order_settlement_payload_from_status( args: &OrderSettlementArgs, status: &OrderStatusView, -) -> Result<RadrootsTradeSettlementDecisionEvent, RuntimeError> { +) -> Result<RadrootsOrderSettlementDecision, RuntimeError> { let payment = status .payment .as_ref() @@ -7746,7 +7556,7 @@ fn order_settlement_payload_from_status( )); } let decision = settlement_decision_protocol(args.decision); - Ok(RadrootsTradeSettlementDecisionEvent { + Ok(RadrootsOrderSettlementDecision { order_id: status.order_id.clone(), listing_addr: status.listing_addr.clone().ok_or_else(|| { RuntimeError::Config("settleable order is missing listing_addr".to_owned()) @@ -7799,23 +7609,16 @@ fn order_settlement_payload_from_status( fn order_settlement_event_parts( status: &OrderStatusView, - payload: &RadrootsTradeSettlementDecisionEvent, + payload: &RadrootsOrderSettlementDecision, ) -> Result<WireEventParts, RuntimeError> { let root_event_id = status.request_event_id.as_deref().ok_or_else(|| { RuntimeError::Config("settleable order is missing request_event_id".to_owned()) })?; - active_trade_settlement_decision_event_build( - root_event_id, - payload.payment_event_id.as_str(), - payload, - ) - .map_err(|error| RuntimeError::Config(format!("encode settlement decision event: {error}"))) + order_settlement_decision_event_build(root_event_id, payload.payment_event_id.as_str(), payload) + .map_err(|error| RuntimeError::Config(format!("encode settlement decision event: {error}"))) } -fn apply_order_payment_payload( - view: &mut OrderPaymentView, - payload: &RadrootsTradePaymentRecorded, -) { +fn apply_order_payment_payload(view: &mut OrderPaymentView, payload: &RadrootsOrderPaymentRecord) { view.root_event_id = Some(payload.root_event_id.clone()); view.prev_event_id = Some(payload.previous_event_id.clone()); view.agreement_event_id = Some(payload.agreement_event_id.clone()); @@ -7831,7 +7634,7 @@ fn apply_order_payment_payload( fn apply_order_settlement_payload( view: &mut OrderSettlementView, - payload: &RadrootsTradeSettlementDecisionEvent, + payload: &RadrootsOrderSettlementDecision, ) { view.root_event_id = Some(payload.root_event_id.clone()); view.prev_event_id = Some(payload.previous_event_id.clone()); @@ -7863,7 +7666,7 @@ fn order_receipt_dry_run_view( config: &RuntimeConfig, args: &OrderReceiptArgs, status: &OrderStatusView, - payload: &RadrootsTradeBuyerReceipt, + payload: &RadrootsOrderReceipt, ) -> OrderReceiptView { let mut view = order_receipt_base_view(config, args, "dry_run", true); apply_order_receipt_status(&mut view, status); @@ -7879,7 +7682,7 @@ fn order_payment_dry_run_view( config: &RuntimeConfig, args: &OrderPaymentArgs, status: &OrderStatusView, - payload: &RadrootsTradePaymentRecorded, + payload: &RadrootsOrderPaymentRecord, ) -> OrderPaymentView { let mut view = order_payment_base_view(config, args, "dry_run", true); apply_order_payment_status(&mut view, status); @@ -7893,7 +7696,7 @@ fn order_settlement_dry_run_view( config: &RuntimeConfig, args: &OrderSettlementArgs, status: &OrderStatusView, - payload: &RadrootsTradeSettlementDecisionEvent, + payload: &RadrootsOrderSettlementDecision, ) -> OrderSettlementView { let mut view = order_settlement_base_view(config, args, "dry_run", true); apply_order_settlement_status(&mut view, status); @@ -7908,7 +7711,7 @@ fn publish_order_revision( args: &OrderRevisionProposeArgs, status: OrderStatusView, signing: account::AccountSigningIdentity, - payload: RadrootsTradeOrderRevisionProposed, + payload: RadrootsOrderRevisionProposal, ) -> Result<OrderRevisionProposalView, RuntimeError> { let parts = order_revision_event_parts(&status, &payload)?; let event_kind = parts.kind; @@ -7925,7 +7728,7 @@ fn publish_order_revision_decision( status: OrderStatusView, proposal: &OrderRevisionProposalRecord, signing: account::AccountSigningIdentity, - payload: RadrootsTradeOrderRevisionDecisionEvent, + payload: RadrootsOrderRevisionDecision, ) -> Result<OrderRevisionDecisionView, RuntimeError> { let parts = order_revision_decision_event_parts(&payload)?; let event_kind = parts.kind; @@ -7940,7 +7743,7 @@ fn published_order_revision_view( config: &RuntimeConfig, args: &OrderRevisionProposeArgs, status: &OrderStatusView, - payload: &RadrootsTradeOrderRevisionProposed, + payload: &RadrootsOrderRevisionProposal, event_kind: u32, receipt: DirectRelayPublishReceipt, ) -> OrderRevisionProposalView { @@ -7971,7 +7774,7 @@ fn published_order_revision_decision_view( args: &OrderRevisionDecisionArgs, status: &OrderStatusView, proposal: &OrderRevisionProposalRecord, - payload: &RadrootsTradeOrderRevisionDecisionEvent, + payload: &RadrootsOrderRevisionDecision, event_kind: u32, receipt: DirectRelayPublishReceipt, ) -> OrderRevisionDecisionView { @@ -7986,8 +7789,8 @@ fn published_order_revision_decision_view( failed_relays, } = receipt; let state = match payload.decision { - RadrootsTradeOrderRevisionDecision::Accepted => "accepted", - RadrootsTradeOrderRevisionDecision::Declined { .. } => "declined", + RadrootsOrderRevisionOutcome::Accepted => "accepted", + RadrootsOrderRevisionOutcome::Declined { .. } => "declined", }; let mut view = order_revision_decision_base_view(config, args, state, false); apply_order_revision_decision_status(&mut view, status); @@ -7997,10 +7800,7 @@ fn published_order_revision_decision_view( view.prev_event_id = Some(payload.prev_event_id.clone()); view.event_id = Some(event_id.clone()); view.event_kind = Some(event_kind); - if matches!( - payload.decision, - RadrootsTradeOrderRevisionDecision::Accepted - ) { + if matches!(payload.decision, RadrootsOrderRevisionOutcome::Accepted) { view.agreement_event_id = Some(event_id); } view.target_relays = target_relays; @@ -8014,7 +7814,7 @@ fn publish_order_fulfillment( args: &OrderFulfillmentArgs, status: OrderStatusView, signing: account::AccountSigningIdentity, - payload: RadrootsTradeFulfillmentUpdated, + payload: RadrootsOrderFulfillmentUpdate, ) -> Result<OrderFulfillmentView, RuntimeError> { let parts = order_fulfillment_event_parts(&status, &payload)?; let event_kind = parts.kind; @@ -8035,7 +7835,7 @@ fn publish_order_cancellation( args: &OrderCancelArgs, status: OrderStatusView, signing: account::AccountSigningIdentity, - payload: RadrootsTradeOrderCancelled, + payload: RadrootsOrderCancellation, ) -> Result<OrderCancellationView, RuntimeError> { let parts = order_cancellation_event_parts(&status, &payload)?; let event_kind = parts.kind; @@ -8051,7 +7851,7 @@ fn publish_order_receipt( args: &OrderReceiptArgs, status: OrderStatusView, signing: account::AccountSigningIdentity, - payload: RadrootsTradeBuyerReceipt, + payload: RadrootsOrderReceipt, ) -> Result<OrderReceiptView, RuntimeError> { let parts = order_receipt_event_parts(&status, &payload)?; let event_kind = parts.kind; @@ -8067,7 +7867,7 @@ fn publish_order_payment( args: &OrderPaymentArgs, status: OrderStatusView, signing: account::AccountSigningIdentity, - payload: RadrootsTradePaymentRecorded, + payload: RadrootsOrderPaymentRecord, ) -> Result<OrderPaymentView, RuntimeError> { let parts = order_payment_event_parts(&status, &payload)?; let event_kind = parts.kind; @@ -8083,7 +7883,7 @@ fn publish_order_settlement( args: &OrderSettlementArgs, status: OrderStatusView, signing: account::AccountSigningIdentity, - payload: RadrootsTradeSettlementDecisionEvent, + payload: RadrootsOrderSettlementDecision, ) -> Result<OrderSettlementView, RuntimeError> { let parts = order_settlement_event_parts(&status, &payload)?; let event_kind = parts.kind; @@ -8098,7 +7898,7 @@ fn published_order_fulfillment_view( config: &RuntimeConfig, args: &OrderFulfillmentArgs, status: &OrderStatusView, - fulfillment_state: RadrootsActiveTradeFulfillmentState, + fulfillment_state: RadrootsOrderFulfillmentState, event_kind: u32, receipt: DirectRelayPublishReceipt, ) -> OrderFulfillmentView { @@ -8155,7 +7955,7 @@ fn published_order_receipt_view( config: &RuntimeConfig, args: &OrderReceiptArgs, status: &OrderStatusView, - payload: &RadrootsTradeBuyerReceipt, + payload: &RadrootsOrderReceipt, event_kind: u32, receipt: DirectRelayPublishReceipt, ) -> OrderReceiptView { @@ -8191,7 +7991,7 @@ fn published_order_payment_view( config: &RuntimeConfig, args: &OrderPaymentArgs, status: &OrderStatusView, - payload: &RadrootsTradePaymentRecorded, + payload: &RadrootsOrderPaymentRecord, event_kind: u32, receipt: DirectRelayPublishReceipt, ) -> OrderPaymentView { @@ -8220,7 +8020,7 @@ fn published_order_settlement_view( config: &RuntimeConfig, args: &OrderSettlementArgs, status: &OrderStatusView, - payload: &RadrootsTradeSettlementDecisionEvent, + payload: &RadrootsOrderSettlementDecision, event_kind: u32, receipt: DirectRelayPublishReceipt, ) -> OrderSettlementView { @@ -8433,20 +8233,18 @@ fn seller_order_request_from_event( order_id: &str, ) -> Result<ResolvedSellerOrderRequest, RuntimeError> { let event_kind = event_kind_u32(event); - if event_kind != KIND_TRADE_ORDER_REQUEST { + if event_kind != KIND_ORDER_REQUEST { return Err(RuntimeError::Config(format!( "order decision received unexpected kind `{event_kind}`" ))); } let event = radroots_event_from_nostr(event); - let envelope = active_trade_order_request_from_event(&event) + let envelope = order_request_from_event(&event) .map_err(|error| RuntimeError::Config(format!("decode order request event: {error}")))?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRequested, - &event.tags, - ) - .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderRequested, &event.tags) + .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; if envelope.order_id != order_id || envelope.payload.order_id != order_id { return Err(RuntimeError::Config( @@ -8489,10 +8287,10 @@ fn publish_order_decision( request: ResolvedSellerOrderRequest, resolution: SellerOrderRequestResolution, signing: account::AccountSigningIdentity, - payload: RadrootsTradeOrderDecisionEvent, + payload: RadrootsOrderDecision, inventory: Option<OrderInventoryView>, ) -> Result<OrderDecisionView, RuntimeError> { - let parts = active_trade_order_decision_event_build( + let parts = order_decision_event_build( request.request_event_id.as_str(), request.request_event_id.as_str(), &payload, @@ -8511,16 +8309,16 @@ fn canonical_order_decision_payload( args: &OrderDecisionArgs, request: &ResolvedSellerOrderRequest, signer_pubkey: &str, -) -> Result<RadrootsTradeOrderDecisionEvent, RuntimeError> { +) -> Result<RadrootsOrderDecision, RuntimeError> { let payload = order_decision_payload_from_request(args, request)?; - canonicalize_active_order_decision_for_signer(payload, signer_pubkey) + canonicalize_order_decision_for_signer(payload, signer_pubkey) .map_err(|error| RuntimeError::Config(format!("canonicalize order decision: {error}"))) } fn order_decision_payload_from_request( args: &OrderDecisionArgs, request: &ResolvedSellerOrderRequest, -) -> Result<RadrootsTradeOrderDecisionEvent, RuntimeError> { +) -> Result<RadrootsOrderDecision, RuntimeError> { match args.decision { OrderDecisionArg::Accept => Ok(accepted_order_decision_payload_from_request(request)), OrderDecisionArg::Decline => { @@ -8541,17 +8339,17 @@ fn order_decision_payload_from_request( fn accepted_order_decision_payload_from_request( request: &ResolvedSellerOrderRequest, -) -> RadrootsTradeOrderDecisionEvent { - RadrootsTradeOrderDecisionEvent { +) -> RadrootsOrderDecision { + RadrootsOrderDecision { order_id: request.order_id.clone(), listing_addr: request.listing_addr.clone(), buyer_pubkey: request.buyer_pubkey.clone(), seller_pubkey: request.seller_pubkey.clone(), - decision: RadrootsTradeOrderDecision::Accepted { + decision: RadrootsOrderDecisionOutcome::Accepted { inventory_commitments: request .items .iter() - .map(|item| RadrootsTradeInventoryCommitment { + .map(|item| RadrootsOrderInventoryCommitment { bin_id: item.bin_id.clone(), bin_count: item.bin_count, }) @@ -8563,13 +8361,13 @@ fn accepted_order_decision_payload_from_request( fn declined_order_decision_payload_from_request( request: &ResolvedSellerOrderRequest, reason: &str, -) -> RadrootsTradeOrderDecisionEvent { - RadrootsTradeOrderDecisionEvent { +) -> RadrootsOrderDecision { + RadrootsOrderDecision { order_id: request.order_id.clone(), listing_addr: request.listing_addr.clone(), buyer_pubkey: request.buyer_pubkey.clone(), seller_pubkey: request.seller_pubkey.clone(), - decision: RadrootsTradeOrderDecision::Declined { + decision: RadrootsOrderDecisionOutcome::Declined { reason: reason.to_owned(), }, } @@ -8630,20 +8428,18 @@ fn order_event_list_entry_from_event( seller_pubkey: &str, ) -> Result<OrderEventListEntryView, RuntimeError> { let event_kind = event_kind_u32(event); - if event_kind != KIND_TRADE_ORDER_REQUEST { + if event_kind != KIND_ORDER_REQUEST { return Err(RuntimeError::Config(format!( "order event list received unexpected kind `{event_kind}`" ))); } let event = radroots_event_from_nostr(event); - let envelope = active_trade_order_request_from_event(&event) + let envelope = order_request_from_event(&event) .map_err(|error| RuntimeError::Config(format!("decode order request event: {error}")))?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRequested, - &event.tags, - ) - .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderRequested, &event.tags) + .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; if context.counterparty_pubkey != seller_pubkey || envelope.payload.seller_pubkey != seller_pubkey @@ -8682,7 +8478,7 @@ fn order_request_filter( order_id: Option<&str>, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind(KIND_TRADE_ORDER_REQUEST as u16)) + .kind(radroots_nostr_kind(KIND_ORDER_REQUEST as u16)) .limit(1_000); let filter = radroots_nostr_filter_tag(filter, "p", vec![seller_pubkey.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build order event filter: {error}")))?; @@ -8694,7 +8490,7 @@ fn order_request_filter( } fn listing_event_filter( - listing_addr: &RadrootsTradeListingAddress, + listing_addr: &RadrootsOrderListingAddress, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() .kind(radroots_nostr_kind(KIND_LISTING as u16)) @@ -8708,7 +8504,7 @@ fn order_listing_request_filter( listing_addr: &str, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind(KIND_TRADE_ORDER_REQUEST as u16)) + .kind(radroots_nostr_kind(KIND_ORDER_REQUEST as u16)) .limit(1_000); let filter = radroots_nostr_filter_tag(filter, "p", vec![seller_pubkey.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build order request filter: {error}")))?; @@ -8718,7 +8514,7 @@ fn order_listing_request_filter( fn order_listing_decision_filter(listing_addr: &str) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind(KIND_TRADE_ORDER_DECISION as u16)) + .kind(radroots_nostr_kind(KIND_ORDER_DECISION as u16)) .limit(1_000); radroots_nostr_filter_tag(filter, "a", vec![listing_addr.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build order decision filter: {error}"))) @@ -8728,7 +8524,7 @@ fn order_listing_revision_proposal_filter( listing_addr: &str, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind(KIND_TRADE_ORDER_REVISION as u16)) + .kind(radroots_nostr_kind(KIND_ORDER_REVISION_PROPOSAL as u16)) .limit(1_000); radroots_nostr_filter_tag(filter, "a", vec![listing_addr.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build revision proposal filter: {error}"))) @@ -8738,9 +8534,7 @@ fn order_listing_revision_decision_filter( listing_addr: &str, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind( - KIND_TRADE_ORDER_REVISION_RESPONSE as u16, - )) + .kind(radroots_nostr_kind(KIND_ORDER_REVISION_DECISION as u16)) .limit(1_000); radroots_nostr_filter_tag(filter, "a", vec![listing_addr.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build revision decision filter: {error}"))) @@ -8750,7 +8544,7 @@ fn order_listing_fulfillment_filter( listing_addr: &str, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind(KIND_TRADE_FULFILLMENT_UPDATE as u16)) + .kind(radroots_nostr_kind(KIND_ORDER_FULFILLMENT_UPDATE as u16)) .limit(1_000); radroots_nostr_filter_tag(filter, "a", vec![listing_addr.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build fulfillment filter: {error}"))) @@ -8760,7 +8554,7 @@ fn order_listing_cancellation_filter( listing_addr: &str, ) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() - .kind(radroots_nostr_kind(KIND_TRADE_CANCEL as u16)) + .kind(radroots_nostr_kind(KIND_ORDER_CANCELLATION as u16)) .limit(1_000); radroots_nostr_filter_tag(filter, "a", vec![listing_addr.to_owned()]) .map_err(|error| RuntimeError::Config(format!("build cancellation filter: {error}"))) @@ -8769,13 +8563,13 @@ fn order_listing_cancellation_filter( fn order_status_filter(order_id: &str) -> Result<RadrootsNostrFilter, RuntimeError> { let filter = RadrootsNostrFilter::new() .kinds([ - radroots_nostr_kind(KIND_TRADE_ORDER_REQUEST as u16), - radroots_nostr_kind(KIND_TRADE_ORDER_DECISION as u16), - radroots_nostr_kind(KIND_TRADE_ORDER_REVISION as u16), - radroots_nostr_kind(KIND_TRADE_ORDER_REVISION_RESPONSE as u16), - radroots_nostr_kind(KIND_TRADE_FULFILLMENT_UPDATE as u16), - radroots_nostr_kind(KIND_TRADE_CANCEL as u16), - radroots_nostr_kind(KIND_TRADE_RECEIPT as u16), + radroots_nostr_kind(KIND_ORDER_REQUEST as u16), + radroots_nostr_kind(KIND_ORDER_DECISION as u16), + radroots_nostr_kind(KIND_ORDER_REVISION_PROPOSAL as u16), + radroots_nostr_kind(KIND_ORDER_REVISION_DECISION as u16), + radroots_nostr_kind(KIND_ORDER_FULFILLMENT_UPDATE as u16), + radroots_nostr_kind(KIND_ORDER_CANCELLATION as u16), + radroots_nostr_kind(KIND_ORDER_RECEIPT as u16), ]) .limit(1_000); radroots_nostr_filter_tag(filter, "d", vec![order_id.to_owned()]) @@ -8944,7 +8738,7 @@ fn resolve_trade_product_by_listing_addr( fn resolve_active_listing_event_id( config: &RuntimeConfig, listing_addr: &str, - parsed: &RadrootsTradeListingAddress, + parsed: &RadrootsOrderListingAddress, ) -> Result<Option<String>, RuntimeError> { if !config.local.replica_db_path.exists() { return Ok(None); @@ -9105,7 +8899,7 @@ fn order_economics_from_resolved_listing( resolved_listing: Option<&ResolvedOrderListing>, items: &[OrderDraftItem], adjustments: &[crate::cli::global::OrderDraftAdjustmentArgs], -) -> Result<Option<RadrootsTradeOrderEconomics>, RuntimeError> { +) -> Result<Option<RadrootsOrderEconomics>, RuntimeError> { let Some(listing) = resolved_listing else { return Ok(None); }; @@ -9166,7 +8960,7 @@ fn order_economics_from_resolved_listing( let line_amount = unit_price_amount * quantity_amount * RadrootsCoreDecimal::from(item.bin_count); subtotal_amount = subtotal_amount + line_amount; - economic_items.push(RadrootsTradeOrderEconomicItem { + economic_items.push(RadrootsOrderEconomicItem { bin_id: item.bin_id.clone(), bin_count: item.bin_count, quantity_amount, @@ -9187,10 +8981,10 @@ fn order_economics_from_resolved_listing( )?; let adjustments = basket_adjustment_lines(adjustments)?; let zero = RadrootsCoreMoney::zero(currency); - let mut economics = RadrootsTradeOrderEconomics { + let mut economics = RadrootsOrderEconomics { quote_id: format!("quote_{order_id}"), quote_version: 1, - pricing_basis: RadrootsTradePricingBasis::ListingEvent, + pricing_basis: RadrootsOrderPricingBasis::ListingEvent, currency, items: economic_items, discounts, @@ -9213,7 +9007,7 @@ fn listing_discount_lines_from_product( items: &[OrderDraftItem], quantity_amount: RadrootsCoreDecimal, quantity_unit: RadrootsCoreUnit, -) -> Result<Vec<RadrootsTradeOrderEconomicLine>, RuntimeError> { +) -> Result<Vec<RadrootsOrderEconomicLine>, RuntimeError> { let Some(notes) = product.notes.as_deref().and_then(non_empty_ref) else { return Ok(Vec::new()); }; @@ -9231,11 +9025,11 @@ fn listing_discount_lines_from_product( "listing discount amount must be greater than zero".to_owned(), )); } - lines.push(RadrootsTradeOrderEconomicLine { + lines.push(RadrootsOrderEconomicLine { id: format!("listing_discount_{}", index + 1), - kind: RadrootsTradeEconomicLineKind::ListingDiscount, - actor: RadrootsTradeEconomicActor::Seller, - effect: RadrootsTradeEconomicEffect::Decrease, + kind: RadrootsOrderEconomicLineKind::ListingDiscount, + actor: RadrootsOrderEconomicActor::Seller, + effect: RadrootsOrderEconomicEffect::Decrease, amount, reason: format!("listing discount {}", index + 1), }); @@ -9294,7 +9088,7 @@ fn listing_discount_amount( fn basket_adjustment_lines( adjustments: &[crate::cli::global::OrderDraftAdjustmentArgs], -) -> Result<Vec<RadrootsTradeOrderEconomicLine>, RuntimeError> { +) -> Result<Vec<RadrootsOrderEconomicLine>, RuntimeError> { adjustments .iter() .map(|adjustment| { @@ -9307,8 +9101,8 @@ fn basket_adjustment_lines( )); } let effect = match adjustment.effect.as_str() { - "increase" => RadrootsTradeEconomicEffect::Increase, - "decrease" => RadrootsTradeEconomicEffect::Decrease, + "increase" => RadrootsOrderEconomicEffect::Increase, + "decrease" => RadrootsOrderEconomicEffect::Decrease, other => { return Err(RuntimeError::Config(format!( "basket adjustment effect `{other}` is invalid" @@ -9325,10 +9119,10 @@ fn basket_adjustment_lines( "basket adjustment reason must not be empty".to_owned(), )); } - Ok(RadrootsTradeOrderEconomicLine { + Ok(RadrootsOrderEconomicLine { id: adjustment.id.trim().to_owned(), - kind: RadrootsTradeEconomicLineKind::BasketAdjustment, - actor: RadrootsTradeEconomicActor::Buyer, + kind: RadrootsOrderEconomicLineKind::BasketAdjustment, + actor: RadrootsOrderEconomicActor::Buyer, effect, amount: RadrootsCoreMoney::new(amount, currency), reason: adjustment.reason.trim().to_owned(), @@ -9931,7 +9725,7 @@ fn is_visible_signed_order_request_record(record: &LocalEventRecord, order_id: & record.family == LocalRecordFamily::SignedEvent && record.status == LocalRecordStatus::Published && record.outbox_status == PublishOutboxStatus::Acknowledged - && record.event_kind == Some(i64::from(KIND_TRADE_ORDER_REQUEST)) + && record.event_kind == Some(i64::from(KIND_ORDER_REQUEST)) && signed_record_tag_values(record, "d") .iter() .any(|value| value == order_id) @@ -10471,7 +10265,7 @@ fn collect_issues(document: &OrderDraftDocument) -> Vec<OrderIssueView> { fn order_items_match_economics( items: &[OrderDraftItem], - economics: &RadrootsTradeOrderEconomics, + economics: &RadrootsOrderEconomics, ) -> bool { let mut order_items = items .iter() @@ -11101,7 +10895,7 @@ fn order_submit_app_signed_evidence_view( buyer_write_capable: None, seller_pubkey: non_empty_string(loaded.document.order.seller_pubkey.clone()), event_id: issue.event_ids.first().cloned(), - event_kind: Some(KIND_TRADE_ORDER_REQUEST), + event_kind: Some(KIND_ORDER_REQUEST), dry_run: config.output.dry_run, deduplicated: true, target_relays: Vec::new(), @@ -11138,7 +10932,7 @@ fn order_submit_app_signed_evidence_view( buyer_write_capable: None, seller_pubkey: non_empty_string(loaded.document.order.seller_pubkey.clone()), event_id: None, - event_kind: Some(KIND_TRADE_ORDER_REQUEST), + event_kind: Some(KIND_ORDER_REQUEST), dry_run: config.output.dry_run, deduplicated: false, target_relays: Vec::new(), @@ -11257,7 +11051,7 @@ fn order_submit_listing_provenance_preflight_view( buyer_write_capable: None, seller_pubkey: non_empty_string(loaded.document.order.seller_pubkey.clone()), event_id: None, - event_kind: Some(KIND_TRADE_ORDER_REQUEST), + event_kind: Some(KIND_ORDER_REQUEST), dry_run: config.output.dry_run, deduplicated: false, target_relays, @@ -11323,7 +11117,7 @@ fn order_submit_existing_request_preflight_view( config: &RuntimeConfig, loaded: &LoadedOrderDraft, args: &OrderSubmitArgs, - payload: &RadrootsTradeOrderRequested, + payload: &RadrootsOrderRequest, ) -> Result<Option<OrderSubmitView>, RuntimeError> { let filter = order_request_filter( loaded.document.order.seller_pubkey.as_str(), @@ -11350,7 +11144,7 @@ fn order_submit_existing_request_view_from_receipt( config: &RuntimeConfig, loaded: &LoadedOrderDraft, args: &OrderSubmitArgs, - payload: &RadrootsTradeOrderRequested, + payload: &RadrootsOrderRequest, receipt: DirectRelayFetchReceipt, ) -> Result<Option<OrderSubmitView>, RuntimeError> { let DirectRelayFetchReceipt { @@ -11460,13 +11254,11 @@ fn order_submit_request_from_event( loaded: &LoadedOrderDraft, ) -> Result<ResolvedOrderSubmitRequest, RuntimeError> { let event = radroots_event_from_nostr(event); - let envelope = active_trade_order_request_from_event(&event) + let envelope = order_request_from_event(&event) .map_err(|error| RuntimeError::Config(format!("decode order request event: {error}")))?; - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRequested, - &event.tags, - ) - .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderRequested, &event.tags) + .map_err(|error| RuntimeError::Config(format!("decode order request tags: {error}")))?; if envelope.order_id != loaded.document.order.order_id || envelope.payload.order_id != loaded.document.order.order_id @@ -11489,11 +11281,8 @@ fn order_submit_request_from_event( "order request listing address is outside seller authority".to_owned(), )); } - let payload = - canonicalize_active_order_request_for_signer(envelope.payload, event.author.as_str()) - .map_err(|error| { - RuntimeError::Config(format!("canonicalize order request: {error}")) - })?; + let payload = canonicalize_order_request_for_signer(envelope.payload, event.author.as_str()) + .map_err(|error| RuntimeError::Config(format!("canonicalize order request: {error}")))?; let listing_event_id = context.listing_event.as_ref().map(|event| event.id.clone()); Ok(ResolvedOrderSubmitRequest { @@ -11506,7 +11295,7 @@ fn order_submit_request_from_event( fn order_submit_request_matches_draft( request: &ResolvedOrderSubmitRequest, loaded: &LoadedOrderDraft, - payload: &RadrootsTradeOrderRequested, + payload: &RadrootsOrderRequest, ) -> bool { request.payload == *payload && request.listing_event_id.as_deref() @@ -11538,7 +11327,7 @@ fn order_submit_deduplicated_view( buyer_write_capable: None, seller_pubkey: non_empty_string(loaded.document.order.seller_pubkey.clone()), event_id: Some(request.request_event_id.clone()), - event_kind: Some(KIND_TRADE_ORDER_REQUEST), + event_kind: Some(KIND_ORDER_REQUEST), dry_run: config.output.dry_run, deduplicated: true, target_relays, @@ -11628,7 +11417,7 @@ fn order_submit_invalid_existing_request_view( buyer_write_capable: None, seller_pubkey: non_empty_string(loaded.document.order.seller_pubkey.clone()), event_id: None, - event_kind: Some(KIND_TRADE_ORDER_REQUEST), + event_kind: Some(KIND_ORDER_REQUEST), dry_run: config.output.dry_run, deduplicated: false, target_relays, @@ -11652,12 +11441,12 @@ fn order_submit_invalid_existing_request_view( fn canonical_order_request_payload_from_loaded( loaded: &LoadedOrderDraft, signer_pubkey: &str, -) -> Result<RadrootsTradeOrderRequested, RuntimeError> { +) -> Result<RadrootsOrderRequest, RuntimeError> { let economics = loaded.document.order.economics.clone().ok_or_else(|| { RuntimeError::Config("order draft is missing quote economics".to_owned()) })?; - let payload = RadrootsTradeOrderRequested { + let payload = RadrootsOrderRequest { order_id: loaded.document.order.order_id.clone(), listing_addr: loaded.document.order.listing_addr.clone(), buyer_pubkey: loaded.document.order.buyer_pubkey.clone(), @@ -11667,14 +11456,14 @@ fn canonical_order_request_payload_from_loaded( .order .items .iter() - .map(|item| RadrootsTradeOrderItem { + .map(|item| RadrootsOrderItem { bin_id: item.bin_id.clone(), bin_count: item.bin_count, }) .collect(), economics, }; - canonicalize_active_order_request_for_signer(payload, signer_pubkey) + canonicalize_order_request_for_signer(payload, signer_pubkey) .map_err(|error| RuntimeError::Config(format!("canonicalize order request: {error}"))) } @@ -11683,7 +11472,7 @@ fn publish_order_request( loaded: &LoadedOrderDraft, args: &OrderSubmitArgs, signing: account::AccountSigningIdentity, - payload: RadrootsTradeOrderRequested, + payload: RadrootsOrderRequest, ) -> Result<OrderSubmitView, RuntimeError> { let listing_event = order_listing_event_ptr(config, loaded)?; let client = order_relay_publish_client(config)?; @@ -11694,7 +11483,7 @@ fn publish_order_request( RuntimeError::Network(format!("build relay order submit runtime: {error}")) })?; let receipt = runtime - .block_on(client.trade().publish_order_request_with_identity( + .block_on(client.order().publish_order_request_with_identity( &signing.identity, &listing_event, &payload, @@ -12226,28 +12015,28 @@ fn resolve_local_order_revision_decision_signing_identity( Ok(signing) } -fn parse_fulfillment_state(state: &str) -> Result<RadrootsActiveTradeFulfillmentState, String> { +fn parse_fulfillment_state(state: &str) -> Result<RadrootsOrderFulfillmentState, String> { match state.trim() { - "accepted_not_fulfilled" => Ok(RadrootsActiveTradeFulfillmentState::AcceptedNotFulfilled), - "preparing" => Ok(RadrootsActiveTradeFulfillmentState::Preparing), - "ready_for_pickup" => Ok(RadrootsActiveTradeFulfillmentState::ReadyForPickup), - "out_for_delivery" => Ok(RadrootsActiveTradeFulfillmentState::OutForDelivery), - "delivered" => Ok(RadrootsActiveTradeFulfillmentState::Delivered), - "seller_cancelled" => Ok(RadrootsActiveTradeFulfillmentState::SellerCancelled), + "accepted_not_fulfilled" => Ok(RadrootsOrderFulfillmentState::AcceptedNotFulfilled), + "preparing" => Ok(RadrootsOrderFulfillmentState::Preparing), + "ready_for_pickup" => Ok(RadrootsOrderFulfillmentState::ReadyForPickup), + "out_for_delivery" => Ok(RadrootsOrderFulfillmentState::OutForDelivery), + "delivered" => Ok(RadrootsOrderFulfillmentState::Delivered), + "seller_cancelled" => Ok(RadrootsOrderFulfillmentState::SellerCancelled), other => Err(format!( "unsupported fulfillment state `{other}`; expected preparing, ready_for_pickup, out_for_delivery, delivered, or seller_cancelled" )), } } -fn fulfillment_state_name(state: RadrootsActiveTradeFulfillmentState) -> &'static str { +fn fulfillment_state_name(state: RadrootsOrderFulfillmentState) -> &'static str { match state { - RadrootsActiveTradeFulfillmentState::AcceptedNotFulfilled => "accepted_not_fulfilled", - RadrootsActiveTradeFulfillmentState::Preparing => "preparing", - RadrootsActiveTradeFulfillmentState::ReadyForPickup => "ready_for_pickup", - RadrootsActiveTradeFulfillmentState::OutForDelivery => "out_for_delivery", - RadrootsActiveTradeFulfillmentState::Delivered => "delivered", - RadrootsActiveTradeFulfillmentState::SellerCancelled => "seller_cancelled", + RadrootsOrderFulfillmentState::AcceptedNotFulfilled => "accepted_not_fulfilled", + RadrootsOrderFulfillmentState::Preparing => "preparing", + RadrootsOrderFulfillmentState::ReadyForPickup => "ready_for_pickup", + RadrootsOrderFulfillmentState::OutForDelivery => "out_for_delivery", + RadrootsOrderFulfillmentState::Delivered => "delivered", + RadrootsOrderFulfillmentState::SellerCancelled => "seller_cancelled", } } @@ -12316,8 +12105,8 @@ fn draft_lookup_path(config: &RuntimeConfig, lookup: &str) -> PathBuf { drafts_dir(config).join(file_name) } -fn parse_listing_addr(raw: &str) -> Result<RadrootsTradeListingAddress, String> { - RadrootsTradeListingAddress::parse(raw).map_err(|error| error.to_string()) +fn parse_listing_addr(raw: &str) -> Result<RadrootsOrderListingAddress, String> { + RadrootsOrderListingAddress::parse(raw).map_err(|error| error.to_string()) } fn issue(field: impl Into<String>, message: impl Into<String>) -> OrderIssueView { @@ -12554,39 +12343,36 @@ mod tests { }; use radroots_events::RadrootsNostrEventPtr; use radroots_events::kinds::{ - KIND_TRADE_CANCEL, KIND_TRADE_FULFILLMENT_UPDATE, KIND_TRADE_ORDER_DECISION, - KIND_TRADE_ORDER_REVISION, KIND_TRADE_ORDER_REVISION_RESPONSE, KIND_TRADE_PAYMENT_RECORDED, - KIND_TRADE_RECEIPT, KIND_TRADE_SETTLEMENT_DECISION, + KIND_ORDER_CANCELLATION, KIND_ORDER_DECISION, KIND_ORDER_FULFILLMENT_UPDATE, + KIND_ORDER_PAYMENT_RECORD, KIND_ORDER_RECEIPT, KIND_ORDER_REVISION_DECISION, + KIND_ORDER_REVISION_PROPOSAL, KIND_ORDER_SETTLEMENT_DECISION, }; - use radroots_events::trade::{ - RadrootsActiveTradeFulfillmentState, RadrootsActiveTradeMessageType, - RadrootsTradeBuyerReceipt, RadrootsTradeFulfillmentUpdated, - RadrootsTradeInventoryCommitment, RadrootsTradeOrderCancelled, RadrootsTradeOrderDecision, - RadrootsTradeOrderDecisionEvent, RadrootsTradeOrderEconomicItem, - RadrootsTradeOrderEconomics, RadrootsTradeOrderItem, RadrootsTradeOrderRequested, - RadrootsTradeOrderRevisionDecision, RadrootsTradeOrderRevisionDecisionEvent, - RadrootsTradeOrderRevisionProposed, RadrootsTradePaymentMethod, - RadrootsTradePaymentRecorded, RadrootsTradePricingBasis, RadrootsTradeSettlementDecision, - RadrootsTradeSettlementDecisionEvent, + use radroots_events::order::{ + RadrootsOrderCancellation, RadrootsOrderDecision, RadrootsOrderDecisionOutcome, + RadrootsOrderEconomicItem, RadrootsOrderEconomics, RadrootsOrderEventType, + RadrootsOrderFulfillmentState, RadrootsOrderFulfillmentUpdate, + RadrootsOrderInventoryCommitment, RadrootsOrderItem, RadrootsOrderPaymentMethod, + RadrootsOrderPaymentRecord, RadrootsOrderPricingBasis, RadrootsOrderReceipt, + RadrootsOrderRequest, RadrootsOrderRevisionDecision, RadrootsOrderRevisionOutcome, + RadrootsOrderRevisionProposal, RadrootsOrderSettlementDecision, + RadrootsOrderSettlementOutcome, }; - use radroots_events_codec::trade::{ - active_trade_buyer_receipt_event_build, active_trade_event_context_from_tags, - active_trade_fulfillment_update_event_build, active_trade_order_cancel_event_build, - active_trade_order_decision_event_build, active_trade_order_decision_from_event, - active_trade_order_request_event_build, active_trade_order_revision_decision_event_build, - active_trade_order_revision_proposal_event_build, - active_trade_payment_recorded_event_build, active_trade_settlement_decision_event_build, + use radroots_events_codec::order::{ + order_cancellation_event_build, order_decision_event_build, order_decision_from_event, + order_event_context_from_tags, order_fulfillment_update_event_build, + order_payment_record_event_build, order_receipt_event_build, order_request_event_build, + order_revision_decision_event_build, order_revision_proposal_event_build, + order_settlement_decision_event_build, }; use radroots_identity::RadrootsIdentity; use radroots_nostr::prelude::{radroots_event_from_nostr, radroots_nostr_build_event}; use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use radroots_trade::order::{ - RadrootsActiveOrderCancellationRecord, RadrootsActiveOrderDecisionRecord, - RadrootsActiveOrderFulfillmentRecord, RadrootsActiveOrderReceiptRecord, - RadrootsActiveOrderRevisionDecisionRecord, RadrootsActiveOrderRevisionProposalRecord, - RadrootsListingInventoryBinAvailability, canonicalize_active_order_decision_for_signer, - reduce_listing_inventory_accounting, + RadrootsListingInventoryBinAvailability, RadrootsOrderCancellationRecord, + RadrootsOrderDecisionRecord, RadrootsOrderFulfillmentRecord, RadrootsOrderReceiptRecord, + RadrootsOrderRevisionDecisionRecord, RadrootsOrderRevisionProposalRecord, + canonicalize_order_decision_for_signer, reduce_listing_inventory_accounting, }; use tempfile::tempdir; @@ -12967,18 +12753,18 @@ mod tests { let seller_pubkey = seller.public_key_hex(); let listing_addr = format!("30402:{seller_pubkey}:AAAAAAAAAAAAAAAAAAAAAg"); let listing_event_id = "1".repeat(64); - let payload = RadrootsTradeOrderRequested { + let payload = RadrootsOrderRequest { order_id: "ord_AAAAAAAAAAAAAAAAAAAAAg".to_owned(), listing_addr: listing_addr.clone(), buyer_pubkey: buyer_pubkey.clone(), seller_pubkey: seller_pubkey.clone(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count: 2, }], economics: sample_order_economics("ord_AAAAAAAAAAAAAAAAAAAAAg", "bin-1", 2), }; - let parts = active_trade_order_request_event_build( + let parts = order_request_event_build( &RadrootsNostrEventPtr { id: listing_event_id.clone(), relays: None, @@ -13046,8 +12832,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13068,8 +12854,8 @@ mod tests { order_revision_payload_from_status(&args, &status_view).expect("revision payload"); let parts = order_revision_event_parts(&status_view, &payload).expect("revision event parts"); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRevisionProposed, + let context = order_event_context_from_tags( + RadrootsOrderEventType::OrderRevisionProposed, &parts.tags, ) .expect("revision context"); @@ -13082,7 +12868,7 @@ mod tests { assert_eq!(payload.economics.quote_version, 2); assert!(payload.economics.quote_id.starts_with("revision_rev_")); assert_eq!(payload.reason, "update count"); - assert_eq!(parts.kind, KIND_TRADE_ORDER_REVISION); + assert_eq!(parts.kind, KIND_ORDER_REVISION_PROPOSAL); assert_eq!( context.root_event_id.as_deref(), Some(request_event_id.as_str()) @@ -13103,8 +12889,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13134,15 +12920,15 @@ mod tests { .expect("revision decision payload"); let parts = order_revision_decision_event_parts(&payload).expect("revision decision event parts"); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderRevisionDecision, + let context = order_event_context_from_tags( + RadrootsOrderEventType::OrderRevisionDecision, &parts.tags, ) .expect("revision decision context"); assert_eq!(payload.revision_id, proposal.payload.revision_id); assert_eq!(payload.prev_event_id, revision_event_id); - assert_eq!(parts.kind, KIND_TRADE_ORDER_REVISION_RESPONSE); + assert_eq!(parts.kind, KIND_ORDER_REVISION_DECISION); let request_event_id = fixture.request_event.id.to_string(); assert_eq!( context.root_event_id.as_deref(), @@ -13167,8 +12953,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13229,8 +13015,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13295,8 +13081,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13315,7 +13101,7 @@ mod tests { let revision_decision_event = signed_order_revision_decision_event( &fixture.buyer, &revision_event, - RadrootsTradeOrderRevisionDecision::Accepted, + RadrootsOrderRevisionOutcome::Accepted, ); let revision_decision_event_id = revision_decision_event.id.to_string(); @@ -13364,8 +13150,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13385,7 +13171,7 @@ mod tests { let revision_decision_event = signed_order_revision_decision_event( &fixture.buyer, &revision_event, - RadrootsTradeOrderRevisionDecision::Declined { + RadrootsOrderRevisionOutcome::Declined { reason: "keep original order".to_owned(), }, ); @@ -13439,8 +13225,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13490,8 +13276,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13547,7 +13333,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Declined { + RadrootsOrderDecisionOutcome::Declined { reason: "out of stock".to_owned(), }, ); @@ -13604,8 +13390,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -13650,7 +13436,7 @@ mod tests { assert_eq!(view.state, "forked"); assert_eq!(view.event_id.as_deref(), Some(revision_event_id.as_str())); - assert_eq!(view.event_kind, Some(KIND_TRADE_ORDER_REVISION)); + assert_eq!(view.event_kind, Some(KIND_ORDER_REVISION_PROPOSAL)); assert_eq!(view.issues.len(), 1); assert_eq!(view.issues[0].code, "pending_revision_exists"); assert_eq!(view.issues[0].event_ids, vec![revision_event_id]); @@ -13669,8 +13455,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -14145,7 +13931,7 @@ mod tests { assert_eq!(payload.listing_addr, listing_addr); assert_eq!(payload.buyer_pubkey, buyer_pubkey); assert_eq!(payload.seller_pubkey, seller_pubkey); - let RadrootsTradeOrderDecision::Accepted { + let RadrootsOrderDecisionOutcome::Accepted { inventory_commitments, } = payload.decision else { @@ -14187,29 +13973,25 @@ mod tests { .expect("resolved request") .clone(); let payload = accepted_order_decision_payload_from_request(&request); - let payload = - canonicalize_active_order_decision_for_signer(payload, seller_pubkey.as_str()) - .expect("canonical decision payload"); - let parts = active_trade_order_decision_event_build( + let payload = canonicalize_order_decision_for_signer(payload, seller_pubkey.as_str()) + .expect("canonical decision payload"); + let parts = order_decision_event_build( request.request_event_id.as_str(), request.request_event_id.as_str(), &payload, ) .expect("decision event parts"); - assert_eq!(parts.kind, KIND_TRADE_ORDER_DECISION); + assert_eq!(parts.kind, KIND_ORDER_DECISION); let event = radroots_nostr_build_event(parts.kind, parts.content, parts.tags) .expect("nostr event builder") .sign_with_keys(seller.keys()) .expect("signed order decision"); let event = radroots_event_from_nostr(&event); - let envelope = - active_trade_order_decision_from_event(&event).expect("decoded decision event"); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderDecision, - &event.tags, - ) - .expect("decision event context"); + let envelope = order_decision_from_event(&event).expect("decoded decision event"); + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderDecision, &event.tags) + .expect("decision event context"); assert_eq!(envelope.order_id, order_id); assert_eq!(envelope.payload.seller_pubkey, seller_pubkey); @@ -14261,7 +14043,7 @@ mod tests { assert_eq!(payload.listing_addr, listing_addr); assert_eq!(payload.buyer_pubkey, buyer_pubkey); assert_eq!(payload.seller_pubkey, seller_pubkey); - let RadrootsTradeOrderDecision::Declined { reason } = payload.decision else { + let RadrootsOrderDecisionOutcome::Declined { reason } = payload.decision else { panic!("expected declined decision"); }; assert_eq!(reason, "out of stock"); @@ -14298,34 +14080,30 @@ mod tests { .expect("resolved request") .clone(); let payload = declined_order_decision_payload_from_request(&request, " out of stock "); - let payload = - canonicalize_active_order_decision_for_signer(payload, seller_pubkey.as_str()) - .expect("canonical decision payload"); - let parts = active_trade_order_decision_event_build( + let payload = canonicalize_order_decision_for_signer(payload, seller_pubkey.as_str()) + .expect("canonical decision payload"); + let parts = order_decision_event_build( request.request_event_id.as_str(), request.request_event_id.as_str(), &payload, ) .expect("decision event parts"); - assert_eq!(parts.kind, KIND_TRADE_ORDER_DECISION); + assert_eq!(parts.kind, KIND_ORDER_DECISION); let event = radroots_nostr_build_event(parts.kind, parts.content, parts.tags) .expect("nostr event builder") .sign_with_keys(seller.keys()) .expect("signed order decision"); let event = radroots_event_from_nostr(&event); - let envelope = - active_trade_order_decision_from_event(&event).expect("decoded decision event"); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderDecision, - &event.tags, - ) - .expect("decision event context"); + let envelope = order_decision_from_event(&event).expect("decoded decision event"); + let context = + order_event_context_from_tags(RadrootsOrderEventType::OrderDecision, &event.tags) + .expect("decision event context"); assert_eq!(envelope.order_id, order_id); assert_eq!(envelope.payload.seller_pubkey, seller_pubkey); assert_eq!(envelope.payload.buyer_pubkey, buyer_pubkey); - let RadrootsTradeOrderDecision::Declined { reason } = envelope.payload.decision else { + let RadrootsOrderDecisionOutcome::Declined { reason } = envelope.payload.decision else { panic!("expected declined decision"); }; assert_eq!(reason, "out of stock"); @@ -14523,8 +14301,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -14723,8 +14501,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -14819,7 +14597,7 @@ mod tests { assert_eq!( u32::from(cancellation_event.kind.as_u16()), - KIND_TRADE_CANCEL + KIND_ORDER_CANCELLATION ); assert_eq!(view.state, "cancelled"); assert_eq!( @@ -14867,8 +14645,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -14933,8 +14711,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15008,13 +14786,13 @@ mod tests { let requested_parts = order_cancellation_event_parts(&requested_status, &requested_payload) .expect("requested cancellation parts"); let request_event_id = fixture.request_event.id.to_string(); - let requested_context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderCancelled, + let requested_context = order_event_context_from_tags( + RadrootsOrderEventType::OrderCancelled, &requested_parts.tags, ) .expect("requested cancellation context"); - assert_eq!(requested_parts.kind, KIND_TRADE_CANCEL); + assert_eq!(requested_parts.kind, KIND_ORDER_CANCELLATION); assert_eq!( requested_context.root_event_id.as_deref(), Some(request_event_id.as_str()) @@ -15031,8 +14809,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15062,13 +14840,13 @@ mod tests { let accepted_parts = order_cancellation_event_parts(&accepted_status, &accepted_payload) .expect("accepted cancellation parts"); let decision_event_id = decision_event.id.to_string(); - let accepted_context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeOrderCancelled, + let accepted_context = order_event_context_from_tags( + RadrootsOrderEventType::OrderCancelled, &accepted_parts.tags, ) .expect("accepted cancellation context"); - assert_eq!(accepted_parts.kind, KIND_TRADE_CANCEL); + assert_eq!(accepted_parts.kind, KIND_ORDER_CANCELLATION); assert_eq!( accepted_context.root_event_id.as_deref(), Some(request_event_id.as_str()) @@ -15093,8 +14871,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15151,8 +14929,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15166,7 +14944,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let status_view = order_status_from_receipt( fixture.order_id.as_str(), @@ -15214,8 +14992,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15304,8 +15082,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15319,7 +15097,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -15381,8 +15159,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15396,7 +15174,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -15430,7 +15208,7 @@ mod tests { let inventory = view.inventory.as_ref().expect("inventory view"); let fulfillment = view.fulfillment.as_ref().expect("fulfillment view"); - assert_eq!(u32::from(receipt_event.kind.as_u16()), KIND_TRADE_RECEIPT); + assert_eq!(u32::from(receipt_event.kind.as_u16()), KIND_ORDER_RECEIPT); assert_eq!(view.state, "completed"); assert_eq!( view.last_event_id.as_deref(), @@ -15475,8 +15253,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15490,7 +15268,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -15553,8 +15331,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15568,7 +15346,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let delivered_fulfillment_event = signed_fulfillment_update_event( &fixture.seller, @@ -15578,7 +15356,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -15633,8 +15411,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15648,7 +15426,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let status_view = order_status_from_receipt( fixture.order_id.as_str(), @@ -15679,15 +15457,13 @@ mod tests { let parts = order_receipt_event_parts(&status_view, &payload).expect("receipt parts"); let request_event_id = fixture.request_event.id.to_string(); let fulfillment_event_id = fulfillment_event.id.to_string(); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeBuyerReceipt, - &parts.tags, - ) - .expect("receipt context"); + let context = + order_event_context_from_tags(RadrootsOrderEventType::BuyerReceipt, &parts.tags) + .expect("receipt context"); assert_eq!(payload.received, true); assert!(payload.received_at > 0); - assert_eq!(parts.kind, KIND_TRADE_RECEIPT); + assert_eq!(parts.kind, KIND_ORDER_RECEIPT); assert_eq!( context.root_event_id.as_deref(), Some(request_event_id.as_str()) @@ -15712,8 +15488,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15727,7 +15503,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let status_view = order_status_from_receipt( fixture.order_id.as_str(), @@ -15789,8 +15565,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15821,13 +15597,11 @@ mod tests { let parts = order_payment_event_parts(&status_view, &payload).expect("payment parts"); let request_event_id = fixture.request_event.id.to_string(); let decision_event_id = decision_event.id.to_string(); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradePaymentRecorded, - &parts.tags, - ) - .expect("payment context"); + let context = + order_event_context_from_tags(RadrootsOrderEventType::PaymentRecorded, &parts.tags) + .expect("payment context"); - assert_eq!(parts.kind, KIND_TRADE_PAYMENT_RECORDED); + assert_eq!(parts.kind, KIND_ORDER_PAYMENT_RECORD); assert_eq!( context.root_event_id.as_deref(), Some(request_event_id.as_str()) @@ -15841,7 +15615,7 @@ mod tests { assert_eq!(payload.quote_version, 1); assert_eq!(payload.amount, RadrootsCoreDecimal::from(12u32)); assert_eq!(payload.currency, RadrootsCoreCurrency::USD); - assert_eq!(payload.method, RadrootsTradePaymentMethod::ManualTransfer); + assert_eq!(payload.method, RadrootsOrderPaymentMethod::ManualTransfer); assert_eq!(payload.reference.as_deref(), Some("memo-1")); assert_eq!(payload.paid_at, Some(1_777_666_000)); } @@ -15860,8 +15634,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15905,7 +15679,7 @@ mod tests { assert_eq!(view.currency, Some(RadrootsCoreCurrency::USD)); assert_eq!( view.method, - Some(RadrootsTradePaymentMethod::ManualTransfer) + Some(RadrootsOrderPaymentMethod::ManualTransfer) ); assert_eq!(view.reference.as_deref(), Some("memo-1")); assert_eq!(view.paid_at, Some(1_777_666_000)); @@ -15929,8 +15703,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -15976,8 +15750,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16021,8 +15795,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16078,8 +15852,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16137,8 +15911,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16195,8 +15969,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16246,8 +16020,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16297,13 +16071,11 @@ mod tests { let parts = order_settlement_event_parts(&status_view, &payload).expect("settlement parts"); let request_event_id = fixture.request_event.id.to_string(); let decision_event_id = decision_event.id.to_string(); - let context = active_trade_event_context_from_tags( - RadrootsActiveTradeMessageType::TradeSettlementDecision, - &parts.tags, - ) - .expect("settlement context"); + let context = + order_event_context_from_tags(RadrootsOrderEventType::SettlementDecision, &parts.tags) + .expect("settlement context"); - assert_eq!(parts.kind, KIND_TRADE_SETTLEMENT_DECISION); + assert_eq!(parts.kind, KIND_ORDER_SETTLEMENT_DECISION); assert_eq!( context.root_event_id.as_deref(), Some(request_event_id.as_str()) @@ -16317,7 +16089,7 @@ mod tests { assert_eq!(payload.payment_event_id, payload.previous_event_id); assert_eq!(payload.amount, RadrootsCoreDecimal::from(12u32)); assert_eq!(payload.currency, RadrootsCoreCurrency::USD); - assert_eq!(payload.decision, RadrootsTradeSettlementDecision::Accepted); + assert_eq!(payload.decision, RadrootsOrderSettlementOutcome::Accepted); assert_eq!(payload.reason, None); } @@ -16335,8 +16107,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16389,7 +16161,7 @@ mod tests { assert_eq!(view.currency, Some(RadrootsCoreCurrency::USD)); assert_eq!( view.decision, - Some(RadrootsTradeSettlementDecision::Rejected) + Some(RadrootsOrderSettlementOutcome::Rejected) ); assert_eq!( view.settlement_reason.as_deref(), @@ -16414,8 +16186,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16476,8 +16248,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16533,8 +16305,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16554,7 +16326,7 @@ mod tests { &fixture.seller, &fixture.request_event, &payment_event, - RadrootsTradeSettlementDecision::Accepted, + RadrootsOrderSettlementOutcome::Accepted, ); let payment_event_id = payment_event.id.to_string(); let status_view = order_status_from_receipt_with_deferred_payment( @@ -16604,8 +16376,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16625,7 +16397,7 @@ mod tests { &fixture.seller, &fixture.request_event, &payment_event, - RadrootsTradeSettlementDecision::Accepted, + RadrootsOrderSettlementOutcome::Accepted, ); let view = order_status_from_receipt( fixture.order_id.as_str(), @@ -16660,8 +16432,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16681,7 +16453,7 @@ mod tests { &fixture.seller, &fixture.request_event, &payment_event, - RadrootsTradeSettlementDecision::Rejected, + RadrootsOrderSettlementOutcome::Rejected, ); let view = order_status_from_receipt_with_deferred_payment( fixture.order_id.as_str(), @@ -16718,8 +16490,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16733,7 +16505,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Preparing, + RadrootsOrderFulfillmentState::Preparing, ); let status_view = order_status_from_receipt( fixture.order_id.as_str(), @@ -16781,8 +16553,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16796,7 +16568,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let status_view = order_status_from_receipt( fixture.order_id.as_str(), @@ -16844,8 +16616,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16859,7 +16631,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -16899,7 +16671,7 @@ mod tests { assert_eq!(view.state, "terminal"); assert_eq!(view.event_id.as_deref(), Some(receipt_event_id.as_str())); - assert_eq!(view.event_kind, Some(KIND_TRADE_RECEIPT)); + assert_eq!(view.event_kind, Some(KIND_ORDER_RECEIPT)); assert!( view.reason .as_deref() @@ -16918,8 +16690,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -16933,7 +16705,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let receipt = DirectRelayFetchReceipt { target_relays: vec!["ws://relay.test".to_owned()], @@ -16953,7 +16725,7 @@ mod tests { assert_eq!( u32::from(fulfillment_event.kind.as_u16()), - KIND_TRADE_FULFILLMENT_UPDATE + KIND_ORDER_FULFILLMENT_UPDATE ); assert_eq!(view.state, "accepted"); assert_eq!( @@ -16991,8 +16763,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17006,7 +16778,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::SellerCancelled, + RadrootsOrderFulfillmentState::SellerCancelled, ); let receipt = DirectRelayFetchReceipt { target_relays: vec!["ws://relay.test".to_owned()], @@ -17044,8 +16816,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17059,7 +16831,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Preparing, + RadrootsOrderFulfillmentState::Preparing, ); let second_fulfillment_event = signed_fulfillment_update_event( &fixture.seller, @@ -17069,7 +16841,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let mut expected_event_ids = vec![ first_fulfillment_event.id.to_string(), @@ -17112,8 +16884,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17127,7 +16899,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Preparing, + RadrootsOrderFulfillmentState::Preparing, ); let status_view = order_status_from_receipt( fixture.order_id.as_str(), @@ -17152,7 +16924,7 @@ mod tests { &config, &args, &status_view, - RadrootsActiveTradeFulfillmentState::ReadyForPickup, + RadrootsOrderFulfillmentState::ReadyForPickup, ); let request_event_id = fixture.request_event.id.to_string(); let fulfillment_event_id = fulfillment_event.id.to_string(); @@ -17189,8 +16961,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17204,7 +16976,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let fulfillment_event_id = fulfillment_event.id.to_string(); let reduction = order_status_reduction_from_receipt_with_context( @@ -17268,8 +17040,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17283,7 +17055,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -17434,7 +17206,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Declined { + RadrootsOrderDecisionOutcome::Declined { reason: "out of stock".to_owned(), }, ); @@ -17481,8 +17253,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17495,7 +17267,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Declined { + RadrootsOrderDecisionOutcome::Declined { reason: "out of stock".to_owned(), }, ); @@ -17559,8 +17331,8 @@ mod tests { fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), wrong_buyer.public_key_hex().as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17604,8 +17376,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17639,7 +17411,7 @@ mod tests { assert_eq!(view.state, "already_decided"); assert_eq!(view.event_id.as_deref(), Some(decision_event_id.as_str())); - assert_eq!(view.event_kind, Some(KIND_TRADE_ORDER_DECISION)); + assert_eq!(view.event_kind, Some(KIND_ORDER_DECISION)); assert_eq!( view.request_event_id.as_deref(), Some(request.request_event_id.as_str()) @@ -17671,8 +17443,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17687,7 +17459,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsActiveTradeFulfillmentState::Delivered, + RadrootsOrderFulfillmentState::Delivered, ); let receipt_event = signed_buyer_receipt_event( &fixture.buyer, @@ -17736,7 +17508,7 @@ mod tests { crate::view::runtime::CommandDisposition::ValidationFailed ); assert_eq!(view.event_id.as_deref(), Some(decision_event_id.as_str())); - assert_eq!(view.event_kind, Some(KIND_TRADE_ORDER_DECISION)); + assert_eq!(view.event_kind, Some(KIND_ORDER_DECISION)); assert!( view.reason .as_deref() @@ -17778,7 +17550,7 @@ mod tests { listing_addr: fixture.listing_addr.clone(), buyer_pubkey: fixture.buyer_pubkey.clone(), seller_pubkey: fixture.seller_pubkey.clone(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17786,7 +17558,7 @@ mod tests { }; let existing_decision_payload = accepted_order_decision_payload_from_request(&existing_request); - let existing_decision_payload = canonicalize_active_order_decision_for_signer( + let existing_decision_payload = canonicalize_order_decision_for_signer( existing_decision_payload, fixture.seller_pubkey.as_str(), ) @@ -17803,7 +17575,7 @@ mod tests { active_request_record_from_resolved(&request), ], vec![ - RadrootsActiveOrderDecisionRecord { + RadrootsOrderDecisionRecord { event_id: "existing_decision".to_owned(), author_pubkey: fixture.seller_pubkey.clone(), counterparty_pubkey: fixture.buyer_pubkey.clone(), @@ -17813,11 +17585,11 @@ mod tests { }, proposed_accept_decision_record(&request).expect("proposed accept decision"), ], - Vec::<RadrootsActiveOrderRevisionProposalRecord>::new(), - Vec::<RadrootsActiveOrderRevisionDecisionRecord>::new(), - Vec::<RadrootsActiveOrderFulfillmentRecord>::new(), - Vec::<RadrootsActiveOrderCancellationRecord>::new(), - Vec::<RadrootsActiveOrderReceiptRecord>::new(), + Vec::<RadrootsOrderRevisionProposalRecord>::new(), + Vec::<RadrootsOrderRevisionDecisionRecord>::new(), + Vec::<RadrootsOrderFulfillmentRecord>::new(), + Vec::<RadrootsOrderCancellationRecord>::new(), + Vec::<RadrootsOrderReceiptRecord>::new(), ); let args = OrderDecisionArgs { key: fixture.order_id.clone(), @@ -17876,7 +17648,7 @@ mod tests { listing_addr: fixture.listing_addr.clone(), buyer_pubkey: fixture.buyer_pubkey.clone(), seller_pubkey: fixture.seller_pubkey.clone(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -17884,7 +17656,7 @@ mod tests { }; let existing_decision_payload = accepted_order_decision_payload_from_request(&existing_request); - let existing_decision_payload = canonicalize_active_order_decision_for_signer( + let existing_decision_payload = canonicalize_order_decision_for_signer( existing_decision_payload, fixture.seller_pubkey.as_str(), ) @@ -17902,7 +17674,7 @@ mod tests { active_request_record_from_resolved(&request), ], vec![ - RadrootsActiveOrderDecisionRecord { + RadrootsOrderDecisionRecord { event_id: existing_decision_event_id.clone(), author_pubkey: fixture.seller_pubkey.clone(), counterparty_pubkey: fixture.buyer_pubkey.clone(), @@ -17912,24 +17684,24 @@ mod tests { }, proposed_accept_decision_record(&request).expect("proposed accept decision"), ], - Vec::<RadrootsActiveOrderRevisionProposalRecord>::new(), - Vec::<RadrootsActiveOrderRevisionDecisionRecord>::new(), - vec![RadrootsActiveOrderFulfillmentRecord { + Vec::<RadrootsOrderRevisionProposalRecord>::new(), + Vec::<RadrootsOrderRevisionDecisionRecord>::new(), + vec![RadrootsOrderFulfillmentRecord { event_id: "existing_fulfillment".to_owned(), author_pubkey: fixture.seller_pubkey.clone(), counterparty_pubkey: fixture.buyer_pubkey.clone(), root_event_id: existing_request.request_event_id.clone(), prev_event_id: existing_decision_event_id, - payload: RadrootsTradeFulfillmentUpdated { + payload: RadrootsOrderFulfillmentUpdate { order_id: existing_request.order_id.clone(), listing_addr: existing_request.listing_addr.clone(), buyer_pubkey: existing_request.buyer_pubkey.clone(), seller_pubkey: existing_request.seller_pubkey.clone(), - status: RadrootsActiveTradeFulfillmentState::SellerCancelled, + status: RadrootsOrderFulfillmentState::SellerCancelled, }, }], - Vec::<RadrootsActiveOrderCancellationRecord>::new(), - Vec::<RadrootsActiveOrderReceiptRecord>::new(), + Vec::<RadrootsOrderCancellationRecord>::new(), + Vec::<RadrootsOrderReceiptRecord>::new(), ); let args = OrderDecisionArgs { key: fixture.order_id.clone(), @@ -17967,8 +17739,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 1, }], @@ -18010,7 +17782,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Declined { + RadrootsOrderDecisionOutcome::Declined { reason: "out of stock".to_owned(), }, ); @@ -18049,8 +17821,8 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Accepted { - inventory_commitments: vec![RadrootsTradeInventoryCommitment { + RadrootsOrderDecisionOutcome::Accepted { + inventory_commitments: vec![RadrootsOrderInventoryCommitment { bin_id: "bin-1".to_owned(), bin_count: 2, }], @@ -18063,7 +17835,7 @@ mod tests { fixture.listing_addr.as_str(), fixture.buyer_pubkey.as_str(), fixture.seller_pubkey.as_str(), - RadrootsTradeOrderDecision::Declined { + RadrootsOrderDecisionOutcome::Declined { reason: "out of stock".to_owned(), }, ); @@ -18415,7 +18187,7 @@ mod tests { order_id: &str, bin_id: &str, bin_count: u32, - ) -> RadrootsTradeOrderEconomics { + ) -> RadrootsOrderEconomics { sample_order_economics_with_unit_price(order_id, bin_id, bin_count, 6) } @@ -18424,16 +18196,16 @@ mod tests { bin_id: &str, bin_count: u32, unit_price: u32, - ) -> RadrootsTradeOrderEconomics { + ) -> RadrootsOrderEconomics { let currency = RadrootsCoreCurrency::USD; let unit_price_amount = RadrootsCoreDecimal::from(unit_price); let line_amount = unit_price_amount * RadrootsCoreDecimal::from(bin_count); - RadrootsTradeOrderEconomics { + RadrootsOrderEconomics { quote_id: format!("quote_{order_id}"), quote_version: 1, - pricing_basis: RadrootsTradePricingBasis::ListingEvent, + pricing_basis: RadrootsOrderPricingBasis::ListingEvent, currency, - items: vec![RadrootsTradeOrderEconomicItem { + items: vec![RadrootsOrderEconomicItem { bin_id: bin_id.to_owned(), bin_count, quantity_amount: RadrootsCoreDecimal::ONE, @@ -18706,7 +18478,7 @@ mod tests { listing_addr: &str, buyer_pubkey: &str, seller_pubkey: &str, - decision: RadrootsTradeOrderDecision, + decision: RadrootsOrderDecisionOutcome, ) -> radroots_nostr::prelude::RadrootsNostrEvent { signed_order_decision_event_with_counterparty( seller, @@ -18728,19 +18500,19 @@ mod tests { buyer_pubkey: &str, seller_pubkey: &str, counterparty_pubkey: &str, - decision: RadrootsTradeOrderDecision, + decision: RadrootsOrderDecisionOutcome, ) -> radroots_nostr::prelude::RadrootsNostrEvent { - let payload = RadrootsTradeOrderDecisionEvent { + let payload = RadrootsOrderDecision { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), seller_pubkey: seller_pubkey.to_owned(), decision, }; - let payload = canonicalize_active_order_decision_for_signer(payload, seller_pubkey) + let payload = canonicalize_order_decision_for_signer(payload, seller_pubkey) .expect("canonical order decision"); let request_event_id = request_event.id.to_string(); - let parts = active_trade_order_decision_event_build( + let parts = order_decision_event_build( request_event_id.as_str(), request_event_id.as_str(), &payload, @@ -18772,7 +18544,7 @@ mod tests { economics.quote_id = "revision_rev_test".to_owned(); economics.quote_version = 2; economics.canonicalize(); - let payload = RadrootsTradeOrderRevisionProposed { + let payload = RadrootsOrderRevisionProposal { revision_id: "rev_test".to_owned(), order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), @@ -18780,14 +18552,14 @@ mod tests { seller_pubkey: seller_pubkey.to_owned(), root_event_id: request_event.id.to_string(), prev_event_id: decision_event.id.to_string(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count, }], economics, reason: "update count".to_owned(), }; - let parts = active_trade_order_revision_proposal_event_build( + let parts = order_revision_proposal_event_build( payload.root_event_id.as_str(), payload.prev_event_id.as_str(), &payload, @@ -18802,15 +18574,12 @@ mod tests { fn signed_order_revision_decision_event( buyer: &RadrootsIdentity, proposal_event: &radroots_nostr::prelude::RadrootsNostrEvent, - decision: RadrootsTradeOrderRevisionDecision, + decision: RadrootsOrderRevisionOutcome, ) -> radroots_nostr::prelude::RadrootsNostrEvent { let proposal = radroots_event_from_nostr(proposal_event); - let envelope = - radroots_events_codec::trade::active_trade_order_revision_proposal_from_event( - &proposal, - ) + let envelope = radroots_events_codec::order::order_revision_proposal_from_event(&proposal) .expect("decoded revision proposal"); - let payload = RadrootsTradeOrderRevisionDecisionEvent { + let payload = RadrootsOrderRevisionDecision { revision_id: envelope.payload.revision_id.clone(), order_id: envelope.payload.order_id.clone(), listing_addr: envelope.payload.listing_addr.clone(), @@ -18820,7 +18589,7 @@ mod tests { prev_event_id: proposal_event.id.to_string(), decision, }; - let parts = active_trade_order_revision_decision_event_build( + let parts = order_revision_decision_event_build( payload.root_event_id.as_str(), payload.prev_event_id.as_str(), &payload, @@ -18840,9 +18609,9 @@ mod tests { listing_addr: &str, buyer_pubkey: &str, seller_pubkey: &str, - status: RadrootsActiveTradeFulfillmentState, + status: RadrootsOrderFulfillmentState, ) -> radroots_nostr::prelude::RadrootsNostrEvent { - let payload = RadrootsTradeFulfillmentUpdated { + let payload = RadrootsOrderFulfillmentUpdate { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), @@ -18851,7 +18620,7 @@ mod tests { }; let request_event_id = request_event.id.to_string(); let prev_event_id = prev_event.id.to_string(); - let parts = active_trade_fulfillment_update_event_build( + let parts = order_fulfillment_update_event_build( request_event_id.as_str(), prev_event_id.as_str(), &payload, @@ -18873,7 +18642,7 @@ mod tests { seller_pubkey: &str, reason: &str, ) -> radroots_nostr::prelude::RadrootsNostrEvent { - let payload = RadrootsTradeOrderCancelled { + let payload = RadrootsOrderCancellation { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), @@ -18882,7 +18651,7 @@ mod tests { }; let request_event_id = request_event.id.to_string(); let prev_event_id = prev_event.id.to_string(); - let parts = active_trade_order_cancel_event_build( + let parts = order_cancellation_event_build( request_event_id.as_str(), prev_event_id.as_str(), &payload, @@ -18905,7 +18674,7 @@ mod tests { received: bool, issue: Option<&str>, ) -> radroots_nostr::prelude::RadrootsNostrEvent { - let payload = RadrootsTradeBuyerReceipt { + let payload = RadrootsOrderReceipt { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), @@ -18916,12 +18685,9 @@ mod tests { }; let request_event_id = request_event.id.to_string(); let prev_event_id = prev_event.id.to_string(); - let parts = active_trade_buyer_receipt_event_build( - request_event_id.as_str(), - prev_event_id.as_str(), - &payload, - ) - .expect("buyer receipt parts"); + let parts = + order_receipt_event_build(request_event_id.as_str(), prev_event_id.as_str(), &payload) + .expect("buyer receipt parts"); radroots_nostr_build_event(parts.kind, parts.content, parts.tags) .expect("nostr event builder") .sign_with_keys(buyer.keys()) @@ -18939,7 +18705,7 @@ mod tests { seller_pubkey: &str, ) -> radroots_nostr::prelude::RadrootsNostrEvent { let economics = sample_order_economics(order_id, "bin-1", 2); - let payload = RadrootsTradePaymentRecorded { + let payload = RadrootsOrderPaymentRecord { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), @@ -18949,17 +18715,15 @@ mod tests { agreement_event_id: agreement_event.id.to_string(), quote_id: economics.quote_id.clone(), quote_version: economics.quote_version, - economics_digest: radroots_trade::order::radroots_trade_order_economics_digest( - &economics, - ) - .expect("economics digest"), + economics_digest: radroots_trade::order::radroots_order_economics_digest(&economics) + .expect("economics digest"), amount: economics.total.amount, currency: economics.total.currency, - method: RadrootsTradePaymentMethod::ManualTransfer, + method: RadrootsOrderPaymentMethod::ManualTransfer, reference: Some("memo-1".to_owned()), paid_at: Some(1_777_666_000), }; - let parts = active_trade_payment_recorded_event_build( + let parts = order_payment_record_event_build( payload.root_event_id.as_str(), payload.previous_event_id.as_str(), &payload, @@ -18975,13 +18739,12 @@ mod tests { seller: &RadrootsIdentity, request_event: &radroots_nostr::prelude::RadrootsNostrEvent, payment_event: &radroots_nostr::prelude::RadrootsNostrEvent, - decision: RadrootsTradeSettlementDecision, + decision: RadrootsOrderSettlementOutcome, ) -> radroots_nostr::prelude::RadrootsNostrEvent { let payment = radroots_event_from_nostr(payment_event); - let envelope = - radroots_events_codec::trade::active_trade_payment_recorded_from_event(&payment) - .expect("decoded payment"); - let payload = RadrootsTradeSettlementDecisionEvent { + let envelope = radroots_events_codec::order::order_payment_record_from_event(&payment) + .expect("decoded payment"); + let payload = RadrootsOrderSettlementDecision { order_id: envelope.payload.order_id.clone(), listing_addr: envelope.payload.listing_addr.clone(), seller_pubkey: envelope.payload.seller_pubkey.clone(), @@ -18996,10 +18759,10 @@ mod tests { amount: envelope.payload.amount, currency: envelope.payload.currency, decision, - reason: (decision == RadrootsTradeSettlementDecision::Rejected) + reason: (decision == RadrootsOrderSettlementOutcome::Rejected) .then(|| "reference mismatch".to_owned()), }; - let parts = active_trade_settlement_decision_event_build( + let parts = order_settlement_decision_event_build( payload.root_event_id.as_str(), payload.previous_event_id.as_str(), &payload, @@ -19019,18 +18782,18 @@ mod tests { seller_pubkey: &str, listing_event_id: &str, ) -> radroots_nostr::prelude::RadrootsNostrEvent { - let payload = RadrootsTradeOrderRequested { + let payload = RadrootsOrderRequest { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), seller_pubkey: seller_pubkey.to_owned(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count: 2, }], economics: sample_order_economics(order_id, "bin-1", 2), }; - let parts = active_trade_order_request_event_build( + let parts = order_request_event_build( &RadrootsNostrEventPtr { id: listing_event_id.to_owned(), relays: None, @@ -19070,20 +18833,20 @@ mod tests { buyer_pubkey: &str, seller_pubkey: &str, listing_event_id: &str, - economics: RadrootsTradeOrderEconomics, + economics: RadrootsOrderEconomics, ) -> radroots_nostr::prelude::RadrootsNostrEvent { - let payload = RadrootsTradeOrderRequested { + let payload = RadrootsOrderRequest { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer_pubkey.to_owned(), seller_pubkey: seller_pubkey.to_owned(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count: 2, }], economics, }; - let parts = active_trade_order_request_event_build( + let parts = order_request_event_build( &RadrootsNostrEventPtr { id: listing_event_id.to_owned(), relays: None, diff --git a/src/runtime/signer.rs b/src/runtime/signer.rs @@ -7,9 +7,9 @@ use crate::view::runtime::{ SignerWriteKindReadinessView, }; use radroots_events::kinds::{ - KIND_FARM, KIND_LISTING, KIND_PROFILE, KIND_TRADE_CANCEL, KIND_TRADE_FULFILLMENT_UPDATE, - KIND_TRADE_ORDER_DECISION, KIND_TRADE_ORDER_REQUEST, KIND_TRADE_ORDER_REVISION, - KIND_TRADE_ORDER_REVISION_RESPONSE, KIND_TRADE_RECEIPT, + KIND_FARM, KIND_LISTING, KIND_ORDER_CANCELLATION, KIND_ORDER_DECISION, + KIND_ORDER_FULFILLMENT_UPDATE, KIND_ORDER_RECEIPT, KIND_ORDER_REQUEST, + KIND_ORDER_REVISION_DECISION, KIND_ORDER_REVISION_PROPOSAL, KIND_PROFILE, }; use radroots_nostr_accounts::prelude::RadrootsNostrAccountStatus; use radroots_nostr_signer::prelude::{ @@ -317,39 +317,39 @@ fn cli_write_kinds() -> [CliWriteKind; 14] { }, CliWriteKind { command: "order.submit", - event_kind: KIND_TRADE_ORDER_REQUEST, + event_kind: KIND_ORDER_REQUEST, }, CliWriteKind { command: "order.accept", - event_kind: KIND_TRADE_ORDER_DECISION, + event_kind: KIND_ORDER_DECISION, }, CliWriteKind { command: "order.decline", - event_kind: KIND_TRADE_ORDER_DECISION, + event_kind: KIND_ORDER_DECISION, }, CliWriteKind { command: "order.cancel", - event_kind: KIND_TRADE_CANCEL, + event_kind: KIND_ORDER_CANCELLATION, }, CliWriteKind { command: "order.revision.propose", - event_kind: KIND_TRADE_ORDER_REVISION, + event_kind: KIND_ORDER_REVISION_PROPOSAL, }, CliWriteKind { command: "order.revision.accept", - event_kind: KIND_TRADE_ORDER_REVISION_RESPONSE, + event_kind: KIND_ORDER_REVISION_DECISION, }, CliWriteKind { command: "order.revision.decline", - event_kind: KIND_TRADE_ORDER_REVISION_RESPONSE, + event_kind: KIND_ORDER_REVISION_DECISION, }, CliWriteKind { command: "order.fulfillment.update", - event_kind: KIND_TRADE_FULFILLMENT_UPDATE, + event_kind: KIND_ORDER_FULFILLMENT_UPDATE, }, CliWriteKind { command: "order.receipt.record", - event_kind: KIND_TRADE_RECEIPT, + event_kind: KIND_ORDER_RECEIPT, }, ] } @@ -392,14 +392,14 @@ fn local_availability(value: RadrootsNostrLocalSignerAvailability) -> &'static s #[cfg(test)] mod tests { - use radroots_events::kinds::KIND_TRADE_FORBIDDEN_3431; - use super::{ - KIND_TRADE_CANCEL, KIND_TRADE_FULFILLMENT_UPDATE, KIND_TRADE_ORDER_DECISION, - KIND_TRADE_ORDER_REQUEST, KIND_TRADE_ORDER_REVISION, KIND_TRADE_ORDER_REVISION_RESPONSE, - KIND_TRADE_RECEIPT, cli_write_kinds, + KIND_ORDER_CANCELLATION, KIND_ORDER_DECISION, KIND_ORDER_FULFILLMENT_UPDATE, + KIND_ORDER_RECEIPT, KIND_ORDER_REQUEST, KIND_ORDER_REVISION_DECISION, + KIND_ORDER_REVISION_PROPOSAL, cli_write_kinds, }; + const RESERVED_ORDER_KIND_3431: u32 = 3431; + #[test] fn write_kind_readiness_matches_active_signed_mutations() { let commands: Vec<&str> = cli_write_kinds() @@ -436,8 +436,8 @@ mod tests { .find(|kind| kind.command == "order.submit") .expect("order submit readiness"); - assert_eq!(write_kind.event_kind, KIND_TRADE_ORDER_REQUEST); - assert_ne!(write_kind.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(write_kind.event_kind, KIND_ORDER_REQUEST); + assert_ne!(write_kind.event_kind, RESERVED_ORDER_KIND_3431); } #[test] @@ -448,8 +448,8 @@ mod tests { .find(|kind| kind.command == command) .expect("order decision readiness"); - assert_eq!(write_kind.event_kind, KIND_TRADE_ORDER_DECISION); - assert_ne!(write_kind.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(write_kind.event_kind, KIND_ORDER_DECISION); + assert_ne!(write_kind.event_kind, RESERVED_ORDER_KIND_3431); } } @@ -460,8 +460,8 @@ mod tests { .find(|kind| kind.command == "order.revision.propose") .expect("order revision propose readiness"); - assert_eq!(proposal.event_kind, KIND_TRADE_ORDER_REVISION); - assert_ne!(proposal.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(proposal.event_kind, KIND_ORDER_REVISION_PROPOSAL); + assert_ne!(proposal.event_kind, RESERVED_ORDER_KIND_3431); for command in ["order.revision.accept", "order.revision.decline"] { let write_kind = cli_write_kinds() @@ -469,32 +469,32 @@ mod tests { .find(|kind| kind.command == command) .expect("order revision decision readiness"); - assert_eq!(write_kind.event_kind, KIND_TRADE_ORDER_REVISION_RESPONSE); - assert_ne!(write_kind.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(write_kind.event_kind, KIND_ORDER_REVISION_DECISION); + assert_ne!(write_kind.event_kind, RESERVED_ORDER_KIND_3431); } } #[test] - fn order_follow_on_readiness_uses_active_trade_kinds() { + fn order_follow_on_readiness_uses_order_kinds() { let cancel = cli_write_kinds() .into_iter() .find(|kind| kind.command == "order.cancel") .expect("order cancel readiness"); - assert_eq!(cancel.event_kind, KIND_TRADE_CANCEL); - assert_ne!(cancel.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(cancel.event_kind, KIND_ORDER_CANCELLATION); + assert_ne!(cancel.event_kind, RESERVED_ORDER_KIND_3431); let fulfillment = cli_write_kinds() .into_iter() .find(|kind| kind.command == "order.fulfillment.update") .expect("order fulfillment readiness"); - assert_eq!(fulfillment.event_kind, KIND_TRADE_FULFILLMENT_UPDATE); - assert_ne!(fulfillment.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(fulfillment.event_kind, KIND_ORDER_FULFILLMENT_UPDATE); + assert_ne!(fulfillment.event_kind, RESERVED_ORDER_KIND_3431); let receipt = cli_write_kinds() .into_iter() .find(|kind| kind.command == "order.receipt.record") .expect("order receipt readiness"); - assert_eq!(receipt.event_kind, KIND_TRADE_RECEIPT); - assert_ne!(receipt.event_kind, KIND_TRADE_FORBIDDEN_3431); + assert_eq!(receipt.event_kind, KIND_ORDER_RECEIPT); + assert_ne!(receipt.event_kind, RESERVED_ORDER_KIND_3431); } } diff --git a/src/runtime/validation_receipt.rs b/src/runtime/validation_receipt.rs @@ -1,8 +1,6 @@ use std::collections::{BTreeMap, BTreeSet}; -use radroots_events::kinds::{ - KIND_TRADE_VALIDATION_RECEIPT, KIND_WORKER_TRADE_TRANSITION_PROOF_RES, -}; +use radroots_events::kinds::{KIND_TRADE_TRANSITION_PROOF_RESULT, KIND_TRADE_VALIDATION_RECEIPT}; use radroots_nostr::prelude::{ RadrootsNostrEvent, RadrootsNostrEventId, RadrootsNostrFilter, RadrootsNostrKind, radroots_event_from_nostr, radroots_nostr_filter_tag, @@ -1148,7 +1146,7 @@ fn validation_receipt_worker_result_filter( receipt_event_ids: Vec<String>, ) -> Result<RadrootsNostrFilter, String> { let filter = RadrootsNostrFilter::new().kind(RadrootsNostrKind::Custom( - KIND_WORKER_TRADE_TRANSITION_PROOF_RES as u16, + KIND_TRADE_TRANSITION_PROOF_RESULT as u16, )); radroots_nostr_filter_tag(filter, "e", receipt_event_ids) .map_err(|error| format!("build validation receipt worker result filter: {error}")) diff --git a/src/view/runtime.rs b/src/view/runtime.rs @@ -6,11 +6,11 @@ use radroots_core::{RadrootsCoreCurrency, RadrootsCoreDecimal}; use radroots_events::farm::RadrootsFarm; use radroots_events::kinds::KIND_LISTING; use radroots_events::listing::RadrootsListingLocation; -use radroots_events::profile::RadrootsProfile; -use radroots_events::trade::{ - RadrootsTradeOrderEconomics, RadrootsTradePaymentMethod, RadrootsTradeSettlementDecision, +use radroots_events::order::{ + RadrootsOrderEconomics, RadrootsOrderPaymentMethod, RadrootsOrderSettlementOutcome, }; -use radroots_events_codec::trade::RadrootsTradeListingAddress; +use radroots_events::profile::RadrootsProfile; +use radroots_events_codec::order::RadrootsOrderListingAddress; use radroots_nostr_accounts::prelude::RadrootsNostrAccountRecord; use serde::Serialize; @@ -1086,7 +1086,7 @@ impl MarketReadinessView { price_per_amount: f64, ) -> Self { let protocol_valid = listing_addr.is_some_and(|listing_addr| { - RadrootsTradeListingAddress::parse(listing_addr) + RadrootsOrderListingAddress::parse(listing_addr) .is_ok_and(|parsed| parsed.kind == KIND_LISTING) }); let marketplace_eligible = protocol_valid @@ -1407,7 +1407,7 @@ pub struct OrderNewView { #[serde(default, skip_serializing_if = "Vec::is_empty")] pub items: Vec<OrderDraftItemView>, #[serde(skip_serializing_if = "Option::is_none")] - pub economics: Option<RadrootsTradeOrderEconomics>, + pub economics: Option<RadrootsOrderEconomics>, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub issues: Vec<OrderIssueView>, #[serde(default, skip_serializing_if = "Vec::is_empty")] @@ -1456,7 +1456,7 @@ pub struct OrderGetView { #[serde(default, skip_serializing_if = "Vec::is_empty")] pub items: Vec<OrderDraftItemView>, #[serde(skip_serializing_if = "Option::is_none")] - pub economics: Option<RadrootsTradeOrderEconomics>, + pub economics: Option<RadrootsOrderEconomics>, #[serde(skip_serializing_if = "Option::is_none")] pub updated_at_unix: Option<u64>, #[serde(skip_serializing_if = "Option::is_none")] @@ -2022,7 +2022,7 @@ pub struct OrderRevisionProposalView { #[serde(default, skip_serializing_if = "Vec::is_empty")] pub items: Vec<OrderDraftItemView>, #[serde(skip_serializing_if = "Option::is_none")] - pub economics: Option<RadrootsTradeOrderEconomics>, + pub economics: Option<RadrootsOrderEconomics>, #[serde(skip_serializing_if = "Option::is_none")] pub inventory: Option<OrderInventoryView>, #[serde(default)] @@ -2097,7 +2097,7 @@ pub struct OrderRevisionDecisionView { #[serde(skip_serializing_if = "Option::is_none")] pub event_kind: Option<u32>, #[serde(skip_serializing_if = "Option::is_none")] - pub economics: Option<RadrootsTradeOrderEconomics>, + pub economics: Option<RadrootsOrderEconomics>, #[serde(skip_serializing_if = "Option::is_none")] pub inventory: Option<OrderInventoryView>, #[serde(default)] @@ -2177,7 +2177,7 @@ pub struct OrderPaymentView { #[serde(skip_serializing_if = "Option::is_none")] pub currency: Option<RadrootsCoreCurrency>, #[serde(skip_serializing_if = "Option::is_none")] - pub method: Option<RadrootsTradePaymentMethod>, + pub method: Option<RadrootsOrderPaymentMethod>, #[serde(skip_serializing_if = "Option::is_none")] pub reference: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] @@ -2261,7 +2261,7 @@ pub struct OrderSettlementView { #[serde(skip_serializing_if = "Option::is_none")] pub currency: Option<RadrootsCoreCurrency>, #[serde(skip_serializing_if = "Option::is_none")] - pub decision: Option<RadrootsTradeSettlementDecision>, + pub decision: Option<RadrootsOrderSettlementOutcome>, #[serde(skip_serializing_if = "Option::is_none")] pub settlement_reason: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] @@ -2327,7 +2327,7 @@ pub struct OrderStatusView { #[serde(skip_serializing_if = "Option::is_none")] pub seller_pubkey: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] - pub economics: Option<RadrootsTradeOrderEconomics>, + pub economics: Option<RadrootsOrderEconomics>, #[serde(skip_serializing_if = "Option::is_none")] pub last_event_id: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] @@ -2417,7 +2417,7 @@ pub struct OrderStatusPaymentView { #[serde(skip_serializing_if = "Option::is_none")] pub currency: Option<RadrootsCoreCurrency>, #[serde(skip_serializing_if = "Option::is_none")] - pub method: Option<RadrootsTradePaymentMethod>, + pub method: Option<RadrootsOrderPaymentMethod>, #[serde(skip_serializing_if = "Option::is_none")] pub reference: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] @@ -2640,7 +2640,7 @@ pub struct OrderSummaryView { pub buyer_write_capable: Option<bool>, pub item_count: usize, #[serde(skip_serializing_if = "Option::is_none")] - pub economics: Option<RadrootsTradeOrderEconomics>, + pub economics: Option<RadrootsOrderEconomics>, pub updated_at_unix: u64, #[serde(skip_serializing_if = "Option::is_none")] pub job: Option<OrderJobView>, diff --git a/tests/support/mod.rs b/tests/support/mod.rs @@ -8,7 +8,7 @@ use std::sync::Mutex; use assert_cmd::prelude::*; use radroots_events::RadrootsNostrEvent; use radroots_events::kinds::{KIND_FARM, KIND_LISTING}; -use radroots_events_codec::trade::RadrootsTradeListingAddress; +use radroots_events_codec::order::RadrootsOrderListingAddress; use radroots_identity::{RadrootsIdentity, RadrootsIdentityPublic}; use radroots_local_events::{ LocalEventRecord, LocalEventRecordInput, LocalEventsStore, LocalRecordFamily, @@ -240,7 +240,7 @@ pub fn seed_orderable_listing(sandbox: &RadrootsCliSandbox, listing_addr: &str) let db_path = store["result"]["path"] .as_str() .expect("replica db path from store init"); - let parsed = RadrootsTradeListingAddress::parse(listing_addr).expect("listing addr"); + let parsed = RadrootsOrderListingAddress::parse(listing_addr).expect("listing addr"); let seller_pubkey = parsed.seller_pubkey.clone(); let listing_id = parsed.listing_id.clone(); let event_id = "2".repeat(64); @@ -411,7 +411,7 @@ pub fn replace_latest_listing_event_id( listing_addr: &str, event_id: &str, ) { - let parsed = RadrootsTradeListingAddress::parse(listing_addr).expect("listing addr"); + let parsed = RadrootsOrderListingAddress::parse(listing_addr).expect("listing addr"); let key = format!( "{}:{}:{}", KIND_LISTING, parsed.seller_pubkey, parsed.listing_id diff --git a/tests/target_cli.rs b/tests/target_cli.rs @@ -8,11 +8,9 @@ use std::thread::{self, JoinHandle}; use std::time::Duration; use radroots_events::RadrootsNostrEventPtr; -use radroots_events::kinds::{KIND_FARM, KIND_PROFILE, KIND_TRADE_ORDER_REQUEST}; -use radroots_events::trade::{ - RadrootsTradeOrderEconomics, RadrootsTradeOrderItem, RadrootsTradeOrderRequested, -}; -use radroots_events_codec::trade::active_trade_order_request_event_build; +use radroots_events::kinds::{KIND_FARM, KIND_ORDER_REQUEST, KIND_PROFILE}; +use radroots_events::order::{RadrootsOrderEconomics, RadrootsOrderItem, RadrootsOrderRequest}; +use radroots_events_codec::order::order_request_event_build; use radroots_local_events::{ BUYER_ORDER_REQUEST_LOCAL_WORK_RECORD_KIND, CANONICAL_RELAY_SET_FINGERPRINT_VERSION, LocalEventRecordInput, LocalEventsStore, LocalRecordFamily, LocalRecordStatus, @@ -681,7 +679,7 @@ fn seed_app_order_record_variant_with_record_id( record_id } -fn app_order_economics(order_id: &str, bin_count: u32) -> RadrootsTradeOrderEconomics { +fn app_order_economics(order_id: &str, bin_count: u32) -> RadrootsOrderEconomics { let line_total = (bin_count * 6).to_string(); serde_json::from_value(json!({ "quote_id": format!("app-order:{order_id}"), @@ -732,18 +730,18 @@ fn signed_app_order_request_event( seller_pubkey: &str, bin_count: u32, ) -> RadrootsNostrEvent { - let payload = RadrootsTradeOrderRequested { + let payload = RadrootsOrderRequest { order_id: order_id.to_owned(), listing_addr: listing_addr.to_owned(), buyer_pubkey: buyer.public_key_hex(), seller_pubkey: seller_pubkey.to_owned(), - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count, }], economics: app_order_economics(order_id, bin_count), }; - let parts = active_trade_order_request_event_build( + let parts = order_request_event_build( &RadrootsNostrEventPtr { id: listing_event_id.to_owned(), relays: None, @@ -792,7 +790,7 @@ fn append_app_signed_order_request_record( listing_addr: Some(listing_addr.to_owned()), local_work_json: None, event_id: Some(event_id), - event_kind: Some(i64::from(KIND_TRADE_ORDER_REQUEST)), + event_kind: Some(i64::from(KIND_ORDER_REQUEST)), event_pubkey: Some(event.pubkey.to_string()), event_created_at: Some( i64::try_from(event.created_at.as_secs()).expect("event created_at"), @@ -6097,22 +6095,22 @@ fn signed_order_request_event_for_quote( buyer: &radroots_identity::RadrootsIdentity, order_id: &str, listing_event_id: &str, - economics: RadrootsTradeOrderEconomics, + economics: RadrootsOrderEconomics, ) -> RadrootsNostrEvent { let buyer_pubkey = buyer.public_key_hex(); let seller_pubkey = "1".repeat(64); - let payload = RadrootsTradeOrderRequested { + let payload = RadrootsOrderRequest { order_id: order_id.to_owned(), listing_addr: LISTING_ADDR.to_owned(), buyer_pubkey, seller_pubkey, - items: vec![RadrootsTradeOrderItem { + items: vec![RadrootsOrderItem { bin_id: "bin-1".to_owned(), bin_count: 2, }], economics, }; - let parts = active_trade_order_request_event_build( + let parts = order_request_event_build( &RadrootsNostrEventPtr { id: listing_event_id.to_owned(), relays: None, @@ -6670,7 +6668,7 @@ fn order_rebind_refuses_visible_published_request() { let order_id = quote["result"]["quote"]["order_id"] .as_str() .expect("order id"); - let economics: RadrootsTradeOrderEconomics = + let economics: RadrootsOrderEconomics = serde_json::from_value(quote["result"]["quote"]["economics"].clone()) .expect("quote economics"); let event = signed_order_request_event_for_quote( @@ -6758,7 +6756,7 @@ fn order_status_and_event_list_use_draft_context_after_account_override_drift() let order_id = quote["result"]["quote"]["order_id"] .as_str() .expect("order id"); - let economics: RadrootsTradeOrderEconomics = + let economics: RadrootsOrderEconomics = serde_json::from_value(quote["result"]["quote"]["economics"].clone()) .expect("quote economics"); let event = signed_order_request_event_for_quote( @@ -6873,7 +6871,7 @@ fn order_cancel_uses_bound_buyer_after_default_account_drift() { let order_id = quote["result"]["quote"]["order_id"] .as_str() .expect("order id"); - let economics: RadrootsTradeOrderEconomics = + let economics: RadrootsOrderEconomics = serde_json::from_value(quote["result"]["quote"]["economics"].clone()) .expect("quote economics"); let event = signed_order_request_event_for_quote(