Skip to content

Commit db1f37b

Browse files
Set htlc_maximum_msat in BlindedPayInfo on blinded path construction
1 parent 6ba9894 commit db1f37b

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

lightning/src/blinded_path/mod.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,13 @@ impl BlindedPath {
8888
// TODO: make all payloads the same size with padding + add dummy hops
8989
pub fn new_for_payment<ES: EntropySource, T: secp256k1::Signing + secp256k1::Verification>(
9090
intermediate_nodes: &[(PublicKey, payment::ForwardTlvs)], payee_node_id: PublicKey,
91-
payee_tlvs: payment::ReceiveTlvs, entropy_source: &ES, secp_ctx: &Secp256k1<T>
91+
payee_tlvs: payment::ReceiveTlvs, htlc_maximum_msat: u64, entropy_source: &ES,
92+
secp_ctx: &Secp256k1<T>
9293
) -> Result<(BlindedPayInfo, Self), ()> {
9394
let blinding_secret_bytes = entropy_source.get_secure_random_bytes();
9495
let blinding_secret = SecretKey::from_slice(&blinding_secret_bytes[..]).expect("RNG is busted");
9596

96-
let blinded_payinfo = payment::compute_payinfo(intermediate_nodes, &payee_tlvs)?;
97+
let blinded_payinfo = payment::compute_payinfo(intermediate_nodes, &payee_tlvs, htlc_maximum_msat)?;
9798
Ok((blinded_payinfo, BlindedPath {
9899
introduction_node_id: intermediate_nodes.first().map_or(payee_node_id, |n| n.0),
99100
blinding_point: PublicKey::from_secret_key(secp_ctx, &blinding_secret),

lightning/src/blinded_path/payment.rs

+17-7
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
154154
}
155155

156156
pub(super) fn compute_payinfo(
157-
intermediate_nodes: &[(PublicKey, ForwardTlvs)], payee_tlvs: &ReceiveTlvs
157+
intermediate_nodes: &[(PublicKey, ForwardTlvs)], payee_tlvs: &ReceiveTlvs, htlc_maximum_msat: u64
158158
) -> Result<BlindedPayInfo, ()> {
159159
let mut curr_base_fee: u64 = 0;
160160
let mut curr_prop_mil: u64 = 0;
@@ -212,12 +212,13 @@ pub(super) fn compute_payinfo(
212212
htlc_minimum_msat =
213213
core::cmp::max(payee_tlvs.payment_constraints.htlc_minimum_msat as u128, htlc_minimum_msat);
214214

215+
if (htlc_maximum_msat as u128) < htlc_minimum_msat { return Err(()) }
215216
Ok(BlindedPayInfo {
216217
fee_base_msat: u32::try_from(curr_base_fee).map_err(|_| ())?,
217218
fee_proportional_millionths: u32::try_from(curr_prop_mil).map_err(|_| ())?,
218219
cltv_expiry_delta,
219220
htlc_minimum_msat: u64::try_from(htlc_minimum_msat).map_err(|_| ())?,
220-
htlc_maximum_msat: 21_000_000 * 100_000_000 * 1_000, // TODO
221+
htlc_maximum_msat,
221222
features: BlindedHopFeatures::empty(),
222223
})
223224
}
@@ -277,11 +278,13 @@ mod tests {
277278
htlc_minimum_msat: 1,
278279
},
279280
};
280-
let blinded_payinfo = super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs).unwrap();
281+
let htlc_maximum_msat = 100_000;
282+
let blinded_payinfo = super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs, htlc_maximum_msat).unwrap();
281283
assert_eq!(blinded_payinfo.fee_base_msat, 201);
282284
assert_eq!(blinded_payinfo.fee_proportional_millionths, 1001);
283285
assert_eq!(blinded_payinfo.cltv_expiry_delta, 288);
284286
assert_eq!(blinded_payinfo.htlc_minimum_msat, 1000);
287+
assert_eq!(blinded_payinfo.htlc_maximum_msat, htlc_maximum_msat);
285288
}
286289

287290
#[test]
@@ -293,11 +296,12 @@ mod tests {
293296
htlc_minimum_msat: 1,
294297
},
295298
};
296-
let blinded_payinfo = super::compute_payinfo(&[], &recv_tlvs).unwrap();
299+
let blinded_payinfo = super::compute_payinfo(&[], &recv_tlvs, 4242).unwrap();
297300
assert_eq!(blinded_payinfo.fee_base_msat, 0);
298301
assert_eq!(blinded_payinfo.fee_proportional_millionths, 0);
299302
assert_eq!(blinded_payinfo.cltv_expiry_delta, 0);
300303
assert_eq!(blinded_payinfo.htlc_minimum_msat, 1);
304+
assert_eq!(blinded_payinfo.htlc_maximum_msat, 4242);
301305
}
302306

303307
#[test]
@@ -337,7 +341,8 @@ mod tests {
337341
htlc_minimum_msat: 3,
338342
},
339343
};
340-
let blinded_payinfo = super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs).unwrap();
344+
let htlc_maximum_msat = 100_000;
345+
let blinded_payinfo = super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs, htlc_maximum_msat).unwrap();
341346
assert_eq!(blinded_payinfo.htlc_minimum_msat, 2_000);
342347
}
343348

@@ -378,7 +383,12 @@ mod tests {
378383
htlc_minimum_msat: 1,
379384
},
380385
};
381-
let blinded_payinfo = super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs).unwrap();
382-
assert_eq!(blinded_payinfo.htlc_minimum_msat, 4798);
386+
let htlc_minimum_msat = 4798;
387+
assert!(super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs, htlc_minimum_msat - 1).is_err());
388+
389+
let htlc_maximum_msat = htlc_minimum_msat + 1;
390+
let blinded_payinfo = super::compute_payinfo(&intermediate_nodes[..], &recv_tlvs, htlc_maximum_msat).unwrap();
391+
assert_eq!(blinded_payinfo.htlc_minimum_msat, htlc_minimum_msat);
392+
assert_eq!(blinded_payinfo.htlc_maximum_msat, htlc_maximum_msat);
383393
}
384394
}

0 commit comments

Comments
 (0)