Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit 2181388

Browse files
move min/max_payment_size into promised params
1 parent 9a27200 commit 2181388

File tree

4 files changed

+47
-35
lines changed

4 files changed

+47
-35
lines changed

src/lsps2/client.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,6 @@ where
251251
LSPS2ClientEvent::OpeningParametersReady {
252252
counterparty_node_id: *counterparty_node_id,
253253
opening_fee_params_menu: result.opening_fee_params_menu,
254-
min_payment_size_msat: result.min_payment_size_msat,
255-
max_payment_size_msat: result.max_payment_size_msat,
256254
},
257255
));
258256
}

src/lsps2/event.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ pub enum LSPS2ClientEvent {
3030
/// The menu of fee parameters the LSP is offering at this time.
3131
/// You must select one of these if you wish to proceed.
3232
opening_fee_params_menu: Vec<OpeningFeeParams>,
33-
/// The min payment size allowed when opening the channel.
34-
min_payment_size_msat: u64,
35-
/// The max payment size allowed when opening the channel.
36-
max_payment_size_msat: u64,
3733
},
3834
/// Provides the necessary information to generate a payable invoice that then may be given to
3935
/// the payer.

src/lsps2/msgs.rs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ pub struct RawOpeningFeeParams {
4141
pub valid_until: chrono::DateTime<Utc>,
4242
/// The number of blocks after confirmation that the LSP promises it will keep the channel alive without closing.
4343
pub min_lifetime: u32,
44-
/// T maximum number of blocks that the client is allowed to set its `to_self_delay` parameter.
44+
/// The maximum number of blocks that the client is allowed to set its `to_self_delay` parameter.
4545
pub max_client_to_self_delay: u32,
46+
/// The minimum payment size that the LSP will accept when opening a channel.
47+
pub min_payment_size_msat: u64,
48+
/// The maximum payment size that the LSP will accept when opening a channel.
49+
pub max_payment_size_msat: u64,
4650
}
4751

