@@ -779,31 +779,38 @@ where
779
779
fn calculate_amount_to_forward_per_htlc (
780
780
htlcs : & [ InterceptedHTLC ] , total_amt_to_forward_msat : u64 ,
781
781
) -> Vec < ( InterceptId , u64 ) > {
782
+ // TODO: we should eventually make sure the HTLCs are all above ChannelDetails::next_outbound_minimum_msat
782
783
let total_received_msat: u64 =
783
784
htlcs. iter ( ) . map ( |htlc| htlc. expected_outbound_amount_msat ) . sum ( ) ;
784
785
785
- let mut fee_remaining_msat = total_received_msat - total_amt_to_forward_msat;
786
- let total_fee_msat = fee_remaining_msat;
786
+ match total_received_msat. checked_sub ( total_amt_to_forward_msat) {
787
+ Some ( total_fee_msat) => {
788
+ let mut fee_remaining_msat = total_fee_msat;
787
789
788
- let mut per_htlc_forwards = vec ! [ ] ;
790
+ let mut per_htlc_forwards = vec ! [ ] ;
789
791
790
- for ( index, htlc) in htlcs. iter ( ) . enumerate ( ) {
791
- let proportional_fee_amt_msat =
792
- total_fee_msat * htlc. expected_outbound_amount_msat / total_received_msat;
792
+ for ( index, htlc) in htlcs. iter ( ) . enumerate ( ) {
793
+ let proportional_fee_amt_msat =
794
+ total_fee_msat * ( htlc. expected_outbound_amount_msat / total_received_msat) ;
793
795
794
- let mut actual_fee_amt_msat = core:: cmp:: min ( fee_remaining_msat, proportional_fee_amt_msat) ;
795
- fee_remaining_msat -= actual_fee_amt_msat;
796
+ let mut actual_fee_amt_msat =
797
+ core:: cmp:: min ( fee_remaining_msat, proportional_fee_amt_msat) ;
798
+ fee_remaining_msat -= actual_fee_amt_msat;
796
799
797
- if index == htlcs. len ( ) - 1 {
798
- actual_fee_amt_msat += fee_remaining_msat;
799
- }
800
+ if index == htlcs. len ( ) - 1 {
801
+ actual_fee_amt_msat += fee_remaining_msat;
802
+ }
800
803
801
- let amount_to_forward_msat = htlc. expected_outbound_amount_msat - actual_fee_amt_msat;
804
+ let amount_to_forward_msat =
805
+ htlc. expected_outbound_amount_msat . saturating_sub ( actual_fee_amt_msat) ;
802
806
803
- per_htlc_forwards. push ( ( htlc. intercept_id , amount_to_forward_msat) )
804
- }
807
+ per_htlc_forwards. push ( ( htlc. intercept_id , amount_to_forward_msat) )
808
+ }
805
809
806
- per_htlc_forwards
810
+ per_htlc_forwards
811
+ }
812
+ None => Vec :: new ( ) ,
813
+ }
807
814
}
808
815
809
816
#[ cfg( test) ]
0 commit comments