5
5
// http://opensource.org/licenses/MIT>, at your option. You may not use this file except in
6
6
// accordance with one or both of these licenses.
7
7
8
+ use crate :: chain:: ChainSource ;
8
9
use crate :: logger:: { log_debug, log_error, log_info, Logger } ;
9
10
use crate :: types:: { ChannelManager , KeysManager , LiquidityManager , PeerManager } ;
10
11
use crate :: { Config , Error } ;
@@ -15,9 +16,12 @@ use lightning::routing::router::{RouteHint, RouteHintHop};
15
16
use lightning_invoice:: { Bolt11Invoice , InvoiceBuilder , RoutingFees } ;
16
17
use lightning_liquidity:: events:: Event ;
17
18
use lightning_liquidity:: lsps0:: ser:: RequestId ;
19
+ use lightning_liquidity:: lsps1:: client:: LSPS1ClientConfig ;
20
+ use lightning_liquidity:: lsps2:: client:: LSPS2ClientConfig ;
18
21
use lightning_liquidity:: lsps2:: event:: LSPS2ClientEvent ;
19
22
use lightning_liquidity:: lsps2:: msgs:: OpeningFeeParams ;
20
23
use lightning_liquidity:: lsps2:: utils:: compute_opening_fee;
24
+ use lightning_liquidity:: LiquidityClientConfig ;
21
25
22
26
use bitcoin:: hashes:: { sha256, Hash } ;
23
27
use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
@@ -31,47 +35,126 @@ use std::time::Duration;
31
35
32
36
const LIQUIDITY_REQUEST_TIMEOUT_SECS : u64 = 5 ;
33
37
38
+ struct LSPS1Service {
39
+ node_id : PublicKey ,
40
+ address : SocketAddress ,
41
+ token : Option < String > ,
42
+ client_config : LSPS1ClientConfig ,
43
+ }
44
+
34
45
struct LSPS2Service {
35
46
node_id : PublicKey ,
36
47
address : SocketAddress ,
37
48
token : Option < String > ,
49
+ client_config : LSPS2ClientConfig ,
38
50
pending_fee_requests : Mutex < HashMap < RequestId , oneshot:: Sender < LSPS2FeeResponse > > > ,
39
51
pending_buy_requests : Mutex < HashMap < RequestId , oneshot:: Sender < LSPS2BuyResponse > > > ,
40
52
}
41
53
42
- pub ( crate ) struct LiquiditySource < L : Deref >
54
+ pub ( crate ) struct LiquiditySourceBuilder < L : Deref >
43
55
where
44
56
L :: Target : Logger ,
45
57
{
58
+ lsps1_service : Option < LSPS1Service > ,
46
59
lsps2_service : Option < LSPS2Service > ,
47
60
channel_manager : Arc < ChannelManager > ,
48
61
keys_manager : Arc < KeysManager > ,
49
- liquidity_manager : Arc < LiquidityManager > ,
62
+ chain_source : Arc < ChainSource > ,
50
63
config : Arc < Config > ,
51
64
logger : L ,
52
65
}
53
66
54
- impl < L : Deref > LiquiditySource < L >
67
+ impl < L : Deref > LiquiditySourceBuilder < L >
55
68
where
56
69
L :: Target : Logger ,
57
70
{
58
- pub ( crate ) fn new_lsps2 (
59
- node_id : PublicKey , address : SocketAddress , token : Option < String > ,
71
+ pub ( crate ) fn new (
60
72
channel_manager : Arc < ChannelManager > , keys_manager : Arc < KeysManager > ,
61
- liquidity_manager : Arc < LiquidityManager > , config : Arc < Config > , logger : L ,
73
+ chain_source : Arc < ChainSource > , config : Arc < Config > , logger : L ,
62
74
) -> Self {
75
+ let lsps1_service = None ;
76
+ let lsps2_service = None ;
77
+ Self {
78
+ lsps1_service,
79
+ lsps2_service,
80
+ channel_manager,
81
+ keys_manager,
82
+ chain_source,
83
+ config,
84
+ logger,
85
+ }
86
+ }
87
+
88
+ pub ( crate ) fn lsps1_service (
89
+ & mut self , node_id : PublicKey , address : SocketAddress , token : Option < String > ,
90
+ ) -> & mut Self {
91
+ // TODO: allow to set max_channel_fees_msat
92
+ let client_config = LSPS1ClientConfig { max_channel_fees_msat : None } ;
93
+ self . lsps1_service = Some ( LSPS1Service { node_id, address, token, client_config } ) ;
94
+ self
95
+ }
96
+
97
+ pub ( crate ) fn lsps2_service (
98
+ & mut self , node_id : PublicKey , address : SocketAddress , token : Option < String > ,
99
+ ) -> & mut Self {
100
+ let client_config = LSPS2ClientConfig { } ;
63
101
let pending_fee_requests = Mutex :: new ( HashMap :: new ( ) ) ;
64
102
let pending_buy_requests = Mutex :: new ( HashMap :: new ( ) ) ;
65
- let lsps2_service = Some ( LSPS2Service {
103
+ self . lsps2_service = Some ( LSPS2Service {
66
104
node_id,
67
105
address,
68
106
token,
107
+ client_config,
69
108
pending_fee_requests,
70
109
pending_buy_requests,
71
110
} ) ;
72
- Self { lsps2_service , channel_manager , keys_manager , liquidity_manager , config , logger }
111
+ self
73
112
}
74
113
114
+ pub ( crate ) fn build ( self ) -> LiquiditySource < L > {
115
+ let lsps1_client_config = self . lsps1_service . as_ref ( ) . map ( |s| s. client_config . clone ( ) ) ;
116
+ let lsps2_client_config = self . lsps2_service . as_ref ( ) . map ( |s| s. client_config . clone ( ) ) ;
117
+ let liquidity_client_config =
118
+ Some ( LiquidityClientConfig { lsps1_client_config, lsps2_client_config } ) ;
119
+
120
+ let liquidity_manager = Arc :: new ( LiquidityManager :: new (
121
+ Arc :: clone ( & self . keys_manager ) ,
122
+ Arc :: clone ( & self . channel_manager ) ,
123
+ Some ( Arc :: clone ( & self . chain_source ) ) ,
124
+ None ,
125
+ None ,
126
+ liquidity_client_config,
127
+ ) ) ;
128
+
129
+ LiquiditySource {
130
+ lsps1_service : self . lsps1_service ,
131
+ lsps2_service : self . lsps2_service ,
132
+ channel_manager : self . channel_manager ,
133
+ keys_manager : self . keys_manager ,
134
+ liquidity_manager,
135
+ config : self . config ,
136
+ logger : self . logger ,
137
+ }
138
+ }
139
+ }
140
+
141
+ pub ( crate ) struct LiquiditySource < L : Deref >
142
+ where
143
+ L :: Target : Logger ,
144
+ {
145
+ lsps1_service : Option < LSPS1Service > ,
146
+ lsps2_service : Option < LSPS2Service > ,
147
+ channel_manager : Arc < ChannelManager > ,
148
+ keys_manager : Arc < KeysManager > ,
149
+ liquidity_manager : Arc < LiquidityManager > ,
150
+ config : Arc < Config > ,
151
+ logger : L ,
152
+ }
153
+
154
+ impl < L : Deref > LiquiditySource < L >
155
+ where
156
+ L :: Target : Logger ,
157
+ {
75
158
pub ( crate ) fn set_peer_manager ( & self , peer_manager : Arc < PeerManager > ) {
76
159
let process_msgs_callback = move || peer_manager. process_events ( ) ;
77
160
self . liquidity_manager . set_process_msgs_callback ( process_msgs_callback) ;
@@ -81,7 +164,11 @@ where
81
164
self . liquidity_manager . as_ref ( )
82
165
}
83
166
84
- pub ( crate ) fn get_liquidity_source_details ( & self ) -> Option < ( PublicKey , SocketAddress ) > {
167
+ pub ( crate ) fn get_lsps1_service_details ( & self ) -> Option < ( PublicKey , SocketAddress ) > {
168
+ self . lsps1_service . as_ref ( ) . map ( |s| ( s. node_id , s. address . clone ( ) ) )
169
+ }
170
+
171
+ pub ( crate ) fn get_lsps2_service_details ( & self ) -> Option < ( PublicKey , SocketAddress ) > {
85
172
self . lsps2_service . as_ref ( ) . map ( |s| ( s. node_id , s. address . clone ( ) ) )
86
173
}
87
174
0 commit comments