@@ -4433,7 +4433,8 @@ where
44334433 let mut non_dust_htlc_count = 0;
44344434 let mut remote_htlc_total_msat = 0;
44354435 let mut local_htlc_total_msat = 0;
4436- let mut value_to_self_msat_offset = 0;
4436+ let mut value_to_self_claimed_msat = 0;
4437+ let mut value_to_remote_claimed_msat = 0;
44374438
44384439 let mut feerate_per_kw = self.feerate_per_kw;
44394440 if let Some((feerate, update_state)) = self.pending_update_fee {
@@ -4456,7 +4457,7 @@ where
44564457 remote_htlc_total_msat += htlc.amount_msat;
44574458 } else {
44584459 if htlc.state.preimage().is_some() {
4459- value_to_self_msat_offset += htlc.amount_msat as i64 ;
4460+ value_to_self_claimed_msat += htlc.amount_msat;
44604461 }
44614462 }
44624463 };
@@ -4469,19 +4470,17 @@ where
44694470 local_htlc_total_msat += htlc.amount_msat;
44704471 } else {
44714472 if htlc.state.preimage().is_some() {
4472- value_to_self_msat_offset - = htlc.amount_msat as i64 ;
4473+ value_to_remote_claimed_msat + = htlc.amount_msat;
44734474 }
44744475 }
44754476 };
44764477
44774478 // # Panics
44784479 //
4479- // While we expect `value_to_self_msat_offset` to be negative in some cases , the value going
4480- // to each party MUST be 0 or positive, even if all HTLCs pending in the commitment clear by
4481- // failure.
4480+ // After all HTLC claims have been accounted for , the local balance MUST remain greater than or equal to 0.
4481+
4482+ let mut value_to_self_msat = (funding.value_to_self_msat + value_to_self_claimed_msat).checked_sub(value_to_remote_claimed_msat).unwrap();
44824483
4483- // TODO: When MSRV >= 1.66.0, use u64::checked_add_signed
4484- let mut value_to_self_msat = (funding.value_to_self_msat as i64 + value_to_self_msat_offset).try_into().unwrap();
44854484 let mut value_to_remote_msat = (funding.get_value_satoshis() * 1000).checked_sub(value_to_self_msat).unwrap();
44864485 value_to_self_msat = value_to_self_msat.checked_sub(local_htlc_total_msat).unwrap();
44874486 value_to_remote_msat = value_to_remote_msat.checked_sub(remote_htlc_total_msat).unwrap();
0 commit comments