Skip to content

Commit cf50f76

Browse files
f check for required features
1 parent ea039ed commit cf50f76

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

lightning/src/blinded_path/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ impl BlindedPath {
8686
/// * [`BlindedPayInfo`] calculation results in an integer overflow
8787
/// * the list of [`BlindedPaymentTlvs`] does not consist of 0 or more
8888
/// `BlindedPaymentTlvs::Forward` followed by 1 `BlindedPaymentTlvs::Receive`
89+
/// * any unknown features are required in the provided [`BlindedPaymentTlvs`]
8990
// TODO: make all payloads the same size with padding + add dummy hops
9091
pub fn new_for_payment<ES: EntropySource, T: secp256k1::Signing + secp256k1::Verification>(
9192
path: &[(PublicKey, BlindedPaymentTlvs)], entropy_source: &ES, secp_ctx: &Secp256k1<T>

lightning/src/blinded_path/payment.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ impl BlindedPaymentTlvs {
7373
payment_constraints.htlc_minimum_msat,
7474
}
7575
}
76+
fn features(&self) -> &BlindedHopFeatures {
77+
match self {
78+
Self::Forward { features, .. } | Self::Receive { features, .. } => &features
79+
}
80+
}
7681
}
7782

7883
/// Parameters for relaying over a given [`BlindedHop`].
@@ -174,6 +179,8 @@ pub(super) fn compute_payinfo(
174179
let mut curr_base_fee: u32 = 0;
175180
let mut curr_prop_mil: u32 = 0;
176181
for (_, payment_tlvs) in path.iter().rev().skip(1) {
182+
if payment_tlvs.features().requires_unknown_bits() { return Err(()) }
183+
177184
let next_base_fee = payment_tlvs.fee_base_msat();
178185
let next_prop_mil = payment_tlvs.fee_proportional_millionths();
179186
// Use integer arithmetic to compute `ceil(a/b)` as `(a+b-1)/b`
@@ -200,7 +207,6 @@ pub(super) fn compute_payinfo(
200207
htlc_minimum_msat: path.iter().map(|(_, tlvs)| tlvs.htlc_minimum_msat()).max().unwrap_or(0),
201208
// TODO: this field isn't present in route blinding encrypted data
202209
htlc_maximum_msat: 21_000_000 * 100_000_000 * 1_000, // Total bitcoin supply
203-
// TODO: when there are blinded hop features, take the intersection of them here
204210
features: BlindedHopFeatures::empty(),
205211
})
206212
}

0 commit comments

Comments
 (0)