@@ -2,10 +2,12 @@ use crate::dlc::DlcHandler;
2
2
use crate :: error:: MutinyError ;
3
3
use crate :: logging:: MutinyLogger ;
4
4
use crate :: storage:: MutinyStorage ;
5
+ use crate :: utils:: { now, oracle_announcement_from_hex} ;
5
6
use bitcoin:: hashes:: hex:: ToHex ;
6
7
use dlc:: secp256k1_zkp:: PublicKey ;
7
8
use dlc_manager:: Storage ;
8
9
use dlc_messages:: message_handler:: read_dlc_message;
10
+ use dlc_messages:: oracle_msgs:: OracleAnnouncement ;
9
11
use dlc_messages:: { Message , WireMessage } ;
10
12
use lightning:: ln:: wire:: Type ;
11
13
use lightning:: util:: logger:: Logger ;
@@ -15,10 +17,13 @@ use nostr::key::{Keys, XOnlyPublicKey};
15
17
use nostr:: prelude:: { decrypt, encrypt, Parity } ;
16
18
use nostr:: Url ;
17
19
use nostr:: { Event , EventBuilder , EventId , Filter , Kind , Tag } ;
20
+ use nostr_sdk:: Client ;
18
21
use std:: io:: Read ;
19
22
use std:: sync:: Arc ;
20
23
21
24
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 ) ;
22
27
23
28
/// A wrapper around a DLC message that indicates if it is an error
24
29
pub ( crate ) enum DlcMessageType {
@@ -56,6 +61,33 @@ impl<S: MutinyStorage> NostrDlcHandler<S> {
56
61
. pubkey ( self . key . public_key ( ) )
57
62
}
58
63
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
+
59
91
/// Turns an DLC message into a Nostr event
60
92
pub ( crate ) fn create_wire_msg_event (
61
93
& self ,
0 commit comments