Merge pull request #858 from jkczyz/2021-03-electrum-interface
[rust-lightning] / lightning / src / ln / functional_test_utils.rs
index e3f5003aaf67f58ccbf91e9b112dbf28525b387e..dee3c6ea3957b4ccf5b84c907df6bb2888bee40e 100644 (file)
@@ -13,7 +13,7 @@
 use chain::{Listen, Watch};
 use chain::channelmonitor::ChannelMonitor;
 use chain::transaction::OutPoint;
-use ln::channelmanager::{ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentPreimage, PaymentHash, PaymentSecret, PaymentSendFailure};
+use ln::channelmanager::{BestBlock, ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentPreimage, PaymentHash, PaymentSecret, PaymentSendFailure};
 use routing::router::{Route, get_route};
 use routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
 use ln::features::InitFeatures;
@@ -122,21 +122,25 @@ pub fn connect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, block: &Block)
        do_connect_block(node, block, false);
 }
 
-fn do_connect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, block: &Block, skip_manager: bool) {
-       let txdata: Vec<_> = block.txdata.iter().enumerate().collect();
+fn do_connect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, block: &Block, skip_intermediaries: bool) {
        let height = node.best_block_info().1 + 1;
-       node.chain_monitor.chain_monitor.block_connected(&block.header, &txdata, height);
-       if !skip_manager {
+       if !skip_intermediaries {
+               let txdata: Vec<_> = block.txdata.iter().enumerate().collect();
                match *node.connect_style.borrow() {
                        ConnectStyle::BestBlockFirst|ConnectStyle::BestBlockFirstSkippingBlocks => {
+                               node.chain_monitor.chain_monitor.update_best_block(&block.header, height);
+                               node.chain_monitor.chain_monitor.transactions_confirmed(&block.header, &txdata, height);
                                node.node.update_best_block(&block.header, height);
-                               node.node.transactions_confirmed(&block.header, height, &block.txdata.iter().enumerate().collect::<Vec<_>>());
+                               node.node.transactions_confirmed(&block.header, height, &txdata);
                        },
                        ConnectStyle::TransactionsFirst|ConnectStyle::TransactionsFirstSkippingBlocks => {
-                               node.node.transactions_confirmed(&block.header, height, &block.txdata.iter().enumerate().collect::<Vec<_>>());
+                               node.chain_monitor.chain_monitor.transactions_confirmed(&block.header, &txdata, height);
+                               node.chain_monitor.chain_monitor.update_best_block(&block.header, height);
+                               node.node.transactions_confirmed(&block.header, height, &txdata);
                                node.node.update_best_block(&block.header, height);
                        },
                        ConnectStyle::FullBlockViaListen => {
+                               node.chain_monitor.chain_monitor.block_connected(&block.header, &txdata, height);
                                Listen::block_connected(node.node, &block, height);
                        }
                }
@@ -151,17 +155,19 @@ pub fn disconnect_blocks<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, count: u32)
                assert!(orig_header.1 > 0); // Cannot disconnect genesis
                let prev_header = node.blocks.borrow().last().unwrap().clone();
 
-               node.chain_monitor.chain_monitor.block_disconnected(&orig_header.0, orig_header.1);
                match *node.connect_style.borrow() {
                        ConnectStyle::FullBlockViaListen => {
+                               node.chain_monitor.chain_monitor.block_disconnected(&orig_header.0, orig_header.1);
                                Listen::block_disconnected(node.node, &orig_header.0, orig_header.1);
                        },
                        ConnectStyle::BestBlockFirstSkippingBlocks|ConnectStyle::TransactionsFirstSkippingBlocks => {
                                if i == count - 1 {
+                                       node.chain_monitor.chain_monitor.update_best_block(&prev_header.0, prev_header.1);
                                        node.node.update_best_block(&prev_header.0, prev_header.1);
                                }
                        },
                        _ => {
+                               node.chain_monitor.chain_monitor.update_best_block(&prev_header.0, prev_header.1);
                                node.node.update_best_block(&prev_header.0, prev_header.1);
                        },
                }
@@ -1279,8 +1285,7 @@ pub fn create_node_chanmgrs<'a, 'b>(node_count: usize, cfgs: &'a Vec<NodeCfg<'b>
                let network = Network::Testnet;
                let params = ChainParameters {
                        network,
-                       latest_hash: genesis_block(network).header.block_hash(),
-                       latest_height: 0,
+                       best_block: BestBlock::from_genesis(network),
                };
                let node = ChannelManager::new(cfgs[i].fee_estimator, &cfgs[i].chain_monitor, cfgs[i].tx_broadcaster, cfgs[i].logger, cfgs[i].keys_manager, if node_config[i].is_some() { node_config[i].clone().unwrap() } else { default_config }, params);
                chanmgrs.push(node);