Bump MSRV to 1.56
This commit is contained in:
		
							parent
							
								
									6e8744d59d
								
							
						
					
					
						commit
						cca69481eb
					
				
							
								
								
									
										4
									
								
								.github/workflows/cont_integration.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/cont_integration.yml
									
									
									
									
										vendored
									
									
								
							@ -10,9 +10,9 @@ jobs:
 | 
				
			|||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        rust:
 | 
					        rust:
 | 
				
			||||||
          - version: 1.56.0 # STABLE
 | 
					          - version: 1.60.0 # STABLE
 | 
				
			||||||
            clippy: true
 | 
					            clippy: true
 | 
				
			||||||
          - version: 1.46.0 # MSRV
 | 
					          - version: 1.56.0 # MSRV
 | 
				
			||||||
        features:
 | 
					        features:
 | 
				
			||||||
          - default
 | 
					          - default
 | 
				
			||||||
          - minimal
 | 
					          - minimal
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 | 
				
			|||||||
## [Unreleased]
 | 
					## [Unreleased]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- added `OldestFirstCoinSelection` impl to `CoinSelectionAlgorithm`
 | 
					- added `OldestFirstCoinSelection` impl to `CoinSelectionAlgorithm`
 | 
				
			||||||
 | 
					- New MSRV set to `1.56`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [v0.18.0] - [v0.17.0]
 | 
					## [v0.18.0] - [v0.17.0]
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@
 | 
				
			|||||||
    <a href="https://github.com/bitcoindevkit/bdk/actions?query=workflow%3ACI"><img alt="CI Status" src="https://github.com/bitcoindevkit/bdk/workflows/CI/badge.svg"></a>
 | 
					    <a href="https://github.com/bitcoindevkit/bdk/actions?query=workflow%3ACI"><img alt="CI Status" src="https://github.com/bitcoindevkit/bdk/workflows/CI/badge.svg"></a>
 | 
				
			||||||
    <a href="https://codecov.io/gh/bitcoindevkit/bdk"><img src="https://codecov.io/gh/bitcoindevkit/bdk/branch/master/graph/badge.svg"/></a>
 | 
					    <a href="https://codecov.io/gh/bitcoindevkit/bdk"><img src="https://codecov.io/gh/bitcoindevkit/bdk/branch/master/graph/badge.svg"/></a>
 | 
				
			||||||
    <a href="https://docs.rs/bdk"><img alt="API Docs" src="https://img.shields.io/badge/docs.rs-bdk-green"/></a>
 | 
					    <a href="https://docs.rs/bdk"><img alt="API Docs" src="https://img.shields.io/badge/docs.rs-bdk-green"/></a>
 | 
				
			||||||
    <a href="https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html"><img alt="Rustc Version 1.46+" src="https://img.shields.io/badge/rustc-1.46%2B-lightgrey.svg"/></a>
 | 
					    <a href="https://blog.rust-lang.org/2020/08/27/Rust-1.56.0.html"><img alt="Rustc Version 1.56+" src="https://img.shields.io/badge/rustc-1.56%2B-lightgrey.svg"/></a>
 | 
				
			||||||
    <a href="https://discord.gg/d7NkDKm"><img alt="Chat on Discord" src="https://img.shields.io/discord/753336465005608961?logo=discord"></a>
 | 
					    <a href="https://discord.gg/d7NkDKm"><img alt="Chat on Discord" src="https://img.shields.io/discord/753336465005608961?logo=discord"></a>
 | 
				
			||||||
  </p>
 | 
					  </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -85,7 +85,7 @@ fn main() -> Result<(), Box<dyn Error>> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    let network = matches
 | 
					    let network = matches
 | 
				
			||||||
        .value_of("network")
 | 
					        .value_of("network")
 | 
				
			||||||
        .map(|n| Network::from_str(n))
 | 
					        .map(Network::from_str)
 | 
				
			||||||
        .transpose()
 | 
					        .transpose()
 | 
				
			||||||
        .unwrap()
 | 
					        .unwrap()
 | 
				
			||||||
        .unwrap_or(Network::Testnet);
 | 
					        .unwrap_or(Network::Testnet);
 | 
				
			||||||
 | 
				
			|||||||
