@@ -68,6 +68,12 @@ impl BlindedPaymentTlvs {
68
68
payment_constraints. htlc_minimum_msat ,
69
69
}
70
70
}
71
+ fn features ( & self ) -> Option < & BlindedHopFeatures > {
72
+ match self {
73
+ Self :: Forward { features, .. } => Some ( & features) ,
74
+ Self :: Receive { .. } => None ,
75
+ }
76
+ }
71
77
}
72
78
73
79
/// Parameters for relaying over a given [`BlindedHop`].
@@ -167,6 +173,10 @@ pub(super) fn compute_payinfo(
167
173
let mut curr_base_fee: u32 = 0 ;
168
174
let mut curr_prop_mil: u32 = 0 ;
169
175
for ( _, payment_tlvs) in path. iter ( ) . rev ( ) . skip ( 1 ) {
176
+ // In the future, we'll want to take the intersection of all supported features for the
177
+ // `BlindedPayInfo`, but there are no features in that context right now.
178
+ if payment_tlvs. features ( ) . map_or ( false , |f| f. requires_unknown_bits ( ) ) { return Err ( ( ) ) }
179
+
170
180
let next_base_fee = payment_tlvs. fee_base_msat ( ) ;
171
181
let next_prop_mil = payment_tlvs. fee_proportional_millionths ( ) ;
172
182
// Use integer arithmetic to compute `ceil(a/b)` as `(a+b-1)/b`
@@ -193,7 +203,6 @@ pub(super) fn compute_payinfo(
193
203
htlc_minimum_msat : path. iter ( ) . map ( |( _, tlvs) | tlvs. htlc_minimum_msat ( ) ) . max ( ) . unwrap_or ( 0 ) ,
194
204
// TODO: this field isn't present in route blinding encrypted data
195
205
htlc_maximum_msat : 21_000_000 * 100_000_000 * 1_000 , // Total bitcoin supply
196
- // TODO: when there are blinded hop features, take the intersection of them here
197
206
features : BlindedHopFeatures :: empty ( ) ,
198
207
} )
199
208
}
0 commit comments