You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: pool_reconcile.rs
    path of file: ./repos/ckb/test/src/specs/tx_pool
    
    the code of the file until where you have to start completion: use crate::node::waiting_for_sync;
use crate::node::{connect_all, disconnect_all};
use crate::util::check::is_transaction_proposed;
use crate::util::mining::out_ibd_mode;
use crate::{Node, Spec};
use ckb_jsonrpc_types::Propos
    
    fn run(&self, nodes: &mut Vec<Node>) {
        let node0 = &nodes[0];
        let node1 = &nodes[1];

        info!("Generate DEFAULT_TX_PROPOSAL_WINDOW block on node0");
        node0.mine_until_out_bootstrap_period();

        info!("Use generated block's cellbase as tx input");
        let hash = node0.generate_transaction();

        info!("Generate 3 more blocks on node0");
        node0.mine_until_transaction_confirm(&hash);

        info!("Pool should be empty");
        assert!(node0
            .rpc_client()
            .get_transaction(hash.clone())
            .tx_status
            .block_hash
            .is_some());

        info!("Generate 5 blocks on node1");
        node1.mine(20);

        info!("Connect node0 to node1");
        node0.connect(node1);

        waiting_for_sync(nodes);

        info!("Tx should be re-added to node0's pool");
        assert!(node0
            .rpc_client()
            .get_transaction(hash)
            .tx_status
            .block_hash
            .is_none());
    }