@@ -4433,7 +4433,8 @@ where
4433
4433
let mut non_dust_htlc_count = 0;
4434
4434
let mut remote_htlc_total_msat = 0;
4435
4435
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;
4437
4438
4438
4439
let mut feerate_per_kw = self.feerate_per_kw;
4439
4440
if let Some((feerate, update_state)) = self.pending_update_fee {
@@ -4456,7 +4457,7 @@ where
4456
4457
remote_htlc_total_msat += htlc.amount_msat;
4457
4458
} else {
4458
4459
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;
4460
4461
}
4461
4462
}
4462
4463
};
@@ -4469,19 +4470,17 @@ where
4469
4470
local_htlc_total_msat += htlc.amount_msat;
4470
4471
} else {
4471
4472
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;
4473
4474
}
4474
4475
}
4475
4476
};
4476
4477
4477
4478
// # Panics
4478
4479
//
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();
4482
4483
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();
4485
4484
let mut value_to_remote_msat = (funding.get_value_satoshis() * 1000).checked_sub(value_to_self_msat).unwrap();
4486
4485
value_to_self_msat = value_to_self_msat.checked_sub(local_htlc_total_msat).unwrap();
4487
4486
value_to_remote_msat = value_to_remote_msat.checked_sub(remote_htlc_total_msat).unwrap();
0 commit comments