Skip to content

Avoid persisting on same counterparty's ChannelUpdate #2617

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions lightning/src/ln/channel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5537,14 +5537,20 @@ impl<SP: Deref> Channel<SP> where
}
}

pub fn channel_update(&mut self, msg: &msgs::ChannelUpdate) -> Result<(), ChannelError> {
self.context.counterparty_forwarding_info = Some(CounterpartyForwardingInfo {
/// Applies the `ChannelUpdate` and returns a boolean indicating whether a change actually
/// happened.
pub fn channel_update(&mut self, msg: &msgs::ChannelUpdate) -> Result<bool, ChannelError> {
let new_forwarding_info = Some(CounterpartyForwardingInfo {
fee_base_msat: msg.contents.fee_base_msat,
fee_proportional_millionths: msg.contents.fee_proportional_millionths,
cltv_expiry_delta: msg.contents.cltv_expiry_delta
});
let did_change = self.context.counterparty_forwarding_info != new_forwarding_info;
if did_change {
self.context.counterparty_forwarding_info = new_forwarding_info;
}

Ok(())
Ok(did_change)
}

/// Begins the shutdown process, getting a message for the remote peer and returning all
Expand Down Expand Up @@ -8140,7 +8146,7 @@ mod tests {
},
signature: Signature::from(unsafe { FFISignature::new() })
};
node_a_chan.channel_update(&update).unwrap();
assert!(node_a_chan.channel_update(&update).unwrap());

// The counterparty can send an update with a higher minimum HTLC, but that shouldn't
// change our official htlc_minimum_msat.
Expand All @@ -8153,6 +8159,8 @@ mod tests {
},
None => panic!("expected counterparty forwarding info to be Some")
}

assert!(!node_a_chan.channel_update(&update).unwrap());
}

#[cfg(feature = "_test_vectors")]
Expand Down
7 changes: 6 additions & 1 deletion lightning/src/ln/channelmanager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6757,7 +6757,12 @@ where
return Ok(NotifyOption::SkipPersistNoEvents);
} else {
log_debug!(self.logger, "Received channel_update {:?} for channel {}.", msg, chan_id);
try_chan_phase_entry!(self, chan.channel_update(&msg), chan_phase_entry);
let did_change = try_chan_phase_entry!(self, chan.channel_update(&msg), chan_phase_entry);
// If nothing changed after applying their update, we don't need to bother
// persisting.
if !did_change {
return Ok(NotifyOption::SkipPersistNoEvents);
}
}
} else {
return try_chan_phase_entry!(self, Err(ChannelError::Close(
Expand Down