From ca4c97046730475c402b20fd1d728b889d5aab05 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 13 Feb 2020 12:55:44 -0500 Subject: [PATCH] Clarify rescan rules for block_connected somewhat --- lightning/src/chain/chaininterface.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lightning/src/chain/chaininterface.rs b/lightning/src/chain/chaininterface.rs index 3a2e69cd..0845eb5f 100644 --- a/lightning/src/chain/chaininterface.rs +++ b/lightning/src/chain/chaininterface.rs @@ -72,11 +72,16 @@ pub trait BroadcasterInterface: Sync + Send { /// A trait indicating a desire to listen for events from the chain pub trait ChainListener: Sync + Send { /// Notifies a listener that a block was connected. - /// Note that if a new transaction/outpoint is watched during a block_connected call, the block - /// *must* be re-scanned with the new transaction/outpoints and block_connected should be - /// called again with the same header and (at least) the new transactions. /// - /// Note that if non-new transaction/outpoints may be registered during a call, a second call + /// The txn_matched array should be set to references to transactions which matched the + /// relevant installed watch outpoints/txn, or the full set of transactions in the block. + /// + /// Note that if txn_matched includes only matched transactions, and a new + /// transaction/outpoint is watched during a block_connected call, the block *must* be + /// re-scanned with the new transaction/outpoints and block_connected should be called + /// again with the same header and (at least) the new transactions. + /// + /// Note that if non-new transaction/outpoints are be registered during a call, a second call /// *must not* happen. /// /// This also means those counting confirmations using block_connected callbacks should watch @@ -281,7 +286,6 @@ impl<'a, CL: Deref + 'a> BlockNotifier<'a, CL> { return last_seen != self.chain_monitor.reentered(); } - /// Notify listeners that a block was disconnected. pub fn block_disconnected(&self, header: &BlockHeader, disconnected_height: u32) { let listeners = self.listeners.lock().unwrap(); @@ -289,7 +293,6 @@ impl<'a, CL: Deref + 'a> BlockNotifier<'a, CL> { listener.block_disconnected(&header, disconnected_height); } } - } /// Utility to capture some common parts of ChainWatchInterface implementors. @@ -363,7 +366,6 @@ impl ChainWatchInterfaceUtil { } } - /// Checks if a given transaction matches the current filter. pub fn does_match_tx(&self, tx: &Transaction) -> bool { let watched = self.watched.lock().unwrap(); -- 2.30.2