Remove last_block_connected from Channel
authorJeffrey Czyz <jkczyz@gmail.com>
Fri, 5 Mar 2021 01:39:21 +0000 (17:39 -0800)
committerJeffrey Czyz <jkczyz@gmail.com>
Fri, 5 Mar 2021 23:45:12 +0000 (15:45 -0800)
Tracking the last block was only used to de-duplicate block_connected
calls, but this is no longer required as of the previous commit.
Further, the ChannelManager can pass the latest block hash when needing
to create a ChannelMonitor rather than have each Channel maintain an
up-to-date copy. This is implemented in the next commit.

lightning/src/ln/channel.rs
lightning/src/ln/channelmanager.rs

index 73f79f3882fd622d101cf72df8bd27a4839f461e..0158448dd6dce2983944939c97fdf6b967001765 100644 (file)
@@ -39,7 +39,6 @@ use util::errors::APIError;
 use util::config::{UserConfig,ChannelConfig};
 
 use std;
-use std::default::Default;
 use std::{cmp,mem,fmt};
 use std::ops::Deref;
 #[cfg(any(test, feature = "fuzztarget"))]
@@ -368,8 +367,6 @@ pub(super) struct Channel<Signer: Sign> {
        /// could miss the funding_tx_confirmed_in block as well, but it serves as a useful fallback.
        funding_tx_confirmed_in: Option<BlockHash>,
        short_channel_id: Option<u64>,
-       /// Used to verify consistency during ChannelManager deserialization (hence pub(super)).
-       pub(super) last_block_connected: BlockHash,
        funding_tx_confirmations: u64,
 
        counterparty_dust_limit_satoshis: u64,
@@ -568,7 +565,6 @@ impl<Signer: Sign> Channel<Signer> {
 
                        funding_tx_confirmed_in: None,
                        short_channel_id: None,
-                       last_block_connected: Default::default(),
                        funding_tx_confirmations: 0,
 
                        feerate_per_kw: feerate,
@@ -804,7 +800,6 @@ impl<Signer: Sign> Channel<Signer> {
 
                        funding_tx_confirmed_in: None,
                        short_channel_id: None,
-                       last_block_connected: Default::default(),
                        funding_tx_confirmations: 0,
 
                        feerate_per_kw: msg.feerate_per_kw,
@@ -3568,7 +3563,6 @@ impl<Signer: Sign> Channel<Signer> {
                        }
                }
 
-               self.last_block_connected = header.block_hash();
                self.update_time_counter = cmp::max(self.update_time_counter, header.time);
                if self.funding_tx_confirmations > 0 {
                        if self.funding_tx_confirmations == self.minimum_depth as u64 {
@@ -3590,7 +3584,7 @@ impl<Signer: Sign> Channel<Signer> {
                                        // funding_tx_confirmed_in and return.
                                        false
                                };
-                               self.funding_tx_confirmed_in = Some(self.last_block_connected);
+                               self.funding_tx_confirmed_in = Some(header.block_hash());
 
                                //TODO: Note that this must be a duplicate of the previous commitment point they sent us,
                                //as otherwise we will have a commitment transaction that they can't revoke (well, kinda,
@@ -3623,8 +3617,7 @@ impl<Signer: Sign> Channel<Signer> {
                                return true;
                        }
                }
-               self.last_block_connected = header.block_hash();
-               if Some(self.last_block_connected) == self.funding_tx_confirmed_in {
+               if Some(header.block_hash()) == self.funding_tx_confirmed_in {
                        self.funding_tx_confirmations = self.minimum_depth as u64 - 1;
                }
                false
@@ -4433,8 +4426,6 @@ impl<Signer: Sign> Writeable for Channel<Signer> {
 
                self.funding_tx_confirmed_in.write(writer)?;
                self.short_channel_id.write(writer)?;
-
-               self.last_block_connected.write(writer)?;
                self.funding_tx_confirmations.write(writer)?;
 
                self.counterparty_dust_limit_satoshis.write(writer)?;
@@ -4595,8 +4586,6 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<&'a K> for Channel<Signer>
 
                let funding_tx_confirmed_in = Readable::read(reader)?;
                let short_channel_id = Readable::read(reader)?;
-
-               let last_block_connected = Readable::read(reader)?;
                let funding_tx_confirmations = Readable::read(reader)?;
 
                let counterparty_dust_limit_satoshis = Readable::read(reader)?;
@@ -4667,7 +4656,6 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<&'a K> for Channel<Signer>
 
                        funding_tx_confirmed_in,
                        short_channel_id,
-                       last_block_connected,
                        funding_tx_confirmations,
 
                        counterparty_dust_limit_satoshis,
index 0940cda2e2d66017a1eb84f78eb7b7725da96bcf..24d7c4537841b20bd0c8a03d088069f4aa3f5d8c 100644 (file)
@@ -4153,10 +4153,6 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
                let mut short_to_id = HashMap::with_capacity(cmp::min(channel_count as usize, 128));
                for _ in 0..channel_count {
                        let mut channel: Channel<Signer> = Channel::read(reader, &args.keys_manager)?;
-                       if channel.last_block_connected != Default::default() && channel.last_block_connected != last_block_hash {
-                               return Err(DecodeError::InvalidValue);
-                       }
-
                        let funding_txo = channel.get_funding_txo().ok_or(DecodeError::InvalidValue)?;
                        funding_txo_set.insert(funding_txo.clone());
                        if let Some(ref mut monitor) = args.channel_monitors.get_mut(&funding_txo) {