@@ -108,7 +108,10 @@ pub use config::{default_config, AnchorChannelsConfig, Config};
108
108
pub use error:: Error as NodeError ;
109
109
use error:: Error ;
110
110
111
+ #[ cfg( feature = "uniffi" ) ]
112
+ use crate :: event:: PayjoinPaymentFailureReason ;
111
113
pub use event:: Event ;
114
+ use payment:: payjoin:: handler:: PayjoinHandler ;
112
115
pub use types:: ChannelConfig ;
113
116
114
117
pub use io:: utils:: generate_entropy_mnemonic;
@@ -133,8 +136,8 @@ use gossip::GossipSource;
133
136
use graph:: NetworkGraph ;
134
137
use liquidity:: LiquiditySource ;
135
138
use payment:: {
136
- Bolt11Payment , Bolt12Payment , OnchainPayment , PaymentDetails , SpontaneousPayment ,
137
- UnifiedQrPayment ,
139
+ Bolt11Payment , Bolt12Payment , OnchainPayment , PayjoinPayment , PaymentDetails ,
140
+ SpontaneousPayment , UnifiedQrPayment ,
138
141
} ;
139
142
use peer_store:: { PeerInfo , PeerStore } ;
140
143
use types:: {
@@ -187,6 +190,7 @@ pub struct Node {
187
190
output_sweeper : Arc < Sweeper > ,
188
191
peer_manager : Arc < PeerManager > ,
189
192
connection_manager : Arc < ConnectionManager < Arc < FilesystemLogger > > > ,
193
+ payjoin_handler : Option < Arc < PayjoinHandler > > ,
190
194
keys_manager : Arc < KeysManager > ,
191
195
network_graph : Arc < Graph > ,
192
196
gossip_source : Arc < GossipSource > ,
@@ -379,6 +383,8 @@ impl Node {
379
383
let archive_cmon = Arc :: clone ( & self . chain_monitor ) ;
380
384
let sync_sweeper = Arc :: clone ( & self . output_sweeper ) ;
381
385
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) ;
382
388
let sync_wallet_timestamp = Arc :: clone ( & self . latest_wallet_sync_timestamp ) ;
383
389
let sync_monitor_archival_height = Arc :: clone ( & self . latest_channel_monitor_archival_height ) ;
384
390
let mut stop_sync = self . stop_sender . subscribe ( ) ;
@@ -398,11 +404,14 @@ impl Node {
398
404
return ;
399
405
}
400
406
_ = wallet_sync_interval. tick( ) => {
401
- let confirmables = vec![
407
+ let mut confirmables = vec![
402
408
& * sync_cman as & ( dyn Confirm + Sync + Send ) ,
403
409
& * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
404
410
& * sync_sweeper as & ( dyn Confirm + Sync + Send ) ,
405
411
] ;
412
+ if let Some ( sync_payjoin) = sync_payjoin. as_ref( ) {
413
+ confirmables. push( sync_payjoin. as_ref( ) as & ( dyn Confirm + Sync + Send ) ) ;
414
+ }
406
415
let now = Instant :: now( ) ;
407
416
let timeout_fut = tokio:: time:: timeout( Duration :: from_secs( LDK_WALLET_SYNC_TIMEOUT_SECS ) , tx_sync. sync( confirmables) ) ;
408
417
match timeout_fut. await {
@@ -1108,6 +1117,42 @@ impl Node {
1108
1117
) )
1109
1118
}
1110
1119
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
+
1111
1156
/// Retrieve a list of known channels.
1112
1157
pub fn list_channels ( & self ) -> Vec < ChannelDetails > {
1113
1158
self . channel_manager . list_channels ( ) . into_iter ( ) . map ( |c| c. into ( ) ) . collect ( )
@@ -1309,11 +1354,15 @@ impl Node {
1309
1354
let fee_estimator = Arc :: clone ( & self . fee_estimator ) ;
1310
1355
let sync_sweeper = Arc :: clone ( & self . output_sweeper ) ;
1311
1356
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 ! [
1313
1359
& * sync_cman as & ( dyn Confirm + Sync + Send ) ,
1314
1360
& * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
1315
1361
& * sync_sweeper as & ( dyn Confirm + Sync + Send ) ,
1316
1362
] ;
1363
+ if let Some ( sync_payjoin) = sync_payjoin {
1364
+ confirmables. push ( sync_payjoin. as_ref ( ) as & ( dyn Confirm + Sync + Send ) ) ;
1365
+ }
1317
1366
let sync_wallet_timestamp = Arc :: clone ( & self . latest_wallet_sync_timestamp ) ;
1318
1367
let sync_fee_rate_update_timestamp =
1319
1368
Arc :: clone ( & self . latest_fee_rate_cache_update_timestamp ) ;
0 commit comments