@@ -159,8 +159,7 @@ pub(super) fn compute_payinfo(
159159	let  mut  curr_base_fee:  u64  = 0 ; 
160160	let  mut  curr_prop_mil:  u64  = 0 ; 
161161	let  mut  cltv_expiry_delta:  u16  = 0 ; 
162- 	let  mut  htlc_minimum_msat = payee_tlvs. payment_constraints . htlc_minimum_msat  as  u128 ; 
163- 	for  ( idx,  ( _,  tlvs) )  in  intermediate_nodes. iter ( ) . enumerate ( ) . rev ( )  { 
162+ 	for  ( _,  tlvs)  in  intermediate_nodes. iter ( ) . rev ( )  { 
164163		// In the future, we'll want to take the intersection of all supported features for the 
165164		// `BlindedPayInfo`, but there are no features in that context right now. 
166165		if  tlvs. features . requires_unknown_bits_from ( & BlindedHopFeatures :: empty ( ) )  {  return  Err ( ( ) )  } 
@@ -184,23 +183,24 @@ pub(super) fn compute_payinfo(
184183			. ok_or ( ( ) ) ?; 
185184
186185		cltv_expiry_delta = cltv_expiry_delta. checked_add ( tlvs. payment_relay . cltv_expiry_delta ) . ok_or ( ( ) ) ?; 
186+ 	} 
187187
188- 		let  mut  htlc_min_candidate = tlvs. payment_constraints . htlc_minimum_msat  as  u128 ; 
189- 		for  ( _,  node)  in  intermediate_nodes. iter ( ) . skip ( idx + 1 )  { 
190- 			// The min htlc for a hop is that hop's htlc_minimum_msat minus the following hops' fees 
191- 			// because the sender will automatically include that following fee in the amount that this 
192- 			// hop forwards. 
193- 			let  prop_fee = node. payment_relay . fee_proportional_millionths  as  u128 ; 
194- 			let  base_fee = node. payment_relay . fee_base_msat  as  u128 ; 
195- 			let  hop_fee = htlc_min_candidate
196- 				. checked_mul ( prop_fee) 
197- 				. and_then ( |prop_fee| ( prop_fee / 1_000_000 ) . checked_add ( base_fee) ) 
198- 				. ok_or ( ( ) ) ?; 
199- 			htlc_min_candidate = htlc_min_candidate. saturating_sub ( hop_fee) ; 
200- 			if  htlc_min_candidate == 0  {  break  } 
201- 		} 
202- 		htlc_minimum_msat = core:: cmp:: max ( htlc_min_candidate,  htlc_minimum_msat) ; 
188+ 	let  mut  htlc_minimum_msat = intermediate_nodes. first ( ) 
189+ 		. map_or ( 0 ,  |( _,  tlvs) | tlvs. payment_constraints . htlc_minimum_msat )  as  u128 ; 
190+ 	for  ( _,  tlvs)  in  intermediate_nodes. iter ( ) . skip ( 1 )  { 
191+ 		let  prop_fee = tlvs. payment_relay . fee_proportional_millionths  as  u128 ; 
192+ 		let  base_fee = tlvs. payment_relay . fee_base_msat  as  u128 ; 
193+ 		let  hop_fee = htlc_minimum_msat
194+ 			. checked_mul ( prop_fee) 
195+ 			. and_then ( |prop_fee| ( prop_fee / 1_000_000 ) . checked_add ( base_fee) ) 
196+ 			. ok_or ( ( ) ) ?; 
197+ 		htlc_minimum_msat = core:: cmp:: max ( 
198+ 			htlc_minimum_msat. saturating_sub ( hop_fee) ,  tlvs. payment_constraints . htlc_minimum_msat  as  u128 
199+ 		) ; 
203200	} 
201+ 	htlc_minimum_msat = core:: cmp:: max ( 
202+ 		payee_tlvs. payment_constraints . htlc_minimum_msat  as  u128 ,  htlc_minimum_msat
203+ 	) ; 
204204
205205	Ok ( BlindedPayInfo  { 
206206		fee_base_msat :  u32:: try_from ( curr_base_fee) . map_err ( |_| ( ) ) ?, 
0 commit comments