@ -34,6 +34,14 @@
 | 
				
			|||||||
use super::*;
 | 
					use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
macro_rules! impl_from {
 | 
					macro_rules! impl_from {
 | 
				
			||||||
 | 
					    ( boxed $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
 | 
				
			||||||
 | 
					        $( $cfg )*
 | 
				
			||||||
 | 
					        impl From<$from> for $to {
 | 
				
			||||||
 | 
					            fn from(inner: $from) -> Self {
 | 
				
			||||||
 | 
					                <$to>::$variant(Box::new(inner))
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
    ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
 | 
					    ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
 | 
				
			||||||
        $( $cfg )*
 | 
					        $( $cfg )*
 | 
				
			||||||
        impl From<$from> for $to {
 | 
					        impl From<$from> for $to {
 | 
				
			||||||
@ -68,19 +76,19 @@ pub enum AnyBlockchain {
 | 
				
			|||||||
    #[cfg(feature = "electrum")]
 | 
					    #[cfg(feature = "electrum")]
 | 
				
			||||||
    #[cfg_attr(docsrs, doc(cfg(feature = "electrum")))]
 | 
					    #[cfg_attr(docsrs, doc(cfg(feature = "electrum")))]
 | 
				
			||||||
    /// Electrum client
 | 
					    /// Electrum client
 | 
				
			||||||
    Electrum(electrum::ElectrumBlockchain),
 | 
					    Electrum(Box<electrum::ElectrumBlockchain>),
 | 
				
			||||||
    #[cfg(feature = "esplora")]
 | 
					    #[cfg(feature = "esplora")]
 | 
				
			||||||
    #[cfg_attr(docsrs, doc(cfg(feature = "esplora")))]
 | 
					    #[cfg_attr(docsrs, doc(cfg(feature = "esplora")))]
 | 
				
			||||||
    /// Esplora client
 | 
					    /// Esplora client
 | 
				
			||||||
    Esplora(esplora::EsploraBlockchain),
 | 
					    Esplora(Box<esplora::EsploraBlockchain>),
 | 
				
			||||||
    #[cfg(feature = "compact_filters")]
 | 
					    #[cfg(feature = "compact_filters")]
 | 
				
			||||||
    #[cfg_attr(docsrs, doc(cfg(feature = "compact_filters")))]
 | 
					    #[cfg_attr(docsrs, doc(cfg(feature = "compact_filters")))]
 | 
				
			||||||
    /// Compact filters client
 | 
					    /// Compact filters client
 | 
				
			||||||
    CompactFilters(compact_filters::CompactFiltersBlockchain),
 | 
					    CompactFilters(Box<compact_filters::CompactFiltersBlockchain>),
 | 
				
			||||||
    #[cfg(feature = "rpc")]
 | 
					    #[cfg(feature = "rpc")]
 | 
				
			||||||
    #[cfg_attr(docsrs, doc(cfg(feature = "rpc")))]
 | 
					    #[cfg_attr(docsrs, doc(cfg(feature = "rpc")))]
 | 
				
			||||||
    /// RPC client
 | 
					    /// RPC client
 | 
				
			||||||
    Rpc(rpc::RpcBlockchain),
 | 
					    Rpc(Box<rpc::RpcBlockchain>),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[maybe_async]
 | 
					#[maybe_async]
 | 
				
			||||||
@ -141,10 +149,10 @@ impl WalletSync for AnyBlockchain {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl_from!(electrum::ElectrumBlockchain, AnyBlockchain, Electrum, #[cfg(feature = "electrum")]);
 | 
					impl_from!(boxed electrum::ElectrumBlockchain, AnyBlockchain, Electrum, #[cfg(feature = "electrum")]);
 | 
				
			||||||
impl_from!(esplora::EsploraBlockchain, AnyBlockchain, Esplora, #[cfg(feature = "esplora")]);
 | 
					impl_from!(boxed esplora::EsploraBlockchain, AnyBlockchain, Esplora, #[cfg(feature = "esplora")]);
 | 
				
			||||||
impl_from!(compact_filters::CompactFiltersBlockchain, AnyBlockchain, CompactFilters, #[cfg(feature = "compact_filters")]);
 | 
					impl_from!(boxed compact_filters::CompactFiltersBlockchain, AnyBlockchain, CompactFilters, #[cfg(feature = "compact_filters")]);
 | 
				
			||||||
impl_from!(rpc::RpcBlockchain, AnyBlockchain, Rpc, #[cfg(feature = "rpc")]);
 | 
					impl_from!(boxed rpc::RpcBlockchain, AnyBlockchain, Rpc, #[cfg(feature = "rpc")]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Type that can contain any of the blockchain configurations defined by the library
 | 
					/// Type that can contain any of the blockchain configurations defined by the library
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
@ -207,19 +215,19 @@ impl ConfigurableBlockchain for AnyBlockchain {
 | 
				
			|||||||
        Ok(match config {
 | 
					        Ok(match config {
 | 
				
			||||||
            #[cfg(feature = "electrum")]
 | 
					            #[cfg(feature = "electrum")]
 | 
				
			||||||
            AnyBlockchainConfig::Electrum(inner) => {
 | 
					            AnyBlockchainConfig::Electrum(inner) => {
 | 
				
			||||||
                AnyBlockchain::Electrum(electrum::ElectrumBlockchain::from_config(inner)?)
 | 
					                AnyBlockchain::Electrum(Box::new(electrum::ElectrumBlockchain::from_config(inner)?))
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            #[cfg(feature = "esplora")]
 | 
					            #[cfg(feature = "esplora")]
 | 
				
			||||||
            AnyBlockchainConfig::Esplora(inner) => {
 | 
					            AnyBlockchainConfig::Esplora(inner) => {
 | 
				
			||||||
                AnyBlockchain::Esplora(esplora::EsploraBlockchain::from_config(inner)?)
 | 
					                AnyBlockchain::Esplora(Box::new(esplora::EsploraBlockchain::from_config(inner)?))
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            #[cfg(feature = "compact_filters")]
 | 
					            #[cfg(feature = "compact_filters")]
 | 
				
			||||||
            AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters(
 | 
					            AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters(Box::new(
 | 
				
			||||||
                compact_filters::CompactFiltersBlockchain::from_config(inner)?,
 | 
					                compact_filters::CompactFiltersBlockchain::from_config(inner)?,
 | 
				
			||||||
            ),
 | 
					            )),
 | 
				
			||||||
            #[cfg(feature = "rpc")]
 | 
					            #[cfg(feature = "rpc")]
 | 
				
			||||||
            AnyBlockchainConfig::Rpc(inner) => {
 | 
					            AnyBlockchainConfig::Rpc(inner) => {
 | 
				
			||||||
                AnyBlockchain::Rpc(rpc::RpcBlockchain::from_config(inner)?)
 | 
					                AnyBlockchain::Rpc(Box::new(rpc::RpcBlockchain::from_config(inner)?))
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -94,8 +94,7 @@ impl Mempool {
 | 
				
			|||||||
            TxIdentifier::Wtxid(wtxid) => self.0.read().unwrap().wtxids.get(&wtxid).cloned(),
 | 
					            TxIdentifier::Wtxid(wtxid) => self.0.read().unwrap().wtxids.get(&wtxid).cloned(),
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        txid.map(|txid| self.0.read().unwrap().txs.get(&txid).cloned())
 | 
					        txid.and_then(|txid| self.0.read().unwrap().txs.get(&txid).cloned())
 | 
				
			||||||
            .flatten()
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Return whether or not the mempool contains a transaction with a given txid
 | 
					    /// Return whether or not the mempool contains a transaction with a given txid
 | 
				
			||||||
@ -111,6 +110,7 @@ impl Mempool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// A Bitcoin peer
 | 
					/// A Bitcoin peer
 | 
				
			||||||
#[derive(Debug)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
 | 
					#[allow(dead_code)]
 | 
				
			||||||
pub struct Peer {
 | 
					pub struct Peer {
 | 
				
			||||||
    writer: Arc<Mutex<TcpStream>>,
 | 
					    writer: Arc<Mutex<TcpStream>>,
 | 
				
			||||||
    responses: Arc<RwLock<ResponsesMap>>,
 | 
					    responses: Arc<RwLock<ResponsesMap>>,
 | 
				
			||||||
 | 
				
			|||||||
@ -54,8 +54,6 @@ use std::str::FromStr;
 | 
				
			|||||||
pub struct RpcBlockchain {
 | 
					pub struct RpcBlockchain {
 | 
				
			||||||
    /// Rpc client to the node, includes the wallet name
 | 
					    /// Rpc client to the node, includes the wallet name
 | 
				
			||||||
    client: Client,
 | 
					    client: Client,
 | 
				
			||||||
    /// Network used
 | 
					 | 
				
			||||||
    network: Network,
 | 
					 | 
				
			||||||
    /// Blockchain capabilities, cached here at startup
 | 
					    /// Blockchain capabilities, cached here at startup
 | 
				
			||||||
    capabilities: HashSet<Capability>,
 | 
					    capabilities: HashSet<Capability>,
 | 
				
			||||||
    /// Skip this many blocks of the blockchain at the first rescan, if None the rescan is done from the genesis block
 | 
					    /// Skip this many blocks of the blockchain at the first rescan, if None the rescan is done from the genesis block
 | 
				
			||||||
@ -417,7 +415,6 @@ impl ConfigurableBlockchain for RpcBlockchain {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Ok(RpcBlockchain {
 | 
					        Ok(RpcBlockchain {
 | 
				
			||||||
            client,
 | 
					            client,
 | 
				
			||||||
            network,
 | 
					 | 
				
			||||||
            capabilities,
 | 
					            capabilities,
 | 
				
			||||||
            _storage_address: storage_address,
 | 
					            _storage_address: storage_address,
 | 
				
			||||||
            skip_blocks: config.skip_blocks,
 | 
					            skip_blocks: config.skip_blocks,
 | 
				
			||||||
 | 
				
			|||||||
@ -200,8 +200,7 @@ pub(crate) trait DatabaseUtils: Database {
 | 
				
			|||||||
        D: FnOnce() -> Result<Option<Transaction>, Error>,
 | 
					        D: FnOnce() -> Result<Option<Transaction>, Error>,
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        self.get_tx(txid, true)?
 | 
					        self.get_tx(txid, true)?
 | 
				
			||||||
            .map(|t| t.transaction)
 | 
					            .and_then(|t| t.transaction)
 | 
				
			||||||
            .flatten()
 | 
					 | 
				
			||||||
            .map_or_else(default, |t| Ok(Some(t)))
 | 
					            .map_or_else(default, |t| Ok(Some(t)))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -357,7 +357,8 @@ impl Satisfaction {
 | 
				
			|||||||
                    // we map each of the combinations of elements into a tuple of ([chosen items], [conditions]). unfortunately, those items have potentially more than one
 | 
					                    // we map each of the combinations of elements into a tuple of ([chosen items], [conditions]). unfortunately, those items have potentially more than one
 | 
				
			||||||
                    // condition (think about ORs), so we also use `mix` to expand those, i.e. [[0], [1, 2]] becomes [[0, 1], [0, 2]]. This is necessary to make sure that we
 | 
					                    // condition (think about ORs), so we also use `mix` to expand those, i.e. [[0], [1, 2]] becomes [[0, 1], [0, 2]]. This is necessary to make sure that we
 | 
				
			||||||
                    // consider every possible options and check whether or not they are compatible.
 | 
					                    // consider every possible options and check whether or not they are compatible.
 | 
				
			||||||
                    .map(|i_vec| {
 | 
					                    // since this step can turn one item of the iterator into multiple ones, we use `flat_map()` to expand them out
 | 
				
			||||||
 | 
					                    .flat_map(|i_vec| {
 | 
				
			||||||
                        mix(i_vec
 | 
					                        mix(i_vec
 | 
				
			||||||
                            .iter()
 | 
					                            .iter()
 | 
				
			||||||
                            .map(|i| {
 | 
					                            .map(|i| {
 | 
				
			||||||
@ -371,9 +372,6 @@ impl Satisfaction {
 | 
				
			|||||||
                        .map(|x| (i_vec.clone(), x))
 | 
					                        .map(|x| (i_vec.clone(), x))
 | 
				
			||||||
                        .collect::<Vec<(Vec<usize>, Vec<Condition>)>>()
 | 
					                        .collect::<Vec<(Vec<usize>, Vec<Condition>)>>()
 | 
				
			||||||
                    })
 | 
					                    })
 | 
				
			||||||
                    // .inspect(|x: &Vec<(Vec<usize>, Vec<Condition>)>| println!("fetch {:?}", x))
 | 
					 | 
				
			||||||
                    // since the previous step can turn one item of the iterator into multiple ones, we call flatten to expand them out
 | 
					 | 
				
			||||||
                    .flatten()
 | 
					 | 
				
			||||||
                    // .inspect(|x| println!("flat {:?}", x))
 | 
					                    // .inspect(|x| println!("flat {:?}", x))
 | 
				
			||||||
                    // try to fold all the conditions for this specific combination of indexes/options. if they are not compatible, try_fold will be Err
 | 
					                    // try to fold all the conditions for this specific combination of indexes/options. if they are not compatible, try_fold will be Err
 | 
				
			||||||
                    .map(|(key, val)| {
 | 
					                    .map(|(key, val)| {
 | 
				
			||||||
 | 
				
			|||||||
@ -101,7 +101,7 @@ impl FromStr for FullyNodedExport {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn remove_checksum(s: String) -> String {
 | 
					fn remove_checksum(s: String) -> String {
 | 
				
			||||||
    s.splitn(2, '#').next().map(String::from).unwrap()
 | 
					    s.split_once('#').map(|(a, _)| String::from(a)).unwrap()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl FullyNodedExport {
 | 
					impl FullyNodedExport {
 | 
				
			||||||
 | 
				
			|||||||
@ -1603,9 +1603,9 @@ where
 | 
				
			|||||||
    pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String {
 | 
					    pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String {
 | 
				
			||||||
        self.get_descriptor_for_keychain(keychain)
 | 
					        self.get_descriptor_for_keychain(keychain)
 | 
				
			||||||
            .to_string()
 | 
					            .to_string()
 | 
				
			||||||
            .splitn(2, '#')
 | 
					            .split_once('#')
 | 
				
			||||||
            .next()
 | 
					 | 
				
			||||||
            .unwrap()
 | 
					            .unwrap()
 | 
				
			||||||
 | 
					            .0
 | 
				
			||||||
            .to_string()
 | 
					            .to_string()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -479,6 +479,7 @@ pub struct SignOptions {
 | 
				
			|||||||
    pub allow_all_sighashes: bool,
 | 
					    pub allow_all_sighashes: bool,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[allow(clippy::derivable_impls)]
 | 
				
			||||||
impl Default for SignOptions {
 | 
					impl Default for SignOptions {
 | 
				
			||||||
    fn default() -> Self {
 | 
					    fn default() -> Self {
 | 
				
			||||||
        SignOptions {
 | 
					        SignOptions {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user