chore(chain): add type IndexSpk, fix clippy type complexity warning

This commit is contained in:
Steve Myers 2024-06-06 14:10:20 -05:00 committed by 志宇
parent 4d2442c37f
commit bce070b1d6
No known key found for this signature in database
GPG Key ID: F6345C9837C2BDE8
7 changed files with 20 additions and 18 deletions

View File

@ -1,2 +1 @@
msrv="1.63.0" msrv="1.63.0"
type-complexity-threshold = 275

View File

@ -3,10 +3,10 @@ use crate::{
indexed_tx_graph::Indexer, indexed_tx_graph::Indexer,
miniscript::{Descriptor, DescriptorPublicKey}, miniscript::{Descriptor, DescriptorPublicKey},
spk_iter::BIP32_MAX_INDEX, spk_iter::BIP32_MAX_INDEX,
DescriptorExt, DescriptorId, SpkIterator, SpkTxOutIndex, DescriptorExt, DescriptorId, IndexSpk, SpkIterator, SpkTxOutIndex,
}; };
use alloc::{borrow::ToOwned, vec::Vec}; use alloc::{borrow::ToOwned, vec::Vec};
use bitcoin::{Amount, OutPoint, Script, ScriptBuf, SignedAmount, Transaction, TxOut, Txid}; use bitcoin::{Amount, OutPoint, Script, SignedAmount, Transaction, TxOut, Txid};
use core::{ use core::{
fmt::Debug, fmt::Debug,
ops::{Bound, RangeBounds}, ops::{Bound, RangeBounds},
@ -739,9 +739,9 @@ impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
&mut self, &mut self,
keychain: &K, keychain: &K,
target_index: u32, target_index: u32,
) -> Option<(Vec<(u32, ScriptBuf)>, ChangeSet<K>)> { ) -> Option<(Vec<IndexSpk>, ChangeSet<K>)> {
let mut changeset = ChangeSet::default(); let mut changeset = ChangeSet::default();
let mut spks: Vec<(u32, ScriptBuf)> = vec![]; let mut spks: Vec<IndexSpk> = vec![];
while let Some((i, new)) = self.next_index(keychain) { while let Some((i, new)) = self.next_index(keychain) {
if !new || i > target_index { if !new || i > target_index {
break; break;

View File

@ -1,7 +1,7 @@
//! Helper types for spk-based blockchain clients. //! Helper types for spk-based blockchain clients.
use crate::{ use crate::{
collections::BTreeMap, local_chain::CheckPoint, ConfirmationTimeHeightAnchor, TxGraph, collections::BTreeMap, local_chain::CheckPoint, ConfirmationTimeHeightAnchor, IndexSpk, TxGraph,
}; };
use alloc::{boxed::Box, vec::Vec}; use alloc::{boxed::Box, vec::Vec};
use bitcoin::{OutPoint, Script, ScriptBuf, Txid}; use bitcoin::{OutPoint, Script, ScriptBuf, Txid};
@ -195,7 +195,7 @@ pub struct FullScanRequest<K> {
/// [`LocalChain::tip`]: crate::local_chain::LocalChain::tip /// [`LocalChain::tip`]: crate::local_chain::LocalChain::tip
pub chain_tip: CheckPoint, pub chain_tip: CheckPoint,
/// Iterators of script pubkeys indexed by the keychain index. /// Iterators of script pubkeys indexed by the keychain index.
pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = (u32, ScriptBuf)> + Send>>, pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = IndexSpk> + Send>>,
} }
impl<K: Ord + Clone> FullScanRequest<K> { impl<K: Ord + Clone> FullScanRequest<K> {
@ -238,7 +238,7 @@ impl<K: Ord + Clone> FullScanRequest<K> {
pub fn set_spks_for_keychain( pub fn set_spks_for_keychain(
mut self, mut self,
keychain: K, keychain: K,
spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static>, spks: impl IntoIterator<IntoIter = impl Iterator<Item = IndexSpk> + Send + 'static>,
) -> Self { ) -> Self {
self.spks_by_keychain self.spks_by_keychain
.insert(keychain, Box::new(spks.into_iter())); .insert(keychain, Box::new(spks.into_iter()));
@ -252,7 +252,7 @@ impl<K: Ord + Clone> FullScanRequest<K> {
pub fn chain_spks_for_keychain( pub fn chain_spks_for_keychain(
mut self, mut self,
keychain: K, keychain: K,
spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static>, spks: impl IntoIterator<IntoIter = impl Iterator<Item = IndexSpk> + Send + 'static>,
) -> Self { ) -> Self {
match self.spks_by_keychain.remove(&keychain) { match self.spks_by_keychain.remove(&keychain) {
// clippy here suggests to remove `into_iter` from `spks.into_iter()`, but doing so // clippy here suggests to remove `into_iter` from `spks.into_iter()`, but doing so

View File

@ -7,6 +7,9 @@ use core::{borrow::Borrow, ops::Bound, ops::RangeBounds};
/// Maximum [BIP32](https://bips.xyz/32) derivation index. /// Maximum [BIP32](https://bips.xyz/32) derivation index.
pub const BIP32_MAX_INDEX: u32 = (1 << 31) - 1; pub const BIP32_MAX_INDEX: u32 = (1 << 31) - 1;
/// A tuple of keychain index and corresponding [`ScriptBuf`].
pub type IndexSpk = (u32, ScriptBuf);
/// An iterator for derived script pubkeys. /// An iterator for derived script pubkeys.
/// ///
/// [`SpkIterator`] is an implementation of the [`Iterator`] trait which possesses its own `next()` /// [`SpkIterator`] is an implementation of the [`Iterator`] trait which possesses its own `next()`
@ -97,7 +100,7 @@ impl<D> Iterator for SpkIterator<D>
where where
D: Borrow<Descriptor<DescriptorPublicKey>>, D: Borrow<Descriptor<DescriptorPublicKey>>,
{ {
type Item = (u32, ScriptBuf); type Item = IndexSpk;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
// For non-wildcard descriptors, we expect the first element to be Some((0, spk)), then None after. // For non-wildcard descriptors, we expect the first element to be Some((0, spk)), then None after.

View File

@ -2,13 +2,13 @@ use std::collections::BTreeSet;
use async_trait::async_trait; use async_trait::async_trait;
use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult}; use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult};
use bdk_chain::Anchor;
use bdk_chain::{ use bdk_chain::{
bitcoin::{BlockHash, OutPoint, ScriptBuf, TxOut, Txid}, bitcoin::{BlockHash, OutPoint, ScriptBuf, TxOut, Txid},
collections::BTreeMap, collections::BTreeMap,
local_chain::CheckPoint, local_chain::CheckPoint,
BlockId, ConfirmationTimeHeightAnchor, TxGraph, BlockId, ConfirmationTimeHeightAnchor, TxGraph,
}; };
use bdk_chain::{Anchor, IndexSpk};
use esplora_client::{Amount, TxStatus}; use esplora_client::{Amount, TxStatus};
use futures::{stream::FuturesOrdered, TryStreamExt}; use futures::{stream::FuturesOrdered, TryStreamExt};
@ -236,7 +236,7 @@ async fn full_scan_for_index_and_graph<K: Ord + Clone + Send>(
client: &esplora_client::AsyncClient, client: &esplora_client::AsyncClient,
keychain_spks: BTreeMap< keychain_spks: BTreeMap<
K, K,
impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send> + Send, impl IntoIterator<IntoIter = impl Iterator<Item = IndexSpk> + Send> + Send,
>, >,
stop_gap: usize, stop_gap: usize,
parallel_requests: usize, parallel_requests: usize,

View File

@ -4,12 +4,12 @@ use std::usize;
use bdk_chain::collections::BTreeMap; use bdk_chain::collections::BTreeMap;
use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult}; use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult};
use bdk_chain::Anchor;
use bdk_chain::{ use bdk_chain::{
bitcoin::{Amount, BlockHash, OutPoint, ScriptBuf, TxOut, Txid}, bitcoin::{Amount, BlockHash, OutPoint, ScriptBuf, TxOut, Txid},
local_chain::CheckPoint, local_chain::CheckPoint,
BlockId, ConfirmationTimeHeightAnchor, TxGraph, BlockId, ConfirmationTimeHeightAnchor, TxGraph,
}; };
use bdk_chain::{Anchor, IndexSpk};
use esplora_client::TxStatus; use esplora_client::TxStatus;
use crate::anchor_from_status; use crate::anchor_from_status;
@ -217,7 +217,7 @@ fn chain_update<A: Anchor>(
/// [`KeychainTxOutIndex`](bdk_chain::keychain::KeychainTxOutIndex). /// [`KeychainTxOutIndex`](bdk_chain::keychain::KeychainTxOutIndex).
fn full_scan_for_index_and_graph_blocking<K: Ord + Clone>( fn full_scan_for_index_and_graph_blocking<K: Ord + Clone>(
client: &esplora_client::BlockingClient, client: &esplora_client::BlockingClient,
keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, ScriptBuf)>>, keychain_spks: BTreeMap<K, impl IntoIterator<Item = IndexSpk>>,
stop_gap: usize, stop_gap: usize,
parallel_requests: usize, parallel_requests: usize,
) -> Result<(TxGraph<ConfirmationTimeHeightAnchor>, BTreeMap<K, u32>), Error> { ) -> Result<(TxGraph<ConfirmationTimeHeightAnchor>, BTreeMap<K, u32>), Error> {

View File

@ -29,7 +29,7 @@ use bdk_chain::{
spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult}, spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult},
tx_graph::{CanonicalTx, TxGraph}, tx_graph::{CanonicalTx, TxGraph},
Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeHeightAnchor, FullTxOut, Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeHeightAnchor, FullTxOut,
IndexedTxGraph, IndexSpk, IndexedTxGraph,
}; };
use bdk_persist::{Persist, PersistBackend}; use bdk_persist::{Persist, PersistBackend};
use bitcoin::secp256k1::{All, Secp256k1}; use bitcoin::secp256k1::{All, Secp256k1};
@ -910,7 +910,7 @@ impl Wallet {
/// script pubkeys the wallet is storing internally). /// script pubkeys the wallet is storing internally).
pub fn all_unbounded_spk_iters( pub fn all_unbounded_spk_iters(
&self, &self,
) -> BTreeMap<KeychainKind, impl Iterator<Item = (u32, ScriptBuf)> + Clone> { ) -> BTreeMap<KeychainKind, impl Iterator<Item = IndexSpk> + Clone> {
self.indexed_graph.index.all_unbounded_spk_iters() self.indexed_graph.index.all_unbounded_spk_iters()
} }
@ -922,7 +922,7 @@ impl Wallet {
pub fn unbounded_spk_iter( pub fn unbounded_spk_iter(
&self, &self,
keychain: KeychainKind, keychain: KeychainKind,
) -> impl Iterator<Item = (u32, ScriptBuf)> + Clone { ) -> impl Iterator<Item = IndexSpk> + Clone {
self.indexed_graph self.indexed_graph
.index .index
.unbounded_spk_iter(&keychain) .unbounded_spk_iter(&keychain)