Drop ChannelManager::block_disconnected() entirely
[rust-lightning] / fuzz / src / full_stack.rs
index a6672a7450b96ba9f51682be3bf885b0fbd1ca50..132d4f8ebd20123ccde8c120a63ab0e1b1a264cc 100644 (file)
@@ -27,6 +27,7 @@ use bitcoin::hashes::sha256::Hash as Sha256;
 use bitcoin::hash_types::{Txid, BlockHash, WPubkeyHash};
 
 use lightning::chain;
+use lightning::chain::Listen;
 use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
 use lightning::chain::chainmonitor;
 use lightning::chain::transaction::OutPoint;
@@ -161,7 +162,7 @@ struct MoneyLossDetector<'a> {
        peers: &'a RefCell<[bool; 256]>,
        funding_txn: Vec<Transaction>,
        txids_confirmed: HashMap<Txid, usize>,
-       header_hashes: Vec<BlockHash>,
+       header_hashes: Vec<(BlockHash, u32)>,
        height: usize,
        max_height: usize,
        blocks_connected: u32,
@@ -179,7 +180,7 @@ impl<'a> MoneyLossDetector<'a> {
                        peers,
                        funding_txn: Vec::new(),
                        txids_confirmed: HashMap::new(),
-                       header_hashes: vec![Default::default()],
+                       header_hashes: vec![(genesis_block(Network::Bitcoin).block_hash(), 0)],
                        height: 0,
                        max_height: 0,
                        blocks_connected: 0,
@@ -199,24 +200,25 @@ impl<'a> MoneyLossDetector<'a> {
                        }
                }
 
-               let header = BlockHeader { version: 0x20000000, prev_blockhash: self.header_hashes[self.height], merkle_root: Default::default(), time: self.blocks_connected, bits: 42, nonce: 42 };
-               self.height += 1;
                self.blocks_connected += 1;
-               self.manager.block_connected(&header, &txdata, self.height as u32);
+               let header = BlockHeader { version: 0x20000000, prev_blockhash: self.header_hashes[self.height].0, merkle_root: Default::default(), time: self.blocks_connected, bits: 42, nonce: 42 };
+               self.height += 1;
+               self.manager.transactions_confirmed(&header, self.height as u32, &txdata);
+               self.manager.update_best_block(&header, self.height as u32);
                (*self.monitor).block_connected(&header, &txdata, self.height as u32);
                if self.header_hashes.len() > self.height {
-                       self.header_hashes[self.height] = header.block_hash();
+                       self.header_hashes[self.height] = (header.block_hash(), self.blocks_connected);
                } else {
                        assert_eq!(self.header_hashes.len(), self.height);
-                       self.header_hashes.push(header.block_hash());
+                       self.header_hashes.push((header.block_hash(), self.blocks_connected));
                }
                self.max_height = cmp::max(self.height, self.max_height);
        }
 
        fn disconnect_block(&mut self) {
                if self.height > 0 && (self.max_height < 6 || self.height >= self.max_height - 6) {
-                       let header = BlockHeader { version: 0x20000000, prev_blockhash: self.header_hashes[self.height], merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
-                       self.manager.block_disconnected(&header);
+                       let header = BlockHeader { version: 0x20000000, prev_blockhash: self.header_hashes[self.height - 1].0, merkle_root: Default::default(), time: self.header_hashes[self.height].1, bits: 42, nonce: 42 };
+                       self.manager.block_disconnected(&header, self.height as u32);
                        self.monitor.block_disconnected(&header, self.height as u32);
                        self.height -= 1;
                        let removal_height = self.height;