4852
impl RawOpeningFeeParams {
@@ -53,6 +57,8 @@ impl RawOpeningFeeParams {
5357
hmac.input(self.valid_until.to_rfc3339().as_bytes());
5458
hmac.input(&self.min_lifetime.to_be_bytes());
5559
hmac.input(&self.max_client_to_self_delay.to_be_bytes());
60+
hmac.input(&self.min_payment_size_msat.to_be_bytes());
61+
hmac.input(&self.max_payment_size_msat.to_be_bytes());
5662
let promise_bytes = Hmac::from_engine(hmac).to_byte_array();
5763
let promise = utils::hex_str(&promise_bytes[..]);
5864
OpeningFeeParams {
@@ -61,6 +67,8 @@ impl RawOpeningFeeParams {
6167
valid_until: self.valid_until.clone(),
6268
min_lifetime: self.min_lifetime,
6369
max_client_to_self_delay: self.max_client_to_self_delay,
70+
min_payment_size_msat: self.min_payment_size_msat,
71+
max_payment_size_msat: self.max_payment_size_msat,
6472
promise,
6573
}
6674
}
@@ -83,6 +91,10 @@ pub struct OpeningFeeParams {
8391
pub min_lifetime: u32,
8492
/// The maximum number of blocks that the client is allowed to set its `to_self_delay` parameter.
8593
pub max_client_to_self_delay: u32,
94+
/// The minimum payment size that the LSP will accept when opening a channel.
95+
pub min_payment_size_msat: u64,
96+
/// The maximum payment size that the LSP will accept when opening a channel.
97+
pub max_payment_size_msat: u64,
8698
/// The HMAC used to verify the authenticity of these parameters.
8799
pub promise: String,
88100
}
@@ -92,10 +104,6 @@ pub struct OpeningFeeParams {
92104
pub struct GetInfoResponse {
93105
/// A set of opening fee parameters.
94106
pub opening_fee_params_menu: Vec<OpeningFeeParams>,
95-
/// The minimum payment size required to open a channel.
96-
pub min_payment_size_msat: u64,
97-
/// The maximum payment size the lsp will tolerate.
98-
pub max_payment_size_msat: u64,
99107
}
100108

101109
/// A request to buy a JIT channel.
@@ -215,13 +223,17 @@ mod tests {
215223
chrono::DateTime::parse_from_rfc3339("2035-05-20T08:30:45Z").unwrap().into();
216224
let min_lifetime = 144;
217225
let max_client_to_self_delay = 128;
226+
let min_payment_size_msat = 1;
227+
let max_payment_size_msat = 100_000_000;
218228

219229
let raw = RawOpeningFeeParams {
220230
min_fee_msat,
221231
proportional,
222232
valid_until: valid_until.clone().into(),
223233
min_lifetime,
224234
max_client_to_self_delay,
235+
min_payment_size_msat,
236+
max_payment_size_msat,
225237
};
226238

227239
let promise_secret = [1u8; 32];
@@ -244,13 +256,17 @@ mod tests {
244256
let valid_until = chrono::DateTime::parse_from_rfc3339("2035-05-20T08:30:45Z").unwrap();
245257
let min_lifetime = 144;
246258
let max_client_to_self_delay = 128;
259+
let min_payment_size_msat = 1;
260+
let max_payment_size_msat = 100_000_000;
247261

248262
let raw = RawOpeningFeeParams {
249263
min_fee_msat,
250264
proportional,
251265
valid_until: valid_until.into(),
252266
min_lifetime,
253267
max_client_to_self_delay,
268+
min_payment_size_msat,
269+
max_payment_size_msat,
254270
};
255271

256272
let promise_secret = [1u8; 32];
@@ -267,13 +283,17 @@ mod tests {
267283
let valid_until = chrono::DateTime::parse_from_rfc3339("2035-05-20T08:30:45Z").unwrap();
268284
let min_lifetime = 144;
269285
let max_client_to_self_delay = 128;
286+
let min_payment_size_msat = 1;
287+
let max_payment_size_msat = 100_000_000;
270288

271289
let raw = RawOpeningFeeParams {
272290
min_fee_msat,
273291
proportional,
274292
valid_until: valid_until.into(),
275293
min_lifetime,
276294
max_client_to_self_delay,
295+
min_payment_size_msat,
296+
max_payment_size_msat,
277297
};
278298

279299
let promise_secret = [1u8; 32];
@@ -292,13 +312,17 @@ mod tests {
292312
let valid_until = chrono::DateTime::parse_from_rfc3339("2023-05-20T08:30:45Z").unwrap();
293313
let min_lifetime = 144;
294314
let max_client_to_self_delay = 128;
315+
let min_payment_size_msat = 1;
316+
let max_payment_size_msat = 100_000_000;
295317

296318
let raw = RawOpeningFeeParams {
297319
min_fee_msat,
298320
proportional,
299321
valid_until: valid_until.into(),
300322
min_lifetime,
301323
max_client_to_self_delay,
324+
min_payment_size_msat,
325+
max_payment_size_msat,
302326
};
303327

304328
let promise_secret = [1u8; 32];

src/lsps2/service.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@ pub struct LSPS2ServiceConfig {
4444
///
4545
/// Note: If this changes then old promises given out will be considered invalid.
4646
pub promise_secret: [u8; 32],
47-
/// The minimum payment size you are willing to accept.
48-
pub min_payment_size_msat: u64,
49-
/// The maximum payment size you are willing to accept.
50-
pub max_payment_size_msat: u64,
5147
}
5248

5349
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
@@ -69,6 +65,8 @@ enum OutboundJITChannelState {
6965
AwaitingPayment {
7066
min_fee_msat: u64,
7167
proportional_fee: u32,
68+
min_payment_size_msat: u64,
69+
max_payment_size_msat: u64,
7270
htlcs: Vec<InterceptedHTLC>,
7371
payment_size_msat: Option<u64>,
7472
},
@@ -88,18 +86,20 @@ impl OutboundJITChannelState {
8886
OutboundJITChannelState::AwaitingPayment {
8987
min_fee_msat: opening_fee_params.min_fee_msat,
9088
proportional_fee: opening_fee_params.proportional,
89+
min_payment_size_msat: opening_fee_params.min_payment_size_msat,
90+
max_payment_size_msat: opening_fee_params.max_payment_size_msat,
9191
htlcs: vec![],
9292
payment_size_msat,
9393
}
9494
}
9595

96-
fn htlc_intercepted(
97-
&self, htlc: InterceptedHTLC, config: &LSPS2ServiceConfig,
98-
) -> Result<Self, ChannelStateError> {
96+
fn htlc_intercepted(&self, htlc: InterceptedHTLC) -> Result<Self, ChannelStateError> {
9997
match self {
10098
OutboundJITChannelState::AwaitingPayment {
10199
htlcs,
102100
payment_size_msat,
101+
min_payment_size_msat,
102+
max_payment_size_msat,
103103
min_fee_msat,
104104
proportional_fee,
105105
} => {
@@ -122,14 +122,14 @@ impl OutboundJITChannelState {
122122
(total_expected_outbound_amount_msat, false)
123123
};
124124

125-
if expected_payment_size_msat < config.min_payment_size_msat
126-
|| expected_payment_size_msat > config.max_payment_size_msat
125+
if expected_payment_size_msat < *min_payment_size_msat
126+
|| expected_payment_size_msat > *max_payment_size_msat
127127
{
128128
return Err(ChannelStateError(
129129
format!("Payment size violates our limits: expected_payment_size_msat = {}, min_payment_size_msat = {}, max_payment_size_msat = {}",
130130
expected_payment_size_msat,
131-
config.min_payment_size_msat,
132-
config.max_payment_size_msat
131+
min_payment_size_msat,
132+
max_payment_size_msat
133133
)));
134134
}
135135

@@ -164,6 +164,8 @@ impl OutboundJITChannelState {
164164
proportional_fee: *proportional_fee,
165165
htlcs,
166166
payment_size_msat: *payment_size_msat,
167+
min_payment_size_msat: *min_payment_size_msat,
168+
max_payment_size_msat: *max_payment_size_msat,
167169
})
168170
} else {
169171
Err(ChannelStateError(
@@ -211,9 +213,9 @@ impl OutboundJITChannel {
211213
}
212214

213215
fn htlc_intercepted(
214-
&mut self, htlc: InterceptedHTLC, config: &LSPS2ServiceConfig,
216+
&mut self, htlc: InterceptedHTLC,
215217
) -> Result<Option<(u64, u64)>, LightningError> {
216-
self.state = self.state.htlc_intercepted(htlc, config)?;
218+
self.state = self.state.htlc_intercepted(htlc)?;
217219

218220
match &self.state {
219221
OutboundJITChannelState::AwaitingPayment { .. } => {
@@ -354,13 +356,7 @@ where
354356
pub fn opening_fee_params_generated(
355357
&self, counterparty_node_id: &PublicKey, request_id: RequestId,
356358
opening_fee_params_menu: Vec<RawOpeningFeeParams>,
357-
min_payment_size_msat_override: Option<u64>, max_payment_size_msat_override: Option<u64>,
358359
) -> Result<(), APIError> {
359-
let min_payment_size_msat =
360-
min_payment_size_msat_override.unwrap_or(self.config.min_payment_size_msat);
361-
let max_payment_size_msat =
362-
max_payment_size_msat_override.unwrap_or(self.config.max_payment_size_msat);
363-
364360
let outer_state_lock = self.per_peer_state.read().unwrap();
365361

366362
match outer_state_lock.get(counterparty_node_id) {
@@ -376,8 +372,6 @@ where
376372
param.into_opening_fee_params(&self.config.promise_secret)
377373
})
378374
.collect(),
379-
min_payment_size_msat,
380-
max_payment_size_msat,
381375
});
382376
self.enqueue_response(counterparty_node_id, request_id, response);
383377
Ok(())
@@ -478,7 +472,7 @@ where
478472
peer_state.outbound_channels_by_intercept_scid.get_mut(&intercept_scid)
479473
{
480474
let htlc = InterceptedHTLC { intercept_id, expected_outbound_amount_msat };
481-
match jit_channel.htlc_intercepted(htlc, &self.config) {
475+
match jit_channel.htlc_intercepted(htlc) {
482476
Ok(Some((opening_fee_msat, amt_to_forward_msat))) => {
483477
self.enqueue_event(Event::LSPS2Service(
484478
LSPS2ServiceEvent::OpenChannel {
@@ -622,7 +616,7 @@ where
622616
&self, request_id: RequestId, counterparty_node_id: &PublicKey, params: BuyRequest,
623617
) -> Result<(), LightningError> {
624618
if let Some(payment_size_msat) = params.payment_size_msat {
625-
if payment_size_msat < self.config.min_payment_size_msat {
619+
if payment_size_msat < params.opening_fee_params.min_payment_size_msat {
626620
self.enqueue_response(
627621
counterparty_node_id,
628622
request_id,
@@ -639,7 +633,7 @@ where
639633
});
640634
}
641635

642-
if payment_size_msat > self.config.max_payment_size_msat {
636+
if payment_size_msat > params.opening_fee_params.max_payment_size_msat {
643637
self.enqueue_response(
644638
counterparty_node_id,
645639
request_id,

0 commit comments

Comments
 (0)