From: Antoine Riard Date: Fri, 29 Nov 2019 06:39:33 +0000 (-0500) Subject: Add UpdateStatus in Channel to track freshness of gossiped liveness. X-Git-Tag: v0.0.12~173^2~3 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=f564df3892d227425ea6a95ee1843fb9c279ac0a;p=rust-lightning Add UpdateStatus in Channel to track freshness of gossiped liveness. Added enum and method are only used in next commit. --- diff --git a/lightning/src/ln/channel.rs b/lightning/src/ln/channel.rs index c1eaad023..14336b8a9 100644 --- a/lightning/src/ln/channel.rs +++ b/lightning/src/ln/channel.rs @@ -210,6 +210,20 @@ const MULTI_STATE_FLAGS: u32 = (BOTH_SIDES_SHUTDOWN_MASK | ChannelState::PeerDis const INITIAL_COMMITMENT_NUMBER: u64 = (1 << 48) - 1; +/// Liveness is called to fluctuate given peer disconnecton/monitor failures/closing. +/// If channel is public, network should have a liveness view announced by us on a +/// best-effort, which means we may filter out some status transitions to avoid spam. +/// See further timer_chan_freshness_every_min. +#[derive(PartialEq)] +enum UpdateStatus { + /// Status has been gossiped. + Fresh, + /// Status has been changed. + DisabledMarked, + /// Status has been marked to be gossiped at next flush + DisabledStaged, +} + // TODO: We should refactor this to be an Inbound/OutboundChannel until initial setup handshaking // has been completed, and then turn into a Channel to get compiler-time enforcement of things like // calling channel_id() before we're set up or things like get_outbound_funding_signed on an @@ -340,6 +354,8 @@ pub(super) struct Channel { channel_monitor: ChannelMonitor, + network_sync: UpdateStatus, + logger: Arc, } @@ -517,6 +533,8 @@ impl Channel { channel_monitor: channel_monitor, + network_sync: UpdateStatus::Fresh, + logger, }) } @@ -734,6 +752,8 @@ impl Channel { channel_monitor: channel_monitor, + network_sync: UpdateStatus::Fresh, + logger, }; @@ -2993,6 +3013,26 @@ impl Channel { } else { false } } + pub fn to_disabled_staged(&mut self) { + self.network_sync = UpdateStatus::DisabledStaged; + } + + pub fn to_disabled_marked(&mut self) { + self.network_sync = UpdateStatus::DisabledMarked; + } + + pub fn to_fresh(&mut self) { + self.network_sync = UpdateStatus::Fresh; + } + + pub fn is_disabled_staged(&self) -> bool { + self.network_sync == UpdateStatus::DisabledStaged + } + + pub fn is_disabled_marked(&self) -> bool { + self.network_sync == UpdateStatus::DisabledMarked + } + /// Called by channelmanager based on chain blocks being connected. /// Note that we only need to use this to detect funding_signed, anything else is handled by /// the channel_monitor. @@ -4091,6 +4131,8 @@ impl ReadableArgs> for Channel { channel_monitor, + network_sync: UpdateStatus::Fresh, + logger, }) }