Skip to content

Commit ed5120a

Browse files
committed
fix test
chore: * move tags creating from place_order.rs to MakerOrderEvent
1 parent 8024e97 commit ed5120a

File tree

5 files changed

+98
-80
lines changed

5 files changed

+98
-80
lines changed

crates/dex-nostr-relay/src/error.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ pub enum NostrRelayError {
1717
NoEventsFound(String),
1818
#[error("Found many events, but required to be only one with filter: '{0}'")]
1919
NotOnlyOneEventFound(String),
20+
#[error("Failed to encode '{struct_to_encode}', err: `{err}`")]
21+
BincodeEncoding {
22+
err: bincode::error::EncodeError,
23+
struct_to_encode: String,
24+
},
2025
}
2126

2227
pub type Result<T> = std::result::Result<T, NostrRelayError>;

crates/dex-nostr-relay/src/handlers/list_orders.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ fn filter_expired_events(events_to_filter: Events) -> Events {
2222
events_to_filter
2323
.into_iter()
2424
.filter(|x| match x.tags.expiration() {
25-
None => false,
25+
None => true,
2626
Some(t) => t.as_u64() > time_now.as_u64(),
2727
})
2828
.collect()

crates/dex-nostr-relay/src/handlers/place_order.rs

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,18 @@
11
use crate::relay_client::RelayClient;
22
use crate::relay_processor::OrderPlaceEventTags;
3-
use crate::types::{
4-
BLOCKSTREAM_MAKER_CONTENT, CustomKind, MAKER_COLLATERAL_ASSET_ID_TAG, MAKER_DCD_ARG_TAG, MAKER_DCD_TAPROOT_TAG,
5-
MAKER_FILLER_ASSET_ID_TAG, MAKER_FUND_TX_ID_TAG, MAKER_GRANTOR_COLLATERAL_ASSET_ID_TAG,
6-
MAKER_GRANTOR_SETTLEMENT_ASSET_ID_TAG, MAKER_SETTLEMENT_ASSET_ID_TAG, MakerOrderKind,
7-
};
8-
use nostr::util::hex;
9-
use nostr::{EventBuilder, EventId, Tag, TagKind, Timestamp};
3+
use crate::types::{BLOCKSTREAM_MAKER_CONTENT, CustomKind, MakerOrderEvent, MakerOrderKind};
4+
use nostr::{EventBuilder, EventId, Timestamp};
105
use simplicity::elements::Txid;
11-
use std::borrow::Cow;
126

137
pub async fn handle(client: &RelayClient, tags: OrderPlaceEventTags, tx_id: Txid) -> crate::error::Result<EventId> {
148
let client_signer = client.get_signer().await?;
159
let client_pubkey = client_signer.get_public_key().await?;
1610

1711
let timestamp_now = Timestamp::now();
1812

19-
let dcd_arguments = {
20-
let x = bincode::encode_to_vec(tags.dcd_arguments, bincode::config::standard()).unwrap();
21-
hex::encode(x)
22-
};
23-
13+
let tags = MakerOrderEvent::form_tags(tags, tx_id, client_pubkey)?;
2414
let maker_order = EventBuilder::new(MakerOrderKind::get_kind(), BLOCKSTREAM_MAKER_CONTENT)
25-
.tags([
26-
Tag::public_key(client_pubkey),
27-
// Tag::expiration(Timestamp::from(timestamp_now.as_u64() + MAKER_EXPIRATION_TIME)),
28-
Tag::custom(TagKind::Custom(Cow::from(MAKER_DCD_ARG_TAG)), [dcd_arguments]),
29-
Tag::custom(
30-
TagKind::Custom(Cow::from(MAKER_DCD_TAPROOT_TAG)),
31-
[tags.dcd_taproot_pubkey_gen],
32-
),
33-
Tag::custom(
34-
TagKind::Custom(Cow::from(MAKER_FILLER_ASSET_ID_TAG)),
35-
[tags.filler_asset_id.to_string()],
36-
),
37-
Tag::custom(
38-
TagKind::Custom(Cow::from(MAKER_GRANTOR_COLLATERAL_ASSET_ID_TAG)),
39-
[tags.grantor_collateral_asset_id.to_string()],
40-
),
41-
Tag::custom(
42-
TagKind::Custom(Cow::from(MAKER_GRANTOR_SETTLEMENT_ASSET_ID_TAG)),
43-
[tags.grantor_settlement_asset_id.to_string()],
44-
),
45-
Tag::custom(
46-
TagKind::Custom(Cow::from(MAKER_SETTLEMENT_ASSET_ID_TAG)),
47-
[tags.settlement_asset_id.to_string()],
48-
),
49-
Tag::custom(
50-
TagKind::Custom(Cow::from(MAKER_COLLATERAL_ASSET_ID_TAG)),
51-
[tags.collateral_asset_id.to_string()],
52-
),
53-
Tag::custom(TagKind::Custom(Cow::from(MAKER_FUND_TX_ID_TAG)), [tx_id.to_string()]),
54-
])
15+
.tags(tags)
5516
.custom_created_at(timestamp_now);
5617

5718
let text_note = maker_order.build(client_pubkey);

crates/dex-nostr-relay/src/types.rs

Lines changed: 87 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::handlers::common::timestamp_to_chrono_utc;
2+
use crate::relay_processor::OrderPlaceEventTags;
23
use chrono::TimeZone;
34
use nostr::{Event, EventId, Kind, PublicKey, Tag, TagKind, Tags};
45
use simplicity::elements::AssetId;
@@ -264,41 +265,6 @@ impl fmt::Display for MakerOrderEvent {
264265
}
265266

266267
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-
302268
#[must_use]
303269
pub fn summary(&self) -> MakerOrderSummary {
304270
let oracle_full = &self.dcd_arguments.oracle_public_key;
@@ -378,6 +344,92 @@ impl MakerOrderEvent {
378344
event_id: self.event_id,
379345
}
380346
}
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+
}
381433
}
382434

383435
impl OrderReplyEvent {

crates/dex-nostr-relay/tests/test_order_placing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ mod tests {
7474
info!(
7575
"=== order replies, amount: {}, orders: {:#?}",
7676
order_replies.len(),
77-
order_replies
77+
order_replies,
7878
);
7979
assert_eq!(order_replies.len(), 1);
8080
assert_eq!(order_replies.first().unwrap().event_kind, TakerOrderKind::get_kind());

0 commit comments

Comments
 (0)