@@ -108,7 +108,10 @@ pub use config::{default_config, AnchorChannelsConfig, Config};
108108pub use error:: Error as NodeError ;
109109use error:: Error ;
110110
111+ #[ cfg( feature = "uniffi" ) ]
112+ use crate :: event:: PayjoinPaymentFailureReason ;
111113pub use event:: Event ;
114+ use payment:: payjoin:: handler:: PayjoinHandler ;
112115pub use types:: ChannelConfig ;
113116
114117pub use io:: utils:: generate_entropy_mnemonic;
@@ -133,8 +136,8 @@ use gossip::GossipSource;
133136use graph:: NetworkGraph ;
134137use liquidity:: LiquiditySource ;
135138use payment:: {
136- Bolt11Payment , Bolt12Payment , OnchainPayment , PaymentDetails , SpontaneousPayment ,
137- UnifiedQrPayment ,
139+ Bolt11Payment , Bolt12Payment , OnchainPayment , PayjoinPayment , PaymentDetails ,
140+ SpontaneousPayment , UnifiedQrPayment ,
138141} ;
139142use peer_store:: { PeerInfo , PeerStore } ;
140143use types:: {
@@ -187,6 +190,7 @@ pub struct Node {
187190 output_sweeper : Arc < Sweeper > ,
188191 peer_manager : Arc < PeerManager > ,
189192 connection_manager : Arc < ConnectionManager < Arc < FilesystemLogger > > > ,
193+ payjoin_handler : Option < Arc < PayjoinHandler > > ,
190194 keys_manager : Arc < KeysManager > ,
191195 network_graph : Arc < Graph > ,
192196 gossip_source : Arc < GossipSource > ,
@@ -379,6 +383,8 @@ impl Node {
379383 let archive_cmon = Arc :: clone ( & self . chain_monitor ) ;
380384 let sync_sweeper = Arc :: clone ( & self . output_sweeper ) ;
381385 let sync_logger = Arc :: clone ( & self . logger ) ;
386+ let sync_payjoin = & self . payjoin_handler . as_ref ( ) ;
387+ let sync_payjoin = sync_payjoin. map ( Arc :: clone) ;
382388 let sync_wallet_timestamp = Arc :: clone ( & self . latest_wallet_sync_timestamp ) ;
383389 let sync_monitor_archival_height = Arc :: clone ( & self . latest_channel_monitor_archival_height ) ;
384390 let mut stop_sync = self . stop_sender . subscribe ( ) ;
@@ -398,11 +404,14 @@ impl Node {
398404 return ;
399405 }
400406 _ = wallet_sync_interval. tick( ) => {
401- let confirmables = vec![
407+ let mut confirmables = vec![
402408 & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
403409 & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
404410 & * sync_sweeper as & ( dyn Confirm + Sync + Send ) ,
405411 ] ;
412+ if let Some ( sync_payjoin) = sync_payjoin. as_ref( ) {
413+ confirmables. push( sync_payjoin. as_ref( ) as & ( dyn Confirm + Sync + Send ) ) ;
414+ }
406415 let now = Instant :: now( ) ;
407416 let timeout_fut = tokio:: time:: timeout( Duration :: from_secs( LDK_WALLET_SYNC_TIMEOUT_SECS ) , tx_sync. sync( confirmables) ) ;
408417 match timeout_fut. await {
@@ -1108,6 +1117,42 @@ impl Node {
11081117 ) )
11091118 }
11101119
1120+ /// Returns a Payjoin payment handler allowing to send Payjoin transactions
1121+ ///
1122+ /// in order to utilize Payjoin functionality, it is necessary to configure a Payjoin relay
1123+ /// using [`set_payjoin_config`].
1124+ ///
1125+ /// [`set_payjoin_config`]: crate::builder::NodeBuilder::set_payjoin_config
1126+ #[ cfg( not( feature = "uniffi" ) ) ]
1127+ pub fn payjoin_payment ( & self ) -> PayjoinPayment {
1128+ let payjoin_handler = self . payjoin_handler . as_ref ( ) ;
1129+ PayjoinPayment :: new (
1130+ Arc :: clone ( & self . config ) ,
1131+ Arc :: clone ( & self . logger ) ,
1132+ payjoin_handler. map ( Arc :: clone) ,
1133+ Arc :: clone ( & self . runtime ) ,
1134+ Arc :: clone ( & self . tx_broadcaster ) ,
1135+ )
1136+ }
1137+
1138+ /// Returns a Payjoin payment handler allowing to send Payjoin transactions.
1139+ ///
1140+ /// in order to utilize Payjoin functionality, it is necessary to configure a Payjoin relay
1141+ /// using [`set_payjoin_config`].
1142+ ///
1143+ /// [`set_payjoin_config`]: crate::builder::NodeBuilder::set_payjoin_config
1144+ #[ cfg( feature = "uniffi" ) ]
1145+ pub fn payjoin_payment ( & self ) -> Arc < PayjoinPayment > {
1146+ let payjoin_handler = self . payjoin_handler . as_ref ( ) ;
1147+ Arc :: new ( PayjoinPayment :: new (
1148+ Arc :: clone ( & self . config ) ,
1149+ Arc :: clone ( & self . logger ) ,
1150+ payjoin_handler. map ( Arc :: clone) ,
1151+ Arc :: clone ( & self . runtime ) ,
1152+ Arc :: clone ( & self . tx_broadcaster ) ,
1153+ ) )
1154+ }
1155+
11111156 /// Retrieve a list of known channels.
11121157 pub fn list_channels ( & self ) -> Vec < ChannelDetails > {
11131158 self . channel_manager . list_channels ( ) . into_iter ( ) . map ( |c| c. into ( ) ) . collect ( )
@@ -1309,11 +1354,15 @@ impl Node {
13091354 let fee_estimator = Arc :: clone ( & self . fee_estimator ) ;
13101355 let sync_sweeper = Arc :: clone ( & self . output_sweeper ) ;
13111356 let sync_logger = Arc :: clone ( & self . logger ) ;
1312- let confirmables = vec ! [
1357+ let sync_payjoin = & self . payjoin_handler . as_ref ( ) ;
1358+ let mut confirmables = vec ! [
13131359 & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
13141360 & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
13151361 & * sync_sweeper as & ( dyn Confirm + Sync + Send ) ,
13161362 ] ;
1363+ if let Some ( sync_payjoin) = sync_payjoin {
1364+ confirmables. push ( sync_payjoin. as_ref ( ) as & ( dyn Confirm + Sync + Send ) ) ;
1365+ }
13171366 let sync_wallet_timestamp = Arc :: clone ( & self . latest_wallet_sync_timestamp ) ;
13181367 let sync_fee_rate_update_timestamp =
13191368 Arc :: clone ( & self . latest_fee_rate_cache_update_timestamp ) ;
0 commit comments