@@ -73,6 +73,11 @@ impl BlindedPaymentTlvs {
73
73
payment_constraints. htlc_minimum_msat ,
74
74
}
75
75
}
76
+ fn features ( & self ) -> & BlindedHopFeatures {
77
+ match self {
78
+ Self :: Forward { features, .. } | Self :: Receive { features, .. } => & features
79
+ }
80
+ }
76
81
}
77
82
78
83
/// Parameters for relaying over a given [`BlindedHop`].
@@ -174,6 +179,8 @@ pub(super) fn compute_payinfo(
174
179
let mut curr_base_fee: u32 = 0 ;
175
180
let mut curr_prop_mil: u32 = 0 ;
176
181
for ( _, payment_tlvs) in path. iter ( ) . rev ( ) . skip ( 1 ) {
182
+ if payment_tlvs. features ( ) . requires_unknown_bits ( ) { return Err ( ( ) ) }
183
+
177
184
let next_base_fee = payment_tlvs. fee_base_msat ( ) ;
178
185
let next_prop_mil = payment_tlvs. fee_proportional_millionths ( ) ;
179
186
// Use integer arithmetic to compute `ceil(a/b)` as `(a+b-1)/b`
@@ -200,7 +207,6 @@ pub(super) fn compute_payinfo(
200
207
htlc_minimum_msat : path. iter ( ) . map ( |( _, tlvs) | tlvs. htlc_minimum_msat ( ) ) . max ( ) . unwrap_or ( 0 ) ,
201
208
// TODO: this field isn't present in route blinding encrypted data
202
209
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
204
210
features : BlindedHopFeatures :: empty ( ) ,
205
211
} )
206
212
}
0 commit comments