chore(chain): add type IndexSpk, fix clippy type complexity warning
This commit is contained in:
parent
4d2442c37f
commit
bce070b1d6
@ -1,2 +1 @@
|
|||||||
msrv="1.63.0"
|
msrv="1.63.0"
|
||||||
type-complexity-threshold = 275
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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,
|
||||||
|
@ -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> {
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user