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