X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-block-sync%2Fsrc%2Ftest_utils.rs;fp=lightning-block-sync%2Fsrc%2Ftest_utils.rs;h=baaab456b5adeb8fb25df64d6d306c011a0062dd;hb=28d33ff9e03b7e3a0cd7ba3bc59f1303b3903f88;hp=c101d4bd3e8f0bdd516d2c0039cb579ceb5d5b89;hpb=e3a305cdb60678d1aa16f55255bb352beae6198e;p=rust-lightning diff --git a/lightning-block-sync/src/test_utils.rs b/lightning-block-sync/src/test_utils.rs index c101d4bd..baaab456 100644 --- a/lightning-block-sync/src/test_utils.rs +++ b/lightning-block-sync/src/test_utils.rs @@ -6,6 +6,8 @@ use bitcoin::blockdata::constants::genesis_block; use bitcoin::hash_types::BlockHash; use bitcoin::network::constants::Network; use bitcoin::util::uint::Uint256; +use bitcoin::util::hash::bitcoin_merkle_root; +use bitcoin::Transaction; use lightning::chain; @@ -37,16 +39,27 @@ impl Blockchain { let prev_block = &self.blocks[i - 1]; let prev_blockhash = prev_block.block_hash(); let time = prev_block.header.time + height as u32; + // Must have at least one transaction, because the merkle root is not defined for an empty block + // and we would fail when we later checked, as of bitcoin crate 0.28.0. + // Note that elsewhere in tests we assume that the merkle root of an empty block is all zeros, + // but that's OK because those tests don't trigger the check. + let coinbase = Transaction { + version: 0, + lock_time: 0, + input: vec![], + output: vec![] + }; + let merkle_root = bitcoin_merkle_root(vec![coinbase.txid().as_hash()].into_iter()).unwrap(); self.blocks.push(Block { header: BlockHeader { version: 0, prev_blockhash, - merkle_root: Default::default(), + merkle_root: merkle_root.into(), time, bits, nonce: 0, }, - txdata: vec![], + txdata: vec![coinbase], }); } self