diff --git a/.github/workflows/cont_integration.yml b/.github/workflows/cont_integration.yml index 27901655b..e9fa9c3e2 100644 --- a/.github/workflows/cont_integration.yml +++ b/.github/workflows/cont_integration.yml @@ -72,6 +72,9 @@ jobs: cargo update -p cc --precise "1.0.81" cargo update -p rustls:0.21.6 --precise "0.21.1" cargo update -p flate2:1.0.27 --precise "1.0.26" + cargo update -p reqwest --precise "0.11.18" + cargo update -p h2 --precise "0.3.20" + cargo update -p rustls-webpki --precise "0.100.1" - name: Build run: cargo build --features ${{ matrix.features }} --no-default-features - name: Clippy @@ -233,5 +236,8 @@ jobs: cargo update -p cc --precise "1.0.81" cargo update -p rustls:0.21.6 --precise "0.21.1" cargo update -p flate2:1.0.27 --precise "1.0.26" + cargo update -p reqwest --precise "0.11.18" + cargo update -p h2 --precise "0.3.20" + cargo update -p rustls-webpki --precise "0.100.1" - name: Test run: cargo test --features test-hardware-signer diff --git a/README.md b/README.md index 7eea1570a..fea3af0fd 100644 --- a/README.md +++ b/README.md @@ -229,4 +229,10 @@ cargo update -p cc --precise "1.0.81" cargo update -p rustls:0.21.6 --precise "0.21.1" # flate2 1.0.27 has MSRV 1.63.0+ cargo update -p flate2:1.0.27 --precise "1.0.26" +# reqwest 0.11.19 has MSRV 1.63.0+ +cargo update -p reqwest --precise "0.11.18" +# h2 0.3.21 has MSRV 1.63.0+ +cargo update -p h2 --precise "0.3.20" +# rustls-webpki 0.100.2 has MSRV 1.60+ +cargo update -p rustls-webpki --precise "0.100.2" ``` diff --git a/src/blockchain/script_sync.rs b/src/blockchain/script_sync.rs index 9aeec7a4a..e4c46999c 100644 --- a/src/blockchain/script_sync.rs +++ b/src/blockchain/script_sync.rs @@ -9,7 +9,7 @@ use crate::{ wallet::time::Instant, BlockTime, Error, KeychainKind, LocalUtxo, TransactionDetails, }; -use bitcoin::{OutPoint, Script, ScriptBuf, Transaction, TxOut, Txid}; +use bitcoin::{hashes::Hash, OutPoint, Script, ScriptBuf, Transaction, TxOut, Txid}; use log::*; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque}; @@ -444,8 +444,14 @@ impl<'a, D: BatchDatabase> State<'a, D> { /// Remove conflicting transactions -- tie breaking them by fee. fn make_txs_consistent(txs: &[TransactionDetails]) -> Vec<&TransactionDetails> { let mut utxo_index: HashMap = HashMap::default(); + let mut coinbase_txs = vec![]; for tx in txs { for input in &tx.transaction.as_ref().unwrap().input { + if input.previous_output.txid == Txid::all_zeros() { + coinbase_txs.push(tx); + break; + } + utxo_index .entry(input.previous_output) .and_modify(|existing| match (tx.fee, existing.fee) { @@ -463,5 +469,6 @@ fn make_txs_consistent(txs: &[TransactionDetails]) -> Vec<&TransactionDetails> { .collect::>() .into_iter() .map(|(_, tx)| tx) + .chain(coinbase_txs) .collect() } diff --git a/src/testutils/blockchain_tests.rs b/src/testutils/blockchain_tests.rs index 510a2c5bb..485c7922a 100644 --- a/src/testutils/blockchain_tests.rs +++ b/src/testutils/blockchain_tests.rs @@ -1098,18 +1098,18 @@ macro_rules! bdk_blockchain_tests { wallet.sync(&blockchain, SyncOptions::default()).unwrap(); assert_eq!(wallet.get_balance().unwrap().immature, 0, "incorrect balance"); - test_client.generate(1, Some(wallet_addr)); + test_client.generate(2, Some(wallet_addr)); wallet.sync(&blockchain, SyncOptions::default()).unwrap(); - assert!(wallet.get_balance().unwrap().immature > 0, "incorrect balance after receiving coinbase"); + assert_eq!(wallet.get_balance().unwrap().immature, 5000000000*2, "incorrect balance after receiving coinbase"); // make coinbase mature (100 blocks) let node_addr = test_client.get_node_address(None); test_client.generate(100, Some(node_addr)); wallet.sync(&blockchain, SyncOptions::default()).unwrap(); - assert!(wallet.get_balance().unwrap().confirmed > 0, "incorrect balance after maturing coinbase"); + assert_eq!(wallet.get_balance().unwrap().confirmed, 5000000000 * 2, "incorrect balance after maturing coinbase"); }