1
1
use ldk_node:: bitcoin:: Network ;
2
2
use ldk_node:: lightning:: ln:: msgs:: SocketAddress ;
3
+ use ldk_node:: liquidity:: LSPS2ServiceConfig ;
3
4
use serde:: { Deserialize , Serialize } ;
4
5
use std:: net:: SocketAddr ;
5
6
use std:: path:: Path ;
6
7
use std:: str:: FromStr ;
7
8
use std:: { fs, io} ;
8
9
9
10
/// Configuration for LDK Server.
10
- #[ derive( PartialEq , Eq , Debug ) ]
11
+ #[ derive( Debug ) ]
11
12
pub struct Config {
12
13
pub listening_addr : SocketAddress ,
13
14
pub network : Network ,
@@ -18,6 +19,7 @@ pub struct Config {
18
19
pub bitcoind_rpc_password : String ,
19
20
pub rabbitmq_connection_string : String ,
20
21
pub rabbitmq_exchange_name : String ,
22
+ pub lsps2_service_config : Option < LSPS2ServiceConfig > ,
21
23
}
22
24
23
25
impl TryFrom < TomlConfig > for Config {
@@ -61,6 +63,11 @@ impl TryFrom<TomlConfig> for Config {
61
63
( rabbitmq. connection_string , rabbitmq. exchange_name )
62
64
} ;
63
65
66
+ #[ cfg( not( feature = "experimental-lsps2-support" ) ) ]
67
+ let lsps2_service_config: Option < LSPS2ServiceConfig > = None ;
68
+ #[ cfg( feature = "experimental-lsps2-support" ) ]
69
+ let lsps2_service_config = Some ( toml_config. liquidity . expect ( "`liquidity.lsps2_server` must be defined in config if enabling `experimental-lsps2-support` feature." ) . lsps2_service . into ( ) ) ;
70
+
64
71
Ok ( Config {
65
72
listening_addr,
66
73
network : toml_config. node . network ,
@@ -71,6 +78,7 @@ impl TryFrom<TomlConfig> for Config {
71
78
bitcoind_rpc_password : toml_config. bitcoind . rpc_password ,
72
79
rabbitmq_connection_string,
73
80
rabbitmq_exchange_name,
81
+ lsps2_service_config,
74
82
} )
75
83
}
76
84
}
@@ -82,6 +90,8 @@ pub struct TomlConfig {
82
90
storage : StorageConfig ,
83
91
bitcoind : BitcoindConfig ,
84
92
rabbitmq : Option < RabbitmqConfig > ,
93
+ #[ serde( default ) ]
94
+ liquidity : Option < LiquidityConfig > ,
85
95
}
86
96
87
97
#[ derive( Deserialize , Serialize ) ]
@@ -114,6 +124,53 @@ struct RabbitmqConfig {
114
124
exchange_name : String ,
115
125
}
116
126
127
+ #[ derive( Deserialize , Serialize ) ]
128
+ struct LiquidityConfig {
129
+ lsps2_service : LSPS2ServiceTomlConfig ,
130
+ }
131
+
132
+ #[ derive( Deserialize , Serialize , Debug ) ]
133
+ struct LSPS2ServiceTomlConfig {
134
+ advertise_service : bool ,
135
+ channel_opening_fee_ppm : u32 ,
136
+ channel_over_provisioning_ppm : u32 ,
137
+ min_channel_opening_fee_msat : u64 ,
138
+ min_channel_lifetime : u32 ,
139
+ max_client_to_self_delay : u32 ,
140
+ min_payment_size_msat : u64 ,
141
+ max_payment_size_msat : u64 ,
142
+ #[ serde( default ) ] // Make require_token optional
143
+ require_token : Option < String > ,
144
+ }
145
+
146
+ impl Into < LSPS2ServiceConfig > for LSPS2ServiceTomlConfig {
147
+ fn into ( self ) -> LSPS2ServiceConfig {
148
+ match self {
149
+ LSPS2ServiceTomlConfig {
150
+ advertise_service,
151
+ channel_opening_fee_ppm,
152
+ channel_over_provisioning_ppm,
153
+ min_channel_opening_fee_msat,
154
+ min_channel_lifetime,
155
+ max_client_to_self_delay,
156
+ min_payment_size_msat,
157
+ max_payment_size_msat,
158
+ require_token,
159
+ } => LSPS2ServiceConfig {
160
+ advertise_service,
161
+ channel_opening_fee_ppm,
162
+ channel_over_provisioning_ppm,
163
+ min_channel_opening_fee_msat,
164
+ min_channel_lifetime,
165
+ min_payment_size_msat,
166
+ max_client_to_self_delay,
167
+ max_payment_size_msat,
168
+ require_token,
169
+ } ,
170
+ }
171
+ }
172
+ }
173
+
117
174
/// Loads the configuration from a TOML file at the given path.
118
175
pub fn load_config < P : AsRef < Path > > ( config_path : P ) -> io:: Result < Config > {
119
176
let file_contents = fs:: read_to_string ( config_path. as_ref ( ) ) . map_err ( |e| {
@@ -164,19 +221,29 @@ mod tests {
164
221
165
222
fs:: write ( storage_path. join ( config_file_name) , toml_config) . unwrap ( ) ;
166
223
167
- assert_eq ! (
168
- load_config( storage_path. join( config_file_name) ) . unwrap( ) ,
169
- Config {
170
- listening_addr: SocketAddress :: from_str( "localhost:3001" ) . unwrap( ) ,
171
- network: Network :: Regtest ,
172
- rest_service_addr: SocketAddr :: from_str( "127.0.0.1:3002" ) . unwrap( ) ,
173
- storage_dir_path: "/tmp" . to_string( ) ,
174
- bitcoind_rpc_addr: SocketAddr :: from_str( "127.0.0.1:8332" ) . unwrap( ) ,
175
- bitcoind_rpc_user: "bitcoind-testuser" . to_string( ) ,
176
- bitcoind_rpc_password: "bitcoind-testpassword" . to_string( ) ,
177
- rabbitmq_connection_string: "rabbitmq_connection_string" . to_string( ) ,
178
- rabbitmq_exchange_name: "rabbitmq_exchange_name" . to_string( ) ,
179
- }
180
- )
224
+ let config = load_config ( storage_path. join ( config_file_name) ) . unwrap ( ) ;
225
+ let expected = Config {
226
+ listening_addr : SocketAddress :: from_str ( "localhost:3001" ) . unwrap ( ) ,
227
+ network : Network :: Regtest ,
228
+ rest_service_addr : SocketAddr :: from_str ( "127.0.0.1:3002" ) . unwrap ( ) ,
229
+ storage_dir_path : "/tmp" . to_string ( ) ,
230
+ bitcoind_rpc_addr : SocketAddr :: from_str ( "127.0.0.1:8332" ) . unwrap ( ) ,
231
+ bitcoind_rpc_user : "bitcoind-testuser" . to_string ( ) ,
232
+ bitcoind_rpc_password : "bitcoind-testpassword" . to_string ( ) ,
233
+ rabbitmq_connection_string : "rabbitmq_connection_string" . to_string ( ) ,
234
+ rabbitmq_exchange_name : "rabbitmq_exchange_name" . to_string ( ) ,
235
+ lsps2_service_config : None ,
236
+ } ;
237
+
238
+ assert_eq ! ( config. listening_addr. to_string( ) , expected. listening_addr. to_string( ) ) ;
239
+ assert_eq ! ( config. network, expected. network) ;
240
+ assert_eq ! ( config. rest_service_addr, expected. rest_service_addr) ;
241
+ assert_eq ! ( config. storage_dir_path, expected. storage_dir_path) ;
242
+ assert_eq ! ( config. bitcoind_rpc_addr, expected. bitcoind_rpc_addr) ;
243
+ assert_eq ! ( config. bitcoind_rpc_user, expected. bitcoind_rpc_user) ;
244
+ assert_eq ! ( config. bitcoind_rpc_password, expected. bitcoind_rpc_password) ;
245
+ assert_eq ! ( config. rabbitmq_connection_string, expected. rabbitmq_connection_string) ;
246
+ assert_eq ! ( config. rabbitmq_exchange_name, expected. rabbitmq_exchange_name) ;
247
+ assert_eq ! ( config. lsps2_service_config. is_some( ) , expected. lsps2_service_config. is_some( ) ) ;
181
248
}
182
249
}
0 commit comments