From: Matt Corallo Date: Wed, 23 Aug 2023 03:30:56 +0000 (+0000) Subject: Remove redundant payment preimag hashing in HTLC claim pipeline X-Git-Tag: v0.0.117-alpha1~43^2 X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=refs%2Fheads%2F2023-08-earlier-payment-hash-log;p=rust-lightning Remove redundant payment preimag hashing in HTLC claim pipeline Currently, when we receive an HTLC claim from a peer, we first hash the preimage they gave us before removing the HTLC, then immediately pass the preimage to the inbound channel and hash the preimage again before removing the HTLC and sending our peer an `update_fulfill_htlc`. This second hash is actually only asserted on, never used in any meaningful way as we have the htlc data present in the same code. Here we simply drop this second hash and move it into a `debug_assert`. --- diff --git a/lightning/src/ln/channel.rs b/lightning/src/ln/channel.rs index d1479dd1b..691ce3425 100644 --- a/lightning/src/ln/channel.rs +++ b/lightning/src/ln/channel.rs @@ -2206,8 +2206,6 @@ impl Channel where } assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0); - let payment_hash_calc = PaymentHash(Sha256::hash(&payment_preimage_arg.0[..]).into_inner()); - // ChannelManager may generate duplicate claims/fails due to HTLC update events from // on-chain ChannelsMonitors during block rescan. Ideally we'd figure out a way to drop // these, but for now we just have to treat them as normal. @@ -2216,7 +2214,7 @@ impl Channel where let mut htlc_value_msat = 0; for (idx, htlc) in self.context.pending_inbound_htlcs.iter().enumerate() { if htlc.htlc_id == htlc_id_arg { - assert_eq!(htlc.payment_hash, payment_hash_calc); + debug_assert_eq!(htlc.payment_hash, PaymentHash(Sha256::hash(&payment_preimage_arg.0[..]).into_inner())); log_debug!(logger, "Claiming inbound HTLC id {} with payment hash {} with preimage {}", htlc.htlc_id, htlc.payment_hash, payment_preimage_arg); match htlc.state {