|
1 | 1 | use crate::handlers::common::timestamp_to_chrono_utc; |
| 2 | +use crate::relay_processor::OrderPlaceEventTags; |
2 | 3 | use chrono::TimeZone; |
3 | 4 | use nostr::{Event, EventId, Kind, PublicKey, Tag, TagKind, Tags}; |
4 | 5 | use simplicity::elements::AssetId; |
@@ -264,41 +265,6 @@ impl fmt::Display for MakerOrderEvent { |
264 | 265 | } |
265 | 266 |
|
266 | 267 | impl MakerOrderEvent { |
267 | | - pub fn parse_event(event: &Event) -> Option<Self> { |
268 | | - event.verify().ok()?; |
269 | | - if event.kind != MakerOrderKind::get_kind() { |
270 | | - return None; |
271 | | - } |
272 | | - |
273 | | - let time = timestamp_to_chrono_utc(event.created_at)?; |
274 | | - let dcd_taproot_pubkey_gen = event.tags.get(2)?.content()?.to_string(); |
275 | | - let dcd_arguments = { |
276 | | - let bytes = hex::decode(event.tags.get(1)?.content()?).ok()?; |
277 | | - let decoded: DCDArguments = bincode::decode_from_slice(&bytes, bincode::config::standard()).ok()?.0; |
278 | | - decoded |
279 | | - }; |
280 | | - |
281 | | - let filler_asset_id = AssetId::from_str(event.tags.get(3)?.content()?).ok()?; |
282 | | - let grantor_collateral_asset_id = AssetId::from_str(event.tags.get(4)?.content()?).ok()?; |
283 | | - let grantor_settlement_asset_id = AssetId::from_str(event.tags.get(5)?.content()?).ok()?; |
284 | | - let settlement_asset_id = AssetId::from_str(event.tags.get(6)?.content()?).ok()?; |
285 | | - let collateral_asset_id = AssetId::from_str(event.tags.get(7)?.content()?).ok()?; |
286 | | - let maker_fund_tx_id = Txid::from_str(event.tags.get(8)?.content()?).ok()?; |
287 | | - |
288 | | - Some(MakerOrderEvent { |
289 | | - event_id: event.id, |
290 | | - time, |
291 | | - dcd_arguments, |
292 | | - dcd_taproot_pubkey_gen, |
293 | | - filler_asset_id, |
294 | | - grantor_collateral_asset_id, |
295 | | - grantor_settlement_asset_id, |
296 | | - settlement_asset_id, |
297 | | - collateral_asset_id, |
298 | | - maker_fund_tx_id, |
299 | | - }) |
300 | | - } |
301 | | - |
302 | 268 | #[must_use] |
303 | 269 | pub fn summary(&self) -> MakerOrderSummary { |
304 | 270 | let oracle_full = &self.dcd_arguments.oracle_public_key; |
@@ -378,6 +344,92 @@ impl MakerOrderEvent { |
378 | 344 | event_id: self.event_id, |
379 | 345 | } |
380 | 346 | } |
| 347 | + |
| 348 | + pub fn parse_event(event: &Event) -> Option<Self> { |
| 349 | + event.verify().ok()?; |
| 350 | + if event.kind != MakerOrderKind::get_kind() { |
| 351 | + return None; |
| 352 | + } |
| 353 | + let time = timestamp_to_chrono_utc(event.created_at)?; |
| 354 | + let dcd_arguments = { |
| 355 | + let bytes = hex::decode(event.tags.get(0)?.content()?).ok()?; |
| 356 | + let decoded: DCDArguments = bincode::decode_from_slice(&bytes, bincode::config::standard()).ok()?.0; |
| 357 | + decoded |
| 358 | + }; |
| 359 | + let dcd_taproot_pubkey_gen = event.tags.get(1)?.content()?.to_string(); |
| 360 | + let filler_asset_id = AssetId::from_str(event.tags.get(2)?.content()?).ok()?; |
| 361 | + let grantor_collateral_asset_id = AssetId::from_str(event.tags.get(3)?.content()?).ok()?; |
| 362 | + let grantor_settlement_asset_id = AssetId::from_str(event.tags.get(4)?.content()?).ok()?; |
| 363 | + let settlement_asset_id = AssetId::from_str(event.tags.get(5)?.content()?).ok()?; |
| 364 | + let collateral_asset_id = AssetId::from_str(event.tags.get(6)?.content()?).ok()?; |
| 365 | + let maker_fund_tx_id = Txid::from_str(event.tags.get(7)?.content()?).ok()?; |
| 366 | + |
| 367 | + Some(MakerOrderEvent { |
| 368 | + event_id: event.id, |
| 369 | + time, |
| 370 | + dcd_arguments, |
| 371 | + dcd_taproot_pubkey_gen, |
| 372 | + filler_asset_id, |
| 373 | + grantor_collateral_asset_id, |
| 374 | + grantor_settlement_asset_id, |
| 375 | + settlement_asset_id, |
| 376 | + collateral_asset_id, |
| 377 | + maker_fund_tx_id, |
| 378 | + }) |
| 379 | + } |
| 380 | + |
| 381 | + /// Form a list of Nostr tags representing a maker order event. |
| 382 | + /// |
| 383 | + /// # Errors |
| 384 | + /// |
| 385 | + /// Returns `Err(crate::error::NostrRelayError::BincodeEncoding)` if serialization of |
| 386 | + /// `DCDArguments` via `bincode` fails. The function returns a `crate::error::Result<Vec<Tag>>` |
| 387 | + /// to propagate that error to the caller. |
| 388 | + pub fn form_tags( |
| 389 | + tags: OrderPlaceEventTags, |
| 390 | + tx_id: Txid, |
| 391 | + client_pubkey: PublicKey, |
| 392 | + ) -> crate::error::Result<Vec<Tag>> { |
| 393 | + let dcd_arguments = { |
| 394 | + let x = bincode::encode_to_vec(&tags.dcd_arguments, bincode::config::standard()).map_err(|err| { |
| 395 | + crate::error::NostrRelayError::BincodeEncoding { |
| 396 | + err, |
| 397 | + struct_to_encode: format!("DCDArgs: {:#?}", tags.dcd_arguments), |
| 398 | + } |
| 399 | + })?; |
| 400 | + nostr::prelude::hex::encode(x) |
| 401 | + }; |
| 402 | + Ok(vec![ |
| 403 | + Tag::public_key(client_pubkey), |
| 404 | + // Tag::expiration(Timestamp::from(timestamp_now.as_u64() + MAKER_EXPIRATION_TIME)), |
| 405 | + Tag::custom(TagKind::Custom(Cow::from(MAKER_DCD_ARG_TAG)), [dcd_arguments]), |
| 406 | + Tag::custom( |
| 407 | + TagKind::Custom(Cow::from(MAKER_DCD_TAPROOT_TAG)), |
| 408 | + [tags.dcd_taproot_pubkey_gen], |
| 409 | + ), |
| 410 | + Tag::custom( |
| 411 | + TagKind::Custom(Cow::from(MAKER_FILLER_ASSET_ID_TAG)), |
| 412 | + [tags.filler_asset_id.to_string()], |
| 413 | + ), |
| 414 | + Tag::custom( |
| 415 | + TagKind::Custom(Cow::from(MAKER_GRANTOR_COLLATERAL_ASSET_ID_TAG)), |
| 416 | + [tags.grantor_collateral_asset_id.to_string()], |
| 417 | + ), |
| 418 | + Tag::custom( |
| 419 | + TagKind::Custom(Cow::from(MAKER_GRANTOR_SETTLEMENT_ASSET_ID_TAG)), |
| 420 | + [tags.grantor_settlement_asset_id.to_string()], |
| 421 | + ), |
| 422 | + Tag::custom( |
| 423 | + TagKind::Custom(Cow::from(MAKER_SETTLEMENT_ASSET_ID_TAG)), |
| 424 | + [tags.settlement_asset_id.to_string()], |
| 425 | + ), |
| 426 | + Tag::custom( |
| 427 | + TagKind::Custom(Cow::from(MAKER_COLLATERAL_ASSET_ID_TAG)), |
| 428 | + [tags.collateral_asset_id.to_string()], |
| 429 | + ), |
| 430 | + Tag::custom(TagKind::Custom(Cow::from(MAKER_FUND_TX_ID_TAG)), [tx_id.to_string()]), |
| 431 | + ]) |
| 432 | + } |
381 | 433 | } |
382 | 434 |
|
383 | 435 | impl OrderReplyEvent { |
|
0 commit comments