@@ -1271,31 +1271,38 @@ where
1271
1271
fn calculate_amount_to_forward_per_htlc (
1272
1272
htlcs : & [ InterceptedHTLC ] , total_amt_to_forward_msat : u64 ,
1273
1273
) -> Vec < ( InterceptId , u64 ) > {
1274
+ // TODO: we should eventually make sure the HTLCs are all above ChannelDetails::next_outbound_minimum_msat
1274
1275
let total_received_msat: u64 =
1275
1276
htlcs. iter ( ) . map ( |htlc| htlc. expected_outbound_amount_msat ) . sum ( ) ;
1276
1277
1277
- let mut fee_remaining_msat = total_received_msat - total_amt_to_forward_msat;
1278
- let total_fee_msat = fee_remaining_msat;
1278
+ match total_received_msat. checked_sub ( total_amt_to_forward_msat) {
1279
+ Some ( total_fee_msat) => {
1280
+ let mut fee_remaining_msat = total_fee_msat;
1279
1281
1280
- let mut per_htlc_forwards = vec ! [ ] ;
1282
+ let mut per_htlc_forwards = vec ! [ ] ;
1281
1283
1282
- for ( index, htlc) in htlcs. iter ( ) . enumerate ( ) {
1283
- let proportional_fee_amt_msat =
1284
- total_fee_msat * htlc. expected_outbound_amount_msat / total_received_msat;
1284
+ for ( index, htlc) in htlcs. iter ( ) . enumerate ( ) {
1285
+ let proportional_fee_amt_msat =
1286
+ total_fee_msat * ( htlc. expected_outbound_amount_msat / total_received_msat) ;
1285
1287
1286
- let mut actual_fee_amt_msat = core:: cmp:: min ( fee_remaining_msat, proportional_fee_amt_msat) ;
1287
- fee_remaining_msat -= actual_fee_amt_msat;
1288
+ let mut actual_fee_amt_msat =
1289
+ core:: cmp:: min ( fee_remaining_msat, proportional_fee_amt_msat) ;
1290
+ fee_remaining_msat -= actual_fee_amt_msat;
1288
1291
1289
- if index == htlcs. len ( ) - 1 {
1290
- actual_fee_amt_msat += fee_remaining_msat;
1291
- }
1292
+ if index == htlcs. len ( ) - 1 {
1293
+ actual_fee_amt_msat += fee_remaining_msat;
1294
+ }
1292
1295
1293
- let amount_to_forward_msat = htlc. expected_outbound_amount_msat - actual_fee_amt_msat;
1296
+ let amount_to_forward_msat =
1297
+ htlc. expected_outbound_amount_msat . saturating_sub ( actual_fee_amt_msat) ;
1294
1298
1295
- per_htlc_forwards. push ( ( htlc. intercept_id , amount_to_forward_msat) )
1296
- }
1299
+ per_htlc_forwards. push ( ( htlc. intercept_id , amount_to_forward_msat) )
1300
+ }
1297
1301
1298
- per_htlc_forwards
1302
+ per_htlc_forwards
1303
+ }
1304
+ None => Vec :: new ( ) ,
1305
+ }
1299
1306
}
1300
1307
1301
1308
#[ cfg( test) ]
0 commit comments