Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit f713006

Browse files
committed
wip
1 parent df5bbbf commit f713006

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

mutiny-core/src/nostr/dlc.rs

+32
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ use crate::dlc::DlcHandler;
22
use crate::error::MutinyError;
33
use crate::logging::MutinyLogger;
44
use crate::storage::MutinyStorage;
5+
use crate::utils::{now, oracle_announcement_from_hex};
56
use bitcoin::hashes::hex::ToHex;
67
use dlc::secp256k1_zkp::PublicKey;
78
use dlc_manager::Storage;
89
use dlc_messages::message_handler::read_dlc_message;
10+
use dlc_messages::oracle_msgs::OracleAnnouncement;
911
use dlc_messages::{Message, WireMessage};
1012
use lightning::ln::wire::Type;
1113
use lightning::util::logger::Logger;
@@ -15,10 +17,13 @@ use nostr::key::{Keys, XOnlyPublicKey};
1517
use nostr::prelude::{decrypt, encrypt, Parity};
1618
use nostr::Url;
1719
use nostr::{Event, EventBuilder, EventId, Filter, Kind, Tag};
20+
use nostr_sdk::Client;
1821
use std::io::Read;
1922
use std::sync::Arc;
2023

2124
pub const DLC_WIRE_MESSAGE_KIND: Kind = Kind::Ephemeral(28_888);
25+
pub const DLC_OFFER_MESSAGE_KIND: Kind = Kind::ParameterizedReplaceable(30_088);
26+
pub const ORACLE_ANNOUNCEMENT_KIND: Kind = Kind::Custom(88);
2227

2328
/// A wrapper around a DLC message that indicates if it is an error
2429
pub(crate) enum DlcMessageType {
@@ -56,6 +61,33 @@ impl<S: MutinyStorage> NostrDlcHandler<S> {
5661
.pubkey(self.key.public_key())
5762
}
5863

64+
/// Gets oracle announcements from the relay
65+
pub async fn get_oracle_announcements(&self) -> Result<Vec<OracleAnnouncement>, MutinyError> {
66+
let client = Client::new(&Keys::generate());
67+
client.add_relay("wss://relay.damus.io").await?;
68+
client.connect().await;
69+
70+
let filter = Filter::new().kind(ORACLE_ANNOUNCEMENT_KIND);
71+
let events = client.get_events_of(vec![filter], None).await?;
72+
client.disconnect().await?;
73+
74+
let ann = events
75+
.into_iter()
76+
.flat_map(|e| match oracle_announcement_from_hex(&e.content) {
77+
Ok(ann) => {
78+
if (ann.oracle_event.event_maturity_epoch as u64) < now().as_secs() {
79+
Some(ann)
80+
} else {
81+
None
82+
}
83+
}
84+
Err(_) => None,
85+
})
86+
.collect();
87+
88+
Ok(ann)
89+
}
90+
5991
/// Turns an DLC message into a Nostr event
6092
pub(crate) fn create_wire_msg_event(
6193
&self,

0 commit comments

Comments
 (0)