From: github-actions Date: Sat, 6 Jul 2024 12:38:34 +0000 (+0000) Subject: Publish autogenerated nightly docs X-Git-Url: http://internal-gitweb-vhost/script/%22https:/database/scripts/struct.UniformFloat.html?a=commitdiff_plain;h=4dd7ea999f37547691dfe12f6b55241cce18976f;p=bitcoindevkit.org Publish autogenerated nightly docs --- diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html index 0d9434a312..0f7d6d4eeb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html @@ -1,18 +1,18 @@ BlockEvent in bdk_bitcoind_rpc - Rust

Struct bdk_bitcoind_rpc::BlockEvent

source ·
pub struct BlockEvent<B> {
     pub block: B,
-    pub checkpoint: CheckPoint,
+    pub checkpoint: CheckPoint,
 }
Expand description

A newly emitted block from Emitter.

Fields§

§block: B

Either a full [Block] or [Header] of the new block.

-
§checkpoint: CheckPoint

The checkpoint of the new block.

-

A CheckPoint is a node of a linked list of BlockIds. This checkpoint is linked to -all BlockIds originally passed in Emitter::new as well as emitted blocks since then. +

§checkpoint: CheckPoint

The checkpoint of the new block.

+

A [CheckPoint] is a node of a linked list of [BlockId]s. This checkpoint is linked to +all [BlockId]s originally passed in Emitter::new as well as emitted blocks since then. These blocks are guaranteed to be of the same chain.

This is important as BDK structures require block-to-apply to be connected with another block in the original chain.

Implementations§

source§

impl<B> BlockEvent<B>

source

pub fn block_height(&self) -> u32

The block height of this new block.

source

pub fn block_hash(&self) -> BlockHash

The block hash of this new block.

-
source

pub fn connected_to(&self) -> BlockId

The BlockId of a previous block that this block connects to.

-

This either returns a BlockId of a previously emitted block or from the chain we started +

source

pub fn connected_to(&self) -> BlockId

The [BlockId] of a previous block that this block connects to.

+

This either returns a [BlockId] of a previously emitted block or from the chain we started with (passed in as last_cp in Emitter::new).

This value is derived from BlockEvent::checkpoint.

Trait Implementations§

source§

impl<B: Debug> Debug for BlockEvent<B>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<B> Freeze for BlockEvent<B>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html index c306699687..448956f6f8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html @@ -1,6 +1,6 @@ Emitter in bdk_bitcoind_rpc - Rust

Struct bdk_bitcoind_rpc::Emitter

source ·
pub struct Emitter<'c, C> { /* private fields */ }
Expand description

The Emitter is used to emit data sourced from [bitcoincore_rpc::Client].

Refer to module-level documentation for more.

-

Implementations§

source§

impl<'c, C: RpcApi> Emitter<'c, C>

source

pub fn new(client: &'c C, last_cp: CheckPoint, start_height: u32) -> Self

Construct a new Emitter.

+

Implementations§

source§

impl<'c, C: RpcApi> Emitter<'c, C>

source

pub fn new(client: &'c C, last_cp: CheckPoint, start_height: u32) -> Self

Construct a new Emitter.

last_cp informs the emitter of the chain we are starting off with. This way, the emitter can start emission from a block that connects to the original chain.

start_height starts emission from a given height (if there are no conflicts with the diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html index 1b9c95b9df..deb6c97a19 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html @@ -1 +1 @@ -List of all items in this crate

\ No newline at end of file +List of all items in this crate
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/balance/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/balance/struct.Balance.html new file mode 100644 index 0000000000..deed93a8b6 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/balance/struct.Balance.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../bdk_chain/struct.Balance.html...

+ + + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html index a47eb7b5cd..37344d12c5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html @@ -1,2 +1,2 @@ -COINBASE_MATURITY in bdk_chain - Rust

Constant bdk_chain::COINBASE_MATURITY

source ·
pub const COINBASE_MATURITY: u32 = 100;
Expand description

How many confirmations are needed f or a coinbase output to be spent.

+COINBASE_MATURITY in bdk_chain - Rust

Constant bdk_chain::COINBASE_MATURITY

source ·
pub const COINBASE_MATURITY: u32 = 100;
Expand description

How many confirmations are needed f or a coinbase output to be spent.

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html index 38882f8fa9..193d5ac6c7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html @@ -1,4 +1,4 @@ -bdk_chain - Rust

Crate bdk_chain

source ·
Expand description

This crate is a collection of core structures for Bitcoin Dev Kit.

+bdk_chain - Rust

Crate bdk_chain

source ·
Expand description

This crate is a collection of core structures for Bitcoin Dev Kit.

The goal of this crate is to give wallets the mechanisms needed to:

  1. Figure out what data they need to fetch.
  2. @@ -14,7 +14,7 @@ consistently.
  3. Data persistence agnostic – bdk_chain does not care where you cache on-chain data, what you cache or how you retrieve it from persistent storage.
-

Re-exports§

Modules§

Structs§

Enums§

Constants§

Traits§

  • Trait that “anchors” blockchain data to a specific block of height and hash.
  • An Anchor that can be constructed from a given block, block height and transaction position -within the block.
  • Trait that makes an object appendable.
  • Represents a service that tracks the blockchain.
  • A trait to extend the functionality of a miniscript descriptor.
\ No newline at end of file +

Re-exports§

Modules§

Structs§

Enums§

Constants§

Traits§

  • Trait that “anchors” blockchain data to a specific block of height and hash.
  • An Anchor that can be constructed from a given block, block height and transaction position +within the block.
  • Trait that makes an object appendable.
  • Represents a service that tracks the blockchain.
  • A trait to extend the functionality of a miniscript descriptor.

Type Aliases§

  • A tuple of keychain index and T representing the indexed value.
  • A tuple of keychain K, derivation index (u32) and a T associated with them.
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/index.html index 0d65b38c6c..80da581fd4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/index.html @@ -1,3 +1,3 @@ -bdk_chain::indexed_tx_graph - Rust

Module bdk_chain::indexed_tx_graph

source ·
Expand description

Contains the IndexedTxGraph and associated types. Refer to the +bdk_chain::indexed_tx_graph - Rust

Module bdk_chain::indexed_tx_graph

source ·
Expand description

Contains the IndexedTxGraph and associated types. Refer to the IndexedTxGraph documentation for more.

-

Structs§

Traits§

  • Utilities for indexing transaction data.
\ No newline at end of file +

Structs§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/sidebar-items.js index 5b1649dcf2..00e7ddac81 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["ChangeSet","IndexedTxGraph"],"trait":["Indexer"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":["ChangeSet","IndexedTxGraph"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html index 9d464413ab..5e9e0e3118 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html @@ -3,11 +3,11 @@ pub indexer: IA, }
Expand description

Represents changes to an IndexedTxGraph.

Fields§

§graph: ChangeSet<A>

TxGraph changeset.

-
§indexer: IA

Indexer changeset.

+
§indexer: IA

Indexer changeset.

Trait Implementations§

source§

impl<A: Anchor, IA: Append> Append for ChangeSet<A, IA>

source§

fn append(&mut self, other: Self)

Append another object of the same type onto self.
source§

fn is_empty(&self) -> bool

Returns whether the structure is considered empty.
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<A: Clone, IA: Clone> Clone for ChangeSet<A, IA>

source§

fn clone(&self) -> ChangeSet<A, IA>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<A: Debug, IA: Debug> Debug for ChangeSet<A, IA>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<A, IA: Default> Default for ChangeSet<A, IA>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, A, IA> Deserialize<'de> for ChangeSet<A, IA>
where A: Ord + Deserialize<'de>, IA: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

source§

fn from(graph: ChangeSet<A>) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

source§

fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> Self

Converts to this type from the input type.
source§

impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>

source§

fn eq(&self, other: &ChangeSet<A, IA>) -> bool

This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

source§

fn from(graph: ChangeSet<A>) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

source§

fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> Self

Converts to this type from the input type.
source§

impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>

source§

fn eq(&self, other: &ChangeSet<A, IA>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<A, IA> Serialize for ChangeSet<A, IA>
where A: Ord + Serialize, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.html index 2b34ab0a78..164e548ee5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.html @@ -1,45 +1,45 @@ IndexedTxGraph in bdk_chain::indexed_tx_graph - Rust

Struct bdk_chain::indexed_tx_graph::IndexedTxGraph

source ·
pub struct IndexedTxGraph<A, I> {
     pub index: I,
     /* private fields */
-}
Expand description

The IndexedTxGraph combines a TxGraph and an Indexer implementation.

-

It ensures that TxGraph and Indexer are updated atomically.

+}
Expand description

The IndexedTxGraph combines a TxGraph and an Indexer implementation.

+

It ensures that TxGraph and Indexer are updated atomically.

Fields§

§index: I

Transaction index.

Implementations§

source§

impl<A, I> IndexedTxGraph<A, I>

source

pub fn new(index: I) -> Self

Construct a new IndexedTxGraph with a given index.

source

pub fn graph(&self) -> &TxGraph<A>

Get a reference of the internal transaction graph.

-
source§

impl<A: Anchor, I: Indexer> IndexedTxGraph<A, I>

source

pub fn apply_changeset(&mut self, changeset: ChangeSet<A, I::ChangeSet>)

Applies the ChangeSet to the IndexedTxGraph.

-
source

pub fn initial_changeset(&self) -> ChangeSet<A, I::ChangeSet>

Determines the ChangeSet between self and an empty IndexedTxGraph.

-
source§

impl<A: Anchor, I: Indexer> IndexedTxGraph<A, I>
where - I::ChangeSet: Default + Append,

source

pub fn apply_update(&mut self, update: TxGraph<A>) -> ChangeSet<A, I::ChangeSet>

Apply an update directly.

+
source§

impl<A: Anchor, I: Indexer> IndexedTxGraph<A, I>

source

pub fn apply_changeset(&mut self, changeset: ChangeSet<A, I::ChangeSet>)

Applies the ChangeSet to the IndexedTxGraph.

+
source

pub fn initial_changeset(&self) -> ChangeSet<A, I::ChangeSet>

Determines the ChangeSet between self and an empty IndexedTxGraph.

+
source§

impl<A: Anchor, I: Indexer> IndexedTxGraph<A, I>
where + I::ChangeSet: Default + Append,

source

pub fn apply_update(&mut self, update: TxGraph<A>) -> ChangeSet<A, I::ChangeSet>

Apply an update directly.

update is a TxGraph<A> and the resultant changes is returned as ChangeSet.

source

pub fn insert_txout( &mut self, outpoint: OutPoint, txout: TxOut -) -> ChangeSet<A, I::ChangeSet>

Insert a floating txout of given outpoint.

-
source

pub fn insert_tx(&mut self, tx: Transaction) -> ChangeSet<A, I::ChangeSet>

Insert and index a transaction into the graph.

+) -> ChangeSet<A, I::ChangeSet>

Insert a floating txout of given outpoint.

+
source

pub fn insert_tx(&mut self, tx: Transaction) -> ChangeSet<A, I::ChangeSet>

Insert and index a transaction into the graph.

source

pub fn insert_anchor( &mut self, txid: Txid, anchor: A -) -> ChangeSet<A, I::ChangeSet>

Insert an anchor for a given transaction.

+) -> ChangeSet<A, I::ChangeSet>

Insert an anchor for a given transaction.

source

pub fn insert_seen_at( &mut self, txid: Txid, seen_at: u64 -) -> ChangeSet<A, I::ChangeSet>

Insert a unix timestamp of when a transaction is seen in the mempool.

+) -> ChangeSet<A, I::ChangeSet>

Insert a unix timestamp of when a transaction is seen in the mempool.

This is used for transaction conflict resolution in TxGraph where the transaction with the later last-seen is prioritized.

source

pub fn batch_insert_relevant<'t>( &mut self, txs: impl IntoIterator<Item = (&'t Transaction, impl IntoIterator<Item = A>)> -) -> ChangeSet<A, I::ChangeSet>

Batch insert transactions, filtering out those that are irrelevant.

-

Relevancy is determined by the Indexer::is_tx_relevant implementation of I. Irrelevant +) -> ChangeSet<A, I::ChangeSet>

Batch insert transactions, filtering out those that are irrelevant.

+

Relevancy is determined by the Indexer::is_tx_relevant implementation of I. Irrelevant transactions in txs will be ignored. txs do not need to be in topological order.

source

pub fn batch_insert_relevant_unconfirmed<'t>( &mut self, unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)> -) -> ChangeSet<A, I::ChangeSet>

Batch insert unconfirmed transactions, filtering out those that are irrelevant.

-

Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I. +) -> ChangeSet<A, I::ChangeSet>

Batch insert unconfirmed transactions, filtering out those that are irrelevant.

+

Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I. Irrelevant transactions in txs will be ignored.

Items of txs are tuples containing the transaction and a last seen timestamp. The last seen communicates when the transaction is last seen in the mempool which is used for @@ -47,33 +47,33 @@ conflict-resolution in

source

pub fn batch_insert_unconfirmed( &mut self, txs: impl IntoIterator<Item = (Transaction, u64)> -) -> ChangeSet<A, I::ChangeSet>

Batch insert unconfirmed transactions.

+) -> ChangeSet<A, I::ChangeSet>

Batch insert unconfirmed transactions.

Items of txs are tuples containing the transaction and a last seen timestamp. The last seen communicates when the transaction is last seen in the mempool which is used for conflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

-
source§

impl<A, I: Indexer> IndexedTxGraph<A, I>
where - I::ChangeSet: Default + Append, +

source§

impl<A, I: Indexer> IndexedTxGraph<A, I>

Methods are available if the anchor (A) implements AnchorFromBlockPosition.

source

pub fn apply_block_relevant( &mut self, block: &Block, height: u32 -) -> ChangeSet<A, I::ChangeSet>

Batch insert all transactions of the given block of height, filtering out those that are +) -> ChangeSet<A, I::ChangeSet>

Batch insert all transactions of the given block of height, filtering out those that are irrelevant.

Each inserted transaction’s anchor will be constructed from AnchorFromBlockPosition::from_block_position.

-

Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I. +

Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I. Irrelevant transactions in txs will be ignored.

source

pub fn apply_block( &mut self, block: Block, height: u32 -) -> ChangeSet<A, I::ChangeSet>

Batch insert all transactions of the given block of height.

+) -> ChangeSet<A, I::ChangeSet>

Batch insert all transactions of the given block of height.

Each inserted transaction’s anchor will be constructed from AnchorFromBlockPosition::from_block_position.

To only insert relevant transactions, use apply_block_relevant instead.

-

Trait Implementations§

source§

impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

source§

fn as_ref(&self) -> &TxGraph<A>

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<A, I: Default> Default for IndexedTxGraph<A, I>

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<A, I> Freeze for IndexedTxGraph<A, I>
where +

Trait Implementations§

source§

impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

source§

fn as_ref(&self) -> &TxGraph<A>

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<A, I: Default> Default for IndexedTxGraph<A, I>

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<A, I> Freeze for IndexedTxGraph<A, I>
where I: Freeze,

§

impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>

§

impl<A, I> Send for IndexedTxGraph<A, I>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html deleted file mode 100644 index 179c8f89f5..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html +++ /dev/null @@ -1,23 +0,0 @@ -Indexer in bdk_chain::indexed_tx_graph - Rust

Trait bdk_chain::indexed_tx_graph::Indexer

source ·
pub trait Indexer {
-    type ChangeSet;
-
-    // Required methods
-    fn index_txout(
-        &mut self,
-        outpoint: OutPoint,
-        txout: &TxOut
-    ) -> Self::ChangeSet;
-    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet;
-    fn apply_changeset(&mut self, changeset: Self::ChangeSet);
-    fn initial_changeset(&self) -> Self::ChangeSet;
-    fn is_tx_relevant(&self, tx: &Transaction) -> bool;
-}
Expand description

Utilities for indexing transaction data.

-

Types which implement this trait can be used to construct an IndexedTxGraph. -This trait’s methods should rarely be called directly.

-

Required Associated Types§

source

type ChangeSet

The resultant “changeset” when new transaction data is indexed.

-

Required Methods§

source

fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

Scan and index the given outpoint and txout.

-
source

fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

Scans a transaction for relevant outpoints, which are stored and indexed internally.

-
source

fn apply_changeset(&mut self, changeset: Self::ChangeSet)

Apply changeset to itself.

-
source

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.

-
source

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

-

Implementors§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/index.html new file mode 100644 index 0000000000..d6b7af04d0 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/index.html @@ -0,0 +1,3 @@ +bdk_chain::indexer - Rust

Module bdk_chain::indexer

source ·
Expand description

Indexer provides utilities for indexing transaction data.

+

Modules§

Traits§

  • Utilities for indexing transaction data.
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/constant.DEFAULT_LOOKAHEAD.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/constant.DEFAULT_LOOKAHEAD.html new file mode 100644 index 0000000000..98f41003aa --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/constant.DEFAULT_LOOKAHEAD.html @@ -0,0 +1,2 @@ +DEFAULT_LOOKAHEAD in bdk_chain::indexer::keychain_txout - Rust

Constant bdk_chain::indexer::keychain_txout::DEFAULT_LOOKAHEAD

source ·
pub const DEFAULT_LOOKAHEAD: u32 = 25;
Expand description

The default lookahead for a KeychainTxOutIndex

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html new file mode 100644 index 0000000000..201612a002 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html @@ -0,0 +1,37 @@ +InsertDescriptorError in bdk_chain::indexer::keychain_txout - Rust
pub enum InsertDescriptorError<K> {
+    DescriptorAlreadyAssigned {
+        descriptor: Descriptor<DescriptorPublicKey>,
+        existing_assignment: K,
+    },
+    KeychainAlreadyAssigned {
+        keychain: K,
+        existing_assignment: Descriptor<DescriptorPublicKey>,
+    },
+}
Expand description

Variants§

§

DescriptorAlreadyAssigned

The descriptor has already been assigned to a keychain so you can’t assign it to another

+

Fields

§descriptor: Descriptor<DescriptorPublicKey>

The descriptor you have attempted to reassign

+
§existing_assignment: K

The keychain that the descriptor is already assigned to

+
§

KeychainAlreadyAssigned

The keychain is already assigned to a descriptor so you can’t reassign it

+

Fields

§keychain: K

The keychain that you have attempted to reassign

+
§existing_assignment: Descriptor<DescriptorPublicKey>

The descriptor that the keychain is already assigned to

+

Trait Implementations§

source§

impl<K: Clone> Clone for InsertDescriptorError<K>

source§

fn clone(&self) -> InsertDescriptorError<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for InsertDescriptorError<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Display for InsertDescriptorError<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Error for InsertDescriptorError<K>

1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl<K: PartialEq> PartialEq for InsertDescriptorError<K>

source§

fn eq(&self, other: &InsertDescriptorError<K>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<K> StructuralPartialEq for InsertDescriptorError<K>

Auto Trait Implementations§

§

impl<K> !Freeze for InsertDescriptorError<K>

§

impl<K> RefUnwindSafe for InsertDescriptorError<K>
where + K: RefUnwindSafe,

§

impl<K> Send for InsertDescriptorError<K>
where + K: Send,

§

impl<K> Sync for InsertDescriptorError<K>
where + K: Sync,

§

impl<K> Unpin for InsertDescriptorError<K>
where + K: Unpin,

§

impl<K> UnwindSafe for InsertDescriptorError<K>
where + K: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/index.html new file mode 100644 index 0000000000..53b326362f --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/index.html @@ -0,0 +1,5 @@ +bdk_chain::indexer::keychain_txout - Rust

Module bdk_chain::indexer::keychain_txout

source ·
Expand description

KeychainTxOutIndex controls how script pubkeys are revealed for multiple keychains and +indexes [TxOut]s with them.

+

Structs§

Enums§

Constants§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/sidebar-items.js new file mode 100644 index 0000000000..790dbe68f6 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"constant":["DEFAULT_LOOKAHEAD"],"enum":["InsertDescriptorError"],"struct":["ChangeSet","KeychainTxOutIndex","NoSuchKeychain"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html new file mode 100644 index 0000000000..02e5990be7 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html @@ -0,0 +1,39 @@ +ChangeSet in bdk_chain::indexer::keychain_txout - Rust

Struct bdk_chain::indexer::keychain_txout::ChangeSet

source ·
pub struct ChangeSet<K> {
+    pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
+    pub last_revealed: BTreeMap<DescriptorId, u32>,
+}
Expand description

Represents updates to the derivation index of a KeychainTxOutIndex. +It maps each keychain K to a descriptor and its last revealed index.

+

It can be applied to KeychainTxOutIndex with apply_changeset.

+

The last_revealed field is monotone in that append will never decrease it. +keychains_added is not monotone, once it is set any attempt to change it is subject to the +same one-to-one keychain <-> descriptor mapping invariant as KeychainTxOutIndex itself.

+

Fields§

§keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>

Contains the keychains that have been added and their respective descriptor

+
§last_revealed: BTreeMap<DescriptorId, u32>

Contains for each descriptor_id the last revealed index of derivation

+

Trait Implementations§

source§

impl<K: Ord> Append for ChangeSet<K>

source§

fn append(&mut self, other: Self)

Merge another ChangeSet<K> into self.

+

For the keychains_added field this method respects the invariants of +insert_descriptor. last_revealed always becomes the larger of the two.

+
source§

fn is_empty(&self) -> bool

Returns whether the changeset are empty.

+
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<K: Clone> Clone for ChangeSet<K>

source§

fn clone(&self) -> ChangeSet<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for ChangeSet<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K> Default for ChangeSet<K>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, K> Deserialize<'de> for ChangeSet<K>
where + K: Ord + Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<K: PartialEq> PartialEq for ChangeSet<K>

source§

fn eq(&self, other: &ChangeSet<K>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<K> Serialize for ChangeSet<K>
where + K: Ord + Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K> StructuralPartialEq for ChangeSet<K>

Auto Trait Implementations§

§

impl<K> Freeze for ChangeSet<K>

§

impl<K> RefUnwindSafe for ChangeSet<K>
where + K: RefUnwindSafe,

§

impl<K> Send for ChangeSet<K>
where + K: Send,

§

impl<K> Sync for ChangeSet<K>
where + K: Sync,

§

impl<K> Unpin for ChangeSet<K>

§

impl<K> UnwindSafe for ChangeSet<K>
where + K: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.KeychainTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.KeychainTxOutIndex.html new file mode 100644 index 0000000000..88140c0e17 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.KeychainTxOutIndex.html @@ -0,0 +1,267 @@ +KeychainTxOutIndex in bdk_chain::indexer::keychain_txout - Rust

Struct bdk_chain::indexer::keychain_txout::KeychainTxOutIndex

source ·
pub struct KeychainTxOutIndex<K> { /* private fields */ }
Expand description

KeychainTxOutIndex controls how script pubkeys are revealed for multiple keychains, and +indexes [TxOut]s with them.

+

A single keychain is a chain of script pubkeys derived from a single Descriptor. Keychains +are identified using the K generic. Script pubkeys are identified by the keychain that they +are derived from K, as well as the derivation index u32.

+

There is a strict 1-to-1 relationship between descriptors and keychains. Each keychain has one +and only one descriptor and each descriptor has one and only one keychain. The +insert_descriptor method will return an error if you try and violate this invariant. This +rule is a proxy for a stronger rule: no two descriptors should produce the same script pubkey. +Having two descriptors produce the same script pubkey should cause whichever keychain derives +the script pubkey first to be the effective owner of it but you should not rely on this +behaviour. ⚠ It is up you, the developer, not to violate this invariant.

+

§Revealed script pubkeys

+

Tracking how script pubkeys are revealed is useful for collecting chain data. For example, if +the user has requested 5 script pubkeys (to receive money with), we only need to use those +script pubkeys to scan for chain data.

+

Call reveal_to_target or reveal_next_spk to reveal more script pubkeys. +Call revealed_keychain_spks or revealed_spks to iterate through revealed script pubkeys.

+

§Lookahead script pubkeys

+

When an user first recovers a wallet (i.e. from a recovery phrase and/or descriptor), we will +NOT have knowledge of which script pubkeys are revealed. So when we index a transaction or +txout (using index_tx/index_txout) we scan the txouts against script pubkeys derived +above the last revealed index. These additionally-derived script pubkeys are called the +lookahead.

+

The KeychainTxOutIndex is constructed with the lookahead and cannot be altered. See +DEFAULT_LOOKAHEAD for the value used in the Default implementation. Use new to set a +custom lookahead.

+

§Unbounded script pubkey iterator

+

For script-pubkey-based chain sources (such as Electrum/Esplora), an initial scan is best done +by iterating though derived script pubkeys one by one and requesting transaction histories for +each script pubkey. We will stop after x-number of script pubkeys have empty histories. An +unbounded script pubkey iterator is useful to pass to such a chain source because it doesn’t +require holding a reference to the index.

+

Call unbounded_spk_iter to get an unbounded script pubkey iterator for a given keychain. +Call all_unbounded_spk_iters to get unbounded script pubkey iterators for all keychains.

+

§Change sets

+

Methods that can update the last revealed index or add keychains will return ChangeSet to report +these changes. This should be persisted for future recovery.

+

§Synopsis

+
use bdk_chain::indexer::keychain_txout::KeychainTxOutIndex;
+
+// imagine our service has internal and external addresses but also addresses for users
+#[derive(Clone, Debug, PartialEq, Eq, Ord, PartialOrd)]
+enum MyKeychain {
+    External,
+    Internal,
+    MyAppUser {
+        user_id: u32
+    }
+}
+
+let mut txout_index = KeychainTxOutIndex::<MyKeychain>::default();
+
+let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor)?;
+let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor)?;
+let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42)?;
+
+let new_spk_for_user = txout_index.reveal_next_spk(&MyKeychain::MyAppUser{ user_id: 42 });
+

Implementations§

source§

impl<K> KeychainTxOutIndex<K>

source

pub fn new(lookahead: u32) -> Self

Construct a KeychainTxOutIndex with the given lookahead.

+

The lookahead is the number of script pubkeys to derive and cache from the internal +descriptors over and above the last revealed script index. Without a lookahead the index +will miss outputs you own when processing transactions whose output script pubkeys lie +beyond the last revealed index. In certain situations, such as when performing an initial +scan of the blockchain during wallet import, it may be uncertain or unknown what the index +of the last revealed script pubkey actually is.

+

Refer to struct-level docs for more about lookahead.

+
source§

impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

Methods that are re-exposed from the internal SpkTxOutIndex.

+
source

pub fn inner(&self) -> &SpkTxOutIndex<(K, u32)>

Return a reference to the internal SpkTxOutIndex.

+

WARNING: The internal index will contain lookahead spks. Refer to +struct-level docs for more about lookahead.

+
source

pub fn outpoints(&self) -> &BTreeSet<KeychainIndexed<K, OutPoint>>

Get the set of indexed outpoints, corresponding to tracked keychains.

+
source

pub fn txouts( + &self +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> + ExactSizeIterator

Iterate over known txouts that spend to tracked script pubkeys.

+
source

pub fn txouts_in_tx( + &self, + txid: Txid +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>>

Finds all txouts on a transaction that has previously been scanned and indexed.

+
source

pub fn txout(&self, outpoint: OutPoint) -> Option<KeychainIndexed<K, &TxOut>>

Return the [TxOut] of outpoint if it has been indexed, and if it corresponds to a +tracked keychain.

+

The associated keychain and keychain index of the txout’s spk is also returned.

+

This calls SpkTxOutIndex::txout internally.

+
source

pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script>

Return the script that exists under the given keychain’s index.

+

This calls SpkTxOutIndex::spk_at_index internally.

+
source

pub fn index_of_spk(&self, script: &Script) -> Option<&(K, u32)>

Returns the keychain and keychain index associated with the spk.

+

This calls SpkTxOutIndex::index_of_spk internally.

+
source

pub fn is_used(&self, keychain: K, index: u32) -> bool

Returns whether the spk under the keychain’s index has been used.

+

Here, “unused” means that after the script pubkey was stored in the index, the index has +never scanned a transaction output with it.

+

This calls SpkTxOutIndex::is_used internally.

+
source

pub fn mark_used(&mut self, keychain: K, index: u32) -> bool

Marks the script pubkey at index as used even though the tracker hasn’t seen an output +with it.

+

This only has an effect when the index had been added to self already and was unused.

+

Returns whether the spk under the given keychain and index is successfully +marked as used. Returns false either when there is no descriptor under the given +keychain, or when the spk is already marked as used.

+

This is useful when you want to reserve a script pubkey for something but don’t want to add +the transaction output using it to the index yet. Other callers will consider index on +keychain used until you call unmark_used.

+

This calls SpkTxOutIndex::mark_used internally.

+
source

pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool

Undoes the effect of mark_used. Returns whether the index is inserted back into +unused.

+

Note that if self has scanned an output with this script pubkey, then this will have no +effect.

+

This calls SpkTxOutIndex::unmark_used internally.

+
source

pub fn sent_and_received( + &self, + tx: &Transaction, + range: impl RangeBounds<K> +) -> (Amount, Amount)

Computes the total value transfer effect tx has on the script pubkeys belonging to the +keychains in range. Value is sent when a script pubkey in the range is on an input and +received when it is on an output. For sent to be computed correctly, the output being +spent must have already been scanned by the index. Calculating received just uses the +[Transaction] outputs directly, so it will be correct even if it has not been scanned.

+
source

pub fn net_value( + &self, + tx: &Transaction, + range: impl RangeBounds<K> +) -> SignedAmount

Computes the net value that this transaction gives to the script pubkeys in the index and +takes from the transaction outputs in the index. Shorthand for calling +sent_and_received and subtracting sent from received.

+

This calls SpkTxOutIndex::net_value internally.

+
source§

impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

source

pub fn keychains( + &self +) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_

Return all keychains and their corresponding descriptors.

+
source

pub fn insert_descriptor( + &mut self, + keychain: K, + descriptor: Descriptor<DescriptorPublicKey> +) -> Result<ChangeSet<K>, InsertDescriptorError<K>>

Insert a descriptor with a keychain associated to it.

+

Adding a descriptor means you will be able to derive new script pubkeys under it and the +txout index will discover transaction outputs with those script pubkeys (once they’ve been +derived and added to the index).

+

keychain <-> descriptor is a one-to-one mapping that cannot be changed. Attempting to do so +will return a InsertDescriptorError<K>.

+

[KeychainTxOutIndex] will prevent you from inserting two descriptors which derive the same +script pubkey at index 0, but it’s up to you to ensure that descriptors don’t collide at +other indices. If they do nothing catastrophic happens at the KeychainTxOutIndex level +(one keychain just becomes the defacto owner of that spk arbitrarily) but this may have +subtle implications up the application stack like one UTXO being missing from one keychain +because it has been assigned to another which produces the same script pubkey.

+
source

pub fn get_descriptor( + &self, + keychain: &K +) -> Option<&Descriptor<DescriptorPublicKey>>

Gets the descriptor associated with the keychain. Returns None if the keychain doesn’t +have a descriptor associated with it.

+
source

pub fn lookahead(&self) -> u32

Get the lookahead setting.

+

Refer to new for more information on the lookahead.

+
source

pub fn lookahead_to_target(&mut self, keychain: &K, target_index: u32)

Store lookahead scripts until target_index (inclusive).

+

This does not change the global lookahead setting.

+
source

pub fn unbounded_spk_iter( + &self, + keychain: &K +) -> Option<SpkIterator<Descriptor<DescriptorPublicKey>>>

Get an unbounded spk iterator over a given keychain. Returns None if the provided +keychain doesn’t exist

+
source

pub fn all_unbounded_spk_iters( + &self +) -> BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>>

Get unbounded spk iterators for all keychains.

+
source

pub fn revealed_spks( + &self, + range: impl RangeBounds<K> +) -> impl Iterator<Item = KeychainIndexed<K, &Script>>

Iterate over revealed spks of keychains in range

+
source

pub fn revealed_keychain_spks<'a>( + &'a self, + keychain: &'a K +) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + 'a

Iterate over revealed spks of the given keychain with ascending indices.

+

This is a double ended iterator so you can easily reverse it to get an iterator where +the script pubkeys that were most recently revealed are first.

+
source

pub fn unused_spks( + &self +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, &Script>> + Clone

Iterate over revealed, but unused, spks of all keychains.

+
source

pub fn unused_keychain_spks( + &self, + keychain: &K +) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + Clone

Iterate over revealed, but unused, spks of the given keychain. +Returns an empty iterator if the provided keychain doesn’t exist.

+
source

pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)>

Get the next derivation index for keychain. The next index is the index after the last revealed +derivation index.

+

The second field in the returned tuple represents whether the next derivation index is new. +There are two scenarios where the next derivation index is reused (not new):

+
    +
  1. The keychain’s descriptor has no wildcard, and a script has already been revealed.
  2. +
  3. The number of revealed scripts has already reached 2^31 (refer to BIP-32).
  4. +
+

Not checking the second field of the tuple may result in address reuse.

+

Returns None if the provided keychain doesn’t exist.

+
source

pub fn last_revealed_indices(&self) -> BTreeMap<K, u32>

Get the last derivation index that is revealed for each keychain.

+

Keychains with no revealed indices will not be included in the returned BTreeMap.

+
source

pub fn last_revealed_index(&self, keychain: &K) -> Option<u32>

Get the last derivation index revealed for keychain. Returns None if the keychain doesn’t +exist, or if the keychain doesn’t have any revealed scripts.

+
source

pub fn reveal_to_target_multi( + &mut self, + keychains: &BTreeMap<K, u32> +) -> ChangeSet<K>

Convenience method to call Self::reveal_to_target on multiple keychains.

+
source

pub fn reveal_to_target( + &mut self, + keychain: &K, + target_index: u32 +) -> Option<(Vec<Indexed<ScriptBuf>>, ChangeSet<K>)>

Reveals script pubkeys of the keychain’s descriptor up to and including the +target_index.

+

If the target_index cannot be reached (due to the descriptor having no wildcard and/or +the target_index is in the hardened index range), this method will make a best-effort and +reveal up to the last possible index.

+

This returns list of newly revealed indices (alongside their scripts) and a +ChangeSet, which reports updates to the latest revealed index. If no new script +pubkeys are revealed, then both of these will be empty.

+

Returns None if the provided keychain doesn’t exist.

+
source

pub fn reveal_next_spk( + &mut self, + keychain: &K +) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)>

Attempts to reveal the next script pubkey for keychain.

+

Returns the derivation index of the revealed script pubkey, the revealed script pubkey and a +ChangeSet which represents changes in the last revealed index (if any). +Returns None if the provided keychain doesn’t exist.

+

When a new script cannot be revealed, we return the last revealed script and an empty +ChangeSet. There are two scenarios when a new script pubkey cannot be derived:

+
    +
  1. The descriptor has no wildcard and already has one script revealed.
  2. +
  3. The descriptor has already revealed scripts up to the numeric bound.
  4. +
  5. There is no descriptor associated with the given keychain.
  6. +
+
source

pub fn next_unused_spk( + &mut self, + keychain: &K +) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)>

Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest +index that has not been used yet.

+

This will derive and reveal a new script pubkey if no more unused script pubkeys exist.

+

If the descriptor has no wildcard and already has a used script pubkey or if a descriptor +has used all scripts up to the derivation bounds, then the last derived script pubkey will be +returned.

+

Returns None if there are no script pubkeys that have been used and no new script pubkey +could be revealed (see reveal_next_spk for when this happens).

+
source

pub fn keychain_outpoints<'a>( + &'a self, + keychain: &'a K +) -> impl DoubleEndedIterator<Item = Indexed<OutPoint>> + 'a

Iterate over all [OutPoint]s that have TxOuts with script pubkeys derived from +keychain.

+
source

pub fn keychain_outpoints_in_range<'a>( + &'a self, + range: impl RangeBounds<K> + 'a +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, OutPoint>> + 'a

Iterate over [OutPoint]s that have script pubkeys derived from keychains in range.

+
source

pub fn last_used_index(&self, keychain: &K) -> Option<u32>

Returns the highest derivation index of the keychain where KeychainTxOutIndex has +found a [TxOut] with it’s script pubkey.

+
source

pub fn last_used_indices(&self) -> BTreeMap<K, u32>

Returns the highest derivation index of each keychain that KeychainTxOutIndex has found +a [TxOut] with it’s script pubkey.

+
source

pub fn apply_changeset(&mut self, changeset: ChangeSet<K>)

Applies the ChangeSet<K> to the KeychainTxOutIndex<K>

+

Keychains added by the keychains_added field of ChangeSet<K> respect the one-to-one +keychain <-> descriptor invariant by silently ignoring attempts to violate it (but will +panic if debug_assertions are enabled).

+

Trait Implementations§

source§

impl<K: Clone> Clone for KeychainTxOutIndex<K>

source§

fn clone(&self) -> KeychainTxOutIndex<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for KeychainTxOutIndex<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K> Default for KeychainTxOutIndex<K>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K>

§

type ChangeSet = ChangeSet<K>

The resultant “changeset” when new transaction data is indexed.
source§

fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

Scan and index the given outpoint and txout.
source§

fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

Scans a transaction for relevant outpoints, which are stored and indexed internally.
source§

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.
source§

fn apply_changeset(&mut self, changeset: Self::ChangeSet)

Apply changeset to itself.
source§

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

Auto Trait Implementations§

§

impl<K> Freeze for KeychainTxOutIndex<K>

§

impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
where + K: RefUnwindSafe,

§

impl<K> Send for KeychainTxOutIndex<K>
where + K: Send,

§

impl<K> Sync for KeychainTxOutIndex<K>
where + K: Sync,

§

impl<K> Unpin for KeychainTxOutIndex<K>
where + K: Unpin,

§

impl<K> UnwindSafe for KeychainTxOutIndex<K>

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.NoSuchKeychain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.NoSuchKeychain.html new file mode 100644 index 0000000000..988e75e968 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.NoSuchKeychain.html @@ -0,0 +1,23 @@ +NoSuchKeychain in bdk_chain::indexer::keychain_txout - Rust

Struct bdk_chain::indexer::keychain_txout::NoSuchKeychain

source ·
pub struct NoSuchKeychain<K>(/* private fields */);
Expand description

The keychain doesn’t exist. Most likley hasn’t been inserted with KeychainTxOutIndex::insert_descriptor.

+

Trait Implementations§

source§

impl<K: Clone> Clone for NoSuchKeychain<K>

source§

fn clone(&self) -> NoSuchKeychain<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for NoSuchKeychain<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Display for NoSuchKeychain<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: PartialEq> PartialEq for NoSuchKeychain<K>

source§

fn eq(&self, other: &NoSuchKeychain<K>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<K: Eq> Eq for NoSuchKeychain<K>

source§

impl<K> StructuralPartialEq for NoSuchKeychain<K>

Auto Trait Implementations§

§

impl<K> Freeze for NoSuchKeychain<K>
where + K: Freeze,

§

impl<K> RefUnwindSafe for NoSuchKeychain<K>
where + K: RefUnwindSafe,

§

impl<K> Send for NoSuchKeychain<K>
where + K: Send,

§

impl<K> Sync for NoSuchKeychain<K>
where + K: Sync,

§

impl<K> Unpin for NoSuchKeychain<K>
where + K: Unpin,

§

impl<K> UnwindSafe for NoSuchKeychain<K>
where + K: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/sidebar-items.js new file mode 100644 index 0000000000..af643c9d63 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":["keychain_txout","spk_txout"],"trait":["Indexer"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/index.html new file mode 100644 index 0000000000..11dbd12e9d --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/index.html @@ -0,0 +1,2 @@ +bdk_chain::indexer::spk_txout - Rust

Module bdk_chain::indexer::spk_txout

source ·
Expand description

SpkTxOutIndex is an index storing [TxOut]s that have a script pubkey that matches those in a list.

+

Structs§

  • An index storing TxOuts that have a script pubkey that matches those in a list.
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/sidebar-items.js new file mode 100644 index 0000000000..91397c4584 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["SpkTxOutIndex"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/struct.SpkTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/struct.SpkTxOutIndex.html new file mode 100644 index 0000000000..191ebfd426 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/spk_txout/struct.SpkTxOutIndex.html @@ -0,0 +1,108 @@ +SpkTxOutIndex in bdk_chain::indexer::spk_txout - Rust

Struct bdk_chain::indexer::spk_txout::SpkTxOutIndex

source ·
pub struct SpkTxOutIndex<I> { /* private fields */ }
Expand description

An index storing TxOuts that have a script pubkey that matches those in a list.

+

The basic idea is that you insert script pubkeys you care about into the index with +insert_spk and then when you call Indexer::index_tx or Indexer::index_txout, the +index will look at any txouts you pass in and store and index any txouts matching one of its +script pubkeys.

+

Each script pubkey is associated with an application-defined index script index I, which must be +Ord. Usually, this is used to associate the derivation index of the script pubkey or even a +combination of (keychain, derivation_index).

+

Note there is no harm in scanning transactions that disappear from the blockchain or were never +in there in the first place. SpkTxOutIndex is intentionally monotone – you cannot delete or +modify txouts that have been indexed. To find out which txouts from the index are actually in the +chain or unspent, you must use other sources of information like a TxGraph.

+

Implementations§

source§

impl<I: Clone + Ord + Debug> SpkTxOutIndex<I>

source

pub fn scan(&mut self, tx: &Transaction) -> BTreeSet<I>

Scans a transaction’s outputs for matching script pubkeys.

+

Typically, this is used in two situations:

+
    +
  1. After loading transaction data from the disk, you may scan over all the txouts to restore all +your txouts.
  2. +
  3. When getting new data from the chain, you usually scan it before incorporating it into your chain state.
  4. +
+
source

pub fn scan_txout(&mut self, op: OutPoint, txout: &TxOut) -> Option<&I>

Scan a single TxOut for a matching script pubkey and returns the index that matches the +script pubkey (if any).

+
source

pub fn outpoints(&self) -> &BTreeSet<(I, OutPoint)>

Get a reference to the set of indexed outpoints.

+
source

pub fn txouts( + &self +) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)> + ExactSizeIterator

Iterate over all known txouts that spend to tracked script pubkeys.

+
source

pub fn txouts_in_tx( + &self, + txid: Txid +) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)>

Finds all txouts on a transaction that has previously been scanned and indexed.

+
source

pub fn outputs_in_range( + &self, + range: impl RangeBounds<I> +) -> impl DoubleEndedIterator<Item = (&I, OutPoint)>

Iterates over all the outputs with script pubkeys in an index range.

+
source

pub fn txout(&self, outpoint: OutPoint) -> Option<(&I, &TxOut)>

Returns the txout and script pubkey index of the TxOut at OutPoint.

+

Returns None if the TxOut hasn’t been scanned or if nothing matching was found there.

+
source

pub fn spk_at_index(&self, index: &I) -> Option<&Script>

Returns the script that has been inserted at the index.

+

If that index hasn’t been inserted yet, it will return None.

+
source

pub fn all_spks(&self) -> &BTreeMap<I, ScriptBuf>

The script pubkeys that are being tracked by the index.

+
source

pub fn insert_spk(&mut self, index: I, spk: ScriptBuf) -> bool

Adds a script pubkey to scan for. Returns false and does nothing if spk already exists in the map

+

the index will look for outputs spending to this spk whenever it scans new data.

+
source

pub fn unused_spks<R>( + &self, + range: R +) -> impl DoubleEndedIterator<Item = (&I, &Script)> + Clone
where + R: RangeBounds<I>,

Iterates over all unused script pubkeys in an index range.

+

Here, “unused” means that after the script pubkey was stored in the index, the index has +never scanned a transaction output with it.

+
§Example
+

+// imagine our spks are indexed like (keychain, derivation_index).
+let txout_index = SpkTxOutIndex::<(u32, u32)>::default();
+let all_unused_spks = txout_index.unused_spks(..);
+let change_index = 1;
+let unused_change_spks =
+    txout_index.unused_spks((change_index, u32::MIN)..(change_index, u32::MAX));
+
source

pub fn is_used(&self, index: &I) -> bool

Returns whether the script pubkey at index has been used or not.

+

Here, “unused” means that after the script pubkey was stored in the index, the index has +never scanned a transaction output with it.

+
source

pub fn mark_used(&mut self, index: &I) -> bool

Marks the script pubkey at index as used even though it hasn’t seen an output spending to it. +This only affects when the index had already been added to self and was unused.

+

Returns whether the index was initially present as unused.

+

This is useful when you want to reserve a script pubkey for something but don’t want to add +the transaction output using it to the index yet. Other callers will consider the index used +until you call unmark_used.

+
source

pub fn unmark_used(&mut self, index: &I) -> bool

Undoes the effect of mark_used. Returns whether the index is inserted back into +unused.

+

Note that if self has scanned an output with this script pubkey then this will have no +effect.

+
source

pub fn index_of_spk(&self, script: &Script) -> Option<&I>

Returns the index associated with the script pubkey.

+
source

pub fn sent_and_received( + &self, + tx: &Transaction, + range: impl RangeBounds<I> +) -> (Amount, Amount)

Computes the total value transfer effect tx has on the script pubkeys in range. Value is +sent when a script pubkey in the range is on an input and received when it is on an +output. For sent to be computed correctly, the output being spent must have already been +scanned by the index. Calculating received just uses the [Transaction] outputs directly, +so it will be correct even if it has not been scanned.

+
source

pub fn net_value( + &self, + tx: &Transaction, + range: impl RangeBounds<I> +) -> SignedAmount

Computes the net value transfer effect of tx on the script pubkeys in range. Shorthand +for calling sent_and_received and subtracting sent from received.

+
source

pub fn is_relevant(&self, tx: &Transaction) -> bool

Whether any of the inputs of this transaction spend a txout tracked or whether any output +matches one of our script pubkeys.

+

It is easily possible to misuse this method and get false negatives by calling it before you +have scanned the TxOuts the transaction is spending. For example, if you want to filter out +all the transactions in a block that are irrelevant, you must first scan all the +transactions in the block and only then use this method.

+

Trait Implementations§

source§

impl<I: Clone> Clone for SpkTxOutIndex<I>

source§

fn clone(&self) -> SpkTxOutIndex<I>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<I: Debug> Debug for SpkTxOutIndex<I>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<I> Default for SpkTxOutIndex<I>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<I: Clone + Ord + Debug> Indexer for SpkTxOutIndex<I>

§

type ChangeSet = ()

The resultant “changeset” when new transaction data is indexed.
source§

fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

Scan and index the given outpoint and txout.
source§

fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

Scans a transaction for relevant outpoints, which are stored and indexed internally.
source§

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.
source§

fn apply_changeset(&mut self, _changeset: Self::ChangeSet)

Apply changeset to itself.
source§

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

Auto Trait Implementations§

§

impl<I> Freeze for SpkTxOutIndex<I>

§

impl<I> RefUnwindSafe for SpkTxOutIndex<I>
where + I: RefUnwindSafe,

§

impl<I> Send for SpkTxOutIndex<I>
where + I: Send,

§

impl<I> Sync for SpkTxOutIndex<I>
where + I: Sync,

§

impl<I> Unpin for SpkTxOutIndex<I>
where + I: Unpin,

§

impl<I> UnwindSafe for SpkTxOutIndex<I>

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/trait.Indexer.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/trait.Indexer.html new file mode 100644 index 0000000000..3a70aa26bf --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/trait.Indexer.html @@ -0,0 +1,23 @@ +Indexer in bdk_chain::indexer - Rust

Trait bdk_chain::indexer::Indexer

source ·
pub trait Indexer {
+    type ChangeSet;
+
+    // Required methods
+    fn index_txout(
+        &mut self,
+        outpoint: OutPoint,
+        txout: &TxOut
+    ) -> Self::ChangeSet;
+    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet;
+    fn apply_changeset(&mut self, changeset: Self::ChangeSet);
+    fn initial_changeset(&self) -> Self::ChangeSet;
+    fn is_tx_relevant(&self, tx: &Transaction) -> bool;
+}
Expand description

Utilities for indexing transaction data.

+

Types which implement this trait can be used to construct an IndexedTxGraph. +This trait’s methods should rarely be called directly.

+

Required Associated Types§

source

type ChangeSet

The resultant “changeset” when new transaction data is indexed.

+

Required Methods§

source

fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

Scan and index the given outpoint and txout.

+
source

fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

Scans a transaction for relevant outpoints, which are stored and indexed internally.

+
source

fn apply_changeset(&mut self, changeset: Self::ChangeSet)

Apply changeset to itself.

+
source

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.

+
source

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

+

Implementors§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html deleted file mode 100644 index 1a4c395a12..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html +++ /dev/null @@ -1,2 +0,0 @@ -DEFAULT_LOOKAHEAD in bdk_chain::keychain - Rust

Constant bdk_chain::keychain::DEFAULT_LOOKAHEAD

source ·
pub const DEFAULT_LOOKAHEAD: u32 = 25;
Expand description

The default lookahead for a KeychainTxOutIndex

-
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/enum.InsertDescriptorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/enum.InsertDescriptorError.html deleted file mode 100644 index cc069d06c8..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/enum.InsertDescriptorError.html +++ /dev/null @@ -1,37 +0,0 @@ -InsertDescriptorError in bdk_chain::keychain - Rust

Enum bdk_chain::keychain::InsertDescriptorError

source ·
pub enum InsertDescriptorError<K> {
-    DescriptorAlreadyAssigned {
-        descriptor: Descriptor<DescriptorPublicKey>,
-        existing_assignment: K,
-    },
-    KeychainAlreadyAssigned {
-        keychain: K,
-        existing_assignment: Descriptor<DescriptorPublicKey>,
-    },
-}
Expand description

Variants§

§

DescriptorAlreadyAssigned

The descriptor has already been assigned to a keychain so you can’t assign it to another

-

Fields

§descriptor: Descriptor<DescriptorPublicKey>

The descriptor you have attempted to reassign

-
§existing_assignment: K

The keychain that the descriptor is already assigned to

-
§

KeychainAlreadyAssigned

The keychain is already assigned to a descriptor so you can’t reassign it

-

Fields

§keychain: K

The keychain that you have attempted to reassign

-
§existing_assignment: Descriptor<DescriptorPublicKey>

The descriptor that the keychain is already assigned to

-

Trait Implementations§

source§

impl<K: Clone> Clone for InsertDescriptorError<K>

source§

fn clone(&self) -> InsertDescriptorError<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for InsertDescriptorError<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Display for InsertDescriptorError<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Error for InsertDescriptorError<K>

1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl<K: PartialEq> PartialEq for InsertDescriptorError<K>

source§

fn eq(&self, other: &InsertDescriptorError<K>) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<K> StructuralPartialEq for InsertDescriptorError<K>

Auto Trait Implementations§

§

impl<K> !Freeze for InsertDescriptorError<K>

§

impl<K> RefUnwindSafe for InsertDescriptorError<K>
where - K: RefUnwindSafe,

§

impl<K> Send for InsertDescriptorError<K>
where - K: Send,

§

impl<K> Sync for InsertDescriptorError<K>
where - K: Sync,

§

impl<K> Unpin for InsertDescriptorError<K>
where - K: Unpin,

§

impl<K> UnwindSafe for InsertDescriptorError<K>
where - K: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html deleted file mode 100644 index 4adf8f8060..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html +++ /dev/null @@ -1,10 +0,0 @@ -bdk_chain::keychain - Rust

Module bdk_chain::keychain

source ·
Expand description

Module for keychain related structures.

-

A keychain here is a set of application-defined indexes for a miniscript descriptor where we can -derive script pubkeys at a particular derivation index. The application’s index is simply -anything that implements Ord.

-

KeychainTxOutIndex indexes script pubkeys of keychains and scans in relevant outpoints (that -has a txout containing an indexed script pubkey). Internally, this uses SpkTxOutIndex, but -also maintains “revealed” and “lookahead” index counts per keychain.

-

Structs§

Enums§

Constants§

Type Aliases§

  • A tuple of keychain index and T representing the indexed value.
  • A tuple of keychain K, derivation index (u32) and a T associated with them.
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js deleted file mode 100644 index a6e50315ef..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DEFAULT_LOOKAHEAD"],"enum":["InsertDescriptorError"],"struct":["Balance","ChangeSet","KeychainTxOutIndex","NoSuchKeychain"],"type":["Indexed","KeychainIndexed"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html deleted file mode 100644 index f7e7d743c4..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html +++ /dev/null @@ -1,33 +0,0 @@ -Balance in bdk_chain::keychain - Rust

Struct bdk_chain::keychain::Balance

source ·
pub struct Balance {
-    pub immature: Amount,
-    pub trusted_pending: Amount,
-    pub untrusted_pending: Amount,
-    pub confirmed: Amount,
-}
Expand description

Balance, differentiated into various categories.

-

Fields§

§immature: Amount

All coinbase outputs not yet matured

-
§trusted_pending: Amount

Unconfirmed UTXOs generated by a wallet tx

-
§untrusted_pending: Amount

Unconfirmed UTXOs received from an external wallet

-
§confirmed: Amount

Confirmed and immediately spendable balance

-

Implementations§

source§

impl Balance

source

pub fn trusted_spendable(&self) -> Amount

Get sum of trusted_pending and confirmed coins.

-

This is the balance you can spend right now that shouldn’t get cancelled via another party -double spending it.

-
source

pub fn total(&self) -> Amount

Get the whole balance visible to the wallet.

-

Trait Implementations§

source§

impl Add for Balance

§

type Output = Balance

The resulting type after applying the + operator.
source§

fn add(self, other: Self) -> Self

Performs the + operation. Read more
source§

impl Clone for Balance

source§

fn clone(&self) -> Balance

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Balance

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Balance

source§

fn default() -> Balance

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Balance

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Balance

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for Balance

source§

fn eq(&self, other: &Balance) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Balance

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Balance

source§

impl StructuralPartialEq for Balance

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html deleted file mode 100644 index 08c8b27ae2..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html +++ /dev/null @@ -1,39 +0,0 @@ -ChangeSet in bdk_chain::keychain - Rust

Struct bdk_chain::keychain::ChangeSet

source ·
pub struct ChangeSet<K> {
-    pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
-    pub last_revealed: BTreeMap<DescriptorId, u32>,
-}
Expand description

Represents updates to the derivation index of a KeychainTxOutIndex. -It maps each keychain K to a descriptor and its last revealed index.

-

It can be applied to KeychainTxOutIndex with apply_changeset.

-

The last_revealed field is monotone in that append will never decrease it. -keychains_added is not monotone, once it is set any attempt to change it is subject to the -same one-to-one keychain <-> descriptor mapping invariant as KeychainTxOutIndex itself.

-

Fields§

§keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>

Contains the keychains that have been added and their respective descriptor

-
§last_revealed: BTreeMap<DescriptorId, u32>

Contains for each descriptor_id the last revealed index of derivation

-

Trait Implementations§

source§

impl<K: Ord> Append for ChangeSet<K>

source§

fn append(&mut self, other: Self)

Merge another ChangeSet<K> into self.

-

For the keychains_added field this method respects the invariants of -insert_descriptor. last_revealed always becomes the larger of the two.

-
source§

fn is_empty(&self) -> bool

Returns whether the changeset are empty.

-
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<K: Clone> Clone for ChangeSet<K>

source§

fn clone(&self) -> ChangeSet<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for ChangeSet<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K> Default for ChangeSet<K>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, K> Deserialize<'de> for ChangeSet<K>
where - K: Ord + Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<K: PartialEq> PartialEq for ChangeSet<K>

source§

fn eq(&self, other: &ChangeSet<K>) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<K> Serialize for ChangeSet<K>
where - K: Ord + Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K> StructuralPartialEq for ChangeSet<K>

Auto Trait Implementations§

§

impl<K> Freeze for ChangeSet<K>

§

impl<K> RefUnwindSafe for ChangeSet<K>
where - K: RefUnwindSafe,

§

impl<K> Send for ChangeSet<K>
where - K: Send,

§

impl<K> Sync for ChangeSet<K>
where - K: Sync,

§

impl<K> Unpin for ChangeSet<K>

§

impl<K> UnwindSafe for ChangeSet<K>
where - K: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html deleted file mode 100644 index 4d98d6f5b1..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html +++ /dev/null @@ -1,267 +0,0 @@ -KeychainTxOutIndex in bdk_chain::keychain - Rust

Struct bdk_chain::keychain::KeychainTxOutIndex

source ·
pub struct KeychainTxOutIndex<K> { /* private fields */ }
Expand description

KeychainTxOutIndex controls how script pubkeys are revealed for multiple keychains, and -indexes [TxOut]s with them.

-

A single keychain is a chain of script pubkeys derived from a single Descriptor. Keychains -are identified using the K generic. Script pubkeys are identified by the keychain that they -are derived from K, as well as the derivation index u32.

-

There is a strict 1-to-1 relationship between descriptors and keychains. Each keychain has one -and only one descriptor and each descriptor has one and only one keychain. The -insert_descriptor method will return an error if you try and violate this invariant. This -rule is a proxy for a stronger rule: no two descriptors should produce the same script pubkey. -Having two descriptors produce the same script pubkey should cause whichever keychain derives -the script pubkey first to be the effective owner of it but you should not rely on this -behaviour. ⚠ It is up you, the developer, not to violate this invariant.

-

§Revealed script pubkeys

-

Tracking how script pubkeys are revealed is useful for collecting chain data. For example, if -the user has requested 5 script pubkeys (to receive money with), we only need to use those -script pubkeys to scan for chain data.

-

Call reveal_to_target or reveal_next_spk to reveal more script pubkeys. -Call revealed_keychain_spks or revealed_spks to iterate through revealed script pubkeys.

-

§Lookahead script pubkeys

-

When an user first recovers a wallet (i.e. from a recovery phrase and/or descriptor), we will -NOT have knowledge of which script pubkeys are revealed. So when we index a transaction or -txout (using index_tx/index_txout) we scan the txouts against script pubkeys derived -above the last revealed index. These additionally-derived script pubkeys are called the -lookahead.

-

The KeychainTxOutIndex is constructed with the lookahead and cannot be altered. See -DEFAULT_LOOKAHEAD for the value used in the Default implementation. Use new to set a -custom lookahead.

-

§Unbounded script pubkey iterator

-

For script-pubkey-based chain sources (such as Electrum/Esplora), an initial scan is best done -by iterating though derived script pubkeys one by one and requesting transaction histories for -each script pubkey. We will stop after x-number of script pubkeys have empty histories. An -unbounded script pubkey iterator is useful to pass to such a chain source because it doesn’t -require holding a reference to the index.

-

Call unbounded_spk_iter to get an unbounded script pubkey iterator for a given keychain. -Call all_unbounded_spk_iters to get unbounded script pubkey iterators for all keychains.

-

§Change sets

-

Methods that can update the last revealed index or add keychains will return ChangeSet to report -these changes. This should be persisted for future recovery.

-

§Synopsis

-
use bdk_chain::keychain::KeychainTxOutIndex;
-
-// imagine our service has internal and external addresses but also addresses for users
-#[derive(Clone, Debug, PartialEq, Eq, Ord, PartialOrd)]
-enum MyKeychain {
-    External,
-    Internal,
-    MyAppUser {
-        user_id: u32
-    }
-}
-
-let mut txout_index = KeychainTxOutIndex::<MyKeychain>::default();
-
-let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor)?;
-let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor)?;
-let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42)?;
-
-let new_spk_for_user = txout_index.reveal_next_spk(&MyKeychain::MyAppUser{ user_id: 42 });
-

Implementations§

source§

impl<K> KeychainTxOutIndex<K>

source

pub fn new(lookahead: u32) -> Self

Construct a KeychainTxOutIndex with the given lookahead.

-

The lookahead is the number of script pubkeys to derive and cache from the internal -descriptors over and above the last revealed script index. Without a lookahead the index -will miss outputs you own when processing transactions whose output script pubkeys lie -beyond the last revealed index. In certain situations, such as when performing an initial -scan of the blockchain during wallet import, it may be uncertain or unknown what the index -of the last revealed script pubkey actually is.

-

Refer to struct-level docs for more about lookahead.

-
source§

impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

Methods that are re-exposed from the internal SpkTxOutIndex.

-
source

pub fn inner(&self) -> &SpkTxOutIndex<(K, u32)>

Return a reference to the internal SpkTxOutIndex.

-

WARNING: The internal index will contain lookahead spks. Refer to -struct-level docs for more about lookahead.

-
source

pub fn outpoints(&self) -> &BTreeSet<KeychainIndexed<K, OutPoint>>

Get the set of indexed outpoints, corresponding to tracked keychains.

-
source

pub fn txouts( - &self -) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> + ExactSizeIterator

Iterate over known txouts that spend to tracked script pubkeys.

-
source

pub fn txouts_in_tx( - &self, - txid: Txid -) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>>

Finds all txouts on a transaction that has previously been scanned and indexed.

-
source

pub fn txout(&self, outpoint: OutPoint) -> Option<KeychainIndexed<K, &TxOut>>

Return the [TxOut] of outpoint if it has been indexed, and if it corresponds to a -tracked keychain.

-

The associated keychain and keychain index of the txout’s spk is also returned.

-

This calls SpkTxOutIndex::txout internally.

-
source

pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script>

Return the script that exists under the given keychain’s index.

-

This calls SpkTxOutIndex::spk_at_index internally.

-
source

pub fn index_of_spk(&self, script: &Script) -> Option<&(K, u32)>

Returns the keychain and keychain index associated with the spk.

-

This calls SpkTxOutIndex::index_of_spk internally.

-
source

pub fn is_used(&self, keychain: K, index: u32) -> bool

Returns whether the spk under the keychain’s index has been used.

-

Here, “unused” means that after the script pubkey was stored in the index, the index has -never scanned a transaction output with it.

-

This calls SpkTxOutIndex::is_used internally.

-
source

pub fn mark_used(&mut self, keychain: K, index: u32) -> bool

Marks the script pubkey at index as used even though the tracker hasn’t seen an output -with it.

-

This only has an effect when the index had been added to self already and was unused.

-

Returns whether the spk under the given keychain and index is successfully -marked as used. Returns false either when there is no descriptor under the given -keychain, or when the spk is already marked as used.

-

This is useful when you want to reserve a script pubkey for something but don’t want to add -the transaction output using it to the index yet. Other callers will consider index on -keychain used until you call unmark_used.

-

This calls SpkTxOutIndex::mark_used internally.

-
source

pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool

Undoes the effect of mark_used. Returns whether the index is inserted back into -unused.

-

Note that if self has scanned an output with this script pubkey, then this will have no -effect.

-

This calls SpkTxOutIndex::unmark_used internally.

-
source

pub fn sent_and_received( - &self, - tx: &Transaction, - range: impl RangeBounds<K> -) -> (Amount, Amount)

Computes the total value transfer effect tx has on the script pubkeys belonging to the -keychains in range. Value is sent when a script pubkey in the range is on an input and -received when it is on an output. For sent to be computed correctly, the output being -spent must have already been scanned by the index. Calculating received just uses the -[Transaction] outputs directly, so it will be correct even if it has not been scanned.

-
source

pub fn net_value( - &self, - tx: &Transaction, - range: impl RangeBounds<K> -) -> SignedAmount

Computes the net value that this transaction gives to the script pubkeys in the index and -takes from the transaction outputs in the index. Shorthand for calling -sent_and_received and subtracting sent from received.

-

This calls SpkTxOutIndex::net_value internally.

-
source§

impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

source

pub fn keychains( - &self -) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_

Return all keychains and their corresponding descriptors.

-
source

pub fn insert_descriptor( - &mut self, - keychain: K, - descriptor: Descriptor<DescriptorPublicKey> -) -> Result<ChangeSet<K>, InsertDescriptorError<K>>

Insert a descriptor with a keychain associated to it.

-

Adding a descriptor means you will be able to derive new script pubkeys under it and the -txout index will discover transaction outputs with those script pubkeys (once they’ve been -derived and added to the index).

-

keychain <-> descriptor is a one-to-one mapping that cannot be changed. Attempting to do so -will return a InsertDescriptorError<K>.

-

[KeychainTxOutIndex] will prevent you from inserting two descriptors which derive the same -script pubkey at index 0, but it’s up to you to ensure that descriptors don’t collide at -other indices. If they do nothing catastrophic happens at the KeychainTxOutIndex level -(one keychain just becomes the defacto owner of that spk arbitrarily) but this may have -subtle implications up the application stack like one UTXO being missing from one keychain -because it has been assigned to another which produces the same script pubkey.

-
source

pub fn get_descriptor( - &self, - keychain: &K -) -> Option<&Descriptor<DescriptorPublicKey>>

Gets the descriptor associated with the keychain. Returns None if the keychain doesn’t -have a descriptor associated with it.

-
source

pub fn lookahead(&self) -> u32

Get the lookahead setting.

-

Refer to new for more information on the lookahead.

-
source

pub fn lookahead_to_target(&mut self, keychain: &K, target_index: u32)

Store lookahead scripts until target_index (inclusive).

-

This does not change the global lookahead setting.

-
source

pub fn unbounded_spk_iter( - &self, - keychain: &K -) -> Option<SpkIterator<Descriptor<DescriptorPublicKey>>>

Get an unbounded spk iterator over a given keychain. Returns None if the provided -keychain doesn’t exist

-
source

pub fn all_unbounded_spk_iters( - &self -) -> BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>>

Get unbounded spk iterators for all keychains.

-
source

pub fn revealed_spks( - &self, - range: impl RangeBounds<K> -) -> impl Iterator<Item = KeychainIndexed<K, &Script>>

Iterate over revealed spks of keychains in range

-
source

pub fn revealed_keychain_spks<'a>( - &'a self, - keychain: &'a K -) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + 'a

Iterate over revealed spks of the given keychain with ascending indices.

-

This is a double ended iterator so you can easily reverse it to get an iterator where -the script pubkeys that were most recently revealed are first.

-
source

pub fn unused_spks( - &self -) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, &Script>> + Clone

Iterate over revealed, but unused, spks of all keychains.

-
source

pub fn unused_keychain_spks( - &self, - keychain: &K -) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + Clone

Iterate over revealed, but unused, spks of the given keychain. -Returns an empty iterator if the provided keychain doesn’t exist.

-
source

pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)>

Get the next derivation index for keychain. The next index is the index after the last revealed -derivation index.

-

The second field in the returned tuple represents whether the next derivation index is new. -There are two scenarios where the next derivation index is reused (not new):

-
    -
  1. The keychain’s descriptor has no wildcard, and a script has already been revealed.
  2. -
  3. The number of revealed scripts has already reached 2^31 (refer to BIP-32).
  4. -
-

Not checking the second field of the tuple may result in address reuse.

-

Returns None if the provided keychain doesn’t exist.

-
source

pub fn last_revealed_indices(&self) -> BTreeMap<K, u32>

Get the last derivation index that is revealed for each keychain.

-

Keychains with no revealed indices will not be included in the returned BTreeMap.

-
source

pub fn last_revealed_index(&self, keychain: &K) -> Option<u32>

Get the last derivation index revealed for keychain. Returns None if the keychain doesn’t -exist, or if the keychain doesn’t have any revealed scripts.

-
source

pub fn reveal_to_target_multi( - &mut self, - keychains: &BTreeMap<K, u32> -) -> ChangeSet<K>

Convenience method to call Self::reveal_to_target on multiple keychains.

-
source

pub fn reveal_to_target( - &mut self, - keychain: &K, - target_index: u32 -) -> Option<(Vec<Indexed<ScriptBuf>>, ChangeSet<K>)>

Reveals script pubkeys of the keychain’s descriptor up to and including the -target_index.

-

If the target_index cannot be reached (due to the descriptor having no wildcard and/or -the target_index is in the hardened index range), this method will make a best-effort and -reveal up to the last possible index.

-

This returns list of newly revealed indices (alongside their scripts) and a -ChangeSet, which reports updates to the latest revealed index. If no new script -pubkeys are revealed, then both of these will be empty.

-

Returns None if the provided keychain doesn’t exist.

-
source

pub fn reveal_next_spk( - &mut self, - keychain: &K -) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)>

Attempts to reveal the next script pubkey for keychain.

-

Returns the derivation index of the revealed script pubkey, the revealed script pubkey and a -ChangeSet which represents changes in the last revealed index (if any). -Returns None if the provided keychain doesn’t exist.

-

When a new script cannot be revealed, we return the last revealed script and an empty -ChangeSet. There are two scenarios when a new script pubkey cannot be derived:

-
    -
  1. The descriptor has no wildcard and already has one script revealed.
  2. -
  3. The descriptor has already revealed scripts up to the numeric bound.
  4. -
  5. There is no descriptor associated with the given keychain.
  6. -
-
source

pub fn next_unused_spk( - &mut self, - keychain: &K -) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)>

Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest -index that has not been used yet.

-

This will derive and reveal a new script pubkey if no more unused script pubkeys exist.

-

If the descriptor has no wildcard and already has a used script pubkey or if a descriptor -has used all scripts up to the derivation bounds, then the last derived script pubkey will be -returned.

-

Returns None if there are no script pubkeys that have been used and no new script pubkey -could be revealed (see reveal_next_spk for when this happens).

-
source

pub fn keychain_outpoints<'a>( - &'a self, - keychain: &'a K -) -> impl DoubleEndedIterator<Item = Indexed<OutPoint>> + 'a

Iterate over all [OutPoint]s that have TxOuts with script pubkeys derived from -keychain.

-
source

pub fn keychain_outpoints_in_range<'a>( - &'a self, - range: impl RangeBounds<K> + 'a -) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, OutPoint>> + 'a

Iterate over [OutPoint]s that have script pubkeys derived from keychains in range.

-
source

pub fn last_used_index(&self, keychain: &K) -> Option<u32>

Returns the highest derivation index of the keychain where KeychainTxOutIndex has -found a [TxOut] with it’s script pubkey.

-
source

pub fn last_used_indices(&self) -> BTreeMap<K, u32>

Returns the highest derivation index of each keychain that KeychainTxOutIndex has found -a [TxOut] with it’s script pubkey.

-
source

pub fn apply_changeset(&mut self, changeset: ChangeSet<K>)

Applies the ChangeSet<K> to the KeychainTxOutIndex<K>

-

Keychains added by the keychains_added field of ChangeSet<K> respect the one-to-one -keychain <-> descriptor invariant by silently ignoring attempts to violate it (but will -panic if debug_assertions are enabled).

-

Trait Implementations§

source§

impl<K: Clone> Clone for KeychainTxOutIndex<K>

source§

fn clone(&self) -> KeychainTxOutIndex<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for KeychainTxOutIndex<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K> Default for KeychainTxOutIndex<K>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K>

§

type ChangeSet = ChangeSet<K>

The resultant “changeset” when new transaction data is indexed.
source§

fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

Scan and index the given outpoint and txout.
source§

fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

Scans a transaction for relevant outpoints, which are stored and indexed internally.
source§

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.
source§

fn apply_changeset(&mut self, changeset: Self::ChangeSet)

Apply changeset to itself.
source§

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

Auto Trait Implementations§

§

impl<K> Freeze for KeychainTxOutIndex<K>

§

impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
where - K: RefUnwindSafe,

§

impl<K> Send for KeychainTxOutIndex<K>
where - K: Send,

§

impl<K> Sync for KeychainTxOutIndex<K>
where - K: Sync,

§

impl<K> Unpin for KeychainTxOutIndex<K>
where - K: Unpin,

§

impl<K> UnwindSafe for KeychainTxOutIndex<K>

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.NoSuchKeychain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.NoSuchKeychain.html deleted file mode 100644 index 26ff821763..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.NoSuchKeychain.html +++ /dev/null @@ -1,23 +0,0 @@ -NoSuchKeychain in bdk_chain::keychain - Rust

Struct bdk_chain::keychain::NoSuchKeychain

source ·
pub struct NoSuchKeychain<K>(/* private fields */);
Expand description

The keychain doesn’t exist. Most likley hasn’t been inserted with KeychainTxOutIndex::insert_descriptor.

-

Trait Implementations§

source§

impl<K: Clone> Clone for NoSuchKeychain<K>

source§

fn clone(&self) -> NoSuchKeychain<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for NoSuchKeychain<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Display for NoSuchKeychain<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: PartialEq> PartialEq for NoSuchKeychain<K>

source§

fn eq(&self, other: &NoSuchKeychain<K>) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<K: Eq> Eq for NoSuchKeychain<K>

source§

impl<K> StructuralPartialEq for NoSuchKeychain<K>

Auto Trait Implementations§

§

impl<K> Freeze for NoSuchKeychain<K>
where - K: Freeze,

§

impl<K> RefUnwindSafe for NoSuchKeychain<K>
where - K: RefUnwindSafe,

§

impl<K> Send for NoSuchKeychain<K>
where - K: Send,

§

impl<K> Sync for NoSuchKeychain<K>
where - K: Sync,

§

impl<K> Unpin for NoSuchKeychain<K>
where - K: Unpin,

§

impl<K> UnwindSafe for NoSuchKeychain<K>
where - K: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/constant.DEFAULT_LOOKAHEAD.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/constant.DEFAULT_LOOKAHEAD.html deleted file mode 100644 index 76e08381e4..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/constant.DEFAULT_LOOKAHEAD.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/enum.InsertDescriptorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/enum.InsertDescriptorError.html deleted file mode 100644 index e19d71f784..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/enum.InsertDescriptorError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../bdk_chain/keychain/enum.InsertDescriptorError.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.ChangeSet.html deleted file mode 100644 index e4f37f8766..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.ChangeSet.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../bdk_chain/keychain/struct.ChangeSet.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.KeychainTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.KeychainTxOutIndex.html deleted file mode 100644 index 25a8ee11d9..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.KeychainTxOutIndex.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../bdk_chain/keychain/struct.KeychainTxOutIndex.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.NoSuchKeychain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.NoSuchKeychain.html deleted file mode 100644 index a070bbc020..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.NoSuchKeychain.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../bdk_chain/keychain/struct.NoSuchKeychain.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.Indexed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.Indexed.html deleted file mode 100644 index 7b753c32cc..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.Indexed.html +++ /dev/null @@ -1,2 +0,0 @@ -Indexed in bdk_chain::keychain - Rust

Type Alias bdk_chain::keychain::Indexed

source ·
pub type Indexed<T> = (u32, T);
Expand description

A tuple of keychain index and T representing the indexed value.

-
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.KeychainIndexed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.KeychainIndexed.html deleted file mode 100644 index a848f39be8..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.KeychainIndexed.html +++ /dev/null @@ -1,2 +0,0 @@ -KeychainIndexed in bdk_chain::keychain - Rust

Type Alias bdk_chain::keychain::KeychainIndexed

source ·
pub type KeychainIndexed<K, T> = ((K, u32), T);
Expand description

A tuple of keychain K, derivation index (u32) and a T associated with them.

-
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/sidebar-items.js index b10d3e728d..830dc1c95c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":["BIP32_MAX_INDEX","COINBASE_MATURITY"],"enum":["ChainPosition","ConfirmationTime"],"externcrate":["serde"],"mod":["indexed_tx_graph","keychain","local_chain","spk_client","tx_graph"],"struct":["BlockId","CombinedChangeSet","ConfirmationHeightAnchor","ConfirmationTimeHeightAnchor","DescriptorId","FullTxOut","SpkIterator","SpkTxOutIndex"],"trait":["Anchor","AnchorFromBlockPosition","Append","ChainOracle","DescriptorExt"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["BIP32_MAX_INDEX","COINBASE_MATURITY"],"enum":["ChainPosition","ConfirmationTime"],"externcrate":["serde"],"mod":["indexed_tx_graph","indexer","local_chain","spk_client","tx_graph"],"struct":["Balance","BlockId","CombinedChangeSet","ConfirmationHeightAnchor","ConfirmationTimeHeightAnchor","DescriptorId","FullTxOut","SpkIterator"],"trait":["Anchor","AnchorFromBlockPosition","Append","ChainOracle","DescriptorExt"],"type":["Indexed","KeychainIndexed"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html index 80c90bd202..acd41e91b1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html @@ -1,2 +1,2 @@ -bdk_chain::spk_client - Rust

Module bdk_chain::spk_client

source ·
Expand description

Helper types for spk-based blockchain clients.

+bdk_chain::spk_client - Rust

Module bdk_chain::spk_client

source ·
Expand description

Helper types for spk-based blockchain clients.

Structs§

  • Data required to perform a spk-based blockchain client full scan.
  • Data returned from a spk-based blockchain client full scan.
  • Data required to perform a spk-based blockchain client sync.
  • Data returned from a spk-based blockchain client sync.
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html index 573e826eca..7846ae0a74 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html @@ -1,6 +1,6 @@ -FullScanRequest in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanRequest

source ·
pub struct FullScanRequest<K> {
+FullScanRequest in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanRequest

source ·
pub struct FullScanRequest<K> {
     pub chain_tip: CheckPoint,
-    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
+    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
 }
Expand description

Data required to perform a spk-based blockchain client full scan.

A client full scan iterates through all the scripts for the given keychains, fetching relevant data until some stop gap number of scripts is found that have no data. This operation is @@ -8,36 +8,36 @@ generally only used when importing or restoring previously used keychains in whi used scripts is not known. The full scan process also updates the chain from the given CheckPoint.

Fields§

§chain_tip: CheckPoint

A checkpoint for the current LocalChain::tip. The full scan process will return a new chain update that extends this tip.

-
§spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>

Iterators of script pubkeys indexed by the keychain index.

-

Implementations§

source§

impl<K: Ord + Clone> FullScanRequest<K>

source

pub fn from_chain_tip(chain_tip: CheckPoint) -> Self

Construct a new FullScanRequest from a given chain_tip.

-
source

pub fn from_keychain_txout_index( +

§spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>

Iterators of script pubkeys indexed by the keychain index.

+

Implementations§

source§

impl<K: Ord + Clone> FullScanRequest<K>

source

pub fn from_chain_tip(chain_tip: CheckPoint) -> Self

Construct a new FullScanRequest from a given chain_tip.

+
source

pub fn from_keychain_txout_index( chain_tip: CheckPoint, - index: &KeychainTxOutIndex<K> + index: &KeychainTxOutIndex<K> ) -> Self
where K: Debug,

Construct a new FullScanRequest from a given chain_tip and index.

Unbounded script pubkey iterators for each keychain (K) are extracted using -KeychainTxOutIndex::all_unbounded_spk_iters and is used to populate the +KeychainTxOutIndex::all_unbounded_spk_iters and is used to populate the FullScanRequest.

-
source

pub fn set_spks_for_keychain( +

source

pub fn set_spks_for_keychain( self, keychain: K, - spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> + spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> ) -> Self

Set the [Script]s for a given keychain.

This consumes the FullScanRequest and returns the updated one.

-
source

pub fn chain_spks_for_keychain( +

source

pub fn chain_spks_for_keychain( self, keychain: K, - spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> + spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> ) -> Self

Chain on additional [Script]s that will be synced against.

This consumes the FullScanRequest and returns the updated one.

-
source

pub fn inspect_spks_for_all_keychains( +

source

pub fn inspect_spks_for_all_keychains( self, inspect: impl FnMut(K, u32, &Script) + Send + Sync + Clone + 'static ) -> Self
where K: Send + 'static,

Add a closure that will be called for every [Script] previously added to any keychain in this request.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn inspect_spks_for_keychain( +

source

pub fn inspect_spks_for_keychain( self, keychain: K, inspect: impl FnMut(u32, &Script) + Send + Sync + 'static diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html index d185c58f13..2af843a7cf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html @@ -1,4 +1,4 @@ -FullScanResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanResult

source ·
pub struct FullScanResult<K, A = ConfirmationTimeHeightAnchor> {
+FullScanResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanResult

source ·
pub struct FullScanResult<K, A = ConfirmationTimeHeightAnchor> {
     pub graph_update: TxGraph<A>,
     pub chain_update: CheckPoint,
     pub last_active_indices: BTreeMap<K, u32>,
diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html
index 89015a8327..702a15edaa 100644
--- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html
+++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html
@@ -1,4 +1,4 @@
-SyncRequest in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncRequest

source ·
pub struct SyncRequest {
+SyncRequest in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncRequest

source ·
pub struct SyncRequest {
     pub chain_tip: CheckPoint,
     pub spks: Box<dyn ExactSizeIterator<Item = ScriptBuf> + Send>,
     pub txids: Box<dyn ExactSizeIterator<Item = Txid> + Send>,
@@ -11,55 +11,55 @@ The sync process will return a new chain update that extends this tip.

§spks: Box<dyn ExactSizeIterator<Item = ScriptBuf> + Send>

Transactions that spend from or to these indexed script pubkeys.

§txids: Box<dyn ExactSizeIterator<Item = Txid> + Send>

Transactions with these txids.

§outpoints: Box<dyn ExactSizeIterator<Item = OutPoint> + Send>

Transactions with these outpoints or spent from these outpoints.

-

Implementations§

source§

impl SyncRequest

source

pub fn from_chain_tip(cp: CheckPoint) -> Self

Construct a new SyncRequest from a given cp tip.

-
source

pub fn set_spks( +

Implementations§

source§

impl SyncRequest

source

pub fn from_chain_tip(cp: CheckPoint) -> Self

Construct a new SyncRequest from a given cp tip.

+
source

pub fn set_spks( self, spks: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = ScriptBuf> + Send + 'static> ) -> Self

Set the [Script]s that will be synced against.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn set_txids( +

source

pub fn set_txids( self, txids: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = Txid> + Send + 'static> ) -> Self

Set the [Txid]s that will be synced against.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn set_outpoints( +

source

pub fn set_outpoints( self, outpoints: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = OutPoint> + Send + 'static> ) -> Self

Set the [OutPoint]s that will be synced against.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn chain_spks( +

source

pub fn chain_spks( self, spks: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = ScriptBuf> + Send + 'static, Item = ScriptBuf> ) -> Self

Chain on additional [Script]s that will be synced against.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn chain_txids( +

source

pub fn chain_txids( self, txids: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = Txid> + Send + 'static, Item = Txid> ) -> Self

Chain on additional [Txid]s that will be synced against.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn chain_outpoints( +

source

pub fn chain_outpoints( self, outpoints: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = OutPoint> + Send + 'static, Item = OutPoint> ) -> Self

Chain on additional [OutPoint]s that will be synced against.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn inspect_spks( +

source

pub fn inspect_spks( self, inspect: impl FnMut(&Script) + Send + Sync + 'static ) -> Self

Add a closure that will be called for [Script]s previously added to this request.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn inspect_txids( +

source

pub fn inspect_txids( self, inspect: impl FnMut(&Txid) + Send + Sync + 'static ) -> Self

Add a closure that will be called for [Txid]s previously added to this request.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn inspect_outpoints( +

source

pub fn inspect_outpoints( self, inspect: impl FnMut(&OutPoint) + Send + Sync + 'static ) -> Self

Add a closure that will be called for [OutPoint]s previously added to this request.

This consumes the SyncRequest and returns the updated one.

-
source

pub fn populate_with_revealed_spks<K: Clone + Ord + Debug + Send + Sync>( +

source

pub fn populate_with_revealed_spks<K: Clone + Ord + Debug + Send + Sync>( self, - index: &KeychainTxOutIndex<K>, + index: &KeychainTxOutIndex<K>, spk_range: impl RangeBounds<K> ) -> Self

Populate the request with revealed script pubkeys from index with the given spk_range.

This consumes the SyncRequest and returns the updated one.

diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html index 971655bca3..23263c7207 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html @@ -1,4 +1,4 @@ -SyncResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncResult

source ·
pub struct SyncResult<A = ConfirmationTimeHeightAnchor> {
+SyncResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncResult

source ·
pub struct SyncResult<A = ConfirmationTimeHeightAnchor> {
     pub graph_update: TxGraph<A>,
     pub chain_update: CheckPoint,
 }
Expand description

Data returned from a spk-based blockchain client sync.

diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_txout_index/struct.SpkTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_txout_index/struct.SpkTxOutIndex.html deleted file mode 100644 index ed0bb79c2a..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_txout_index/struct.SpkTxOutIndex.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../bdk_chain/struct.SpkTxOutIndex.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Balance.html new file mode 100644 index 0000000000..9d01d54151 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Balance.html @@ -0,0 +1,33 @@ +Balance in bdk_chain - Rust

Struct bdk_chain::Balance

source ·
pub struct Balance {
+    pub immature: Amount,
+    pub trusted_pending: Amount,
+    pub untrusted_pending: Amount,
+    pub confirmed: Amount,
+}
Expand description

Balance, differentiated into various categories.

+

Fields§

§immature: Amount

All coinbase outputs not yet matured

+
§trusted_pending: Amount

Unconfirmed UTXOs generated by a wallet tx

+
§untrusted_pending: Amount

Unconfirmed UTXOs received from an external wallet

+
§confirmed: Amount

Confirmed and immediately spendable balance

+

Implementations§

source§

impl Balance

source

pub fn trusted_spendable(&self) -> Amount

Get sum of trusted_pending and confirmed coins.

+

This is the balance you can spend right now that shouldn’t get cancelled via another party +double spending it.

+
source

pub fn total(&self) -> Amount

Get the whole balance visible to the wallet.

+

Trait Implementations§

source§

impl Add for Balance

§

type Output = Balance

The resulting type after applying the + operator.
source§

fn add(self, other: Self) -> Self

Performs the + operation. Read more
source§

impl Clone for Balance

source§

fn clone(&self) -> Balance

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Balance

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Balance

source§

fn default() -> Balance

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Balance

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Balance

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for Balance

source§

fn eq(&self, other: &Balance) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Balance

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Balance

source§

impl StructuralPartialEq for Balance

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.CombinedChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.CombinedChangeSet.html index 40def7567f..c168e524ac 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.CombinedChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.CombinedChangeSet.html @@ -1,15 +1,15 @@ -CombinedChangeSet in bdk_chain - Rust

Struct bdk_chain::CombinedChangeSet

source ·
pub struct CombinedChangeSet<K, A> {
+CombinedChangeSet in bdk_chain - Rust

Struct bdk_chain::CombinedChangeSet

source ·
pub struct CombinedChangeSet<K, A> {
     pub chain: ChangeSet,
-    pub indexed_tx_graph: ChangeSet<A, ChangeSet<K>>,
+    pub indexed_tx_graph: ChangeSet<A, ChangeSet<K>>,
     pub network: Option<Network>,
 }
Expand description

A changeset containing crate structures typically persisted together.

Fields§

§chain: ChangeSet

Changes to the LocalChain.

-
§indexed_tx_graph: ChangeSet<A, ChangeSet<K>>

Changes to IndexedTxGraph.

+
§indexed_tx_graph: ChangeSet<A, ChangeSet<K>>

Changes to IndexedTxGraph.

§network: Option<Network>

Stores the network type of the transaction data.

-

Trait Implementations§

source§

impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>

source§

fn append(&mut self, other: Self)

Append another object of the same type onto self.
source§

fn is_empty(&self) -> bool

Returns whether the structure is considered empty.
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>

source§

fn clone(&self) -> CombinedChangeSet<K, A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, A: Debug> Debug for CombinedChangeSet<K, A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K, A> Default for CombinedChangeSet<K, A>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
where +

Trait Implementations§

source§

impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>

source§

fn append(&mut self, other: Self)

Append another object of the same type onto self.
source§

fn is_empty(&self) -> bool

Returns whether the structure is considered empty.
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>

source§

fn clone(&self) -> CombinedChangeSet<K, A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, A: Debug> Debug for CombinedChangeSet<K, A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K, A> Default for CombinedChangeSet<K, A>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
where A: Ord + Deserialize<'de>, K: Ord + Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

source§

fn from(chain: ChangeSet) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

source§

fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>

source§

fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§

impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

source§

fn from(chain: ChangeSet) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

source§

fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> Self

Converts to this type from the input type.
source§

impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>

source§

fn from(indexer: ChangeSet<K>) -> Self

Converts to this type from the input type.
source§

impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>

source§

fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<K, A> Serialize for CombinedChangeSet<K, A>
where A: Ord + Serialize, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html index 88d993f40c..4b0c3b04b2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html @@ -224,4 +224,4 @@ until that buffer is filled. Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file + V: MultiLane<T>,
§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html deleted file mode 100644 index a3e6206ff0..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html +++ /dev/null @@ -1,108 +0,0 @@ -SpkTxOutIndex in bdk_chain - Rust

Struct bdk_chain::SpkTxOutIndex

source ·
pub struct SpkTxOutIndex<I> { /* private fields */ }
Expand description

An index storing TxOuts that have a script pubkey that matches those in a list.

-

The basic idea is that you insert script pubkeys you care about into the index with -insert_spk and then when you call Indexer::index_tx or Indexer::index_txout, the -index will look at any txouts you pass in and store and index any txouts matching one of its -script pubkeys.

-

Each script pubkey is associated with an application-defined index script index I, which must be -Ord. Usually, this is used to associate the derivation index of the script pubkey or even a -combination of (keychain, derivation_index).

-

Note there is no harm in scanning transactions that disappear from the blockchain or were never -in there in the first place. SpkTxOutIndex is intentionally monotone – you cannot delete or -modify txouts that have been indexed. To find out which txouts from the index are actually in the -chain or unspent, you must use other sources of information like a TxGraph.

-

Implementations§

source§

impl<I: Clone + Ord + Debug> SpkTxOutIndex<I>

source

pub fn scan(&mut self, tx: &Transaction) -> BTreeSet<I>

Scans a transaction’s outputs for matching script pubkeys.

-

Typically, this is used in two situations:

-
    -
  1. After loading transaction data from the disk, you may scan over all the txouts to restore all -your txouts.
  2. -
  3. When getting new data from the chain, you usually scan it before incorporating it into your chain state.
  4. -
-
source

pub fn scan_txout(&mut self, op: OutPoint, txout: &TxOut) -> Option<&I>

Scan a single TxOut for a matching script pubkey and returns the index that matches the -script pubkey (if any).

-
source

pub fn outpoints(&self) -> &BTreeSet<(I, OutPoint)>

Get a reference to the set of indexed outpoints.

-
source

pub fn txouts( - &self -) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)> + ExactSizeIterator

Iterate over all known txouts that spend to tracked script pubkeys.

-
source

pub fn txouts_in_tx( - &self, - txid: Txid -) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)>

Finds all txouts on a transaction that has previously been scanned and indexed.

-
source

pub fn outputs_in_range( - &self, - range: impl RangeBounds<I> -) -> impl DoubleEndedIterator<Item = (&I, OutPoint)>

Iterates over all the outputs with script pubkeys in an index range.

-
source

pub fn txout(&self, outpoint: OutPoint) -> Option<(&I, &TxOut)>

Returns the txout and script pubkey index of the TxOut at OutPoint.

-

Returns None if the TxOut hasn’t been scanned or if nothing matching was found there.

-
source

pub fn spk_at_index(&self, index: &I) -> Option<&Script>

Returns the script that has been inserted at the index.

-

If that index hasn’t been inserted yet, it will return None.

-
source

pub fn all_spks(&self) -> &BTreeMap<I, ScriptBuf>

The script pubkeys that are being tracked by the index.

-
source

pub fn insert_spk(&mut self, index: I, spk: ScriptBuf) -> bool

Adds a script pubkey to scan for. Returns false and does nothing if spk already exists in the map

-

the index will look for outputs spending to this spk whenever it scans new data.

-
source

pub fn unused_spks<R>( - &self, - range: R -) -> impl DoubleEndedIterator<Item = (&I, &Script)> + Clone
where - R: RangeBounds<I>,

Iterates over all unused script pubkeys in an index range.

-

Here, “unused” means that after the script pubkey was stored in the index, the index has -never scanned a transaction output with it.

-
§Example
-

-// imagine our spks are indexed like (keychain, derivation_index).
-let txout_index = SpkTxOutIndex::<(u32, u32)>::default();
-let all_unused_spks = txout_index.unused_spks(..);
-let change_index = 1;
-let unused_change_spks =
-    txout_index.unused_spks((change_index, u32::MIN)..(change_index, u32::MAX));
-
source

pub fn is_used(&self, index: &I) -> bool

Returns whether the script pubkey at index has been used or not.

-

Here, “unused” means that after the script pubkey was stored in the index, the index has -never scanned a transaction output with it.

-
source

pub fn mark_used(&mut self, index: &I) -> bool

Marks the script pubkey at index as used even though it hasn’t seen an output spending to it. -This only affects when the index had already been added to self and was unused.

-

Returns whether the index was initially present as unused.

-

This is useful when you want to reserve a script pubkey for something but don’t want to add -the transaction output using it to the index yet. Other callers will consider the index used -until you call unmark_used.

-
source

pub fn unmark_used(&mut self, index: &I) -> bool

Undoes the effect of mark_used. Returns whether the index is inserted back into -unused.

-

Note that if self has scanned an output with this script pubkey then this will have no -effect.

-
source

pub fn index_of_spk(&self, script: &Script) -> Option<&I>

Returns the index associated with the script pubkey.

-
source

pub fn sent_and_received( - &self, - tx: &Transaction, - range: impl RangeBounds<I> -) -> (Amount, Amount)

Computes the total value transfer effect tx has on the script pubkeys in range. Value is -sent when a script pubkey in the range is on an input and received when it is on an -output. For sent to be computed correctly, the output being spent must have already been -scanned by the index. Calculating received just uses the [Transaction] outputs directly, -so it will be correct even if it has not been scanned.

-
source

pub fn net_value( - &self, - tx: &Transaction, - range: impl RangeBounds<I> -) -> SignedAmount

Computes the net value transfer effect of tx on the script pubkeys in range. Shorthand -for calling sent_and_received and subtracting sent from received.

-
source

pub fn is_relevant(&self, tx: &Transaction) -> bool

Whether any of the inputs of this transaction spend a txout tracked or whether any output -matches one of our script pubkeys.

-

It is easily possible to misuse this method and get false negatives by calling it before you -have scanned the TxOuts the transaction is spending. For example, if you want to filter out -all the transactions in a block that are irrelevant, you must first scan all the -transactions in the block and only then use this method.

-

Trait Implementations§

source§

impl<I: Clone> Clone for SpkTxOutIndex<I>

source§

fn clone(&self) -> SpkTxOutIndex<I>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<I: Debug> Debug for SpkTxOutIndex<I>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<I> Default for SpkTxOutIndex<I>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<I: Clone + Ord + Debug> Indexer for SpkTxOutIndex<I>

§

type ChangeSet = ()

The resultant “changeset” when new transaction data is indexed.
source§

fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

Scan and index the given outpoint and txout.
source§

fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

Scans a transaction for relevant outpoints, which are stored and indexed internally.
source§

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.
source§

fn apply_changeset(&mut self, _changeset: Self::ChangeSet)

Apply changeset to itself.
source§

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

Auto Trait Implementations§

§

impl<I> Freeze for SpkTxOutIndex<I>

§

impl<I> RefUnwindSafe for SpkTxOutIndex<I>
where - I: RefUnwindSafe,

§

impl<I> Send for SpkTxOutIndex<I>
where - I: Send,

§

impl<I> Sync for SpkTxOutIndex<I>
where - I: Sync,

§

impl<I> Unpin for SpkTxOutIndex<I>
where - I: Unpin,

§

impl<I> UnwindSafe for SpkTxOutIndex<I>

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for T
where - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html index e75f061a82..81f3030462 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html @@ -75,4 +75,4 @@ T7: Append, T8: Append, T9: Append, - T10: Append,
source§

fn append(&mut self, _other: Self)

source§

fn is_empty(&self) -> bool

source§

impl<T> Append for Vec<T>

source§

fn append(&mut self, other: Self)

source§

fn is_empty(&self) -> bool

source§

impl<T: Ord> Append for BTreeSet<T>

source§

fn append(&mut self, other: Self)

source§

fn is_empty(&self) -> bool

Implementors§

source§

impl<A: Ord> Append for bdk_chain::tx_graph::ChangeSet<A>

source§

impl<A: Anchor, IA: Append> Append for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>

source§

impl<K: Ord> Append for bdk_chain::keychain::ChangeSet<K>

source§

impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>

\ No newline at end of file + T10: Append,
source§

fn append(&mut self, _other: Self)

source§

fn is_empty(&self) -> bool

source§

impl<T> Append for Vec<T>

source§

fn append(&mut self, other: Self)

source§

fn is_empty(&self) -> bool

source§

impl<T: Ord> Append for BTreeSet<T>

source§

fn append(&mut self, other: Self)

source§

fn is_empty(&self) -> bool

Implementors§

source§

impl<A: Ord> Append for bdk_chain::tx_graph::ChangeSet<A>

source§

impl<A: Anchor, IA: Append> Append for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>

source§

impl<K: Ord> Append for bdk_chain::indexer::keychain_txout::ChangeSet<K>

source§

impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html index 4f8cdebe6b..7220a2dadf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html @@ -1,12 +1,12 @@ -CalculateFeeError in bdk_chain::tx_graph - Rust

Enum bdk_chain::tx_graph::CalculateFeeError

source ·
pub enum CalculateFeeError {
+CalculateFeeError in bdk_chain::tx_graph - Rust

Enum bdk_chain::tx_graph::CalculateFeeError

source ·
pub enum CalculateFeeError {
     MissingTxOut(Vec<OutPoint>),
     NegativeFee(SignedAmount),
 }
Expand description

Errors returned by TxGraph::calculate_fee.

Variants§

§

MissingTxOut(Vec<OutPoint>)

Missing TxOut for one or more of the inputs of the tx

§

NegativeFee(SignedAmount)

When the transaction is invalid according to the graph it has a negative fee

-

Trait Implementations§

source§

impl Debug for CalculateFeeError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for CalculateFeeError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for CalculateFeeError

1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl PartialEq for CalculateFeeError

source§

fn eq(&self, other: &CalculateFeeError) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for CalculateFeeError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for CalculateFeeError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for CalculateFeeError

1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl PartialEq for CalculateFeeError

source§

fn eq(&self, other: &CalculateFeeError) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for CalculateFeeError

source§

impl StructuralPartialEq for CalculateFeeError

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Eq for CalculateFeeError

source§

impl StructuralPartialEq for CalculateFeeError

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html index 80e1907608..646ea47f6b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html @@ -1,4 +1,4 @@ -bdk_chain::tx_graph - Rust

Module bdk_chain::tx_graph

source ·
Expand description

Module for structures that store and traverse transactions.

+bdk_chain::tx_graph - Rust

Module bdk_chain::tx_graph

source ·
Expand description

Module for structures that store and traverse transactions.

TxGraph contains transactions and indexes them so you can easily traverse the graph of those transactions. TxGraph is monotone in that you can always insert a transaction – it does not care whether that transaction is in the current best chain or whether it conflicts with diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html index c54240842f..eb8148b7e8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html @@ -1,17 +1,17 @@ -CanonicalTx in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::CanonicalTx

source ·
pub struct CanonicalTx<'a, T, A> {
+CanonicalTx in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::CanonicalTx

source ·
pub struct CanonicalTx<'a, T, A> {
     pub chain_position: ChainPosition<&'a A>,
     pub tx_node: TxNode<'a, T, A>,
 }
Expand description

A transaction that is included in the chain, or is still in mempool.

Fields§

§chain_position: ChainPosition<&'a A>

How the transaction is observed as (confirmed or unconfirmed).

§tx_node: TxNode<'a, T, A>

The transaction node (as part of the graph).

-

Trait Implementations§

source§

impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>

source§

fn clone(&self) -> CanonicalTx<'a, T, A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a, T: Ord, A: Ord> Ord for CanonicalTx<'a, T, A>

source§

fn cmp(&self, other: &CanonicalTx<'a, T, A>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where +

Trait Implementations§

source§

impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>

source§

fn clone(&self) -> CanonicalTx<'a, T, A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a, T: Ord, A: Ord> Ord for CanonicalTx<'a, T, A>

source§

fn cmp(&self, other: &CanonicalTx<'a, T, A>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl<'a, T: PartialEq, A: PartialEq> PartialEq for CanonicalTx<'a, T, A>

source§

fn eq(&self, other: &CanonicalTx<'a, T, A>) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
Restrict a value to a certain interval. Read more
source§

impl<'a, T: PartialEq, A: PartialEq> PartialEq for CanonicalTx<'a, T, A>

source§

fn eq(&self, other: &CanonicalTx<'a, T, A>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for CanonicalTx<'a, T, A>

source§

fn partial_cmp(&self, other: &CanonicalTx<'a, T, A>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
source§

impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for CanonicalTx<'a, T, A>

source§

fn partial_cmp(&self, other: &CanonicalTx<'a, T, A>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>

source§

impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>

Auto Trait Implementations§

§

impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>
where +operator. Read more

source§

impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>

source§

impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>

Auto Trait Implementations§

§

impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>
where T: Freeze,

§

impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>

§

impl<'a, T, A> Send for CanonicalTx<'a, T, A>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html index 377d9dea3d..913161581b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html @@ -1,4 +1,4 @@ -ChangeSet in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::ChangeSet

source ·
pub struct ChangeSet<A = ()> {
+ChangeSet in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::ChangeSet

source ·
pub struct ChangeSet<A = ()> {
     pub txs: BTreeSet<Arc<Transaction>>,
     pub txouts: BTreeMap<OutPoint, TxOut>,
     pub anchors: BTreeSet<(A, Txid)>,
@@ -11,22 +11,22 @@ not removed.

§txouts: BTreeMap<OutPoint, TxOut>

Added txouts.

§anchors: BTreeSet<(A, Txid)>

Added anchors.

§last_seen: BTreeMap<Txid, u64>

Added last-seen unix timestamps of transactions.

-

Implementations§

source§

impl<A> ChangeSet<A>

source

pub fn txouts(&self) -> impl Iterator<Item = (OutPoint, &TxOut)>

Iterates over all outpoints contained within ChangeSet.

-
source

pub fn anchor_heights(&self) -> impl Iterator<Item = u32> + '_
where +

Implementations§

source§

impl<A> ChangeSet<A>

source

pub fn txouts(&self) -> impl Iterator<Item = (OutPoint, &TxOut)>

Iterates over all outpoints contained within ChangeSet.

+
source

pub fn anchor_heights(&self) -> impl Iterator<Item = u32> + '_
where A: Anchor,

Iterates over the heights of that the new transaction anchors in this changeset.

This is useful if you want to find which heights you need to fetch data about in order to confirm or exclude these anchors.

-
source§

impl<A: Ord> ChangeSet<A>

source

pub fn map_anchors<A2: Ord, F>(self, f: F) -> ChangeSet<A2>
where +

source§

impl<A: Ord> ChangeSet<A>

source

pub fn map_anchors<A2: Ord, F>(self, f: F) -> ChangeSet<A2>
where F: FnMut(A) -> A2,

Transform the ChangeSet to have Anchors of another type.

This takes in a closure of signature FnMut(A) -> A2 which is called for each Anchor to transform it.

-

Trait Implementations§

source§

impl<A: Ord> Append for ChangeSet<A>

source§

fn append(&mut self, other: Self)

Append another object of the same type onto self.
source§

fn is_empty(&self) -> bool

Returns whether the structure is considered empty.
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<A: Clone> Clone for ChangeSet<A>

source§

fn clone(&self) -> ChangeSet<A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<A: Debug> Debug for ChangeSet<A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<A> Default for ChangeSet<A>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, A> Deserialize<'de> for ChangeSet<A>
where - A: Ord + Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

source§

fn from(graph: ChangeSet<A>) -> Self

Converts to this type from the input type.
source§

impl<A: PartialEq> PartialEq for ChangeSet<A>

source§

fn eq(&self, other: &ChangeSet<A>) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl<A: Ord> Append for ChangeSet<A>

source§

fn append(&mut self, other: Self)

Append another object of the same type onto self.
source§

fn is_empty(&self) -> bool

Returns whether the structure is considered empty.
source§

fn take(&mut self) -> Option<Self>

Take the value, replacing it with the default value.
source§

impl<A: Clone> Clone for ChangeSet<A>

source§

fn clone(&self) -> ChangeSet<A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<A: Debug> Debug for ChangeSet<A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<A> Default for ChangeSet<A>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, A> Deserialize<'de> for ChangeSet<A>
where + A: Ord + Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

source§

fn from(graph: ChangeSet<A>) -> Self

Converts to this type from the input type.
source§

impl<A: PartialEq> PartialEq for ChangeSet<A>

source§

fn eq(&self, other: &ChangeSet<A>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<A> Serialize for ChangeSet<A>
where - A: Ord + Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<A> StructuralPartialEq for ChangeSet<A>

Auto Trait Implementations§

§

impl<A> Freeze for ChangeSet<A>

§

impl<A> RefUnwindSafe for ChangeSet<A>
where +sufficient, and should not be overridden without very good reason.

source§

impl<A> Serialize for ChangeSet<A>
where + A: Ord + Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<A> StructuralPartialEq for ChangeSet<A>

Auto Trait Implementations§

§

impl<A> Freeze for ChangeSet<A>

§

impl<A> RefUnwindSafe for ChangeSet<A>
where A: RefUnwindSafe,

§

impl<A> Send for ChangeSet<A>
where A: Send,

§

impl<A> Sync for ChangeSet<A>
where A: Sync,

§

impl<A> Unpin for ChangeSet<A>

§

impl<A> UnwindSafe for ChangeSet<A>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html index f580a680ac..69d5a9d769 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html @@ -1,8 +1,8 @@ -TxAncestors in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::TxAncestors

source ·
pub struct TxAncestors<'g, A, F> { /* private fields */ }
Expand description

An iterator that traverses ancestors of a given root transaction.

+TxAncestors in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::TxAncestors

source ·
pub struct TxAncestors<'g, A, F> { /* private fields */ }
Expand description

An iterator that traverses ancestors of a given root transaction.

The iterator excludes partial transactions.

Returned by the walk_ancestors method of TxGraph.

-

Trait Implementations§

source§

impl<'g, A, F, O> Iterator for TxAncestors<'g, A, F>
where - F: FnMut(usize, Arc<Transaction>) -> Option<O>,

§

type Item = O

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( +

Trait Implementations§

source§

impl<'g, A, F, O> Iterator for TxAncestors<'g, A, F>
where + F: FnMut(usize, Arc<Transaction>) -> Option<O>,

§

type Item = O

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
1.0.0 · source§

fn count(self) -> usize
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html index 0cad2538dc..0c3284c487 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html @@ -1,7 +1,7 @@ -TxDescendants in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::TxDescendants

source ·
pub struct TxDescendants<'g, A, F> { /* private fields */ }
Expand description

An iterator that traverses transaction descendants.

+TxDescendants in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::TxDescendants

source ·
pub struct TxDescendants<'g, A, F> { /* private fields */ }
Expand description

An iterator that traverses transaction descendants.

Returned by the walk_descendants method of TxGraph.

-

Trait Implementations§

source§

impl<'g, A, F, O> Iterator for TxDescendants<'g, A, F>
where - F: FnMut(usize, Txid) -> Option<O>,

§

type Item = O

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( +

Trait Implementations§

source§

impl<'g, A, F, O> Iterator for TxDescendants<'g, A, F>
where + F: FnMut(usize, Txid) -> Option<O>,

§

type Item = O

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
1.0.0 · source§

fn count(self) -> usize
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html index 718742f2d1..34080126a2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html @@ -1,21 +1,21 @@ -TxGraph in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::TxGraph

source ·
pub struct TxGraph<A = ()> { /* private fields */ }
Expand description

A graph of transactions and spends.

+TxGraph in bdk_chain::tx_graph - Rust

Struct bdk_chain::tx_graph::TxGraph

source ·
pub struct TxGraph<A = ()> { /* private fields */ }
Expand description

A graph of transactions and spends.

See the module-level documentation for more.

-

Implementations§

source§

impl<A> TxGraph<A>

source

pub fn all_txouts(&self) -> impl Iterator<Item = (OutPoint, &TxOut)>

Iterate over all tx outputs known by TxGraph.

+

Implementations§

source§

impl<A> TxGraph<A>

source

pub fn all_txouts(&self) -> impl Iterator<Item = (OutPoint, &TxOut)>

Iterate over all tx outputs known by TxGraph.

This includes txouts of both full transactions as well as floating transactions.

-
source

pub fn floating_txouts(&self) -> impl Iterator<Item = (OutPoint, &TxOut)>

Iterate over floating txouts known by TxGraph.

+
source

pub fn floating_txouts(&self) -> impl Iterator<Item = (OutPoint, &TxOut)>

Iterate over floating txouts known by TxGraph.

Floating txouts are txouts that do not have the residing full transaction contained in the graph.

-
source

pub fn full_txs(&self) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, A>>

Iterate over all full transactions in the graph.

-
source

pub fn txs_with_no_anchor_or_last_seen( +

source

pub fn full_txs(&self) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, A>>

Iterate over all full transactions in the graph.

+
source

pub fn txs_with_no_anchor_or_last_seen( &self ) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, A>>

Iterate over graph transactions with no anchors or last-seen.

-
source

pub fn get_tx(&self, txid: Txid) -> Option<Arc<Transaction>>

Get a transaction by txid. This only returns Some for full transactions.

+
source

pub fn get_tx(&self, txid: Txid) -> Option<Arc<Transaction>>

Get a transaction by txid. This only returns Some for full transactions.

Refer to get_txout for getting a specific [TxOut].

-
source

pub fn get_tx_node(&self, txid: Txid) -> Option<TxNode<'_, Arc<Transaction>, A>>

Get a transaction node by txid. This only returns Some for full transactions.

-
source

pub fn get_txout(&self, outpoint: OutPoint) -> Option<&TxOut>

Obtains a single tx output (if any) at the specified outpoint.

-
source

pub fn tx_outputs(&self, txid: Txid) -> Option<BTreeMap<u32, &TxOut>>

Returns known outputs of a given txid.

+
source

pub fn get_tx_node(&self, txid: Txid) -> Option<TxNode<'_, Arc<Transaction>, A>>

Get a transaction node by txid. This only returns Some for full transactions.

+
source

pub fn get_txout(&self, outpoint: OutPoint) -> Option<&TxOut>

Obtains a single tx output (if any) at the specified outpoint.

+
source

pub fn tx_outputs(&self, txid: Txid) -> Option<BTreeMap<u32, &TxOut>>

Returns known outputs of a given txid.

Returns a BTreeMap of vout to output of the provided txid.

-
source

pub fn calculate_fee( +

source

pub fn calculate_fee( &self, tx: &Transaction ) -> Result<Amount, CalculateFeeError>

Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction. @@ -25,10 +25,10 @@ the full transactions or individual txouts).

first manually insert the foreign TxOuts into the tx graph using the insert_txout function. Only insert TxOuts you trust the values for!

Note tx does not have to be in the graph for this to work.

-
source

pub fn outspends(&self, outpoint: OutPoint) -> &HashSet<Txid>

The transactions spending from this output.

+
source

pub fn outspends(&self, outpoint: OutPoint) -> &HashSet<Txid>

The transactions spending from this output.

TxGraph allows conflicting transactions within the graph. Obviously the transactions in the returned set will never be in the same active-chain.

-
source

pub fn tx_spends( +

source

pub fn tx_spends( &self, txid: Txid ) -> impl DoubleEndedIterator<Item = (u32, &HashSet<Txid>)> + '_

Iterates over the transactions spending from txid.

@@ -37,7 +37,7 @@ the returned set will never be in the same active-chain.

  • vout is the provided txid’s outpoint that is being spent
  • txid-set is the set of txids spending the vout.
  • -

    source§

    impl<A: Clone + Ord> TxGraph<A>

    source

    pub fn walk_ancestors<'g, T, F, O>( +

    source§

    impl<A: Clone + Ord> TxGraph<A>

    source

    pub fn walk_ancestors<'g, T, F, O>( &'g self, tx: T, walk_map: F @@ -54,7 +54,7 @@ the Transaction is spending an output of the ancestor_tx

    The supplied closure returns an Option<T>, allowing the caller to map each Transaction it visits and decide whether to visit ancestors.

    -

    source

    pub fn walk_descendants<'g, F, O>( +

    source

    pub fn walk_descendants<'g, F, O>( &'g self, txid: Txid, walk_map: F @@ -68,7 +68,7 @@ descendant is spending an output of the starting txid then de

    The supplied closure returns an Option<T>, allowing the caller to map each node it visits and decide whether to visit descendants.

    -

    source§

    impl<A> TxGraph<A>

    source

    pub fn walk_conflicts<'g, F, O>( +

    source§

    impl<A> TxGraph<A>

    source

    pub fn walk_conflicts<'g, F, O>( &'g self, tx: &'g Transaction, walk_map: F @@ -76,7 +76,7 @@ and decide whether to visit descendants.

    F: FnMut(usize, Txid) -> Option<O> + 'g,

    Creates an iterator that both filters and maps conflicting transactions (this includes descendants of directly-conflicting transactions, which are also considered conflicts).

    Refer to Self::walk_descendants for walk_map usage.

    -

    source

    pub fn direct_conflicts<'g>( +

    source

    pub fn direct_conflicts<'g>( &'g self, tx: &'g Transaction ) -> impl Iterator<Item = (usize, Txid)> + '_

    Given a transaction, return an iterator of txids that directly conflict with the given @@ -87,35 +87,35 @@ transaction’s vin (in which it conflicts).

  • descendants of conflicting transactions (which are technically also conflicting)
  • transactions conflicting with the given transaction’s ancestors
  • -
    source

    pub fn all_anchors(&self) -> &BTreeSet<(A, Txid)>

    Get all transaction anchors known by TxGraph.

    -
    source

    pub fn is_empty(&self) -> bool

    Whether the graph has any transactions or outputs in it.

    -
    source§

    impl<A: Clone + Ord> TxGraph<A>

    source

    pub fn map_anchors<A2: Clone + Ord, F>(self, f: F) -> TxGraph<A2>
    where +

    source

    pub fn all_anchors(&self) -> &BTreeSet<(A, Txid)>

    Get all transaction anchors known by TxGraph.

    +
    source

    pub fn is_empty(&self) -> bool

    Whether the graph has any transactions or outputs in it.

    +
    source§

    impl<A: Clone + Ord> TxGraph<A>

    source

    pub fn map_anchors<A2: Clone + Ord, F>(self, f: F) -> TxGraph<A2>
    where F: FnMut(A) -> A2,

    Transform the TxGraph to have Anchors of another type.

    This takes in a closure of signature FnMut(A) -> A2 which is called for each Anchor to transform it.

    -
    source

    pub fn new(txs: impl IntoIterator<Item = Transaction>) -> Self

    Construct a new TxGraph from a list of transactions.

    -
    source

    pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut) -> ChangeSet<A>

    Inserts the given [TxOut] at [OutPoint].

    +
    source

    pub fn new(txs: impl IntoIterator<Item = Transaction>) -> Self

    Construct a new TxGraph from a list of transactions.

    +
    source

    pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut) -> ChangeSet<A>

    Inserts the given [TxOut] at [OutPoint].

    Inserting floating txouts are useful for determining fee/feerate of transactions we care about.

    The ChangeSet result will be empty if the outpoint (or a full transaction containing the outpoint) already existed in self.

    -
    source

    pub fn insert_tx<T: Into<Arc<Transaction>>>(&mut self, tx: T) -> ChangeSet<A>

    Inserts the given transaction into TxGraph.

    +
    source

    pub fn insert_tx<T: Into<Arc<Transaction>>>(&mut self, tx: T) -> ChangeSet<A>

    Inserts the given transaction into TxGraph.

    The ChangeSet returned will be empty if tx already exists.

    -
    source

    pub fn batch_insert_unconfirmed( +

    source

    pub fn batch_insert_unconfirmed( &mut self, txs: impl IntoIterator<Item = (Transaction, u64)> ) -> ChangeSet<A>

    Batch insert unconfirmed transactions.

    Items of txs are tuples containing the transaction and a last seen timestamp. The last seen communicates when the transaction is last seen in mempool which is used for conflict-resolution (refer to TxGraph::insert_seen_at for details).

    -
    source

    pub fn insert_anchor(&mut self, txid: Txid, anchor: A) -> ChangeSet<A>

    Inserts the given anchor into TxGraph.

    +
    source

    pub fn insert_anchor(&mut self, txid: Txid, anchor: A) -> ChangeSet<A>

    Inserts the given anchor into TxGraph.

    The ChangeSet returned will be empty if graph already knows that txid exists in anchor.

    -
    source

    pub fn insert_seen_at(&mut self, txid: Txid, seen_at: u64) -> ChangeSet<A>

    Inserts the given seen_at for txid into TxGraph.

    +
    source

    pub fn insert_seen_at(&mut self, txid: Txid, seen_at: u64) -> ChangeSet<A>

    Inserts the given seen_at for txid into TxGraph.

    Note that TxGraph only keeps track of the latest seen_at. To batch update all unconfirmed transactions with the latest seen_at, see update_last_seen_unconfirmed.

    -
    source

    pub fn update_last_seen_unconfirmed(&mut self, seen_at: u64) -> ChangeSet<A>

    Update the last seen time for all unconfirmed transactions.

    +
    source

    pub fn update_last_seen_unconfirmed(&mut self, seen_at: u64) -> ChangeSet<A>

    Update the last seen time for all unconfirmed transactions.

    This method updates the last seen unconfirmed time for this TxGraph by inserting the given seen_at for every transaction not yet anchored to a confirmed block, and returns the ChangeSet after applying all updates to self.

    @@ -137,13 +137,13 @@ we may want to update a transaction’s last seen time repeatedly between blocks

    Note that TxGraph only keeps track of the latest seen_at, so the given time must by strictly greater than what is currently stored for a transaction to have an effect. To insert a last seen time for a single txid, see insert_seen_at.

    -
    source

    pub fn apply_update(&mut self, update: TxGraph<A>) -> ChangeSet<A>

    Extends this graph with another so that self becomes the union of the two sets of +

    source

    pub fn apply_update(&mut self, update: TxGraph<A>) -> ChangeSet<A>

    Extends this graph with another so that self becomes the union of the two sets of transactions.

    The returned ChangeSet is the set difference between update and self (transactions that exist in update but not in self).

    -
    source

    pub fn initial_changeset(&self) -> ChangeSet<A>

    Determines the ChangeSet between self and an empty TxGraph.

    -
    source

    pub fn apply_changeset(&mut self, changeset: ChangeSet<A>)

    Applies ChangeSet to TxGraph.

    -
    source§

    impl<A: Anchor> TxGraph<A>

    source

    pub fn initial_changeset(&self) -> ChangeSet<A>

    Determines the ChangeSet between self and an empty TxGraph.

    +
    source

    pub fn apply_changeset(&mut self, changeset: ChangeSet<A>)

    Applies ChangeSet to TxGraph.

    +
    source§

    impl<A: Anchor> TxGraph<A>

    source

    pub fn try_get_chain_position<C: ChainOracle>( &self, chain: &C, chain_tip: BlockId, @@ -166,14 +166,14 @@ lexicographical order) is evicted.

    §Error

    An error will occur if the ChainOracle implementation (chain) fails. If the ChainOracle is infallible, get_chain_position can be used instead.

    -
    source

    pub fn get_chain_position<C: ChainOracle<Error = Infallible>>( +

    source

    pub fn get_chain_position<C: ChainOracle<Error = Infallible>>( &self, chain: &C, chain_tip: BlockId, txid: Txid ) -> Option<ChainPosition<&A>>

    Get the position of the transaction in chain with tip chain_tip.

    This is the infallible version of try_get_chain_position.

    -
    source

    pub fn try_get_chain_spend<C: ChainOracle>( +

    source

    pub fn try_get_chain_spend<C: ChainOracle>( &self, chain: &C, chain_tip: BlockId, @@ -184,7 +184,7 @@ the chain of chain_tip.

    §Error

    An error will occur only if the ChainOracle implementation (chain) fails.

    If the ChainOracle is infallible, get_chain_spend can be used instead.

    -
    source

    pub fn get_chain_spend<C: ChainOracle<Error = Infallible>>( +

    source

    pub fn get_chain_spend<C: ChainOracle<Error = Infallible>>( &self, chain: &C, static_block: BlockId, @@ -192,7 +192,7 @@ the chain of chain_tip.

    ) -> Option<(ChainPosition<&A>, Txid)>

    Get the txid of the spending transaction and where the spending transaction is observed in the chain of chain_tip.

    This is the infallible version of try_get_chain_spend

    -
    source

    pub fn try_list_canonical_txs<'a, C: ChainOracle + 'a>( +

    source

    pub fn try_list_canonical_txs<'a, C: ChainOracle + 'a>( &'a self, chain: &'a C, chain_tip: BlockId @@ -203,13 +203,13 @@ observed in-chain, and the ChainOracle implementation (chain) fails, an error will be returned with the returned item.

    If the ChainOracle is infallible, list_canonical_txs can be used instead.

    -

    source

    pub fn list_canonical_txs<'a, C: ChainOracle + 'a>( +

    source

    pub fn list_canonical_txs<'a, C: ChainOracle + 'a>( &'a self, chain: &'a C, chain_tip: BlockId ) -> impl Iterator<Item = CanonicalTx<'a, Arc<Transaction>, A>>

    List graph transactions that are in chain with chain_tip.

    This is the infallible version of try_list_canonical_txs.

    -
    source

    pub fn try_filter_chain_txouts<'a, C: ChainOracle + 'a, OI: Clone + 'a>( +

    source

    pub fn try_filter_chain_txouts<'a, C: ChainOracle + 'a, OI: Clone + 'a>( &'a self, chain: &'a C, chain_tip: BlockId, @@ -226,7 +226,7 @@ are ignored.

    fails.

    If the ChainOracle implementation is infallible, filter_chain_txouts can be used instead.

    -

    source

    pub fn filter_chain_txouts<'a, C: ChainOracle<Error = Infallible> + 'a, OI: Clone + 'a>( +

    source

    pub fn filter_chain_txouts<'a, C: ChainOracle<Error = Infallible> + 'a, OI: Clone + 'a>( &'a self, chain: &'a C, chain_tip: BlockId, @@ -234,7 +234,7 @@ instead.

    ) -> impl Iterator<Item = (OI, FullTxOut<A>)> + 'a

    Get a filtered list of outputs from the given outpoints that are in chain with chain_tip.

    This is the infallible version of try_filter_chain_txouts.

    -
    source

    pub fn try_filter_chain_unspents<'a, C: ChainOracle + 'a, OI: Clone + 'a>( +

    source

    pub fn try_filter_chain_unspents<'a, C: ChainOracle + 'a, OI: Clone + 'a>( &'a self, chain: &'a C, chain_tip: BlockId, @@ -250,7 +250,7 @@ instead.

    fails.

    If the ChainOracle implementation is infallible, filter_chain_unspents can be used instead.

    -

    source

    pub fn filter_chain_unspents<'a, C: ChainOracle<Error = Infallible> + 'a, OI: Clone + 'a>( +

    source

    pub fn filter_chain_unspents<'a, C: ChainOracle<Error = Infallible> + 'a, OI: Clone + 'a>( &'a self, chain: &'a C, chain_tip: BlockId, @@ -258,30 +258,30 @@ instead.

    ) -> impl Iterator<Item = (OI, FullTxOut<A>)> + 'a

    Get a filtered list of unspent outputs (UTXOs) from the given outpoints that are in chain with chain_tip.

    This is the infallible version of try_filter_chain_unspents.

    -
    source

    pub fn try_balance<C: ChainOracle, OI: Clone>( +

    source

    pub fn try_balance<C: ChainOracle, OI: Clone>( &self, chain: &C, chain_tip: BlockId, outpoints: impl IntoIterator<Item = (OI, OutPoint)>, trust_predicate: impl FnMut(&OI, &Script) -> bool -) -> Result<Balance, C::Error>

    Get the total balance of outpoints that are in chain of chain_tip.

    +) -> Result<Balance, C::Error>

    Get the total balance of outpoints that are in chain of chain_tip.

    The output of trust_predicate should return true for scripts that we trust.

    outpoints is a list of outpoints we are interested in, coupled with an outpoint identifier (OI) for convenience. If OI is not necessary, the caller can use (), or Iterator::enumerate over a list of [OutPoint]s.

    If the provided ChainOracle implementation (chain) is infallible, balance can be used instead.

    -
    source

    pub fn balance<C: ChainOracle<Error = Infallible>, OI: Clone>( +

    source

    pub fn balance<C: ChainOracle<Error = Infallible>, OI: Clone>( &self, chain: &C, chain_tip: BlockId, outpoints: impl IntoIterator<Item = (OI, OutPoint)>, trust_predicate: impl FnMut(&OI, &Script) -> bool -) -> Balance

    Get the total balance of outpoints that are in chain of chain_tip.

    +) -> Balance

    Get the total balance of outpoints that are in chain of chain_tip.

    This is the infallible version of try_balance.

    -

    Trait Implementations§

    source§

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<A> AsRef<TxGraph<A>> for TxGraph<A>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<A: Clone> Clone for TxGraph<A>

    source§

    fn clone(&self) -> TxGraph<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Debug> Debug for TxGraph<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A> Default for TxGraph<A>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<A: PartialEq> PartialEq for TxGraph<A>

    source§

    fn eq(&self, other: &TxGraph<A>) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<A> AsRef<TxGraph<A>> for TxGraph<A>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<A: Clone> Clone for TxGraph<A>

    source§

    fn clone(&self) -> TxGraph<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Debug> Debug for TxGraph<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A> Default for TxGraph<A>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<A: PartialEq> PartialEq for TxGraph<A>

    source§

    fn eq(&self, other: &TxGraph<A>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<A> StructuralPartialEq for TxGraph<A>

    Auto Trait Implementations§

    §

    impl<A> Freeze for TxGraph<A>

    §

    impl<A> RefUnwindSafe for TxGraph<A>
    where +sufficient, and should not be overridden without very good reason.

    source§

    impl<A> StructuralPartialEq for TxGraph<A>

    Auto Trait Implementations§

    §

    impl<A> Freeze for TxGraph<A>

    §

    impl<A> RefUnwindSafe for TxGraph<A>
    where A: RefUnwindSafe,

    §

    impl<A> Send for TxGraph<A>
    where A: Send,

    §

    impl<A> Sync for TxGraph<A>
    where A: Sync,

    §

    impl<A> Unpin for TxGraph<A>

    §

    impl<A> UnwindSafe for TxGraph<A>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html index 154d76cce0..a9ca664ee7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html @@ -1,4 +1,4 @@ -TxNode in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxNode

    source ·
    pub struct TxNode<'a, T, A> {
    +TxNode in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxNode

    source ·
    pub struct TxNode<'a, T, A> {
         pub txid: Txid,
         pub tx: T,
         pub anchors: &'a BTreeSet<A>,
    @@ -8,14 +8,14 @@
     
    §tx: T

    A partial or full representation of the transaction.

    §anchors: &'a BTreeSet<A>

    The blocks that the transaction is “anchored” in.

    §last_seen_unconfirmed: Option<u64>

    The last-seen unix timestamp of the transaction as unconfirmed.

    -

    Trait Implementations§

    source§

    impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>

    source§

    fn clone(&self) -> TxNode<'a, T, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, T, A> Deref for TxNode<'a, T, A>

    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<'a, T: Ord, A: Ord> Ord for TxNode<'a, T, A>

    source§

    fn cmp(&self, other: &TxNode<'a, T, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +

    Trait Implementations§

    source§

    impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>

    source§

    fn clone(&self) -> TxNode<'a, T, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, T, A> Deref for TxNode<'a, T, A>

    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<'a, T: Ord, A: Ord> Ord for TxNode<'a, T, A>

    source§

    fn cmp(&self, other: &TxNode<'a, T, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl<'a, T: PartialEq, A: PartialEq> PartialEq for TxNode<'a, T, A>

    source§

    fn eq(&self, other: &TxNode<'a, T, A>) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl<'a, T: PartialEq, A: PartialEq> PartialEq for TxNode<'a, T, A>

    source§

    fn eq(&self, other: &TxNode<'a, T, A>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for TxNode<'a, T, A>

    source§

    fn partial_cmp(&self, other: &TxNode<'a, T, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for TxNode<'a, T, A>

    source§

    fn partial_cmp(&self, other: &TxNode<'a, T, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>

    source§

    impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>

    Auto Trait Implementations§

    §

    impl<'a, T, A> Freeze for TxNode<'a, T, A>
    where +operator. Read more

    source§

    impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>

    source§

    impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>

    Auto Trait Implementations§

    §

    impl<'a, T, A> Freeze for TxNode<'a, T, A>
    where T: Freeze,

    §

    impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>

    §

    impl<'a, T, A> Send for TxNode<'a, T, A>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html new file mode 100644 index 0000000000..74c4831fd8 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html @@ -0,0 +1,2 @@ +Indexed in bdk_chain - Rust

    Type Alias bdk_chain::Indexed

    source ·
    pub type Indexed<T> = (u32, T);
    Expand description

    A tuple of keychain index and T representing the indexed value.

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html new file mode 100644 index 0000000000..226a092f0a --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html @@ -0,0 +1,2 @@ +KeychainIndexed in bdk_chain - Rust

    Type Alias bdk_chain::KeychainIndexed

    source ·
    pub type KeychainIndexed<K, T> = ((K, u32), T);
    Expand description

    A tuple of keychain K, derivation index (u32) and a T associated with them.

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html index 09c3960e57..868f8fed17 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html @@ -1,4 +1,4 @@ -bdk_electrum - Rust

    Crate bdk_electrum

    source ·
    Expand description

    This crate is used for updating structures of bdk_chain with data from an Electrum server.

    +bdk_electrum - Rust

    Crate bdk_electrum

    source ·
    Expand description

    This crate is used for updating structures of [bdk_chain] with data from an Electrum server.

    The two primary methods are BdkElectrumClient::sync and BdkElectrumClient::full_scan. In most cases BdkElectrumClient::sync is used to sync the transaction histories of scripts that the application cares about, for example the scripts for all the receive addresses of a Wallet’s keychain that it @@ -6,7 +6,7 @@ has shown a user. bdk_chain.

    +[bdk_chain].

    Refer to example_electrum for a complete example.

    -

    Re-exports§

    Structs§

    • Wrapper around an [electrum_client::ElectrumApi] which includes an internal in-memory +

    Re-exports§

    • pub use bdk_chain;
    • pub use electrum_client;

    Structs§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.BdkElectrumClient.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.BdkElectrumClient.html index 3f8de38535..67a8f827fd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.BdkElectrumClient.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.BdkElectrumClient.html @@ -5,7 +5,7 @@ transaction cache to avoid re-fetching already downloaded transactions.

    Fields§

    §inner: E

    The internal [electrum_client::ElectrumApi]

    Implementations§

    source§

    impl<E: ElectrumApi> BdkElectrumClient<E>

    source

    pub fn new(client: E) -> Self

    Creates a new bdk client from a [electrum_client::ElectrumApi]

    -
    source

    pub fn populate_tx_cache<A>(&self, tx_graph: impl AsRef<TxGraph<A>>)

    Inserts transactions into the transaction cache so that the client will not fetch these +

    source

    pub fn populate_tx_cache<A>(&self, tx_graph: impl AsRef<TxGraph<A>>)

    Inserts transactions into the transaction cache so that the client will not fetch these transactions.

    source

    pub fn fetch_tx(&self, txid: Txid) -> Result<Arc<Transaction>, Error>

    Fetch transaction of given txid.

    If it hits the cache it will return the cached version and avoid making the request.

    @@ -13,15 +13,15 @@ transactions.

    This is a re-export of [ElectrumApi::transaction_broadcast].

    source

    pub fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, batch_size: usize, fetch_prev_txouts: bool ) -> Result<ElectrumFullScanResult<K>, Error>

    Full scan the keychain scripts specified with the blockchain (via an Electrum client) and -returns updates for bdk_chain data structures.

    +returns updates for [bdk_chain] data structures.

    • request: struct with data required to perform a spk-based blockchain client full scan, -see FullScanRequest
    • +see [FullScanRequest]
    • stop_gap: the full scan for each keychain stops after a gap of script pubkeys with no associated transactions
    • batch_size: specifies the max number of script pubkeys to request for in a single batch @@ -30,14 +30,14 @@ request
    source

    pub fn sync( &self, - request: SyncRequest, + request: SyncRequest, batch_size: usize, fetch_prev_txouts: bool ) -> Result<ElectrumSyncResult, Error>

    Sync a set of scripts with the blockchain (via an Electrum client) for the data specified -and returns updates for bdk_chain data structures.

    +and returns updates for [bdk_chain] data structures.

    source

    pub fn with_confirmation_time_height_anchor( self, client: &BdkElectrumClient<impl ElectrumApi> -) -> Result<FullScanResult<K, ConfirmationTimeHeightAnchor>, Error>

    Return FullScanResult with ConfirmationTimeHeightAnchor.

    +) -> Result<FullScanResult<K, ConfirmationTimeHeightAnchor>, Error>

    Return [FullScanResult] with [ConfirmationTimeHeightAnchor].

    This requires additional calls to the Electrum server.

    Auto Trait Implementations§

    §

    impl<K> Freeze for ElectrumFullScanResult<K>

    §

    impl<K> RefUnwindSafe for ElectrumFullScanResult<K>
    where K: RefUnwindSafe,

    §

    impl<K> Send for ElectrumFullScanResult<K>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumSyncResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumSyncResult.html index f8c0816e59..68f8a694b3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumSyncResult.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumSyncResult.html @@ -1,13 +1,13 @@ ElectrumSyncResult in bdk_electrum - Rust

    Struct bdk_electrum::ElectrumSyncResult

    source ·
    pub struct ElectrumSyncResult(/* private fields */);
    Expand description

    The result of BdkElectrumClient::sync.

    -

    This can be transformed into a SyncResult with either ConfirmationHeightAnchor or -ConfirmationTimeHeightAnchor anchor types.

    +

    This can be transformed into a [SyncResult] with either [ConfirmationHeightAnchor] or +[ConfirmationTimeHeightAnchor] anchor types.

    Implementations§

    Return [SyncResult] with [ConfirmationHeightAnchor].

    source

    pub fn with_confirmation_time_height_anchor( self, client: &BdkElectrumClient<impl ElectrumApi> -) -> Result<SyncResult<ConfirmationTimeHeightAnchor>, Error>

    Return SyncResult with ConfirmationTimeHeightAnchor.

    +) -> Result<SyncResult<ConfirmationTimeHeightAnchor>, Error>

    Return [SyncResult] with [ConfirmationTimeHeightAnchor].

    This requires additional calls to the Electrum server.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html index b7455ce196..9812b27f27 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html @@ -27,6 +27,6 @@ has shown a user. bdk_chain -via a new TxGraph to be appended to any existing TxGraph data.

    +via a new TxGraph to be appended to any existing TxGraph data.

    Refer to example_esplora for a complete example.

    Re-exports§

    • pub use esplora_client;

    Traits§

    • Trait to extend the functionality of [esplora_client::AsyncClient].
    • Trait to extend the functionality of [esplora_client::BlockingClient].

    Type Aliases§

    • [esplora_client::Error]
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html index aa8da0c74e..1a88b72c1c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html @@ -2,35 +2,35 @@ // Required methods fn full_scan<'life0, 'async_trait, K>( &'life0 self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize - ) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>> where K: 'async_trait + Ord + Clone + Send, Self: 'async_trait, 'life0: 'async_trait; fn sync<'life0, 'async_trait>( &'life0 self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize - ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Trait to extend the functionality of [esplora_client::AsyncClient].

    Refer to crate-level documentation for more.

    Required Methods§

    source

    fn full_scan<'life0, 'async_trait, K>( &'life0 self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where K: 'async_trait + Ord + Clone + Send, Self: 'async_trait, 'life0: 'async_trait,

    Scan keychain scripts for transactions against Esplora, returning an update that can be applied to the receiving structures.

    • request: struct with data required to perform a spk-based blockchain client full scan, -see FullScanRequest
    • +see [FullScanRequest]

    The full scan for each keychain stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the max number of HTTP requests to @@ -46,30 +46,30 @@ and

    source

    fn sync<'life0, 'async_trait>( &'life0 self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where Self: 'async_trait, 'life0: 'async_trait,

    Sync a set of scripts with the blockchain (via an Esplora client) for the data -specified and return a TxGraph.

    +specified and return a [TxGraph].

    • request: struct with data required to perform a spk-based blockchain client sync, see -SyncRequest
    • +[SyncRequest]

    If the scripts to sync are unknown, such as when restoring or importing a keychain that may include scripts that have been used, use full_scan with the keychain.

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraAsyncExt for AsyncClient

    source§

    fn full_scan<'life0, 'async_trait, K>( &'life0 self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where K: 'async_trait + Ord + Clone + Send, Self: 'async_trait, 'life0: 'async_trait,

    source§

    fn sync<'life0, 'async_trait>( &'life0 self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where Self: 'async_trait, 'life0: 'async_trait,

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html index f6eff1c75d..ef6f96d2d4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html @@ -2,27 +2,27 @@ // Required methods fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize - ) -> Result<FullScanResult<K>, Error>; + ) -> Result<FullScanResult<K>, Error>; fn sync( &self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize - ) -> Result<SyncResult, Error>; + ) -> Result<SyncResult, Error>; }
    Expand description

    Trait to extend the functionality of [esplora_client::BlockingClient].

    Refer to crate-level documentation for more.

    Required Methods§

    source

    fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

    Scan keychain scripts for transactions against Esplora, returning an update that can be +) -> Result<FullScanResult<K>, Error>

    Scan keychain scripts for transactions against Esplora, returning an update that can be applied to the receiving structures.

    • request: struct with data required to perform a spk-based blockchain client full scan, -see FullScanRequest
    • +see [FullScanRequest]

    The full scan for each keychain stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the max number of HTTP requests to @@ -38,23 +38,23 @@ and

    source

    fn sync( &self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Result<SyncResult, Error>

    Sync a set of scripts with the blockchain (via an Esplora client) for the data -specified and return a TxGraph.

    +) -> Result<SyncResult, Error>

    Sync a set of scripts with the blockchain (via an Esplora client) for the data +specified and return a [TxGraph].

    • request: struct with data required to perform a spk-based blockchain client sync, see -SyncRequest
    • +[SyncRequest]

    If the scripts to sync are unknown, such as when restoring or importing a keychain that may include scripts that have been used, use full_scan with the keychain.

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraExt for BlockingClient

    source§

    fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

    source§

    fn sync( +) -> Result<FullScanResult<K>, Error>

    source§

    fn sync( &self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Result<SyncResult, Error>

    Implementors§

    \ No newline at end of file +) -> Result<SyncResult, Error>

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html index afb39d4d81..a1e19837e9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html @@ -1,7 +1,7 @@ Store in bdk_file_store - Rust

    Struct bdk_file_store::Store

    source ·
    pub struct Store<C>
    where C: Sync + Send,
    { /* private fields */ }
    Expand description

    Persists an append-only list of changesets (C) to a single file.

    Implementations§

    source§

    impl<C> Store<C>

    source

    pub fn create_new<P>(magic: &[u8], file_path: P) -> Result<Self, FileError>
    where + C: Append + Serialize + DeserializeOwned + Send + Sync,

    source

    pub fn create_new<P>(magic: &[u8], file_path: P) -> Result<Self, FileError>
    where P: AsRef<Path>,

    Create a new Store file in write-only mode; error if the file exists.

    magic is the prefixed bytes to write to the new file. This will be checked when opening the Store in the future with open.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html index c90f417e10..0767c51077 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html @@ -1,17 +1,17 @@ -Store in bdk_sqlite - Rust

    Struct bdk_sqlite::Store

    source ·
    pub struct Store<K, A> { /* private fields */ }
    Expand description

    Persists data in to a relational schema based SQLite database file.

    +Store in bdk_sqlite - Rust

    Struct bdk_sqlite::Store

    source ·
    pub struct Store<K, A> { /* private fields */ }
    Expand description

    Persists data in to a relational schema based SQLite database file.

    The changesets loaded or stored represent changes to keychain and blockchain data.

    -

    Implementations§

    source§

    impl<K, A> Store<K, A>
    where +

    Implementations§

    source§

    impl<K, A> Store<K, A>
    where K: Ord + for<'de> Deserialize<'de> + Serialize + Send, - A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,

    source

    pub fn new(conn: Connection) -> Result<Self, Error>

    Creates a new store from a [Connection].

    -
    source§

    impl<K, A> Store<K, A>
    where + A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,

    source

    pub fn new(conn: Connection) -> Result<Self, Error>

    Creates a new store from a [Connection].

    +
    source§

    impl<K, A> Store<K, A>
    where K: Ord + for<'de> Deserialize<'de> + Serialize + Send, - A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,

    Functions to read and write all CombinedChangeSet data.

    -
    source

    pub fn write( + A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,

    Functions to read and write all [CombinedChangeSet] data.

    +
    source

    pub fn write( &mut self, - changeset: &CombinedChangeSet<K, A> + changeset: &CombinedChangeSet<K, A> ) -> Result<(), Error>

    Write the given changeset atomically.

    -
    source

    pub fn read(&mut self) -> Result<Option<CombinedChangeSet<K, A>>, Error>

    Read the entire database and return the aggregate CombinedChangeSet.

    -

    Trait Implementations§

    source§

    impl<K, A> Debug for Store<K, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl<K, A> !Freeze for Store<K, A>

    §

    impl<K, A> RefUnwindSafe for Store<K, A>
    where +

    source

    pub fn read(&mut self) -> Result<Option<CombinedChangeSet<K, A>>, Error>

    Read the entire database and return the aggregate [CombinedChangeSet].

    +

    Trait Implementations§

    source§

    impl<K, A> Debug for Store<K, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl<K, A> !Freeze for Store<K, A>

    §

    impl<K, A> RefUnwindSafe for Store<K, A>

    §

    impl<K, A> Send for Store<K, A>
    where K: Send, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html index f62586d2a0..f28dbf51f4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html @@ -236,8 +236,8 @@ default(0x02) y-coordinate.

    This function will return an error if hardened derivation is attempted.

    Trait Implementations§

    §

    impl<Pk> Clone for Descriptor<Pk>
    where Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<Pk> Debug for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    source§

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable. -Panics if the descriptor wildcard is hardened.
    source§

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the + Pk: MiniscriptKey,
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    §

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable. +Panics if the descriptor wildcard is hardened.
    §

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the descriptor at index 0.
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where Pk: FromStrKey,

    §

    fn deserialize<D>( deserializer: D diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html index b9f0e66349..83d163d6f5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html @@ -46,7 +46,7 @@ that the Wallet can use to update its view of the chain.

  • example-crates/wallet_rpc
  • §Persistence

    -

    To persist Wallet state data use a data store crate that reads and writes bdk_chain::CombinedChangeSet.

    +

    To persist Wallet state data use a data store crate that reads and writes [bdk_chain::CombinedChangeSet].

    Implementations

    • bdk_file_store: Stores wallet changes in a simple flat file.
    • @@ -178,4 +178,4 @@ that the Wallet can use to update its view of the chain.

      submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

      -

    Re-exports§

    Modules§

    Macros§

    • Macro to write full descriptors with code
    • Macro to write descriptor fragments with code

    Structs§

    Enums§

    Functions§

    • Get the version of BDK at runtime
    \ No newline at end of file +

    Re-exports§

    • pub extern crate bitcoin;
    • pub extern crate miniscript;
    • pub use descriptor::template;
    • pub use descriptor::HdKeyPaths;
    • pub use wallet::signer;
    • pub use wallet::signer::SignOptions;
    • pub use wallet::tx_builder::TxBuilder;
    • pub use wallet::Wallet;
    • pub use bdk_chain as chain;

    Modules§

    Macros§

    • Macro to write full descriptors with code
    • Macro to write descriptor fragments with code

    Structs§

    Enums§

    Functions§

    • Get the version of BDK at runtime
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html index a7595549a9..47c0975dfb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html @@ -4,14 +4,14 @@ pub keychain: KeychainKind, pub is_spent: bool, pub derivation_index: u32, - pub confirmation_time: ConfirmationTime, + pub confirmation_time: ConfirmationTime, }
    Expand description

    An unspent output owned by a Wallet.

    Fields§

    §outpoint: OutPoint

    Reference to a transaction output

    §txout: TxOut

    Transaction output

    §keychain: KeychainKind

    Type of keychain

    §is_spent: bool

    Whether this UTXO is spent or not

    §derivation_index: u32

    The derivation index for the script pubkey in the wallet

    -
    §confirmation_time: ConfirmationTime

    The confirmation time for transaction containing this utxo

    +
    §confirmation_time: ConfirmationTime

    The confirmation time for transaction containing this utxo

    Trait Implementations§

    source§

    impl Clone for LocalOutput

    source§

    fn clone(&self) -> LocalOutput

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LocalOutput

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LocalOutput

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for LocalOutput

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html index 1fb3f851aa..5b85aa51dc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html @@ -1,11 +1,11 @@ ApplyBlockError in bdk_wallet::wallet - Rust

    Enum bdk_wallet::wallet::ApplyBlockError

    source ·
    pub enum ApplyBlockError {
    -    CannotConnect(CannotConnectError),
    +    CannotConnect(CannotConnectError),
         UnexpectedConnectedToHash {
             connected_to_hash: BlockHash,
             expected_hash: BlockHash,
         },
     }
    Expand description

    An error that may occur when applying a block to Wallet.

    -

    Variants§

    §

    CannotConnect(CannotConnectError)

    Occurs when the update chain cannot connect with original chain.

    +

    Variants§

    §

    CannotConnect(CannotConnectError)

    Occurs when the update chain cannot connect with original chain.

    §

    UnexpectedConnectedToHash

    Occurs when the connected_to hash does not match the hash derived from block.

    Fields

    §connected_to_hash: BlockHash

    Block hash of connected_to.

    §expected_hash: BlockHash

    Expected block hash of connected_to, as derived from block.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Balance.html index 0f6ce899b7..e2b16ed4ec 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Balance.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Balance.html @@ -1,4 +1,4 @@ -Balance in bdk_wallet::wallet - Rust

    Struct bdk_wallet::wallet::Balance

    source ·
    pub struct Balance {
    +Balance in bdk_wallet::wallet - Rust

    Struct bdk_wallet::wallet::Balance

    pub struct Balance {
         pub immature: Amount,
         pub trusted_pending: Amount,
         pub untrusted_pending: Amount,
    @@ -8,20 +8,20 @@
     
    §trusted_pending: Amount

    Unconfirmed UTXOs generated by a wallet tx

    §untrusted_pending: Amount

    Unconfirmed UTXOs received from an external wallet

    §confirmed: Amount

    Confirmed and immediately spendable balance

    -

    Implementations§

    source§

    impl Balance

    source

    pub fn trusted_spendable(&self) -> Amount

    Get sum of trusted_pending and confirmed coins.

    +

    Implementations§

    §

    impl Balance

    pub fn trusted_spendable(&self) -> Amount

    Get sum of trusted_pending and confirmed coins.

    This is the balance you can spend right now that shouldn’t get cancelled via another party double spending it.

    -
    source

    pub fn total(&self) -> Amount

    Get the whole balance visible to the wallet.

    -

    Trait Implementations§

    source§

    impl Add for Balance

    §

    type Output = Balance

    The resulting type after applying the + operator.
    source§

    fn add(self, other: Balance) -> Balance

    Performs the + operation. Read more
    source§

    impl Clone for Balance

    source§

    fn clone(&self) -> Balance

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Default for Balance

    source§

    fn default() -> Balance

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for Balance

    pub fn total(&self) -> Amount

    Get the whole balance visible to the wallet.

    +

    Trait Implementations§

    §

    impl Add for Balance

    §

    type Output = Balance

    The resulting type after applying the + operator.
    §

    fn add(self, other: Balance) -> Balance

    Performs the + operation. Read more
    §

    impl Clone for Balance

    §

    fn clone(&self) -> Balance

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Balance

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for Balance

    §

    fn default() -> Balance

    Returns the “default value” for a type. Read more
    §

    impl<'de> Deserialize<'de> for Balance

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<Balance, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for Balance

    source§

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Balance

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for Balance

    §

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Balance

    source§

    fn serialize<__S>( +sufficient, and should not be overridden without very good reason.

    §

    impl Serialize for Balance

    §

    fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Balance

    source§

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Eq for Balance

    §

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html index 07bfe5742c..5bf7818a0f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html @@ -1,14 +1,14 @@ Update in bdk_wallet::wallet - Rust

    Struct bdk_wallet::wallet::Update

    source ·
    pub struct Update {
         pub last_active_indices: BTreeMap<KeychainKind, u32>,
    -    pub graph: TxGraph<ConfirmationTimeHeightAnchor>,
    -    pub chain: Option<CheckPoint>,
    +    pub graph: TxGraph<ConfirmationTimeHeightAnchor>,
    +    pub chain: Option<CheckPoint>,
     }
    Expand description

    An update to Wallet.

    -

    It updates bdk_chain::keychain::KeychainTxOutIndex, bdk_chain::TxGraph and local_chain::LocalChain atomically.

    +

    It updates [KeychainTxOutIndex], [bdk_chain::TxGraph] and [local_chain::LocalChain] atomically.

    Fields§

    §last_active_indices: BTreeMap<KeychainKind, u32>

    Contains the last active derivation indices per keychain (K), which is used to update the -KeychainTxOutIndex.

    -
    §graph: TxGraph<ConfirmationTimeHeightAnchor>

    Update for the wallet’s internal TxGraph.

    -
    §chain: Option<CheckPoint>

    Update for the wallet’s internal LocalChain.

    -

    Trait Implementations§

    source§

    impl Clone for Update

    source§

    fn clone(&self) -> Update

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Update

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Update

    source§

    fn default() -> Update

    Returns the “default value” for a type. Read more
    source§

    impl From<FullScanResult<KeychainKind>> for Update

    source§

    fn from(value: FullScanResult<KeychainKind>) -> Self

    Converts to this type from the input type.
    source§

    impl From<SyncResult> for Update

    source§

    fn from(value: SyncResult) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +[KeychainTxOutIndex].

    +
    §graph: TxGraph<ConfirmationTimeHeightAnchor>

    Update for the wallet’s internal [TxGraph].

    +
    §chain: Option<CheckPoint>

    Update for the wallet’s internal LocalChain.

    +

    Trait Implementations§

    source§

    impl Clone for Update

    source§

    fn clone(&self) -> Update

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Update

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Update

    source§

    fn default() -> Update

    Returns the “default value” for a type. Read more
    source§

    impl From<FullScanResult<KeychainKind>> for Update

    source§

    fn from(value: FullScanResult<KeychainKind>) -> Self

    Converts to this type from the input type.
    source§

    impl From<SyncResult> for Update

    source§

    fn from(value: SyncResult) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html index e90c90bf43..b8eec763fb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html @@ -9,7 +9,7 @@ Its main components are:

    ChangeSets (see take_staged). Also see individual functions and example for instructions on when Wallet state needs to be persisted.

    The Wallet descriptor (external) and change descriptor (internal) must not derive the same -script pubkeys. See KeychainTxOutIndex::insert_descriptor() for more details.

    +script pubkeys. See [KeychainTxOutIndex::insert_descriptor()] for more details.

    Implementations§

    source§

    impl Wallet

    source

    pub fn new<E: IntoWalletDescriptor>( descriptor: E, change_descriptor: E, @@ -141,11 +141,11 @@ by using
    source

    pub fn list_unspent(&self) -> impl Iterator<Item = LocalOutput> + '_

    Return the list of unspent outputs of this wallet

    source

    pub fn list_output(&self) -> impl Iterator<Item = LocalOutput> + '_

    List all relevant outputs (includes both spent and unspent, confirmed and unconfirmed).

    To list only unspent outputs (UTXOs), use Wallet::list_unspent instead.

    -
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    -
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    +
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    +
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    source

    pub fn all_unbounded_spk_iters( &self -) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    +) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    This is intended to be used when doing a full scan of your addresses (e.g. after restoring from seed words). You pass the BTreeMap of iterators to a blockchain data source (e.g. electrum server) which will go through each address until it reaches a stop gap.

    @@ -154,7 +154,7 @@ script pubkeys the wallet is storing internally).

    source

    pub fn unbounded_spk_iter( &self, keychain: KeychainKind -) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    +) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    See all_unbounded_spk_iters for more documentation

    source

    pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput>

    Returns the utxo owned by this wallet corresponding to outpoint if it exists in the wallet’s database.

    @@ -170,7 +170,7 @@ See
    source

    pub fn calculate_fee( &self, tx: &Transaction -) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    +) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    To calculate the fee for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -183,7 +183,7 @@ manually insert the TxOut(s) into the tx graph using the
    source

    pub fn calculate_fee_rate( &self, tx: &Transaction -) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    +) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    To calculate the fee rate for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -206,12 +206,12 @@ of this tx’s outputs that send to script pubkeys tracked by this wallet.

    source

    pub fn get_tx( &self, txid: Txid -) -> Option<CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>>

    Get a single transaction from the wallet as a CanonicalTx (if the transaction exists).

    +) -> Option<CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>>

    Get a single transaction from the wallet as a [CanonicalTx] (if the transaction exists).

    CanonicalTx contains the full transaction alongside meta-data such as:

      -
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist +
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist in the best chain.
    • -
    • The ChainPosition of the transaction in the best chain - whether the transaction is +
    • The [ChainPosition] of the transaction in the best chain - whether the transaction is confirmed or unconfirmed. If the transaction is confirmed, the anchor which proves the confirmation is provided. If the transaction is unconfirmed, the unix timestamp of when the transaction was last seen in the mempool is provided.
    • @@ -246,8 +246,8 @@ the transaction was last seen in the mempool is provided. }
    source

    pub fn insert_checkpoint( &mut self, - block_id: BlockId -) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain.

    + block_id: BlockId +) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain.

    Returns whether anything changed with the insertion (e.g. false if checkpoint was already there).

    WARNING: You must persist the changes resulting from one or more calls to this method @@ -264,7 +264,7 @@ whether the transaction exists in the best chain. To know whether it exists, the must be broadcast to the network and the wallet synced via a chain source.

    source

    pub fn transactions( &self -) -> impl Iterator<Item = CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>> + '_

    Iterate over the transactions in the wallet.

    +) -> impl Iterator<Item = CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>> + '_

    Iterate over the transactions in the wallet.

    source

    pub fn balance(&self) -> Balance

    Return the balance, separated into available, trusted-pending, untrusted-pending and immature values.

    source

    pub fn add_signer( @@ -381,25 +381,25 @@ Otherwise, it will return the index of the highest address it has derived.

    source

    pub fn apply_update( &mut self, update: impl Into<Update> -) -> Result<(), CannotConnectError>

    Applies an update to the wallet and stages the changes (but does not persist them).

    +) -> Result<(), CannotConnectError>

    Applies an update to the wallet and stages the changes (but does not persist them).

    Usually you create an update by interacting with some blockchain data source and inserting transactions related to your wallet into it.

    After applying updates you should persist the staged wallet changes. For an example of how to persist staged wallet changes see Wallet::reveal_next_address. `

    source

    pub fn staged(&self) -> Option<&ChangeSet>

    Get a reference of the staged ChangeSet that are yet to be committed (if any).

    source

    pub fn take_staged(&mut self) -> Option<ChangeSet>

    Take the staged ChangeSet to be persisted now (if any).

    -
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Get a reference to the inner TxGraph.

    +
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Get a reference to the inner [TxGraph].

    source

    pub fn unbroadcast_transactions( &self -) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>>

    Iterate over transactions in the wallet that are unseen and unanchored likely +) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>>

    Iterate over transactions in the wallet that are unseen and unanchored likely because they haven’t been broadcast.

    -
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner KeychainTxOutIndex.

    -
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner LocalChain.

    +
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner [KeychainTxOutIndex].

    +
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner [LocalChain].

    source

    pub fn apply_block( &mut self, block: &Block, height: u32 -) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the +) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the prev_blockhash of the block’s header.

    This is a convenience method that is equivalent to calling apply_block_connected_to with prev_blockhash and height-1 as the connected_to parameter.

    @@ -407,12 +407,12 @@ with prev_blockhash and height-1 as the connecte &mut self, block: &Block, height: u32, - connected_to: BlockId -) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the + connected_to: BlockId +) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the block to the internal chain.

    The connected_to parameter informs the wallet how this block connects to the internal -LocalChain. Relevant transactions are filtered from the block and inserted into the -internal TxGraph.

    +[LocalChain]. Relevant transactions are filtered from the block and inserted into the +internal [TxGraph].

    WARNING: You must persist the changes resulting from one or more calls to this method if you need the inserted block data to be reloaded after closing the wallet. See Wallet::reveal_next_address.

    @@ -429,17 +429,17 @@ when there is conflicting unconfirmed transactions. The transaction with the lat if you need the applied unconfirmed transactions to be reloaded after closing the wallet. See Wallet::reveal_next_address.

    source§

    impl Wallet

    Methods to construct sync/full-scan requests for spk-based chain sources.

    -
    source

    pub fn start_sync_with_revealed_spks(&self) -> SyncRequest

    Create a partial SyncRequest for this wallet for all revealed spks.

    +
    source

    pub fn start_sync_with_revealed_spks(&self) -> SyncRequest

    Create a partial [SyncRequest] for this wallet for all revealed spks.

    This is the first step when performing a spk-based wallet partial sync, the returned -SyncRequest collects all revealed script pubkeys from the wallet keychain needed to +[SyncRequest] collects all revealed script pubkeys from the wallet keychain needed to start a blockchain sync with a spk based blockchain client.

    -
    source

    pub fn start_full_scan(&self) -> FullScanRequest<KeychainKind>

    Create a `FullScanRequest for this wallet.

    +
    source

    pub fn start_full_scan(&self) -> FullScanRequest<KeychainKind>

    Create a [`FullScanRequest] for this wallet.

    This is the first step when performing a spk-based wallet full scan, the returned -`FullScanRequest collects iterators for the wallet’s keychain script pub keys needed to +[`FullScanRequest] collects iterators for the wallet’s keychain script pub keys needed to start a blockchain full scan with a spk based blockchain client.

    This operation is generally only used when importing or restoring a previously used wallet in which the list of used scripts is not known.

    -

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet

    source§

    fn as_ref(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Debug for Wallet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet

    source§

    fn as_ref(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Debug for Wallet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html index c199a9d4e5..b64cc02025 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html @@ -1,9 +1,9 @@ -ChangeSet in bdk_wallet::wallet - Rust

    Type Alias bdk_wallet::wallet::ChangeSet

    source ·
    pub type ChangeSet = CombinedChangeSet<KeychainKind, ConfirmationTimeHeightAnchor>;
    Expand description

    The changes made to a wallet by applying an Update.

    +ChangeSet in bdk_wallet::wallet - Rust

    Type Alias bdk_wallet::wallet::ChangeSet

    source ·
    pub type ChangeSet = CombinedChangeSet<KeychainKind, ConfirmationTimeHeightAnchor>;
    Expand description

    The changes made to a wallet by applying an Update.

    Aliased Type§

    struct ChangeSet {
         pub chain: BTreeMap<u32, Option<BlockHash>>,
    -    pub indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>,
    +    pub indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>,
         pub network: Option<Network>,
     }

    Fields§

    §chain: BTreeMap<u32, Option<BlockHash>>

    Changes to the LocalChain.

    -
    §indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>

    Changes to IndexedTxGraph.

    +
    §indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>

    Changes to IndexedTxGraph.

    §network: Option<Network>

    Stores the network type of the transaction data.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.CHANNEL_BOUND.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.CHANNEL_BOUND.html index 2d2f3961a9..9ce0a19061 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.CHANNEL_BOUND.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.CHANNEL_BOUND.html @@ -1,2 +1,2 @@ -CHANNEL_BOUND in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::CHANNEL_BOUND

    source ·
    pub(crate) const CHANNEL_BOUND: usize = 10;
    Expand description

    The mpsc channel bound for emissions from [Emitter].

    +CHANNEL_BOUND in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::CHANNEL_BOUND

    source ·
    pub(crate) const CHANNEL_BOUND: usize = 10;
    Expand description

    The mpsc channel bound for emissions from [Emitter].

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_COMMIT_DELAY.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_COMMIT_DELAY.html index 66f6a15fd6..3db24ccb35 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_COMMIT_DELAY.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_COMMIT_DELAY.html @@ -1,2 +1,2 @@ -DB_COMMIT_DELAY in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::DB_COMMIT_DELAY

    source ·
    pub(crate) const DB_COMMIT_DELAY: Duration;
    Expand description

    Delay for committing to persistence.

    +DB_COMMIT_DELAY in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::DB_COMMIT_DELAY

    source ·
    pub(crate) const DB_COMMIT_DELAY: Duration;
    Expand description

    Delay for committing to persistence.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_MAGIC.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_MAGIC.html index 40e25f9a1c..7da1b90768 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_MAGIC.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_MAGIC.html @@ -1 +1 @@ -DB_MAGIC in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::DB_MAGIC

    source ·
    pub(crate) const DB_MAGIC: &[u8] = b"bdk_example_rpc";
    \ No newline at end of file +DB_MAGIC in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::DB_MAGIC

    source ·
    pub(crate) const DB_MAGIC: &[u8] = b"bdk_example_rpc";
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_PATH.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_PATH.html index 67ff96599e..a9e9496c4b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_PATH.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.DB_PATH.html @@ -1 +1 @@ -DB_PATH in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::DB_PATH

    source ·
    pub(crate) const DB_PATH: &str = ".bdk_example_rpc.db";
    \ No newline at end of file +DB_PATH in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::DB_PATH

    source ·
    pub(crate) const DB_PATH: &str = ".bdk_example_rpc.db";
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.MEMPOOL_EMIT_DELAY.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.MEMPOOL_EMIT_DELAY.html index 504f5a4a77..d3b008f2e0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.MEMPOOL_EMIT_DELAY.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.MEMPOOL_EMIT_DELAY.html @@ -1,2 +1,2 @@ -MEMPOOL_EMIT_DELAY in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::MEMPOOL_EMIT_DELAY

    source ·
    pub(crate) const MEMPOOL_EMIT_DELAY: Duration;
    Expand description

    Delay between mempool emissions.

    +MEMPOOL_EMIT_DELAY in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::MEMPOOL_EMIT_DELAY

    source ·
    pub(crate) const MEMPOOL_EMIT_DELAY: Duration;
    Expand description

    Delay between mempool emissions.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.STDOUT_PRINT_DELAY.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.STDOUT_PRINT_DELAY.html index 2b8b5cf6d0..2faad6619c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.STDOUT_PRINT_DELAY.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/constant.STDOUT_PRINT_DELAY.html @@ -1,2 +1,2 @@ -STDOUT_PRINT_DELAY in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::STDOUT_PRINT_DELAY

    source ·
    pub(crate) const STDOUT_PRINT_DELAY: Duration;
    Expand description

    Delay for printing status to stdout.

    +STDOUT_PRINT_DELAY in example_bitcoind_rpc_polling - Rust

    Constant example_bitcoind_rpc_polling::STDOUT_PRINT_DELAY

    source ·
    pub(crate) const STDOUT_PRINT_DELAY: Duration;
    Expand description

    Delay for printing status to stdout.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.Emission.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.Emission.html index a9820ac291..2cdf14360e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.Emission.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.Emission.html @@ -1,8 +1,8 @@ -Emission in example_bitcoind_rpc_polling - Rust

    Enum example_bitcoind_rpc_polling::Emission

    source ·
    pub(crate) enum Emission {
    +Emission in example_bitcoind_rpc_polling - Rust

    Enum example_bitcoind_rpc_polling::Emission

    source ·
    pub(crate) enum Emission {
         Block(BlockEvent<Block>),
         Mempool(Vec<(Transaction, u64)>),
         Tip(u32),
    -}

    Variants§

    §

    Block(BlockEvent<Block>)

    §

    Mempool(Vec<(Transaction, u64)>)

    §

    Tip(u32)

    Trait Implementations§

    source§

    impl Debug for Emission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +}

    Variants§

    §

    Block(BlockEvent<Block>)

    §

    Mempool(Vec<(Transaction, u64)>)

    §

    Tip(u32)

    Trait Implementations§

    source§

    impl Debug for Emission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.RpcCommands.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.RpcCommands.html index 3d540a88dd..a46485fbb1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.RpcCommands.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/enum.RpcCommands.html @@ -1,4 +1,4 @@ -RpcCommands in example_bitcoind_rpc_polling - Rust

    Enum example_bitcoind_rpc_polling::RpcCommands

    source ·
    pub(crate) enum RpcCommands {
    +RpcCommands in example_bitcoind_rpc_polling - Rust

    Enum example_bitcoind_rpc_polling::RpcCommands

    source ·
    pub(crate) enum RpcCommands {
         Sync {
             rpc_args: RpcArgs,
         },
    @@ -8,15 +8,15 @@
     }

    Variants§

    §

    Sync

    Syncs local state with remote state via RPC (starting from last point of agreement) and stores/indexes relevant transactions

    Fields

    §rpc_args: RpcArgs
    §

    Live

    Sync by having the emitter logic in a separate thread

    -

    Fields

    §rpc_args: RpcArgs

    Trait Implementations§

    source§

    impl Clone for RpcCommands

    source§

    fn clone(&self) -> RpcCommands

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RpcCommands

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for RpcCommands

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( +

    Fields

    §rpc_args: RpcArgs

    Trait Implementations§

    source§

    impl Clone for RpcCommands

    source§

    fn clone(&self) -> RpcCommands

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RpcCommands

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for RpcCommands

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches -) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( +) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches -) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    fn update_from_arg_matches_mut<'b>( +) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches -) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    impl Subcommand for RpcCommands

    source§

    fn augment_subcommands<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_subcommands_for_update<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can update self. Read more
    source§

    fn has_subcommand(__clap_name: &str) -> bool

    Test whether Self can parse a specific subcommand

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    impl Subcommand for RpcCommands

    source§

    fn augment_subcommands<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_subcommands_for_update<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can update self. Read more
    source§

    fn has_subcommand(__clap_name: &str) -> bool

    Test whether Self can parse a specific subcommand

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.await_flag.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.await_flag.html index a31b7d7103..4d5cd6aca0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.await_flag.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.await_flag.html @@ -1 +1 @@ -await_flag in example_bitcoind_rpc_polling - Rust

    Function example_bitcoind_rpc_polling::await_flag

    source ·
    pub(crate) fn await_flag(flag: &AtomicBool, duration: Duration) -> bool
    \ No newline at end of file +await_flag in example_bitcoind_rpc_polling - Rust

    Function example_bitcoind_rpc_polling::await_flag

    source ·
    pub(crate) fn await_flag(flag: &AtomicBool, duration: Duration) -> bool
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.main.html index 806c217eaa..9a5cfe751e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.main.html @@ -1 +1 @@ -main in example_bitcoind_rpc_polling - Rust

    Function example_bitcoind_rpc_polling::main

    source ·
    pub(crate) fn main() -> Result<()>
    \ No newline at end of file +main in example_bitcoind_rpc_polling - Rust

    Function example_bitcoind_rpc_polling::main

    source ·
    pub(crate) fn main() -> Result<()>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.start_ctrlc_handler.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.start_ctrlc_handler.html index 48f5f9d2b8..e2283634a1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.start_ctrlc_handler.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/fn.start_ctrlc_handler.html @@ -1 +1 @@ -start_ctrlc_handler in example_bitcoind_rpc_polling - Rust

    Function example_bitcoind_rpc_polling::start_ctrlc_handler

    source ·
    pub(crate) fn start_ctrlc_handler() -> Arc<AtomicBool>
    \ No newline at end of file +start_ctrlc_handler in example_bitcoind_rpc_polling - Rust

    Function example_bitcoind_rpc_polling::start_ctrlc_handler

    source ·
    pub(crate) fn start_ctrlc_handler() -> Arc<AtomicBool>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/index.html index 844352011f..4808da8220 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/index.html @@ -1 +1 @@ -example_bitcoind_rpc_polling - Rust

    Crate example_bitcoind_rpc_polling

    source ·

    Structs§

    Enums§

    Constants§

    Functions§

    Type Aliases§

    \ No newline at end of file +example_bitcoind_rpc_polling - Rust

    Crate example_bitcoind_rpc_polling

    source ·

    Structs§

    Enums§

    Constants§

    Functions§

    Type Aliases§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/struct.RpcArgs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/struct.RpcArgs.html index 60fef8aca6..6d9cb0f5f1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/struct.RpcArgs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/struct.RpcArgs.html @@ -1,4 +1,4 @@ -RpcArgs in example_bitcoind_rpc_polling - Rust

    Struct example_bitcoind_rpc_polling::RpcArgs

    source ·
    pub(crate) struct RpcArgs {
    +RpcArgs in example_bitcoind_rpc_polling - Rust

    Struct example_bitcoind_rpc_polling::RpcArgs

    source ·
    pub(crate) struct RpcArgs {
         pub(crate) url: String,
         pub(crate) rpc_cookie: Option<PathBuf>,
         pub(crate) rpc_user: Option<String>,
    @@ -9,12 +9,12 @@
     
    §rpc_user: Option<String>

    RPC auth username

    §rpc_password: Option<String>

    RPC auth password

    §fallback_height: u32

    Starting block height to fallback to if no point of agreement if found

    -

    Implementations§

    source§

    impl RpcArgs

    source

    pub(crate) fn new_client(&self) -> Result<Client>

    Trait Implementations§

    source§

    impl Args for RpcArgs

    source§

    fn augment_args<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for RpcArgs

    source§

    fn clone(&self) -> RpcArgs

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RpcArgs

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<RpcArgs> for Auth

    source§

    fn from(args: RpcArgs) -> Self

    Converts to this type from the input type.
    source§

    impl FromArgMatches for RpcArgs

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( +

    Implementations§

    source§

    impl RpcArgs

    source

    pub(crate) fn new_client(&self) -> Result<Client>

    Trait Implementations§

    source§

    impl Args for RpcArgs

    source§

    fn augment_args<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command<'b>) -> Command<'b>

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for RpcArgs

    source§

    fn clone(&self) -> RpcArgs

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RpcArgs

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<RpcArgs> for Auth

    source§

    fn from(args: RpcArgs) -> Self

    Converts to this type from the input type.
    source§

    impl FromArgMatches for RpcArgs

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches -) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( +) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches -) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    fn update_from_arg_matches_mut( +) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches ) -> Result<(), Error>

    Assign values from ArgMatches to self.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html index 45b0aec17f..656f1da7ac 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_bitcoind_rpc_polling - Rust

    Type Alias example_bitcoind_rpc_polling::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file +ChangeSet in example_bitcoind_rpc_polling - Rust

    Type Alias example_bitcoind_rpc_polling::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html index 491b30d7cc..d871188987 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html @@ -1,4 +1,4 @@ -create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<A: Anchor, O: ChainOracle>(
    +create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<A: Anchor, O: ChainOracle>(
         graph: &mut KeychainTxGraph<A>,
         chain: &O,
         keymap: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>,
    @@ -6,4 +6,4 @@
         address: Address,
         value: u64
     ) -> Result<(Transaction, Option<CreateTxChange>)>
    where - O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file + O::Error: Error + Send + Sync + 'static,

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html index 2369696a05..791710a164 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html @@ -1,4 +1,4 @@ -handle_commands in example_cli - Rust

    Function example_cli::handle_commands

    source ·
    pub fn handle_commands<CS: Subcommand, S: Args, A: Anchor, O: ChainOracle, C>(
    +handle_commands in example_cli - Rust

    Function example_cli::handle_commands

    source ·
    pub fn handle_commands<CS: Subcommand, S: Args, A: Anchor, O: ChainOracle, C>(
         graph: &Mutex<KeychainTxGraph<A>>,
         db: &Mutex<Store<C>>,
         chain: &Mutex<O>,
    @@ -7,5 +7,5 @@
         broadcast: impl FnOnce(S, &Transaction) -> Result<()>,
         cmd: Commands<CS, S>
     ) -> Result<()>
    where - O::Error: Error + Send + Sync + 'static, - C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>> + Send + Sync + Debug,
    \ No newline at end of file + O::Error: Error + Send + Sync + 'static, + C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>> + Send + Sync + Debug,
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html index 65e9eacb1b..0f87210866 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html @@ -2,6 +2,6 @@ db_magic: &[u8], db_default_path: &str ) -> Result<Init<CS, S, C>>
    where - C: Default + Append + Serialize + DeserializeOwned + Debug + Send + Sync + 'static,
    Expand description

    Parses command line arguments and initializes all components, creating + C: Default + Append + Serialize + DeserializeOwned + Debug + Send + Sync + 'static,

    Expand description

    Parses command line arguments and initializes all components, creating a file store with the given parameters, or loading one if it exists.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html index 3fd14ad7b1..20f15b159a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html @@ -1,5 +1,5 @@ -planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<A: Anchor, O: ChainOracle, K: Clone + CanDerive>(
    +planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<A: Anchor, O: ChainOracle, K: Clone + CanDerive>(
         graph: &KeychainTxGraph<A>,
         chain: &O,
         assets: &Assets<K>
    -) -> Result<Vec<PlannedUtxo<K, A>>, O::Error>
    \ No newline at end of file +) -> Result<Vec<PlannedUtxo<K, A>>, O::Error>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html index 82fe0c39e4..5aaa356a40 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html @@ -1,8 +1,8 @@ CreateTxChange in example_cli - Rust

    Struct example_cli::CreateTxChange

    source ·
    pub struct CreateTxChange {
    -    pub index_changeset: ChangeSet<Keychain>,
    +    pub index_changeset: ChangeSet<Keychain>,
         pub change_keychain: Keychain,
         pub index: u32,
    -}

    Fields§

    §index_changeset: ChangeSet<Keychain>§change_keychain: Keychain§index: u32

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +}

    Fields§

    §index_changeset: ChangeSet<Keychain>§change_keychain: Keychain§index: u32

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html index 3404398fd8..023b9bf7b5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html @@ -1,14 +1,14 @@ Init in example_cli - Rust

    Struct example_cli::Init

    source ·
    pub struct Init<CS: Subcommand, S: Args, C>
    where - C: Default + Append + Serialize + DeserializeOwned + Debug + Send + Sync + 'static,
    { + C: Default + Append + Serialize + DeserializeOwned + Debug + Send + Sync + 'static,
    { pub args: Args<CS, S>, pub keymap: KeyMap, - pub index: KeychainTxOutIndex<Keychain>, + pub index: KeychainTxOutIndex<Keychain>, pub db: Mutex<Store<C>>, pub init_changeset: C, }
    Expand description

    The initial state returned by init.

    Fields§

    §args: Args<CS, S>

    Arguments parsed by the cli.

    §keymap: KeyMap

    Descriptor keymap.

    -
    §index: KeychainTxOutIndex<Keychain>

    Keychain-txout index.

    +
    §index: KeychainTxOutIndex<Keychain>

    Keychain-txout index.

    §db: Mutex<Store<C>>

    Persistence backend.

    §init_changeset: C

    Initial changeset.

    Auto Trait Implementations§

    §

    impl<CS, S, C> !Freeze for Init<CS, S, C>

    §

    impl<CS, S, C> RefUnwindSafe for Init<CS, S, C>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html index ed9191b483..0ecea609e6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html @@ -1 +1 @@ -KeychainChangeSet in example_cli - Rust

    Type Alias example_cli::KeychainChangeSet

    source ·
    pub type KeychainChangeSet<A> = (ChangeSet, ChangeSet<A, ChangeSet<Keychain>>);
    \ No newline at end of file +KeychainChangeSet in example_cli - Rust

    Type Alias example_cli::KeychainChangeSet

    source ·
    pub type KeychainChangeSet<A> = (ChangeSet, ChangeSet<A, ChangeSet<Keychain>>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html index 0c4c6027c4..1a92e2720e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html @@ -1,5 +1,5 @@ -KeychainTxGraph in example_cli - Rust

    Type Alias example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;

    Aliased Type§

    struct KeychainTxGraph<A> {
    -    pub index: KeychainTxOutIndex<Keychain>,
    +KeychainTxGraph in example_cli - Rust

    Type Alias example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;

    Aliased Type§

    struct KeychainTxGraph<A> {
    +    pub index: KeychainTxOutIndex<Keychain>,
         /* private fields */
    -}

    Fields§

    §index: KeychainTxOutIndex<Keychain>

    Transaction index.

    +}

    Fields§

    §index: KeychainTxOutIndex<Keychain>

    Transaction index.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html index 85cd9e4793..b313e93a5c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html @@ -1 +1 @@ -PlannedUtxo in example_cli - Rust

    Type Alias example_cli::PlannedUtxo

    source ·
    pub type PlannedUtxo<K, A> = (Plan<K>, FullTxOut<A>);
    \ No newline at end of file +PlannedUtxo in example_cli - Rust

    Type Alias example_cli::PlannedUtxo

    source ·
    pub type PlannedUtxo<K, A> = (Plan<K>, FullTxOut<A>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html index 3ec31251e2..be32deed0e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_electrum - Rust

    Type Alias example_electrum::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file +ChangeSet in example_electrum - Rust

    Type Alias example_electrum::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html index c7be8fa8d3..f5b9f8ca41 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_esplora - Rust

    Type Alias example_esplora::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file +ChangeSet in example_esplora - Rust

    Type Alias example_esplora::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/help.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/help.html index d061326770..08ff977b9d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/help.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/help.html @@ -1 +1 @@ -Help

    Rustdoc help

    Back
    \ No newline at end of file +Help

    Rustdoc help

    Back
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js index e7a13cab9d..f1a9a876b5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js @@ -1,6 +1,6 @@ var searchIndex = new Map(JSON.parse('[\ ["bdk_bitcoind_rpc",{"t":"KFFEONNNNNNONNNNNNMNNNNNNNNNNNN","n":["BitcoindRpcErrorExt","BlockEvent","Emitter","bitcoincore_rpc","block","block_hash","block_height","borrow","borrow","borrow_mut","borrow_mut","checkpoint","connected_to","fmt","from","from","into","into","is_not_found_error","mempool","new","next_block","next_header","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip"],"q":[[0,"bdk_bitcoind_rpc"],[31,"bitcoin::blockdata::block"],[32,"bdk_chain::chain_data"],[33,"core::fmt"],[34,"bitcoin::blockdata::transaction"],[35,"alloc::vec"],[36,"bitcoincore_rpc::error"],[37,"core::result"],[38,"bitcoincore_rpc::client"],[39,"bdk_chain::local_chain"],[40,"core::option"],[41,"core::any"]],"i":[0,0,0,0,1,1,1,12,1,12,1,1,1,1,12,1,12,1,10,12,12,12,12,12,1,12,1,12,1,12,1],"f":"`````{{{d{{b{c}}}}}f{}}{{{d{{b{c}}}}}h{}}{{{d{c}}}{{d{e}}}{}{}}0{{{d{jc}}}{{d{je}}}{}{}}0`{{{d{{b{c}}}}}l{}}{{{d{{b{c}}}}{d{jn}}}A`Ab}{cc{}}0{ce{}{}}0{{{d{Ad}}}Af}{{{d{j{Ah{c}}}}}{{Bd{{B`{{An{AjAl}}}}Bb}}}Bf}{{{d{c}}Bhh}{{Ah{c}}}Bf}{{{d{j{Ah{c}}}}}{{Bd{{Bl{{b{Bj}}}}Bb}}}Bf}{{{d{j{Ah{c}}}}}{{Bd{{Bl{{b{Bn}}}}Bb}}}Bf}{c{{Bd{e}}}{}{}}000{{{d{c}}}C`{}}077","D":"Bd","p":[[5,"BlockEvent",0],[1,"reference"],[5,"BlockHash",31],[1,"u32"],[0,"mut"],[5,"BlockId",32],[5,"Formatter",33],[8,"Result",33],[10,"Debug",33],[10,"BitcoindRpcErrorExt",0],[1,"bool"],[5,"Emitter",0],[5,"Transaction",34],[1,"u64"],[1,"tuple"],[5,"Vec",35],[6,"Error",36],[6,"Result",37],[10,"RpcApi",38],[5,"CheckPoint",39],[5,"Block",31],[6,"Option",40],[5,"Header",31],[5,"TypeId",41]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA0ABAAEAAAACAADAA4AAAAYAAcA"}],\ -["bdk_chain",{"t":"KKKSFSKGFFGFPPKFRFEEEFFEPPNNMNNNOOMNNNNNNENNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNONNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNOONNNNCONNNNNNNNNNNNNMNNNMNNONNNCCNENONNNNONNNNNNNNNNNNDNNNNNNONCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONNNNNNNNNNNNNNNNNNNNNNNNNOOOFRFKNNNMNNNNNNNNNNNNNNNNNNNNNNNOOMMOMNNNNNNNNMNNNNNNNNNNNFFSPIGPIFFNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNONNNNNNNOOOOFGPFIFFPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNONNNNNNNFFFFNNNNNNNNNNNOONOONNNNNNNOONNNNNNNNNOONNNNNOONNNNNNNNONNNNNNNNGFFPPFFFFNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOONNNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorFromBlockPosition","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","CombinedChangeSet","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeHeightAnchor","Confirmed","Confirmed","DescriptorExt","DescriptorId","Error","FullTxOut","Indexed","IndexedTxGraph","KeychainIndexed","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","all_spks","all_zeros","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","append","apply_changeset","as_byte_array","as_raw_hash","as_ref","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","cmp","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","default","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_block_position","from_block_position","from_block_position","from_block_position","from_byte_array","from_engine","from_raw_hash","from_slice","from_slice_delegated","from_str","get_chain_tip","hash","hash","hash","hash","hash","hash","hash","height","index","index_of_spk","index_tx","index_txout","indexed_tx_graph","indexed_tx_graph","initial_changeset","insert_spk","into","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","local_chain","mark_used","miniscript","net_value","network","new","new_with_range","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serde","serialize","serialize","serialize","serialize","serialize","serialize","spent_by","spk_at_index","spk_client","take","take","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","last_seen","time","ChangeSet","ChangeSet","IndexedTxGraph","Indexer","append","apply_block","apply_block_relevant","apply_changeset","apply_changeset","apply_update","as_ref","batch_insert_relevant","batch_insert_relevant_unconfirmed","batch_insert_unconfirmed","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph","index","index_tx","index_txout","indexer","initial_changeset","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","ChangeSet","DEFAULT_LOOKAHEAD","DescriptorAlreadyAssigned","Indexed","InsertDescriptorError","KeychainAlreadyAssigned","KeychainIndexed","KeychainTxOutIndex","NoSuchKeychain","add","all_unbounded_spk_iters","append","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","confirmed","default","default","default","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_descriptor","immature","index_of_spk","index_tx","index_txout","initial_changeset","inner","insert_descriptor","into","into","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","keychains_added","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","net_value","new","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_keychain_spks","revealed_spks","sent_and_received","serialize","serialize","spk_at_index","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","untrusted_pending","unused_keychain_spks","unused_spks","vzip","vzip","vzip","vzip","vzip","descriptor","existing_assignment","existing_assignment","keychain","AlterCheckPointError","ApplyHeaderError","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","apply_changeset","apply_header","apply_header_connected_to","apply_update","block_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","disconnect_from","eq","eq","eq","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_block_ids","from_blocks","from_changeset","from_genesis_hash","from_header","from_tip","genesis_hash","get","get","get_chain_tip","hash","height","height","initial_changeset","insert","insert_block","into","into","into","into","into","into","into","into_iter","into_iter","is_block_in_chain","iter","iter_checkpoints","new","next","original_hash","prev","push","range","range","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","vzip","FullScanRequest","FullScanResult","SyncRequest","SyncResult","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_outpoints","chain_spks","chain_spks_for_keychain","chain_tip","chain_tip","chain_txids","chain_update","chain_update","from","from","from","from","from_chain_tip","from_chain_tip","from_keychain_txout_index","graph_update","graph_update","inspect_outpoints","inspect_spks","inspect_spks_for_all_keychains","inspect_spks_for_keychain","inspect_txids","into","into","into","into","last_active_indices","outpoints","populate_with_revealed_spks","set_outpoints","set_spks","set_spks_for_keychain","set_txids","spks","spks_by_keychain","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txids","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","append","apply_changeset","apply_update","as_ref","balance","batch_insert_unconfirmed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts","eq","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_canonical_txs","map_anchors","map_anchors","new","next","next","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","to_string","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_list_canonical_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txs","txs_with_no_anchor_or_last_seen","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_last_seen_unconfirmed","vzip","vzip","vzip","vzip","vzip","vzip","vzip","walk_ancestors","walk_conflicts","walk_descendants"],"q":[[0,"bdk_chain"],[298,"bdk_chain::ConfirmationTime"],[301,"bdk_chain::indexed_tx_graph"],[358,"bdk_chain::keychain"],[497,"bdk_chain::keychain::InsertDescriptorError"],[501,"bdk_chain::local_chain"],[643,"bdk_chain::spk_client"],[707,"bdk_chain::tx_graph"],[869,"bdk_chain::spk_txout_index"],[870,"bitcoin::blockdata::script::owned"],[871,"alloc::collections::btree::map"],[872,"core::clone"],[873,"core::cmp"],[874,"core::fmt"],[875,"bdk_chain::descriptor_ext"],[876,"bdk_chain::tx_data_traits"],[877,"bdk_chain::chain_data"],[878,"bdk_chain::changeset"],[879,"bitcoin_hashes::sha256"],[880,"bdk_chain::spk_iter"],[881,"core::option"],[882,"miniscript::descriptor::key"],[883,"miniscript::descriptor"],[884,"core::borrow"],[885,"core::result"],[886,"serde::de"],[887,"bitcoin::blockdata::block"],[888,"bdk_chain::keychain::txout_index"],[889,"bitcoin_hashes"],[890,"bdk_chain::chain_oracle"],[891,"core::hash"],[892,"core::slice::index"],[893,"bitcoin::blockdata::script::borrowed"],[894,"bitcoin::blockdata::transaction"],[895,"bitcoin_units::amount"],[896,"core::ops::range"],[897,"alloc::collections::btree::set"],[898,"core::iter::traits::double_ended"],[899,"serde::ser"],[900,"alloc::string"],[901,"core::iter::traits::exact_size"],[902,"core::any"],[903,"core::iter::traits::collect"],[904,"core::default"],[905,"alloc::vec"],[906,"core::iter::traits::iterator"],[907,"core::marker"],[908,"core::ops::function"],[909,"core::convert"],[910,"alloc::sync"],[911,"std::collections::hash::set"]],"i":[0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,51,0,0,0,0,0,0,0,21,22,1,8,9,10,11,12,11,12,14,16,1,8,8,8,8,0,1,21,22,10,11,12,23,8,8,24,16,1,21,22,10,11,12,23,8,24,16,16,23,1,21,22,10,11,12,23,8,24,16,1,21,22,10,11,12,23,8,24,16,21,21,22,10,11,12,23,8,11,12,9,9,21,11,12,12,1,10,11,12,16,24,31,22,10,11,12,8,16,31,8,21,22,10,11,12,23,8,16,1,21,22,10,11,12,23,8,8,8,8,16,1,21,22,22,10,10,10,11,12,23,8,8,24,16,16,16,16,47,10,11,12,8,8,8,8,8,8,51,21,22,10,11,12,8,10,10,8,1,1,1,0,16,1,1,1,21,22,10,11,12,23,8,24,16,24,51,21,22,23,14,16,23,23,1,1,1,0,0,1,0,1,16,24,24,24,24,23,1,1,21,22,10,11,12,23,8,1,1,1,0,22,10,11,12,8,16,23,1,0,14,14,8,1,21,22,10,11,12,23,8,24,16,8,8,1,21,22,10,11,12,23,8,24,16,1,21,22,10,11,12,23,8,24,16,0,1,23,1,1,1,21,22,10,11,12,23,8,24,16,22,1,1,1,21,22,10,11,12,23,8,24,16,111,112,111,0,73,0,0,43,72,72,73,72,72,72,72,72,72,72,43,72,43,43,43,72,43,43,43,72,43,72,43,43,43,72,43,72,73,73,43,73,72,72,72,72,72,72,43,43,73,72,43,43,72,43,72,43,72,43,72,43,0,0,0,81,0,0,81,0,0,0,79,80,42,80,80,80,81,42,82,79,80,81,42,82,79,80,81,42,82,79,80,81,42,82,79,79,80,42,79,42,79,81,42,82,79,80,81,81,42,82,82,79,79,80,81,42,82,79,80,79,80,80,80,80,80,80,80,81,42,82,79,42,80,80,80,80,80,42,42,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,42,79,80,80,81,42,82,79,81,82,79,79,79,79,80,81,42,82,79,80,81,42,82,79,80,80,80,80,81,42,82,79,80,80,79,80,80,80,81,42,82,79,113,113,114,114,0,0,91,0,0,0,0,91,0,0,87,87,87,87,92,94,92,87,88,93,90,91,94,92,87,88,93,90,91,92,87,88,93,90,91,92,87,88,93,90,91,87,92,87,88,93,90,91,92,92,87,88,88,93,93,90,90,91,91,94,92,87,88,93,90,91,92,87,87,87,92,87,87,92,87,87,92,92,93,87,92,87,94,92,87,88,93,90,91,94,92,87,92,87,92,94,93,92,92,92,87,87,92,87,88,93,90,91,88,93,90,91,94,92,87,88,93,90,91,90,94,92,87,88,93,90,91,94,92,87,88,93,90,91,93,94,92,87,88,93,90,91,0,0,0,0,95,115,98,116,95,115,98,116,95,95,98,95,98,95,115,116,95,115,98,116,95,98,98,115,116,95,95,98,98,95,95,115,98,116,116,95,95,95,95,98,95,95,98,95,115,98,116,95,115,98,116,95,95,115,98,116,95,115,98,116,0,0,0,103,103,0,0,0,0,75,75,78,104,78,78,75,75,75,75,75,108,109,75,104,105,103,78,108,109,75,104,105,103,78,75,105,108,108,109,109,75,104,105,78,75,104,105,78,104,105,75,78,104,78,75,75,104,105,103,78,75,75,75,75,104,105,103,103,78,108,109,75,104,105,103,78,75,75,75,75,75,75,75,75,75,75,75,108,109,75,104,105,103,78,108,109,75,78,78,104,75,75,78,75,108,109,75,104,105,78,75,104,105,78,103,75,75,75,108,109,75,104,105,103,78,75,75,108,109,75,104,105,103,78,75,104,105,75,75,104,78,78,78,75,108,109,75,104,105,103,78,75,108,109,75,104,105,103,78,75,75,75],"f":"``````````````````````````{{{d{{b{c}}}}}{{d{{h{cf}}}}}{jln}}{{}A`}{{{d{Ab}}}Ad}{{{d{Ad}}}Ad}{{{d{Af}}}Ad}{{{d{Ah}}}Ad}``{{{d{AjAl}}Al}An}{{{d{Aj{B`{ce}}}}{B`{ce}}}AnlAb}{{{d{Aj{b{c}}}}e}An{jln}{}}{{{d{A`}}}{{d{c}}}{}}{{{d{A`}}}{{d{Bb}}}}{{{d{A`}}}{{d{{Bf{Bd}}}}}}{{{d{A`}}}{{d{{Bh{Bd}}}}}}`{{{d{c}}}{{d{e}}}{}{}}0000000200{{{d{Ajc}}}{{d{Aje}}}{}{}}000000000``{{{d{{b{c}}}}}{{b{c}}}j}{{{d{{Bj{c}}}}}{{Bj{c}}}j}{{{d{Bl}}}Bl}>{{{d{Af}}}Af}{{{d{Ah}}}Ah}{{{d{{Bn{c}}}}}{{Bn{c}}}j}{{{d{A`}}}A`}{{{d{{C`{c}}}}}{{C`{c}}}j}{{{d{{B`{ce}}}}}{{B`{ce}}}jj}{{{d{c}}{d{Aje}}}An{}{}}000000000{{{Bj{{d{c}}}}}{{Bj{c}}}j}{{{d{{Bj{c}}}}{d{{Bj{c}}}}}Cbl}{{{d{Bl}}{d{Bl}}}Cb}{{{d{Ad}}{d{Ad}}}Cb}{{{d{Af}}{d{Af}}}Cb}{{{d{Ah}}{d{Ah}}}Cb}{{{d{{Bn{c}}}}{d{{Bn{c}}}}}Cbl}{{{d{A`}}{d{A`}}}Cb}``{{{d{Ab}}}Cd}0{{{d{{Bj{c}}}}}{{Cf{Cd}}}Ab}{{{d{Af}}}Cd}{{{d{Ah}}}Cd}`{{}{{b{c}}}{}}{{}Ad}{{}Af}{{}Ah}{{}{{B`{ce}}}{}{}}{{{d{{C`{c}}}}}{{d{c}}}{{Cl{{Cj{Ch}}}}}}{{{d{Cn}}}A`}{c{{D`{Bl}}}Db}{c{{D`{Ad}}}Db}{c{{D`{Af}}}Db}{c{{D`{Ah}}}Db}{c{{D`{A`}}}Db}{c{{D`{{B`{eg}}}}}Db{lDd}{lDd}}{{{d{Cn}}}Df}{{}c{}}{{{d{{Bj{c}}}}{d{{Bj{c}}}}}DhDj}{{{d{Bl}}{d{Bl}}}Dh}{{{d{Ad}}{d{Ad}}}Dh}{{{d{Af}}{d{Af}}}Dh}{{{d{Ah}}{d{Ah}}}Dh}{{{d{{Bn{c}}}}{d{{Bn{c}}}}}DhDj}{{{d{A`}}{d{A`}}}Dh}{{{d{{B`{ce}}}}{d{{B`{ce}}}}}DhDjDj}{{{d{{b{c}}}}{d{AjDl}}}Dnn}{{{d{{Bj{c}}}}{d{AjDl}}}Dnn}{{{d{Bl}}{d{AjDl}}}Dn}{{{d{Ad}}{d{AjDl}}}Dn}{{{d{Af}}{d{AjDl}}}Dn}{{{d{Ah}}{d{AjDl}}}Dn}{{{d{{Bn{c}}}}{d{AjDl}}}Dnn}{{{d{A`}}{d{AjDl}}}Dn}000{{{d{{B`{ce}}}}{d{AjDl}}}Dnnn}{cc{}}00{{{Bj{Ah}}}Bl}{{{Eb{{d{Cd}}{d{E`}}}}}Ad}{{{Eb{CdE`}}}Ad}33333{BbA`}44{{{Ef{c{Ed{e}}}}}{{B`{ec}}}{}{}}{Eh{{B`{ce}}}{}{}}{{{Ed{c}}}{{B`{ce}}}{}{}}{{{d{Ej}}AdEl}En}{{{d{Ej}}AdEl}Ad}{{{d{Ej}}AdEl}Af}{{{d{Ej}}AdEl}Ah}{cA`{}}08{{{d{{Bf{Bd}}}}}{{D`{A`F`}}}}0{{{d{Fb}}}{{D`{A`c}}}{}}{{{d{{Ff{}{{Fd{c}}}}}}}{{D`{Adc}}}n}{{{d{{Bj{c}}}}{d{Aje}}}AnFhFj}{{{d{Bl}}{d{Ajc}}}AnFj}{{{d{Ad}}{d{Ajc}}}AnFj}{{{d{Af}}{d{Ajc}}}AnFj}{{{d{Ah}}{d{Ajc}}}AnFj}{{{d{A`}}{d{Ajc}}}AnFj}``{{{d{A`}}c}{{d{e}}}{{Fl{{Bf{Bd}}}}}{}}{{{d{{b{c}}}}{d{Fn}}}{{Cf{{d{c}}}}}{jln}}{{{d{Aj{b{c}}}}{d{G`}}}e{jln}{}}{{{d{Aj{b{c}}}}Gb{d{Gd}}}e{jln}{}}``{{{d{{b{c}}}}}e{jln}{}}{{{d{Aj{b{c}}}}cf}Dh{jln}}{ce{}{}}0000000000{{{d{{Ff{}{{Fd{c}}}}}}AdAd}{{D`{{Cf{Dh}}c}}}n}{{{d{{Bj{c}}}}}Dh{}}{{{d{Bl}}}Dh}{{{d{{Bn{c}}}}Cd}DhAb}{{{d{Al}}}Dh}{{{d{{B`{ce}}}}}DhlAb}2`{{{d{{b{c}}}}{d{G`}}}Dh{jln}}0{{{d{{b{c}}}}{d{c}}}Dh{jln}}``{{{d{Aj{b{c}}}}{d{c}}}Dh{jln}}`{{{d{{b{c}}}}{d{G`}}e}Gf{jln}{{Gh{c}}}}`{c{{C`{c}}}{{Cl{{Cj{Ch}}}}}}{{ce}{{C`{c}}}{{Cl{{Cj{Ch}}}}}{{Gh{Cd}}}}{{{d{Aj{C`{c}}}}}{{Cf{e}}}{{Cl{{Cj{Ch}}}}}{}}{{{d{Aj{C`{c}}}}El}{{Cf{e}}}{{Cl{{Cj{Ch}}}}}{}}`{{{d{{b{c}}}}}{{d{{Gj{{Eb{cGb}}}}}}}{jln}}{{{d{{b{c}}}}e}{{`{{Gn{}{{Gl{{Eb{{d{c}}Gb}}}}}}}}}{jln}{{Gh{c}}}}{{{d{{Bj{c}}}}{d{{Bj{c}}}}}{{Cf{Cb}}}H`}{{{d{Bl}}{d{Bl}}}{{Cf{Cb}}}}{{{d{Ad}}{d{Ad}}}{{Cf{Cb}}}}{{{d{Af}}{d{Af}}}{{Cf{Cb}}}}{{{d{Ah}}{d{Ah}}}{{Cf{Cb}}}}{{{d{{Bn{c}}}}{d{{Bn{c}}}}}{{Cf{Cb}}}H`}{{{d{A`}}{d{A`}}}{{Cf{Cb}}}}{{{d{Aj{b{c}}}}{d{G`}}}{{Gj{c}}}{jln}}{{{d{Aj{b{c}}}}Gb{d{Gd}}}{{Cf{{d{c}}}}}{jln}}{{{d{{b{c}}}}{d{G`}}e}{{Eb{HbHb}}}{jln}{{Gh{c}}}}`{{{d{Bl}}c}D`Hd}{{{d{Ad}}c}D`Hd}{{{d{Af}}c}D`Hd}{{{d{Ah}}c}D`Hd}{{{d{A`}}c}D`Hd}{{{d{{B`{ce}}}}g}D`{lHf}{lHf}Hd}`{{{d{{b{c}}}}{d{c}}}{{Cf{{d{Fn}}}}}{jln}}`{{{d{AjAl}}}{{Cf{Al}}}}0{A`c{}}{{{d{c}}}e{}{}}000000000{A`Bb}{{{d{c}}}Hh{}}{c{{D`{e}}}{}{}}0000000000000000000`{{{d{{b{c}}}}Gb}{{Cf{{Eb{{d{c}}{d{Gd}}}}}}}{jln}}`{{{d{{b{c}}}}}{{`{{Gn{}{{Gl{{Eb{{d{c}}Gb{d{Gd}}}}}}}}Hj}}}{jln}}{{{d{{b{c}}}}Hl}{{`{{Gn{}{{Gl{{Eb{{d{c}}Gb{d{Gd}}}}}}}}}}}{jln}}{{{d{c}}}Hn{}}000000000{DfBl}{{{d{Aj{b{c}}}}{d{c}}}Dh{jln}}{{{d{{b{c}}}}e}{{`{{Gn{}{{Gl{{Eb{{d{c}}{d{Fn}}}}}}}}j}}}{jln}{{Gh{c}}}}{ce{}{}}000000000```````{{{d{Aj{Ef{ce}}}}{Ef{ce}}}AnAbAl}{{{d{Aj{I`{ce}}}}EjCd}{{Ef{c}}}{EnAb}Ib}{{{d{Aj{I`{ce}}}}{d{Ej}}Cd}{{Ef{c}}}{EnAb}Ib}{{{d{Aj{Ib{}{{Id{c}}}}}}c}An{}}{{{d{Aj{I`{ce}}}}{Ef{c}}}AnAbIb}{{{d{Aj{I`{ce}}}}{If{c}}}{{Ef{c}}}AbIb}{{{d{{I`{ce}}}}}{{d{{If{c}}}}}{}{}}{{{d{Aj{I`{ce}}}}i}{{Ef{c}}}AbIb{{Ih{}{{Gl{c}}}}}{{Ih{}{{Gl{{Eb{{d{G`}}g}}}}}}}}{{{d{Aj{I`{ce}}}}g}{{Ef{c}}}AbIb{{Ih{}{{Gl{{Eb{{d{G`}}Df}}}}}}}}{{{d{Aj{I`{ce}}}}g}{{Ef{c}}}AbIb{{Ih{}{{Gl{{Eb{G`Df}}}}}}}}{{{d{c}}}{{d{e}}}{}{}}0{{{d{Ajc}}}{{d{Aje}}}{}{}}0{{{d{{Ef{ce}}}}}{{Ef{ce}}}jj}{{{d{c}}{d{Aje}}}An{}{}}{{}{{I`{ce}}}{}Ij}{{}{{Ef{ce}}}{}Ij}{c{{D`{{Ef{eg}}}}}Db{lDd}Dd}{{{d{{Ef{ce}}}}{d{{Ef{ce}}}}}DhDjDj}{{{d{{I`{ce}}}}{d{AjDl}}}Dnnn}{{{d{{Ef{ce}}}}{d{AjDl}}}Dnnn}{cc{}}{{{Ed{c}}}{{Ef{e{Ed{c}}}}}{}{}}{{{Il{c}}}{{Ef{ce}}}{}Ij}2{{{d{{I`{ce}}}}}{{d{{If{c}}}}}{}{}}``{{{d{Aj{Ib{}{{Id{c}}}}}}{d{G`}}}c{}}{{{d{Aj{Ib{}{{Id{c}}}}}}Gb{d{Gd}}}c{}}`{{{d{{Ib{}{{Id{c}}}}}}}c{}}{{{d{{I`{ce}}}}}{{Ef{c}}}AbIb}{{{d{Aj{I`{ce}}}}Hlc}{{Ef{c}}}AbIb}{{{d{Aj{I`{ce}}}}HlDf}{{Ef{c}}}AbIb}{{{d{Aj{I`{ce}}}}G`}{{Ef{c}}}AbIb}{{{d{Aj{I`{ce}}}}GbGd}{{Ef{c}}}AbIb}{ce{}{}}0{{{d{{Ef{ce}}}}}DhAbAl}{{{d{{Ib{}{{Id{c}}}}}}{d{G`}}}Dh{}}{c{{I`{ec}}}{}{}}{{{d{{Ef{ce}}}}g}D`{lHf}HfHd}{{{d{c}}}e{}{}}{c{{D`{e}}}{}{}}000{{{d{c}}}Hn{}}077``````````{{InIn}In}{{{d{{J`{c}}}}}{{h{c{C`{{Cj{Ch}}}}}}}{jln}}{{{d{Aj{Ed{c}}}}{Ed{c}}}Anl}{{{d{Aj{J`{c}}}}e}An{jln}{}}{{{d{Aj{J`{c}}}}{Ed{c}}}An{jln}}{{{d{c}}}{{d{e}}}{}{}}0000{{{d{Ajc}}}{{d{Aje}}}{}{}}0000{{{d{{J`{c}}}}}{{J`{c}}}j}{{{d{{Jb{c}}}}}{{Jb{c}}}j}{{{d{{Ed{c}}}}}{{Ed{c}}}j}{{{d{{Jd{c}}}}}{{Jd{c}}}j}{{{d{In}}}In}{{{d{c}}{d{Aje}}}An{}{}}0000`{{}{{J`{c}}}{}}{{}{{Ed{c}}}{}}{{}In}{c{{D`{{Ed{e}}}}}Db{lDd}}{c{{D`{In}}}Db}{{{d{{Jb{c}}}}{d{{Jb{c}}}}}DhDj}{{{d{{Ed{c}}}}{d{{Ed{c}}}}}DhDj}{{{d{{Jd{c}}}}{d{{Jd{c}}}}}DhDj}{{{d{In}}{d{In}}}Dh}{{{d{{J`{c}}}}{d{AjDl}}}Dnn}{{{d{{Jb{c}}}}{d{AjDl}}}Dnn}0{{{d{{Ed{c}}}}{d{AjDl}}}Dnn}{{{d{{Jd{c}}}}{d{AjDl}}}Dnn}0{{{d{In}}{d{AjDl}}}Dn}0{cc{}}0000{{{d{{J`{c}}}}{d{c}}}{{Cf{{d{{Cj{Ch}}}}}}}{jln}}`{{{d{{J`{c}}}}{d{Fn}}}{{Cf{{d{{Eb{cCd}}}}}}}{jln}}{{{d{Aj{J`{c}}}}{d{G`}}}e{jln}{}}{{{d{Aj{J`{c}}}}Gb{d{Gd}}}e{jln}{}}{{{d{{J`{c}}}}}e{jln}{}}{{{d{{J`{c}}}}}{{d{{b{{Eb{cCd}}}}}}}{jln}}{{{d{Aj{J`{c}}}}c{Cj{Ch}}}{{D`{{Ed{c}}{Jb{c}}}}}{jln}}{ce{}{}}0000{{{d{{Ed{c}}}}}Dhl}{{{d{{J`{c}}}}{d{G`}}}Dh{jln}}{{{d{{J`{c}}}}cCd}Dh{jln}}{{{d{{J`{c}}}}{d{c}}}{{`{{Gn{}{{Gl{{Jf{Gb}}}}}}}}}{jln}}{{{d{{J`{c}}}}e}{{`{{Gn{}{{Gl{{Jh{cGb}}}}}}}}}{jln}{{Gh{c}}}}{{{d{{J`{c}}}}}{{`{{Gn{}{{Gl{{Eb{{d{c}}{d{{Cj{Ch}}}}}}}}}}Hj}}}{jln}}``{{{d{{J`{c}}}}{d{c}}}{{Cf{Cd}}}{jln}}{{{d{{J`{c}}}}}{{h{cCd}}}{jln}}10{{{d{{J`{c}}}}}Cd{jln}}{{{d{Aj{J`{c}}}}{d{c}}Cd}An{jln}}{{{d{Aj{J`{c}}}}cCd}Dh{jln}}{{{d{{J`{c}}}}{d{G`}}e}Gf{jln}{{Gh{c}}}}{Cd{{J`{c}}}{}}{{{d{{J`{c}}}}{d{c}}}{{Cf{{Eb{CdDh}}}}}{jln}}{{{d{Aj{J`{c}}}}{d{c}}}{{Cf{{Eb{{Jf{f}}{Ed{c}}}}}}}{jln}}{{{d{{J`{c}}}}}{{d{{Gj{{Jh{cGb}}}}}}}{jln}}1{{{d{Aj{J`{c}}}}{d{c}}Cd}{{Cf{{Eb{{Jj{{Jf{f}}}}{Ed{c}}}}}}}{jln}}{{{d{Aj{J`{c}}}}{d{{h{cCd}}}}}{{Ed{c}}}{jln}}{{{d{{J`{c}}}}{d{c}}}{{`{{Gn{}{{Gl{{Jf{{d{Fn}}}}}}}}}}}{jln}}{{{d{{J`{c}}}}e}{{`{{Jl{}{{Gl{{Jh{c{d{Fn}}}}}}}}}}}{jln}{{Gh{c}}}}{{{d{{J`{c}}}}{d{G`}}e}{{Eb{HbHb}}}{jln}{{Gh{c}}}}{{{d{{Ed{c}}}}e}D`{lHf}Hd}{{{d{In}}c}D`Hd}{{{d{{J`{c}}}}cCd}{{Cf{{d{Fn}}}}}{jln}}{{{d{c}}}e{}{}}0000{{{d{c}}}Hh{}}00{{{d{In}}}Hb}`0{c{{D`{e}}}{}{}}000000000{{{d{{J`{c}}}}Gb}{{Cf{{Jh{c{d{Gd}}}}}}}{jln}}{{{d{{J`{c}}}}}{{`{{Gn{}{{Gl{{Jh{c{Eb{Gb{d{Gd}}}}}}}}}}Hj}}}{jln}}{{{d{{J`{c}}}}Hl}{{`{{Gn{}{{Gl{{Jh{c{Eb{Gb{d{Gd}}}}}}}}}}}}}{jln}}{{{d{c}}}Hn{}}0000{{{d{{J`{c}}}}{d{c}}}{{Cf{{C`{{Cj{Ch}}}}}}}{jln}}{{{d{Aj{J`{c}}}}cCd}Dh{jln}}`{{{d{{J`{c}}}}{d{c}}}{{`{{Gn{}{{Gl{{Jf{{d{Fn}}}}}}}}j}}}{jln}}{{{d{{J`{c}}}}}{{`{{Gn{}{{Gl{{Jh{c{d{Fn}}}}}}}}j}}}{jln}}{ce{}{}}0000``````````````{{{d{AjJn}}{d{Eh}}}{{D`{AnK`}}}}{{{d{AjJn}}{d{Kb}}Cd}{{D`{EhKd}}}}{{{d{AjJn}}{d{Kb}}CdAd}{{D`{EhKf}}}}{{{d{AjJn}}Kh}{{D`{EhKd}}}}{{{d{Kh}}}Ad}{{{d{c}}}{{d{e}}}{}{}}000000{{{d{Ajc}}}{{d{Aje}}}{}{}}000000{{{d{Kh}}}Kh}{{{d{Jn}}}Jn}{{{d{K`}}}K`}{{{d{Kj}}}Kj}{{{d{Kd}}}Kd}{{{d{Kf}}}Kf}{{{d{c}}{d{Aje}}}An{}{}}00000{{{d{AjJn}}Ad}{{D`{EhK`}}}}{{{d{Kh}}{d{Kh}}}Dh}{{{d{Jn}}{d{Jn}}}Dh}{{{d{K`}}{d{K`}}}Dh}{{{d{Kj}}{d{Kj}}}Dh}{{{d{Kd}}{d{Kd}}}Dh}{{{d{Kf}}{d{Kf}}}Dh}{{Khc}{{D`{KhKh}}}{{Ih{}{{Gl{Ad}}}}}}{{{d{Kh}}{d{AjDl}}}Dn}{{{d{Jn}}{d{AjDl}}}Dn}{{{d{K`}}{d{AjDl}}}Dn}0{{{d{Kj}}{d{AjDl}}}Dn}0{{{d{Kd}}{d{AjDl}}}Dn}0{{{d{Kf}}{d{AjDl}}}Dn}0{cc{}}000000{c{{D`{Kh{Cf{Kh}}}}}{{Ih{}{{Gl{Ad}}}}}}{{{h{CdE`}}}{{D`{JnK`}}}}{Eh{{D`{JnK`}}}}{E`{{Eb{JnEh}}}}{{{d{Kb}}Cd}Kh}{Kh{{D`{JnK`}}}}{{{d{Jn}}}E`}{{{d{Kh}}Cd}{{Cf{Kh}}}}{{{d{Jn}}Cd}{{Cf{Kh}}}}{{{d{Jn}}}{{D`{Adc}}}{}}{{{d{Kh}}}E`}{{{d{Kh}}}Cd}`{{{d{Jn}}}Eh}{{KhAd}Kh}{{{d{AjJn}}Ad}{{D`{EhKj}}}}{ce{}{}}0000000{Khc{}}{{{d{Jn}}AdAd}{{D`{{Cf{Dh}}c}}}{}}{{{d{Kh}}}Kl}{{{d{Jn}}}Kl}{AdKh}{{{d{AjKl}}}{{Cf{c}}}{}}`{{{d{Kh}}}{{Cf{Kh}}}}{{KhAd}{{D`{KhKh}}}}{{{d{Kh}}c}{{`{{Jl{}{{Gl{Kh}}}}}}}{{Gh{Cd}}}}{{{d{Jn}}c}{{`{{Jl{}{{Gl{Kh}}}}}}}{{Gh{Cd}}}}{{{d{Jn}}}Kh}{{{d{c}}}e{}{}}00000{{{d{c}}}Hh{}}000{c{{D`{e}}}{}{}}000000`0000000{{{d{c}}}Hn{}}000000`???????````{{{d{c}}}{{d{e}}}{}{}}000{{{d{Ajc}}}{{d{Aje}}}{}{}}000{{Kne}Kn{{Hj{}{{Gl{Gb}}}}L`}{{Ih{}{{Lb{c}}{Gl{Gb}}}}}}{{Kne}Kn{{Hj{}{{Gl{f}}}}L`}{{Ih{}{{Lb{c}}{Gl{f}}}}}}{{{Ld{c}}cg}{{Ld{c}}}{lj}{{Jl{}{{Gl{{Jf{f}}}}}}L`}{{Ih{}{{Lb{e}}}}}}``{{Kne}Kn{{Hj{}{{Gl{Hl}}}}L`}{{Ih{}{{Lb{c}}{Gl{Hl}}}}}}``{cc{}}000{KhKn}{Kh{{Ld{c}}}{lj}}{{Kh{d{{J`{c}}}}}{{Ld{c}}}{nlj}}``{{Knc}Kn{{Lf{{d{Gb}}}}L`Lh}}{{Knc}Kn{{Lf{{d{Fn}}}}L`Lh}}{{{Ld{c}}e}{{Ld{c}}}{L`lj}{{Lf{cCd{d{Fn}}}}L`Lhj}}{{{Ld{c}}ce}{{Ld{c}}}{L`lj}{{Lf{Cd{d{Fn}}}}L`Lh}}{{Knc}Kn{{Lf{{d{Hl}}}}L`Lh}}{ce{}{}}000``{{Kn{d{{J`{c}}}}e}Kn{jlnL`Lh}{{Gh{c}}}}{{Kne}Kn{{Hj{}{{Gl{Gb}}}}L`}{{Ih{}{{Lb{c}}}}}}{{Kne}Kn{{Hj{}{{Gl{f}}}}L`}{{Ih{}{{Lb{c}}}}}}>{{Kne}Kn{{Hj{}{{Gl{Hl}}}}L`}{{Ih{}{{Lb{c}}}}}}``{c{{D`{e}}}{}{}}0000000`{{{d{c}}}Hn{}}0006666`````````{{{d{{If{c}}}}}{{d{{Gj{{Eb{cHl}}}}}}}{}}{{{d{{If{c}}}}}{{`{{Jl{}{{Gl{{Eb{Gb{d{Gd}}}}}}}}}}}{}}{{{d{{Il{c}}}}}{{`{{Jl{}{{Gl{Cd}}}}}}}Ab}``{{{d{Aj{Il{c}}}}{Il{c}}}Anl}{{{d{Aj{If{c}}}}{Il{c}}}An{jl}}{{{d{Aj{If{c}}}}{If{c}}}{{Il{c}}}{jl}}{{{d{{If{c}}}}}{{d{{If{c}}}}}{}}{{{d{{If{c}}}}{d{e}}Adik}InAb{{Ff{}{{Fd{Lj}}}}}j{{Ih{}{{Gl{{Eb{gGb}}}}}}}{{Lf{{d{g}}{d{Fn}}}{{Ll{Dh}}}}}}{{{d{Aj{If{c}}}}e}{{Il{c}}}{jl}{{Ih{}{{Gl{{Eb{G`Df}}}}}}}}{{{d{c}}}{{d{e}}}{}{}}000000{{{d{Ajc}}}{{d{Aje}}}{}{}}000000{{{d{{If{c}}}}{d{G`}}}{{D`{HbLn}}}{}}`{c{{Cf{Hb}}}{}}{c{{Cf{Gf}}}{}}10{{{d{{If{c}}}}}{{If{c}}}j}{{{d{{M`{ce}}}}}{{M`{ce}}}jj}{{{d{{Mb{ce}}}}}{{Mb{ce}}}jj}{{{d{{Il{c}}}}}{{Il{c}}}j}{{{d{c}}{d{Aje}}}An{}{}}000{{{d{{M`{ce}}}}{d{{M`{ce}}}}}Cbll}{{{d{{Mb{ce}}}}{d{{Mb{ce}}}}}Cbll}{{}{{If{c}}}{}}{{}{{Il{c}}}{}}{{{d{{M`{ce}}}}}{{d{g}}}{}{}{}}{c{{D`{{Il{e}}}}}Db{lDd}}{{{d{{If{c}}}}{d{G`}}}{{`{{Jl{}{{Gl{{Eb{ElHl}}}}}}}}}{}}{{{d{{If{c}}}}{d{{If{c}}}}}DhDj}{{{d{{M`{ce}}}}{d{{M`{ce}}}}}DhDjDj}{{{d{{Mb{ce}}}}{d{{Mb{ce}}}}}DhDjDj}{{{d{Ln}}{d{Ln}}}Dh}{{{d{{Il{c}}}}{d{{Il{c}}}}}DhDj}{{{d{{If{c}}}}{d{e}}Adi}{{`{{Jl{}{{Gl{{Eb{g{Bn{c}}}}}}}}}}}Ab{{Ff{}{{Fd{Lj}}}}}j{{Ih{}{{Gl{{Eb{gGb}}}}}}}}0{{{d{{If{c}}}}}{{`{{Jl{}{{Gl{{Eb{Gb{d{Gd}}}}}}}}}}}{}}{{{d{{If{c}}}}{d{AjDl}}}Dnn}{{{d{{M`{ce}}}}{d{AjDl}}}Dnnn}{{{d{{Mb{ce}}}}{d{AjDl}}}Dnnn}{{{d{Ln}}{d{AjDl}}}Dn}0{{{d{{Il{c}}}}{d{AjDl}}}Dnn}{cc{}}000000{{{d{{If{c}}}}}{{`{{Jl{}{{Gl{{M`{{Md{G`}}c}}}}}}}}}{}}{{{d{{If{c}}}}{d{e}}AdHl}{{Cf{{Bj{{d{c}}}}}}}Ab{{Ff{}{{Fd{Lj}}}}}}{{{d{{If{c}}}}{d{e}}AdGb}{{Cf{{Eb{{Bj{{d{c}}}}Hl}}}}}Ab{{Ff{}{{Fd{Lj}}}}}}{{{d{{If{c}}}}Hl}{{Cf{{Md{G`}}}}}{}}{{{d{{If{c}}}}Hl}{{Cf{{M`{{Md{G`}}c}}}}}{}}{{{d{{If{c}}}}Gb}{{Cf{{d{Gd}}}}}{}}{{{d{{If{c}}}}}{{Il{c}}}{jl}}{{{d{Aj{If{c}}}}Hlc}{{Il{c}}}{jl}}{{{d{Aj{If{c}}}}HlDf}{{Il{c}}}{jl}}{{{d{Aj{If{c}}}}e}{{Il{c}}}{jl}{{Mf{{Md{G`}}}}}}{{{d{Aj{If{c}}}}GbGd}{{Il{c}}}{jl}}{ce{}{}}00000000{{{d{{If{c}}}}}Dh{}}{{{d{{Il{c}}}}}Dhl}``{{{d{{If{c}}}}{d{e}}Ad}{{`{{Jl{}{{Gl{{Mb{{Md{G`}}c}}}}}}}}}AbFf}{{{If{c}}g}{{If{e}}}{jl}{jl}{{Lf{c}{{Ll{e}}}}}}{{{Il{c}}g}{{Il{e}}}ll{{Lf{c}{{Ll{e}}}}}}{c{{If{e}}}{{Ih{}{{Gl{G`}}}}}{jl}}{{{d{Aj{Mh{cg}}}}}{{Cf{i}}}{}{}{{Lf{El{Md{G`}}}{{Ll{{Cf{e}}}}}}}{}}{{{d{Aj{Mj{cg}}}}}{{Cf{i}}}{}{}{{Lf{ElHl}{{Ll{{Cf{e}}}}}}}{}}{{{d{{If{c}}}}Gb}{{d{{Ml{Hl}}}}}{}}{{{d{{M`{ce}}}}{d{{M`{ce}}}}}{{Cf{Cb}}}H`H`}{{{d{{Mb{ce}}}}{d{{Mb{ce}}}}}{{Cf{Cb}}}H`H`}{{{d{{Il{c}}}}e}D`{lHf}Hd}{{{d{c}}}e{}{}}000{{{d{c}}}Hh{}}{{{d{{If{c}}}}{d{e}}Adik}{{D`{In}}}AbFfj{{Ih{}{{Gl{{Eb{gGb}}}}}}}{{Lf{{d{g}}{d{Fn}}}{{Ll{Dh}}}}}}{{{d{{If{c}}}}{d{e}}Adi}{{`{{Jl{}{{Gl{{D`{{Eb{g{Bn{c}}}}}}}}}}}}}AbFfj{{Ih{}{{Gl{{Eb{gGb}}}}}}}}0{c{{D`{e}}}{}{}}000000{{{d{{If{c}}}}{d{e}}AdHl}{{D`{{Cf{{Bj{{d{c}}}}}}}}}AbFf}{{{d{{If{c}}}}{d{e}}AdGb}{{D`{{Cf{{Eb{{Bj{{d{c}}}}Hl}}}}}}}AbFf}2222222{{{d{{If{c}}}}{d{e}}Ad}{{`{{Jl{}{{Gl{{D`{{Mb{{Md{G`}}c}}}}}}}}}}}AbFf}``{{{d{{If{c}}}}Hl}{{Cf{{h{Cd{d{Gd}}}}}}}{}}{{{d{{If{c}}}}Hl}{{`{{Gn{}{{Gl{{Eb{Cd{d{{Ml{Hl}}}}}}}}}}}}}{}}`{{{d{{Il{c}}}}}{{`{{Jl{}{{Gl{{Eb{Gb{d{Gd}}}}}}}}}}}{}}``{{{d{{If{c}}}}}{{`{{Jl{}{{Gl{{M`{{Md{G`}}c}}}}}}}}}{}}{{{d{c}}}Hn{}}000000{{{d{Aj{If{c}}}}Df}{{Il{c}}}{jl}}{ce{}{}}000000{{{d{{If{c}}}}ei}{{Mh{ci}}}{jl}{{Mf{{Md{G`}}}}}{}{{Lf{El{Md{G`}}}{{Ll{{Cf{g}}}}}}}}{{{d{{If{c}}}}{d{G`}}g}{{Mj{cg}}}{}{}{{Lf{ElHl}{{Ll{{Cf{e}}}}}}}}{{{d{{If{c}}}}Hlg}{{Mj{cg}}}{jl}{}{{Lf{ElHl}{{Ll{{Cf{e}}}}}}}}","D":"BOl","p":[[5,"SpkTxOutIndex",0,869],[1,"reference"],[5,"ScriptBuf",870],[5,"BTreeMap",871],[10,"Clone",872],[10,"Ord",873],[10,"Debug",874],[5,"DescriptorId",0,875],[10,"Anchor",0,876],[5,"BlockId",0,877],[5,"ConfirmationHeightAnchor",0,877],[5,"ConfirmationTimeHeightAnchor",0,877],[0,"mut"],[10,"Append",0,876],[1,"unit"],[5,"CombinedChangeSet",0,878],[5,"Hash",879],[1,"u8"],[1,"slice"],[1,"array"],[6,"ChainPosition",0,877],[6,"ConfirmationTime",0,877],[5,"FullTxOut",0,877],[5,"SpkIterator",0,880],[6,"Ordering",873],[1,"u32"],[6,"Option",881],[6,"DescriptorPublicKey",882],[6,"Descriptor",883],[10,"Borrow",884],[10,"DescriptorExt",0,875],[6,"Result",885],[10,"Deserializer",886],[10,"Deserialize",886],[1,"u64"],[1,"bool"],[10,"PartialEq",873],[5,"Formatter",874],[8,"Result",874],[5,"BlockHash",887],[1,"tuple"],[5,"ChangeSet",358,888],[5,"ChangeSet",301],[8,"ChangeSet",501],[5,"Block",887],[1,"usize"],[10,"AnchorFromBlockPosition",0,876],[5,"FromSliceError",889],[1,"str"],[17,"Error"],[10,"ChainOracle",0,890],[10,"Hash",891],[10,"Hasher",891],[10,"SliceIndex",892],[5,"Script",893],[5,"Transaction",894],[5,"OutPoint",894],[5,"TxOut",894],[5,"SignedAmount",895],[10,"RangeBounds",896],[5,"BTreeSet",897],[17,"Item"],[10,"DoubleEndedIterator",898],[10,"PartialOrd",873],[5,"Amount",895],[10,"Serializer",899],[10,"Serialize",899],[5,"String",900],[10,"ExactSizeIterator",901],[5,"Txid",894],[5,"TypeId",902],[5,"IndexedTxGraph",301],[10,"Indexer",301],[17,"ChangeSet"],[5,"TxGraph",707],[10,"IntoIterator",903],[10,"Default",904],[5,"ChangeSet",707],[5,"Balance",358],[5,"KeychainTxOutIndex",358,888],[6,"InsertDescriptorError",358,888],[5,"NoSuchKeychain",358,888],[8,"Indexed",358],[8,"KeychainIndexed",358],[5,"Vec",905],[10,"Iterator",906],[5,"LocalChain",501],[5,"MissingGenesisError",501],[5,"Header",887],[5,"CannotConnectError",501],[6,"ApplyHeaderError",501],[5,"CheckPoint",501],[5,"AlterCheckPointError",501],[5,"CheckPointIter",501],[5,"SyncRequest",643],[10,"Send",907],[17,"IntoIter"],[5,"FullScanRequest",643],[10,"FnMut",908],[10,"Sync",907],[6,"Infallible",909],[17,"Output"],[6,"CalculateFeeError",707],[5,"TxNode",707],[5,"CanonicalTx",707],[5,"Arc",910],[10,"Into",909],[5,"TxAncestors",707],[5,"TxDescendants",707],[5,"HashSet",911],[15,"Confirmed",298],[15,"Unconfirmed",298],[15,"DescriptorAlreadyAssigned",497],[15,"KeychainAlreadyAssigned",497],[5,"SyncResult",643],[5,"FullScanResult",643]],"r":[[0,876],[1,876],[2,876],[3,880],[4,877],[6,890],[7,877],[8,878],[9,877],[10,877],[11,877],[14,875],[15,875],[17,877],[18,358],[19,301],[20,358],[21,880],[22,869],[23,707],[359,888],[360,888],[363,888],[366,888],[367,888]],"b":[[39,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[40,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[131,"impl-LowerHex-for-DescriptorId"],[132,"impl-UpperHex-for-DescriptorId"],[133,"impl-Display-for-DescriptorId"],[134,"impl-Debug-for-DescriptorId"],[140,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[141,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[150,"impl-From%3CChangeSet%3CA,+ChangeSet%3CK%3E%3E%3E-for-CombinedChangeSet%3CK,+A%3E"],[151,"impl-From%3CBTreeMap%3Cu32,+Option%3CBlockHash%3E%3E%3E-for-CombinedChangeSet%3CK,+A%3E"],[152,"impl-From%3CChangeSet%3CK%3E%3E-for-CombinedChangeSet%3CK,+A%3E"],[328,"impl-From%3CChangeSet%3CK%3E%3E-for-ChangeSet%3CA,+ChangeSet%3CK%3E%3E"],[329,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[371,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[372,"impl-KeychainTxOutIndex%3CK%3E"],[404,"impl-Display-for-InsertDescriptorError%3CK%3E"],[405,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[407,"impl-Display-for-NoSuchKeychain%3CK%3E"],[408,"impl-Debug-for-NoSuchKeychain%3CK%3E"],[409,"impl-Display-for-Balance"],[410,"impl-Debug-for-Balance"],[552,"impl-Debug-for-MissingGenesisError"],[553,"impl-Display-for-MissingGenesisError"],[554,"impl-Display-for-AlterCheckPointError"],[555,"impl-Debug-for-AlterCheckPointError"],[556,"impl-Debug-for-CannotConnectError"],[557,"impl-Display-for-CannotConnectError"],[558,"impl-Display-for-ApplyHeaderError"],[559,"impl-Debug-for-ApplyHeaderError"],[773,"impl-Debug-for-CalculateFeeError"],[774,"impl-Display-for-CalculateFeeError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAOcBSwATAAIAGAAAABwAAAAeAAIAJAACACgAFwBCABMAVwAGAGMAAQBmAAQAbQAFAHQAFACMAAIAlAAAAJcAAgCbAAQAoQACAKUABQCtAAAArwABALMAAAC/AAAAxQAAAMkAAADOAAAA0wABANgABgDiAAYA7gAKAPoAFAAUAQkAIQEJADIBAAA4AQAAPAELAEkBAQBaAQAAXQEJAHEBAAB0AQAAdgETAIsBEACkAQIArwEAAMgBAQDLAQcA1gEJAOMBBADtAQQABQIZACACBQAnAgkAQQIAAE8CAgBVAgAAXAIQAG4CDQB9AgYAiAIHALMCBwC8AgcA0gIAANUCAADYAg0A6AIRAPsCBAADAwUAIgMBACUDAAAsAwEALwMHADoDBgBDAwYAVAMGAFwDBgA="}],\ +["bdk_chain",{"t":"KKKSFFSKGFFGFPPKFRFIEEIFEPPNNMNNNOOMNNNNNENNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNOONNNNNNMNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNOOONCOCNNNNNNNNNNNMNNNMNNOCEONNNNONNNNNNNDNNNNNNNOCNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNCONNNNNNNNNNNONNNNNNNNNNOOOFFNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNRKMMMMMCCFSPGPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGPFIFFPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNONNNNNNNFFFFNNNNNNNNNNNOONOONNNNNNNOONNNNNNNNNOONNNNNOONNNNNNNNONNNNNNNNGFFPPFFFFNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOONNNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorFromBlockPosition","Append","BIP32_MAX_INDEX","Balance","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","CombinedChangeSet","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeHeightAnchor","Confirmed","Confirmed","DescriptorExt","DescriptorId","Error","FullTxOut","Indexed","IndexedTxGraph","Indexer","KeychainIndexed","SpkIterator","TxGraph","Unconfirmed","Unconfirmed","add","all_zeros","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","append","as_byte_array","as_raw_hash","as_ref","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","cmp","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","confirmed","default","default","default","default","default","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_block_position","from_block_position","from_block_position","from_block_position","from_byte_array","from_engine","from_raw_hash","from_slice","from_slice_delegated","from_str","get_chain_tip","hash","hash","hash","hash","hash","hash","hash","height","immature","index","indexed_tx_graph","indexed_tx_graph","indexer","into","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_empty","is_mature","is_on_coinbase","local_chain","miniscript","network","new","new_with_range","next","nth","outpoint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","serde","serialize","serialize","serialize","serialize","serialize","serialize","serialize","spent_by","spk_client","take","take","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_string","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","last_seen","time","ChangeSet","IndexedTxGraph","append","apply_block","apply_block_relevant","apply_changeset","apply_update","as_ref","batch_insert_relevant","batch_insert_relevant_unconfirmed","batch_insert_unconfirmed","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph","index","indexer","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","ChangeSet","Indexer","apply_changeset","index_tx","index_txout","initial_changeset","is_tx_relevant","keychain_txout","spk_txout","ChangeSet","DEFAULT_LOOKAHEAD","DescriptorAlreadyAssigned","InsertDescriptorError","KeychainAlreadyAssigned","KeychainTxOutIndex","NoSuchKeychain","all_unbounded_spk_iters","append","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","default","default","deserialize","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","get_descriptor","index_of_spk","index_tx","index_txout","initial_changeset","inner","insert_descriptor","into","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","keychains_added","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","net_value","new","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_keychain_spks","revealed_spks","sent_and_received","serialize","spk_at_index","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","unused_keychain_spks","unused_spks","vzip","vzip","vzip","vzip","descriptor","existing_assignment","existing_assignment","keychain","SpkTxOutIndex","all_spks","apply_changeset","borrow","borrow_mut","clone","clone_into","default","fmt","from","index_of_spk","index_tx","index_txout","initial_changeset","insert_spk","into","is_relevant","is_tx_relevant","is_used","mark_used","net_value","outpoints","outputs_in_range","scan","scan_txout","sent_and_received","spk_at_index","to_owned","try_from","try_into","txout","txouts","txouts_in_tx","type_id","unmark_used","unused_spks","vzip","AlterCheckPointError","ApplyHeaderError","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","apply_changeset","apply_header","apply_header_connected_to","apply_update","block_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","disconnect_from","eq","eq","eq","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_block_ids","from_blocks","from_changeset","from_genesis_hash","from_header","from_tip","genesis_hash","get","get","get_chain_tip","hash","height","height","initial_changeset","insert","insert_block","into","into","into","into","into","into","into","into_iter","into_iter","is_block_in_chain","iter","iter_checkpoints","new","next","original_hash","prev","push","range","range","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","vzip","FullScanRequest","FullScanResult","SyncRequest","SyncResult","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_outpoints","chain_spks","chain_spks_for_keychain","chain_tip","chain_tip","chain_txids","chain_update","chain_update","from","from","from","from","from_chain_tip","from_chain_tip","from_keychain_txout_index","graph_update","graph_update","inspect_outpoints","inspect_spks","inspect_spks_for_all_keychains","inspect_spks_for_keychain","inspect_txids","into","into","into","into","last_active_indices","outpoints","populate_with_revealed_spks","set_outpoints","set_spks","set_spks_for_keychain","set_txids","spks","spks_by_keychain","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txids","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","append","apply_changeset","apply_update","as_ref","balance","batch_insert_unconfirmed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts","eq","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_canonical_txs","map_anchors","map_anchors","new","next","next","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","to_string","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_list_canonical_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txs","txs_with_no_anchor_or_last_seen","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_last_seen_unconfirmed","vzip","vzip","vzip","vzip","vzip","vzip","vzip","walk_ancestors","walk_conflicts","walk_descendants"],"q":[[0,"bdk_chain"],[288,"bdk_chain::ConfirmationTime"],[291,"bdk_chain::indexed_tx_graph"],[341,"bdk_chain::indexer"],[350,"bdk_chain::indexer::keychain_txout"],[461,"bdk_chain::indexer::keychain_txout::InsertDescriptorError"],[465,"bdk_chain::indexer::spk_txout"],[502,"bdk_chain::local_chain"],[644,"bdk_chain::spk_client"],[708,"bdk_chain::tx_graph"],[870,"bdk_chain::balance"],[871,"bdk_chain::descriptor_ext"],[872,"bdk_chain::tx_data_traits"],[873,"bdk_chain::chain_data"],[874,"bdk_chain::changeset"],[875,"core::cmp"],[876,"bitcoin_hashes::sha256"],[877,"core::clone"],[878,"bdk_chain::spk_iter"],[879,"core::option"],[880,"miniscript::descriptor::key"],[881,"miniscript::descriptor"],[882,"core::borrow"],[883,"core::result"],[884,"serde::de"],[885,"core::fmt"],[886,"bitcoin::blockdata::block"],[887,"bitcoin_hashes"],[888,"bdk_chain::chain_oracle"],[889,"core::hash"],[890,"core::slice::index"],[891,"core::ops::range"],[892,"serde::ser"],[893,"alloc::string"],[894,"bitcoin_units::amount"],[895,"core::any"],[896,"core::iter::traits::collect"],[897,"bitcoin::blockdata::transaction"],[898,"core::default"],[899,"alloc::collections::btree::map"],[900,"bitcoin::blockdata::script::borrowed"],[901,"core::iter::traits::double_ended"],[902,"core::iter::traits::exact_size"],[903,"bitcoin::blockdata::script::owned"],[904,"alloc::collections::btree::set"],[905,"alloc::vec"],[906,"core::iter::traits::iterator"],[907,"core::marker"],[908,"core::ops::function"],[909,"core::convert"],[910,"alloc::sync"],[911,"std::collections::hash::set"]],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,17,19,0,0,49,0,0,0,0,0,0,0,17,19,1,2,3,5,6,7,6,7,9,11,2,2,2,2,0,1,17,19,5,6,7,20,2,2,21,11,1,17,19,5,6,7,20,2,21,11,11,20,1,17,19,5,6,7,20,2,21,11,1,17,19,5,6,7,20,2,21,11,17,17,19,5,6,7,20,2,6,7,3,3,17,6,7,7,1,1,5,6,7,11,21,28,1,19,5,6,7,2,11,28,2,1,17,19,5,6,7,20,2,11,1,1,17,19,5,6,7,20,2,2,2,2,11,1,17,19,19,5,5,5,6,7,20,2,2,21,11,11,11,11,45,5,6,7,2,2,2,2,2,2,49,17,19,5,6,7,2,5,5,1,2,0,11,0,1,17,19,5,6,7,20,2,21,11,21,49,17,19,20,9,11,20,20,0,0,11,21,21,21,21,20,17,19,5,6,7,20,2,0,1,19,5,6,7,2,11,20,0,9,9,2,1,17,19,5,6,7,20,2,21,11,2,1,2,1,1,1,1,17,19,5,6,7,20,2,21,11,1,17,19,5,6,7,20,2,21,11,0,20,1,17,19,5,6,7,20,2,21,11,19,1,1,17,19,5,6,7,20,2,21,11,111,112,111,0,0,41,60,60,60,60,60,60,60,60,60,41,60,41,41,41,60,41,41,41,60,41,60,41,41,41,60,41,60,41,60,60,60,60,60,60,41,41,60,41,41,60,41,60,41,60,41,60,41,61,0,61,61,61,61,61,0,0,0,0,74,0,74,0,0,72,40,72,72,72,74,40,75,72,74,40,75,72,74,40,75,72,74,40,75,72,40,40,74,40,75,72,74,74,40,75,75,72,74,40,75,72,72,72,72,72,72,72,72,74,40,75,40,72,72,72,72,72,40,40,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,40,72,72,74,40,75,74,75,72,74,40,75,72,74,40,75,72,72,72,72,74,40,75,72,72,72,72,72,74,40,75,113,113,114,114,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,0,0,91,0,0,0,0,91,0,0,87,87,87,87,92,94,92,87,88,93,90,91,94,92,87,88,93,90,91,92,87,88,93,90,91,92,87,88,93,90,91,87,92,87,88,93,90,91,92,92,87,88,88,93,93,90,90,91,91,94,92,87,88,93,90,91,92,87,87,87,92,87,87,92,87,87,92,92,93,87,92,87,94,92,87,88,93,90,91,94,92,87,92,87,92,94,93,92,92,92,87,87,92,87,88,93,90,91,88,93,90,91,94,92,87,88,93,90,91,90,94,92,87,88,93,90,91,94,92,87,88,93,90,91,93,94,92,87,88,93,90,91,0,0,0,0,95,115,98,116,95,115,98,116,95,95,98,95,98,95,115,116,95,115,98,116,95,98,98,115,116,95,95,98,98,95,95,115,98,116,116,95,95,95,95,98,95,95,98,95,115,98,116,95,115,98,116,95,95,115,98,116,95,115,98,116,0,0,0,103,103,0,0,0,0,62,62,67,104,67,67,62,62,62,62,62,108,109,62,104,105,103,67,108,109,62,104,105,103,67,62,105,108,108,109,109,62,104,105,67,62,104,105,67,104,105,62,67,104,67,62,62,104,105,103,67,62,62,62,62,104,105,103,103,67,108,109,62,104,105,103,67,62,62,62,62,62,62,62,62,62,62,62,108,109,62,104,105,103,67,108,109,62,67,67,104,62,62,67,62,108,109,62,104,105,67,62,104,105,67,103,62,62,62,108,109,62,104,105,103,67,62,62,108,109,62,104,105,103,67,62,104,105,62,62,104,67,67,67,62,108,109,62,104,105,103,67,62,108,109,62,104,105,103,67,62,62,62],"f":"```````````````````````````{{bb}b}{{}d}{{{h{f}}}j}{{{h{j}}}j}{{{h{l}}}j}{{{h{n}}}j}``{{{h{A`Ab}}Ab}Ad}{{{h{A`{Af{ce}}}}{Af{ce}}}AdAhf}{{{h{d}}}{{h{c}}}{}}{{{h{d}}}{{h{Aj}}}}{{{h{d}}}{{h{{An{Al}}}}}}{{{h{d}}}{{h{{B`{Al}}}}}}`{{{h{c}}}{{h{e}}}{}{}}0000002000{{{h{A`c}}}{{h{A`e}}}{}{}}000000000``{{{h{b}}}b}{{{h{{Bb{c}}}}}{{Bb{c}}}Bd}{{{h{Bf}}}Bf}={{{h{l}}}l}{{{h{n}}}n}{{{h{{Bh{c}}}}}{{Bh{c}}}Bd}{{{h{d}}}d}{{{h{{Bj{c}}}}}{{Bj{c}}}Bd}{{{h{{Af{ce}}}}}{{Af{ce}}}BdBd}{{{h{c}}{h{A`e}}}Ad{}{}}000000000{{{Bb{{h{c}}}}}{{Bb{c}}}Bd}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}BlAh}{{{h{Bf}}{h{Bf}}}Bl}{{{h{j}}{h{j}}}Bl}{{{h{l}}{h{l}}}Bl}{{{h{n}}{h{n}}}Bl}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}BlAh}{{{h{d}}{h{d}}}Bl}``{{{h{f}}}Bn}0{{{h{{Bb{c}}}}}{{C`{Bn}}}f}{{{h{l}}}Bn}{{{h{n}}}Bn}``{{}b}{{}j}{{}l}{{}n}{{}{{Af{ce}}}{}{}}{{{h{{Bj{c}}}}}{{h{c}}}{{Cf{{Cd{Cb}}}}}}{{{h{Ch}}}d}{c{{Cj{b}}}Cl}{c{{Cj{Bf}}}Cl}{c{{Cj{j}}}Cl}{c{{Cj{l}}}Cl}{c{{Cj{n}}}Cl}{c{{Cj{d}}}Cl}{c{{Cj{{Af{eg}}}}}Cl{AhCn}{AhCn}}{{{h{Ch}}}D`}{{}c{}}{{{h{b}}{h{b}}}Db}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}DbDd}{{{h{Bf}}{h{Bf}}}Db}{{{h{j}}{h{j}}}Db}{{{h{l}}{h{l}}}Db}{{{h{n}}{h{n}}}Db}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}DbDd}{{{h{d}}{h{d}}}Db}{{{h{{Af{ce}}}}{h{{Af{ce}}}}}DbDdDd}{{{h{b}}{h{A`Df}}}Dh}0{{{h{{Bb{c}}}}{h{A`Df}}}DhDj}{{{h{Bf}}{h{A`Df}}}Dh}{{{h{j}}{h{A`Df}}}Dh}{{{h{l}}{h{A`Df}}}Dh}{{{h{n}}{h{A`Df}}}Dh}{{{h{{Bh{c}}}}{h{A`Df}}}DhDj}{{{h{d}}{h{A`Df}}}Dh}000{{{h{{Af{ce}}}}{h{A`Df}}}DhDjDj}{cc{}}0{{{Bb{n}}}Bf}1{{{Dn{{h{Bn}}{h{Dl}}}}}j}{{{Dn{BnDl}}}j}33333{Ajd}4{{{E`{c}}}{{Af{ce}}}{}{}}5{{{Eb{c{E`{e}}}}}{{Af{ec}}}{}{}}{Ed{{Af{ce}}}{}{}}{{{h{Ef}}jEh}Ej}{{{h{Ef}}jEh}j}{{{h{Ef}}jEh}l}{{{h{Ef}}jEh}n}{cd{}}08{{{h{{An{Al}}}}}{{Cj{dEl}}}}0{{{h{En}}}{{Cj{dc}}}{}}{{{h{{Fb{}{{F`{c}}}}}}}{{Cj{jc}}}Dj}{{{h{{Bb{c}}}}{h{A`e}}}AdFdFf}{{{h{Bf}}{h{A`c}}}AdFf}{{{h{j}}{h{A`c}}}AdFf}{{{h{l}}{h{A`c}}}AdFf}{{{h{n}}{h{A`c}}}AdFf}{{{h{d}}{h{A`c}}}AdFf}```{{{h{d}}c}{{h{e}}}{{Fh{{An{Al}}}}}{}}```{ce{}{}}0000000000{{{h{{Fb{}{{F`{c}}}}}}jj}{{Cj{{C`{Db}}c}}}Dj}{{{h{{Bb{c}}}}}Db{}}{{{h{Bf}}}Db}{{{h{{Bh{c}}}}Bn}Dbf}{{{h{Ab}}}Db}{{{h{{Af{ce}}}}}DbAhf}2````{c{{Bj{c}}}{{Cf{{Cd{Cb}}}}}}{{ce}{{Bj{c}}}{{Cf{{Cd{Cb}}}}}{{Fj{Bn}}}}{{{h{A`{Bj{c}}}}}{{C`{e}}}{{Cf{{Cd{Cb}}}}}{}}{{{h{A`{Bj{c}}}}Eh}{{C`{e}}}{{Cf{{Cd{Cb}}}}}{}}`{{{h{{Bb{c}}}}{h{{Bb{c}}}}}{{C`{Bl}}}Fl}{{{h{Bf}}{h{Bf}}}{{C`{Bl}}}}{{{h{j}}{h{j}}}{{C`{Bl}}}}{{{h{l}}{h{l}}}{{C`{Bl}}}}{{{h{n}}{h{n}}}{{C`{Bl}}}}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}{{C`{Bl}}}Fl}{{{h{d}}{h{d}}}{{C`{Bl}}}}`{{{h{b}}c}CjFn}{{{h{Bf}}c}CjFn}{{{h{j}}c}CjFn}{{{h{l}}c}CjFn}{{{h{n}}c}CjFn}{{{h{d}}c}CjFn}{{{h{{Af{ce}}}}g}Cj{AhG`}{AhG`}Fn}``{{{h{A`Ab}}}{{C`{Ab}}}}0{dc{}}{{{h{c}}}e{}{}}000000000{dAj}{{{h{c}}}Gb{}}0{{{h{b}}}Gd}`0{c{{Cj{e}}}{}{}}0000000000000000000``{{{h{c}}}Gf{}}000000000{D`Bf}`{ce{}{}}000000000`````{{{h{A`{Eb{ce}}}}{Eb{ce}}}AdfAb}{{{h{A`{Gh{ce}}}}EfBn}{{Eb{c}}}{Ejf}Gj}{{{h{A`{Gh{ce}}}}{h{Ef}}Bn}{{Eb{c}}}{Ejf}Gj}{{{h{A`{Gh{ce}}}}{Eb{c}}}AdfGj}{{{h{A`{Gh{ce}}}}{Gl{c}}}{{Eb{c}}}fGj}{{{h{{Gh{ce}}}}}{{h{{Gl{c}}}}}{}{}}{{{h{A`{Gh{ce}}}}i}{{Eb{c}}}fGj{{H`{}{{Gn{c}}}}}{{H`{}{{Gn{{Dn{{h{Hb}}g}}}}}}}}{{{h{A`{Gh{ce}}}}g}{{Eb{c}}}fGj{{H`{}{{Gn{{Dn{{h{Hb}}D`}}}}}}}}{{{h{A`{Gh{ce}}}}g}{{Eb{c}}}fGj{{H`{}{{Gn{{Dn{HbD`}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{A`c}}}{{h{A`e}}}{}{}}0{{{h{{Eb{ce}}}}}{{Eb{ce}}}BdBd}{{{h{c}}{h{A`e}}}Ad{}{}}{{}{{Gh{ce}}}{}Hd}{{}{{Eb{ce}}}{}Hd}{c{{Cj{{Eb{eg}}}}}Cl{AhCn}Cn}{{{h{{Eb{ce}}}}{h{{Eb{ce}}}}}DbDdDd}{{{h{{Gh{ce}}}}{h{A`Df}}}DhDjDj}{{{h{{Eb{ce}}}}{h{A`Df}}}DhDjDj}{cc{}}{{{E`{c}}}{{Eb{e{E`{c}}}}}{}{}}{{{Hf{c}}}{{Eb{ce}}}{}Hd}2{{{h{{Gh{ce}}}}}{{h{{Gl{c}}}}}{}{}}```{{{h{{Gh{ce}}}}}{{Eb{c}}}fGj}{{{h{A`{Gh{ce}}}}Hhc}{{Eb{c}}}fGj}{{{h{A`{Gh{ce}}}}HhD`}{{Eb{c}}}fGj}{{{h{A`{Gh{ce}}}}Hb}{{Eb{c}}}fGj}{{{h{A`{Gh{ce}}}}HjHl}{{Eb{c}}}fGj}{ce{}{}}0{{{h{{Eb{ce}}}}}DbfAb}{c{{Gh{ec}}}{}{}}{{{h{{Eb{ce}}}}g}Cj{AhG`}G`Fn}{{{h{c}}}e{}{}}{c{{Cj{e}}}{}{}}000{{{h{c}}}Gf{}}066``{{{h{A`{Gj{}{{Hn{c}}}}}}c}Ad{}}{{{h{A`{Gj{}{{Hn{c}}}}}}{h{Hb}}}c{}}{{{h{A`{Gj{}{{Hn{c}}}}}}Hj{h{Hl}}}c{}}{{{h{{Gj{}{{Hn{c}}}}}}}c{}}{{{h{{Gj{}{{Hn{c}}}}}}{h{Hb}}}Db{}}`````````{{{h{{I`{c}}}}}{{Ib{c{Bj{{Cd{Cb}}}}}}}{BdAhDj}}{{{h{A`{E`{c}}}}{E`{c}}}AdAh}{{{h{A`{I`{c}}}}{E`{c}}}Ad{BdAhDj}}{{{h{A`{I`{c}}}}e}Ad{BdAhDj}{}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{A`c}}}{{h{A`e}}}{}{}}000{{{h{{I`{c}}}}}{{I`{c}}}Bd}{{{h{{Id{c}}}}}{{Id{c}}}Bd}{{{h{{E`{c}}}}}{{E`{c}}}Bd}{{{h{{If{c}}}}}{{If{c}}}Bd}{{{h{c}}{h{A`e}}}Ad{}{}}000{{}{{I`{c}}}{}}{{}{{E`{c}}}{}}{c{{Cj{{E`{e}}}}}Cl{AhCn}}{{{h{{Id{c}}}}{h{{Id{c}}}}}DbDd}{{{h{{E`{c}}}}{h{{E`{c}}}}}DbDd}{{{h{{If{c}}}}{h{{If{c}}}}}DbDd}{{{h{{I`{c}}}}{h{A`Df}}}DhDj}{{{h{{Id{c}}}}{h{A`Df}}}DhDj}0{{{h{{E`{c}}}}{h{A`Df}}}DhDj}{{{h{{If{c}}}}{h{A`Df}}}DhDj}0{cc{}}000{{{h{{I`{c}}}}{h{c}}}{{C`{{h{{Cd{Cb}}}}}}}{BdAhDj}}{{{h{{I`{c}}}}{h{Ih}}}{{C`{{h{{Dn{cBn}}}}}}}{BdAhDj}}{{{h{A`{I`{c}}}}{h{Hb}}}e{BdAhDj}{}}{{{h{A`{I`{c}}}}Hj{h{Hl}}}e{BdAhDj}{}}{{{h{{I`{c}}}}}e{BdAhDj}{}}{{{h{{I`{c}}}}}{{h{{Ij{{Dn{cBn}}}}}}}{BdAhDj}}{{{h{A`{I`{c}}}}c{Cd{Cb}}}{{Cj{{E`{c}}{Id{c}}}}}{BdAhDj}}{ce{}{}}000{{{h{{E`{c}}}}}DbAh}{{{h{{I`{c}}}}{h{Hb}}}Db{BdAhDj}}{{{h{{I`{c}}}}cBn}Db{BdAhDj}}{{{h{{I`{c}}}}{h{c}}}{{`{{In{}{{Gn{{Il{Hj}}}}}}}}}{BdAhDj}}{{{h{{I`{c}}}}e}{{`{{In{}{{Gn{{J`{cHj}}}}}}}}}{BdAhDj}{{Fj{c}}}}{{{h{{I`{c}}}}}{{`{{In{}{{Gn{{Dn{{h{c}}{h{{Cd{Cb}}}}}}}}}}Jb}}}{BdAhDj}}``{{{h{{I`{c}}}}{h{c}}}{{C`{Bn}}}{BdAhDj}}{{{h{{I`{c}}}}}{{Ib{cBn}}}{BdAhDj}}10{{{h{{I`{c}}}}}Bn{BdAhDj}}{{{h{A`{I`{c}}}}{h{c}}Bn}Ad{BdAhDj}}{{{h{A`{I`{c}}}}cBn}Db{BdAhDj}}{{{h{{I`{c}}}}{h{Hb}}e}Jd{BdAhDj}{{Fj{c}}}}{Bn{{I`{c}}}{}}{{{h{{I`{c}}}}{h{c}}}{{C`{{Dn{BnDb}}}}}{BdAhDj}}{{{h{A`{I`{c}}}}{h{c}}}{{C`{{Dn{{Il{Jf}}{E`{c}}}}}}}{BdAhDj}}{{{h{{I`{c}}}}}{{h{{Jh{{J`{cHj}}}}}}}{BdAhDj}}1{{{h{A`{I`{c}}}}{h{c}}Bn}{{C`{{Dn{{Jj{{Il{Jf}}}}{E`{c}}}}}}}{BdAhDj}}{{{h{A`{I`{c}}}}{h{{Ib{cBn}}}}}{{E`{c}}}{BdAhDj}}{{{h{{I`{c}}}}{h{c}}}{{`{{In{}{{Gn{{Il{{h{Ih}}}}}}}}}}}{BdAhDj}}{{{h{{I`{c}}}}e}{{`{{Jl{}{{Gn{{J`{c{h{Ih}}}}}}}}}}}{BdAhDj}{{Fj{c}}}}{{{h{{I`{c}}}}{h{Hb}}e}{{Dn{GdGd}}}{BdAhDj}{{Fj{c}}}}{{{h{{E`{c}}}}e}Cj{AhG`}Fn}{{{h{{I`{c}}}}cBn}{{C`{{h{Ih}}}}}{BdAhDj}}{{{h{c}}}e{}{}}000{{{h{c}}}Gb{}}0{c{{Cj{e}}}{}{}}0000000{{{h{{I`{c}}}}Hj}{{C`{{J`{c{h{Hl}}}}}}}{BdAhDj}}{{{h{{I`{c}}}}}{{`{{In{}{{Gn{{J`{c{Dn{Hj{h{Hl}}}}}}}}}}Jb}}}{BdAhDj}}{{{h{{I`{c}}}}Hh}{{`{{In{}{{Gn{{J`{c{Dn{Hj{h{Hl}}}}}}}}}}}}}{BdAhDj}}{{{h{c}}}Gf{}}000{{{h{{I`{c}}}}{h{c}}}{{C`{{Bj{{Cd{Cb}}}}}}}{BdAhDj}}{{{h{A`{I`{c}}}}cBn}Db{BdAhDj}}{{{h{{I`{c}}}}{h{c}}}{{`{{In{}{{Gn{{Il{{h{Ih}}}}}}}}Bd}}}{BdAhDj}}{{{h{{I`{c}}}}}{{`{{In{}{{Gn{{J`{c{h{Ih}}}}}}}}Bd}}}{BdAhDj}}{ce{}{}}000`````{{{h{{Ij{c}}}}}{{h{{Ib{cJf}}}}}{BdAhDj}}{{{h{A`{Ij{c}}}}e}Ad{BdAhDj}{}}{{{h{c}}}{{h{e}}}{}{}}{{{h{A`c}}}{{h{A`e}}}{}{}}{{{h{{Ij{c}}}}}{{Ij{c}}}Bd}{{{h{c}}{h{A`e}}}Ad{}{}}{{}{{Ij{c}}}{}}{{{h{{Ij{c}}}}{h{A`Df}}}DhDj}{cc{}}{{{h{{Ij{c}}}}{h{Ih}}}{{C`{{h{c}}}}}{BdAhDj}}{{{h{A`{Ij{c}}}}{h{Hb}}}e{BdAhDj}{}}{{{h{A`{Ij{c}}}}Hj{h{Hl}}}e{BdAhDj}{}}{{{h{{Ij{c}}}}}e{BdAhDj}{}}{{{h{A`{Ij{c}}}}cJf}Db{BdAhDj}}>{{{h{{Ij{c}}}}{h{Hb}}}Db{BdAhDj}}0{{{h{{Ij{c}}}}{h{c}}}Db{BdAhDj}}{{{h{A`{Ij{c}}}}{h{c}}}Db{BdAhDj}}{{{h{{Ij{c}}}}{h{Hb}}e}Jd{BdAhDj}{{Fj{c}}}}{{{h{{Ij{c}}}}}{{h{{Jh{{Dn{cHj}}}}}}}{BdAhDj}}{{{h{{Ij{c}}}}e}{{`{{In{}{{Gn{{Dn{{h{c}}Hj}}}}}}}}}{BdAhDj}{{Fj{c}}}}{{{h{A`{Ij{c}}}}{h{Hb}}}{{Jh{c}}}{BdAhDj}}{{{h{A`{Ij{c}}}}Hj{h{Hl}}}{{C`{{h{c}}}}}{BdAhDj}}{{{h{{Ij{c}}}}{h{Hb}}e}{{Dn{GdGd}}}{BdAhDj}{{Fj{c}}}}{{{h{{Ij{c}}}}{h{c}}}{{C`{{h{Ih}}}}}{BdAhDj}}{{{h{c}}}e{}{}}{c{{Cj{e}}}{}{}}0{{{h{{Ij{c}}}}Hj}{{C`{{Dn{{h{c}}{h{Hl}}}}}}}{BdAhDj}}{{{h{{Ij{c}}}}}{{`{{In{}{{Gn{{Dn{{h{c}}Hj{h{Hl}}}}}}}}Jb}}}{BdAhDj}}{{{h{{Ij{c}}}}Hh}{{`{{In{}{{Gn{{Dn{{h{c}}Hj{h{Hl}}}}}}}}}}}{BdAhDj}}{{{h{c}}}Gf{}}={{{h{{Ij{c}}}}e}{{`{{In{}{{Gn{{Dn{{h{c}}{h{Ih}}}}}}}}Bd}}}{BdAhDj}{{Fj{c}}}}{ce{}{}}``````````{{{h{A`Jn}}{h{Ed}}}{{Cj{AdK`}}}}{{{h{A`Jn}}{h{Kb}}Bn}{{Cj{EdKd}}}}{{{h{A`Jn}}{h{Kb}}Bnj}{{Cj{EdKf}}}}{{{h{A`Jn}}Kh}{{Cj{EdKd}}}}{{{h{Kh}}}j}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{A`c}}}{{h{A`e}}}{}{}}000000{{{h{Kh}}}Kh}{{{h{Jn}}}Jn}{{{h{K`}}}K`}{{{h{Kj}}}Kj}{{{h{Kd}}}Kd}{{{h{Kf}}}Kf}{{{h{c}}{h{A`e}}}Ad{}{}}00000{{{h{A`Jn}}j}{{Cj{EdK`}}}}{{{h{Kh}}{h{Kh}}}Db}{{{h{Jn}}{h{Jn}}}Db}{{{h{K`}}{h{K`}}}Db}{{{h{Kj}}{h{Kj}}}Db}{{{h{Kd}}{h{Kd}}}Db}{{{h{Kf}}{h{Kf}}}Db}{{Khc}{{Cj{KhKh}}}{{H`{}{{Gn{j}}}}}}{{{h{Kh}}{h{A`Df}}}Dh}{{{h{Jn}}{h{A`Df}}}Dh}{{{h{K`}}{h{A`Df}}}Dh}0{{{h{Kj}}{h{A`Df}}}Dh}0{{{h{Kd}}{h{A`Df}}}Dh}0{{{h{Kf}}{h{A`Df}}}Dh}0{cc{}}000000{c{{Cj{Kh{C`{Kh}}}}}{{H`{}{{Gn{j}}}}}}{{{Ib{BnDl}}}{{Cj{JnK`}}}}{Ed{{Cj{JnK`}}}}{Dl{{Dn{JnEd}}}}{{{h{Kb}}Bn}Kh}{Kh{{Cj{JnK`}}}}{{{h{Jn}}}Dl}{{{h{Kh}}Bn}{{C`{Kh}}}}{{{h{Jn}}Bn}{{C`{Kh}}}}{{{h{Jn}}}{{Cj{jc}}}{}}{{{h{Kh}}}Dl}{{{h{Kh}}}Bn}`{{{h{Jn}}}Ed}{{Khj}Kh}{{{h{A`Jn}}j}{{Cj{EdKj}}}}{ce{}{}}0000000{Khc{}}{{{h{Jn}}jj}{{Cj{{C`{Db}}c}}}{}}{{{h{Kh}}}Kl}{{{h{Jn}}}Kl}{jKh}{{{h{A`Kl}}}{{C`{c}}}{}}`{{{h{Kh}}}{{C`{Kh}}}}{{Khj}{{Cj{KhKh}}}}{{{h{Kh}}c}{{`{{Jl{}{{Gn{Kh}}}}}}}{{Fj{Bn}}}}{{{h{Jn}}c}{{`{{Jl{}{{Gn{Kh}}}}}}}{{Fj{Bn}}}}{{{h{Jn}}}Kh}{{{h{c}}}e{}{}}00000{{{h{c}}}Gb{}}000{c{{Cj{e}}}{}{}}000000`0000000{{{h{c}}}Gf{}}000000`???????````{{{h{c}}}{{h{e}}}{}{}}000{{{h{A`c}}}{{h{A`e}}}{}{}}000{{Kne}Kn{{Jb{}{{Gn{Hj}}}}L`}{{H`{}{{Lb{c}}{Gn{Hj}}}}}}{{Kne}Kn{{Jb{}{{Gn{Jf}}}}L`}{{H`{}{{Lb{c}}{Gn{Jf}}}}}}{{{Ld{c}}cg}{{Ld{c}}}{AhBd}{{Jl{}{{Gn{{Il{Jf}}}}}}L`}{{H`{}{{Lb{e}}}}}}``{{Kne}Kn{{Jb{}{{Gn{Hh}}}}L`}{{H`{}{{Lb{c}}{Gn{Hh}}}}}}``{cc{}}000{KhKn}{Kh{{Ld{c}}}{AhBd}}{{Kh{h{{I`{c}}}}}{{Ld{c}}}{DjAhBd}}``{{Knc}Kn{{Lf{{h{Hj}}}}L`Lh}}{{Knc}Kn{{Lf{{h{Ih}}}}L`Lh}}{{{Ld{c}}e}{{Ld{c}}}{L`AhBd}{{Lf{cBn{h{Ih}}}}L`LhBd}}{{{Ld{c}}ce}{{Ld{c}}}{L`AhBd}{{Lf{Bn{h{Ih}}}}L`Lh}}{{Knc}Kn{{Lf{{h{Hh}}}}L`Lh}}{ce{}{}}000``{{Kn{h{{I`{c}}}}e}Kn{BdAhDjL`Lh}{{Fj{c}}}}{{Kne}Kn{{Jb{}{{Gn{Hj}}}}L`}{{H`{}{{Lb{c}}}}}}{{Kne}Kn{{Jb{}{{Gn{Jf}}}}L`}{{H`{}{{Lb{c}}}}}}>{{Kne}Kn{{Jb{}{{Gn{Hh}}}}L`}{{H`{}{{Lb{c}}}}}}``{c{{Cj{e}}}{}{}}0000000`{{{h{c}}}Gf{}}0006666`````````{{{h{{Gl{c}}}}}{{h{{Jh{{Dn{cHh}}}}}}}{}}{{{h{{Gl{c}}}}}{{`{{Jl{}{{Gn{{Dn{Hj{h{Hl}}}}}}}}}}}{}}{{{h{{Hf{c}}}}}{{`{{Jl{}{{Gn{Bn}}}}}}}f}``{{{h{A`{Hf{c}}}}{Hf{c}}}AdAh}{{{h{A`{Gl{c}}}}{Hf{c}}}Ad{BdAh}}{{{h{A`{Gl{c}}}}{Gl{c}}}{{Hf{c}}}{BdAh}}{{{h{{Gl{c}}}}}{{h{{Gl{c}}}}}{}}{{{h{{Gl{c}}}}{h{e}}jik}bf{{Fb{}{{F`{Lj}}}}}Bd{{H`{}{{Gn{{Dn{gHj}}}}}}}{{Lf{{h{g}}{h{Ih}}}{{Ll{Db}}}}}}{{{h{A`{Gl{c}}}}e}{{Hf{c}}}{BdAh}{{H`{}{{Gn{{Dn{HbD`}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{A`c}}}{{h{A`e}}}{}{}}000000{{{h{{Gl{c}}}}{h{Hb}}}{{Cj{GdLn}}}{}}`{c{{C`{Jd}}}{}}{c{{C`{Gd}}}{}}01{{{h{{Gl{c}}}}}{{Gl{c}}}Bd}{{{h{{M`{ce}}}}}{{M`{ce}}}BdBd}{{{h{{Mb{ce}}}}}{{Mb{ce}}}BdBd}{{{h{{Hf{c}}}}}{{Hf{c}}}Bd}{{{h{c}}{h{A`e}}}Ad{}{}}000{{{h{{M`{ce}}}}{h{{M`{ce}}}}}BlAhAh}{{{h{{Mb{ce}}}}{h{{Mb{ce}}}}}BlAhAh}{{}{{Gl{c}}}{}}{{}{{Hf{c}}}{}}{{{h{{M`{ce}}}}}{{h{g}}}{}{}{}}{c{{Cj{{Hf{e}}}}}Cl{AhCn}}{{{h{{Gl{c}}}}{h{Hb}}}{{`{{Jl{}{{Gn{{Dn{EhHh}}}}}}}}}{}}{{{h{{Gl{c}}}}{h{{Gl{c}}}}}DbDd}{{{h{{M`{ce}}}}{h{{M`{ce}}}}}DbDdDd}{{{h{{Mb{ce}}}}{h{{Mb{ce}}}}}DbDdDd}{{{h{Ln}}{h{Ln}}}Db}{{{h{{Hf{c}}}}{h{{Hf{c}}}}}DbDd}{{{h{{Gl{c}}}}{h{e}}ji}{{`{{Jl{}{{Gn{{Dn{g{Bh{c}}}}}}}}}}}f{{Fb{}{{F`{Lj}}}}}Bd{{H`{}{{Gn{{Dn{gHj}}}}}}}}0{{{h{{Gl{c}}}}}{{`{{Jl{}{{Gn{{Dn{Hj{h{Hl}}}}}}}}}}}{}}{{{h{{Gl{c}}}}{h{A`Df}}}DhDj}{{{h{{M`{ce}}}}{h{A`Df}}}DhDjDj}{{{h{{Mb{ce}}}}{h{A`Df}}}DhDjDj}{{{h{Ln}}{h{A`Df}}}Dh}0{{{h{{Hf{c}}}}{h{A`Df}}}DhDj}{cc{}}000000{{{h{{Gl{c}}}}}{{`{{Jl{}{{Gn{{M`{{Md{Hb}}c}}}}}}}}}{}}{{{h{{Gl{c}}}}{h{e}}jHh}{{C`{{Bb{{h{c}}}}}}}f{{Fb{}{{F`{Lj}}}}}}{{{h{{Gl{c}}}}{h{e}}jHj}{{C`{{Dn{{Bb{{h{c}}}}Hh}}}}}f{{Fb{}{{F`{Lj}}}}}}{{{h{{Gl{c}}}}Hh}{{C`{{Md{Hb}}}}}{}}{{{h{{Gl{c}}}}Hh}{{C`{{M`{{Md{Hb}}c}}}}}{}}{{{h{{Gl{c}}}}Hj}{{C`{{h{Hl}}}}}{}}{{{h{{Gl{c}}}}}{{Hf{c}}}{BdAh}}{{{h{A`{Gl{c}}}}Hhc}{{Hf{c}}}{BdAh}}{{{h{A`{Gl{c}}}}HhD`}{{Hf{c}}}{BdAh}}{{{h{A`{Gl{c}}}}e}{{Hf{c}}}{BdAh}{{Mf{{Md{Hb}}}}}}{{{h{A`{Gl{c}}}}HjHl}{{Hf{c}}}{BdAh}}{ce{}{}}00000000{{{h{{Gl{c}}}}}Db{}}{{{h{{Hf{c}}}}}DbAh}``{{{h{{Gl{c}}}}{h{e}}j}{{`{{Jl{}{{Gn{{Mb{{Md{Hb}}c}}}}}}}}}fFb}{{{Gl{c}}g}{{Gl{e}}}{BdAh}{BdAh}{{Lf{c}{{Ll{e}}}}}}{{{Hf{c}}g}{{Hf{e}}}AhAh{{Lf{c}{{Ll{e}}}}}}{c{{Gl{e}}}{{H`{}{{Gn{Hb}}}}}{BdAh}}{{{h{A`{Mh{cg}}}}}{{C`{i}}}{}{}{{Lf{Eh{Md{Hb}}}{{Ll{{C`{e}}}}}}}{}}{{{h{A`{Mj{cg}}}}}{{C`{i}}}{}{}{{Lf{EhHh}{{Ll{{C`{e}}}}}}}{}}{{{h{{Gl{c}}}}Hj}{{h{{Ml{Hh}}}}}{}}{{{h{{M`{ce}}}}{h{{M`{ce}}}}}{{C`{Bl}}}FlFl}{{{h{{Mb{ce}}}}{h{{Mb{ce}}}}}{{C`{Bl}}}FlFl}{{{h{{Hf{c}}}}e}Cj{AhG`}Fn}{{{h{c}}}e{}{}}000{{{h{c}}}Gb{}}{{{h{{Gl{c}}}}{h{e}}jik}{{Cj{b}}}fFbBd{{H`{}{{Gn{{Dn{gHj}}}}}}}{{Lf{{h{g}}{h{Ih}}}{{Ll{Db}}}}}}{{{h{{Gl{c}}}}{h{e}}ji}{{`{{Jl{}{{Gn{{Cj{{Dn{g{Bh{c}}}}}}}}}}}}}fFbBd{{H`{}{{Gn{{Dn{gHj}}}}}}}}0{c{{Cj{e}}}{}{}}000000{{{h{{Gl{c}}}}{h{e}}jHh}{{Cj{{C`{{Bb{{h{c}}}}}}}}}fFb}{{{h{{Gl{c}}}}{h{e}}jHj}{{Cj{{C`{{Dn{{Bb{{h{c}}}}Hh}}}}}}}fFb}2222222{{{h{{Gl{c}}}}{h{e}}j}{{`{{Jl{}{{Gn{{Cj{{Mb{{Md{Hb}}c}}}}}}}}}}}fFb}``{{{h{{Gl{c}}}}Hh}{{C`{{Ib{Bn{h{Hl}}}}}}}{}}{{{h{{Gl{c}}}}Hh}{{`{{In{}{{Gn{{Dn{Bn{h{{Ml{Hh}}}}}}}}}}}}}{}}`{{{h{{Hf{c}}}}}{{`{{Jl{}{{Gn{{Dn{Hj{h{Hl}}}}}}}}}}}{}}``{{{h{{Gl{c}}}}}{{`{{Jl{}{{Gn{{M`{{Md{Hb}}c}}}}}}}}}{}}{{{h{c}}}Gf{}}000000{{{h{A`{Gl{c}}}}D`}{{Hf{c}}}{BdAh}}{ce{}{}}000000{{{h{{Gl{c}}}}ei}{{Mh{ci}}}{BdAh}{{Mf{{Md{Hb}}}}}{}{{Lf{Eh{Md{Hb}}}{{Ll{{C`{g}}}}}}}}{{{h{{Gl{c}}}}{h{Hb}}g}{{Mj{cg}}}{}{}{{Lf{EhHh}{{Ll{{C`{e}}}}}}}}{{{h{{Gl{c}}}}Hhg}{{Mj{cg}}}{BdAh}{}{{Lf{EhHh}{{Ll{{C`{e}}}}}}}}","D":"C@`","p":[[5,"Balance",0,870],[5,"DescriptorId",0,871],[10,"Anchor",0,872],[1,"reference"],[5,"BlockId",0,873],[5,"ConfirmationHeightAnchor",0,873],[5,"ConfirmationTimeHeightAnchor",0,873],[0,"mut"],[10,"Append",0,872],[1,"unit"],[5,"CombinedChangeSet",0,874],[10,"Ord",875],[5,"Hash",876],[1,"u8"],[1,"slice"],[1,"array"],[6,"ChainPosition",0,873],[10,"Clone",877],[6,"ConfirmationTime",0,873],[5,"FullTxOut",0,873],[5,"SpkIterator",0,878],[6,"Ordering",875],[1,"u32"],[6,"Option",879],[6,"DescriptorPublicKey",880],[6,"Descriptor",881],[10,"Borrow",882],[10,"DescriptorExt",0,871],[6,"Result",883],[10,"Deserializer",884],[10,"Deserialize",884],[1,"u64"],[1,"bool"],[10,"PartialEq",875],[5,"Formatter",885],[8,"Result",885],[10,"Debug",885],[5,"BlockHash",886],[1,"tuple"],[5,"ChangeSet",350],[5,"ChangeSet",291],[8,"ChangeSet",502],[5,"Block",886],[1,"usize"],[10,"AnchorFromBlockPosition",0,872],[5,"FromSliceError",887],[1,"str"],[17,"Error"],[10,"ChainOracle",0,888],[10,"Hash",889],[10,"Hasher",889],[10,"SliceIndex",890],[10,"RangeBounds",891],[10,"PartialOrd",875],[10,"Serializer",892],[10,"Serialize",892],[5,"String",893],[5,"Amount",894],[5,"TypeId",895],[5,"IndexedTxGraph",291],[10,"Indexer",341],[5,"TxGraph",708],[17,"Item"],[10,"IntoIterator",896],[5,"Transaction",897],[10,"Default",898],[5,"ChangeSet",708],[5,"Txid",897],[5,"OutPoint",897],[5,"TxOut",897],[17,"ChangeSet"],[5,"KeychainTxOutIndex",350],[5,"BTreeMap",899],[6,"InsertDescriptorError",350],[5,"NoSuchKeychain",350],[5,"Script",900],[5,"SpkTxOutIndex",465],[8,"Indexed",0],[10,"DoubleEndedIterator",901],[8,"KeychainIndexed",0],[10,"ExactSizeIterator",902],[5,"SignedAmount",894],[5,"ScriptBuf",903],[5,"BTreeSet",904],[5,"Vec",905],[10,"Iterator",906],[5,"LocalChain",502],[5,"MissingGenesisError",502],[5,"Header",886],[5,"CannotConnectError",502],[6,"ApplyHeaderError",502],[5,"CheckPoint",502],[5,"AlterCheckPointError",502],[5,"CheckPointIter",502],[5,"SyncRequest",644],[10,"Send",907],[17,"IntoIter"],[5,"FullScanRequest",644],[10,"FnMut",908],[10,"Sync",907],[6,"Infallible",909],[17,"Output"],[6,"CalculateFeeError",708],[5,"TxNode",708],[5,"CanonicalTx",708],[5,"Arc",910],[10,"Into",909],[5,"TxAncestors",708],[5,"TxDescendants",708],[5,"HashSet",911],[15,"Confirmed",288],[15,"Unconfirmed",288],[15,"DescriptorAlreadyAssigned",461],[15,"KeychainAlreadyAssigned",461],[5,"SyncResult",644],[5,"FullScanResult",644]],"r":[[0,872],[1,872],[2,872],[3,878],[4,870],[5,873],[7,888],[8,873],[9,874],[10,873],[11,873],[12,873],[15,871],[16,871],[18,873],[20,291],[21,341],[23,878],[24,708]],"b":[[39,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[40,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[127,"impl-Display-for-Balance"],[128,"impl-Debug-for-Balance"],[135,"impl-UpperHex-for-DescriptorId"],[136,"impl-Debug-for-DescriptorId"],[137,"impl-LowerHex-for-DescriptorId"],[138,"impl-Display-for-DescriptorId"],[144,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[145,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[153,"impl-From%3CChangeSet%3CK%3E%3E-for-CombinedChangeSet%3CK,+A%3E"],[155,"impl-From%3CChangeSet%3CA,+ChangeSet%3CK%3E%3E%3E-for-CombinedChangeSet%3CK,+A%3E"],[156,"impl-From%3CBTreeMap%3Cu32,+Option%3CBlockHash%3E%3E%3E-for-CombinedChangeSet%3CK,+A%3E"],[315,"impl-From%3CChangeSet%3CK%3E%3E-for-ChangeSet%3CA,+ChangeSet%3CK%3E%3E"],[316,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[359,"impl-KeychainTxOutIndex%3CK%3E"],[360,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[384,"impl-Display-for-InsertDescriptorError%3CK%3E"],[385,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[387,"impl-Debug-for-NoSuchKeychain%3CK%3E"],[388,"impl-Display-for-NoSuchKeychain%3CK%3E"],[553,"impl-Debug-for-MissingGenesisError"],[554,"impl-Display-for-MissingGenesisError"],[555,"impl-Debug-for-AlterCheckPointError"],[556,"impl-Display-for-AlterCheckPointError"],[557,"impl-Display-for-CannotConnectError"],[558,"impl-Debug-for-CannotConnectError"],[559,"impl-Display-for-ApplyHeaderError"],[560,"impl-Debug-for-ApplyHeaderError"],[774,"impl-Display-for-CalculateFeeError"],[775,"impl-Debug-for-CalculateFeeError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAOYBTAAVAAEAGQAAABwAAQAfAAIAJQABACgAFwBCABMAVwAGAGMAAQBnAAQAbgAGAHYAFgCPAAAAkQABAJgAAACaAAAAnAABAJ8ABAClAAIAqQAFALIAAADAAAAAxgAAAMoAAADOAAEA0QAOAOQACgDwAAEA9QATAAsBCQAXAQkAJgEAACsBAAAvAQsAPAEBAEoBAABMAQkAaQEcAIwBAgCWAQAArwEAALEBDQDCAQMAygEDANQBBgDdAQIA4wEAAO0BAgDzAQAA9gEAAAYCGQAhAgUAKAIJAEICAABQAgIAVgIAAF0CEABvAg0AfgIGAIkCBwC0AgcAvQIHANMCAADWAgAA2QINAOkCEQD8AgQABAMFACMDAQAmAwAALQMBADADBwA7AwYARAMGAFUDBgBdAwYA"}],\ ["bdk_coin_select",{"t":"FFGGFFPIPFGPPPFGFPPSPPPPPFNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNHNNNONONNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNONNOOOONNNNONOOOOONNNNONNNNNNOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNOOON","n":["Bnb","BnbIter","BnbLimit","BranchStrategy","CoinSelector","CoinSelectorOpt","Continue","DecideStrategy","Duration","ExcessStrategy","ExcessStrategyKind","MinAbsoluteFee","MinDrainValue","Rounds","Selection","SelectionConstraint","SelectionError","SkipBoth","SkipInclusion","TXIN_BASE_WEIGHT","TargetFee","TargetValue","ToDrain","ToFee","ToRecipient","WeightedValue","advertise_new_score","all_selected","apply_selection","backtrack","base_weight","best_score","best_strategy","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","candidate","candidates","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_select_bnb","current_excess","current_weight","deselect","drain_value","drain_waste","drain_weight","effective_target","effective_value","eq","eq","excess","excess_strategies","fee","feerate","finish","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward","from","from","from","from","from","from","from","from","from","from","from","from","from","from","fund_outputs","hash","input_count","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_segwit","is_selected","long_term_feerate","long_term_feerate","max_extra_target","min_absolute_fee","min_drain_value","new","new","new","next","opts","partial_cmp","pool","pool_pos","recipient_value","rem_abs","rem_eff","select","select_all","select_until_finished","selected","selected","selected_absolute_value","selected_count","selected_effective_value","selected_indexes","selected_waste","selected_weight","selection","spend_drain_weight","target_feerate","target_value","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unselected","unselected_indexes","value","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","waste","weight","weight","will_continue"],"q":[[0,"bdk_coin_select"],[235,"bdk_coin_select::bnb"],[236,"core::cmp"],[237,"bdk_coin_select::coin_selector"],[238,"core::iter::traits::iterator"],[239,"core::option"],[240,"core::convert"],[241,"core::result"],[242,"core::fmt"],[243,"core::time"],[244,"bitcoin::blockdata::transaction"],[245,"core::hash"],[246,"alloc::vec"],[247,"core::marker"],[248,"alloc::string"],[249,"core::any"]],"i":[0,0,0,0,0,0,41,0,22,0,0,18,18,22,0,0,0,41,41,0,18,18,11,11,11,0,2,6,7,2,16,2,7,41,2,34,22,15,16,6,17,18,7,11,12,41,2,34,22,15,16,6,17,18,7,11,12,6,6,15,16,6,17,18,7,11,12,15,16,6,17,18,7,11,12,11,0,6,6,6,12,16,16,6,15,18,11,7,7,12,12,6,15,16,6,17,17,18,18,7,11,11,12,2,41,2,34,22,22,22,15,16,6,17,18,7,11,12,16,11,15,41,2,34,22,15,16,6,17,18,7,11,12,2,34,6,15,6,16,16,16,16,16,2,15,6,34,6,11,2,2,12,2,2,6,6,6,6,7,6,6,6,6,6,6,2,16,16,16,15,16,6,17,18,7,11,12,17,18,11,41,2,34,22,15,16,6,17,18,7,11,12,41,2,34,22,15,16,6,17,18,7,11,12,41,2,34,22,15,16,6,17,18,7,11,12,6,6,15,41,2,34,22,15,16,6,17,18,7,11,12,12,15,12,41],"f":"``````````````````````````{{{f{b{d{c}}}}c}hj}{{{f{l}}}h}{{{f{n}}{f{{A`{c}}}}}{{`{{Ad{}{{Ab{{f{c}}}}}}}}}{}}{{{f{b{d{c}}}}}hj}``{{{f{n}}}{{Aj{{f{Af}}{f{Ah}}}}}}{{{f{c}}}{{f{e}}}{}{}}00000000000{{{f{bc}}}{{f{be}}}{}{}}00000000000{{{f{l}}Al}{{f{An}}}}`{{{f{An}}}An}{{{f{B`}}}B`}{{{f{l}}}l}{{{f{Bb}}}Bb}{{{f{Bd}}}Bd}{{{f{n}}}n}{{{f{Af}}}Af}{{{f{Ah}}}Ah}{{{f{c}}{f{be}}}Bf{}{}}0000000{{{f{Af}}{f{Af}}}Bh}{{cl}{{Bj{l}}}{{Bn{Bl}}}}{{{f{l}}}C`}{{{f{l}}}Cb}{{{f{bl}}Al}h}`{{{f{B`}}}C`}`3{{{f{An}}Cd}C`}{{{f{Bd}}{f{Bd}}}h}{{{f{Af}}{f{Af}}}h}```{{{f{Ah}}}Cd}{{{f{l}}}{{Cf{nBb}}}}{{{f{An}}{f{bCh}}}Cj}{{{f{B`}}{f{bCh}}}Cj}{{{f{l}}{f{bCh}}}Cj}{{{f{Bb}}{f{bCh}}}Cj}0{{{f{Bd}}{f{bCh}}}Cj}0{{{f{n}}{f{bCh}}}Cj}{{{f{Af}}{f{bCh}}}Cj}0{{{f{Ah}}{f{bCh}}}Cj}{{{f{b{d{c}}}}h}Bfj}{cc{}}00{ClBl}1{AlBl}22222222{{{f{{A`{Cn}}}}{f{Cn}}Cb}B`}{{{f{Af}}{f{bc}}}BfD`}`{ce{}{}}00000000000{{{d{c}}{f{{Db{c}}}}}{{Dd{c}}}j}1{{{f{l}}}h}`{{{f{l}}Al}h}{{{f{B`}}}Cd}````{{l{Df{{Aj{Al{f{An}}}}}}c}{{d{c}}}j}{{DhCbh}An}{{{f{{Df{An}}}}{f{B`}}}l}{{{f{b{Dd{c}}}}}{{Bj{e}}}{jDjDl}{}}`{{{f{Af}}{f{Af}}}{{Bj{Bh}}}}`````{{{f{bl}}Al}h}{{{f{bl}}}Bf}{{{f{bl}}}{{Cf{nBb}}}}{{{f{l}}}{{`{{Ad{}{{Ab{{Aj{Al{f{An}}}}}}}}}}}}`{{{f{l}}}Dh}{{{f{l}}}Al}{{{f{l}}}C`}{{{f{l}}}{{`{{Ad{}{{Ab{Al}}}}}}}}1{{{f{l}}}Cb}````{{{f{c}}}e{}{}}0000000{{{f{c}}}Dn{}}00{c{{Cf{e}}}{}{}}00000000000000000000000{{{f{c}}}E`{}}0000000000095`{ce{}{}}00000000000```{{{f{Eb}}}h}","D":"Hh","p":[[0,"mut"],[5,"Bnb",0,235],[1,"reference"],[1,"bool"],[10,"Ord",236],[5,"CoinSelector",0,237],[5,"Selection",0,237],[1,"slice"],[17,"Item"],[10,"Iterator",238],[6,"ExcessStrategyKind",0,237],[5,"ExcessStrategy",0,237],[1,"tuple"],[1,"usize"],[5,"WeightedValue",0,237],[5,"CoinSelectorOpt",0,237],[5,"SelectionError",0,237],[6,"SelectionConstraint",0,237],[1,"unit"],[6,"Ordering",236],[6,"Option",239],[6,"BnbLimit",0,235],[10,"Into",240],[1,"i64"],[1,"u32"],[1,"f32"],[6,"Result",241],[5,"Formatter",242],[8,"Result",242],[5,"Duration",243],[5,"TxOut",244],[10,"Hasher",245],[8,"DecideStrategy",0,235],[5,"BnbIter",0,235],[5,"Vec",246],[1,"u64"],[10,"Copy",247],[10,"Display",242],[5,"String",248],[5,"TypeId",249],[6,"BranchStrategy",0,235]],"r":[[0,235],[1,235],[2,235],[3,235],[4,237],[5,237],[7,235],[9,237],[10,237],[14,237],[15,237],[16,237],[25,237],[76,235]],"b":[[95,"impl-Display-for-SelectionError"],[96,"impl-Debug-for-SelectionError"],[97,"impl-Debug-for-SelectionConstraint"],[98,"impl-Display-for-SelectionConstraint"],[100,"impl-Display-for-ExcessStrategyKind"],[101,"impl-Debug-for-ExcessStrategyKind"],[107,"impl-From%3CDuration%3E-for-BnbLimit"],[109,"impl-From%3Cusize%3E-for-BnbLimit"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAKcAGAAAAAAAAgAAAAYAAAAJAAIADgADABcAAgAcAAEAIAAAACIAKgBQAAIAVgAEAFwACwBsAAAAbgAAAHcAAQCHAAEAigABAJIADQChAAAAowAAAKYAAACqADAA3AAMAOoAAQA="}],\ ["bdk_electrum",{"t":"FFFENNNNNNENNNNNNONNNNNNNNNNNNNNNNNNNNNNN","n":["BdkElectrumClient","ElectrumFullScanResult","ElectrumSyncResult","bdk_chain","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","electrum_client","fetch_tx","fmt","from","from","from","full_scan","inner","into","into","into","new","populate_tx_cache","sync","transaction_broadcast","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","with_confirmation_height_anchor","with_confirmation_height_anchor","with_confirmation_time_height_anchor","with_confirmation_time_height_anchor"],"q":[[0,"bdk_electrum"],[41,"bdk_electrum::bdk_electrum_client"],[42,"bitcoin::blockdata::transaction"],[43,"alloc::sync"],[44,"electrum_client::types"],[45,"core::result"],[46,"electrum_client::api"],[47,"core::fmt"],[48,"bdk_chain::spk_client"],[49,"core::cmp"],[50,"core::clone"],[51,"bdk_chain::tx_graph"],[52,"core::convert"],[53,"core::any"],[54,"bdk_chain::chain_data"]],"i":[0,0,0,0,16,23,3,16,23,3,0,3,3,16,23,3,3,3,16,23,3,3,3,3,3,16,23,3,16,23,3,16,23,3,16,23,3,16,23,16,23],"f":"````{{{b{c}}}{{b{e}}}{}{}}00{{{b{dc}}}{{b{de}}}{}{}}00`{{{b{{f{c}}}}h}{{A`{{l{j}}n}}}Ab}{{{b{{f{c}}}}{b{dAd}}}AfAh}{cc{}}00{{{b{{f{c}}}}{Aj{e}}AlAlAn}{{A`{{B`{e}}n}}}Ab{BbBd}}`{ce{}{}}00{c{{f{c}}}Ab}{{{b{{f{c}}}}g}BfAb{}{{Bj{{Bh{e}}}}}}{{{b{{f{c}}}}BlAlAn}{{A`{Bnn}}}Ab}{{{b{{f{c}}}}{b{j}}}{{A`{hn}}}Ab}{c{{A`{e}}}{}{}}00000{{{b{c}}}C`{}}00666{{{B`{c}}}{{Cd{cCb}}}{}}{Bn{{Cf{Cb}}}}{{{B`{c}}{b{{f{e}}}}}{{A`{{Cd{cCh}}n}}}{}Ab}{{Bn{b{{f{c}}}}}{{A`{{Cf{Ch}}n}}}Ab}","D":"Bj","p":[[1,"reference"],[0,"mut"],[5,"BdkElectrumClient",0,41],[5,"Txid",42],[5,"Transaction",42],[5,"Arc",43],[6,"Error",44],[6,"Result",45],[10,"ElectrumApi",46],[5,"Formatter",47],[8,"Result",47],[10,"Debug",47],[5,"FullScanRequest",48],[1,"usize"],[1,"bool"],[5,"ElectrumFullScanResult",0,41],[10,"Ord",49],[10,"Clone",50],[1,"unit"],[5,"TxGraph",51],[10,"AsRef",52],[5,"SyncRequest",48],[5,"ElectrumSyncResult",0,41],[5,"TypeId",53],[5,"ConfirmationHeightAnchor",54],[5,"FullScanResult",48],[5,"SyncResult",48],[5,"ConfirmationTimeHeightAnchor",54]],"r":[[0,41],[1,41],[2,41]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABQAAwAEAAcADQAAABoACwA="}],\ ["bdk_esplora",{"t":"IKKEMMMM","n":["Error","EsploraAsyncExt","EsploraExt","esplora_client","full_scan","full_scan","sync","sync"],"q":[[0,"bdk_esplora"],[8,"bdk_esplora::blocking_ext"],[9,"bdk_chain::spk_client"],[10,"core::result"],[11,"core::cmp"],[12,"core::clone"],[13,"bdk_esplora::async_ext"],[14,"core::future::future"],[15,"alloc::boxed"],[16,"core::pin"],[17,"core::marker"]],"i":[0,0,0,0,1,10,1,10],"f":"````{{{d{b}}{f{c}}hh}{{n{{j{c}}l}}}{A`Ab}}{{{d{Ad}}{f{c}}hh}{{Aj{{Ah{Af}}}}}{A`AbAl}}{{{d{b}}Anh}{{n{B`l}}}}{{{d{Ad}}Anh}{{Aj{{Ah{Af}}}}}}","D":"A`","p":[[10,"EsploraExt",0,8],[1,"reference"],[5,"FullScanRequest",9],[1,"usize"],[5,"FullScanResult",9],[8,"Error",0,8],[6,"Result",10],[10,"Ord",11],[10,"Clone",12],[10,"EsploraAsyncExt",0,13],[10,"Future",14],[5,"Box",15],[5,"Pin",16],[10,"Send",17],[5,"SyncRequest",9],[5,"SyncResult",9]],"r":[[0,8],[1,13],[2,8]],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAQA"}],\ @@ -9,7 +9,7 @@ var searchIndex = new Map(JSON.parse('[\ ["bdk_sqlite",{"t":"GPPFNNNNNNNNNNNNNENNNNNNNNNNOO","n":["Error","Network","Sqlite","Store","borrow","borrow","borrow_mut","borrow_mut","fmt","fmt","fmt","from","from","into","into","new","read","rusqlite","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","expected","given"],"q":[[0,"bdk_sqlite"],[28,"bdk_sqlite::Error"],[30,"bdk_sqlite::store"],[31,"core::fmt"],[32,"rusqlite"],[33,"rusqlite::error"],[34,"core::result"],[35,"core::cmp"],[36,"serde::de"],[37,"serde::ser"],[38,"core::marker"],[39,"bdk_chain::tx_data_traits"],[40,"bdk_chain::changeset"],[41,"core::option"],[42,"alloc::string"],[43,"core::any"]],"i":[0,6,6,0,3,6,3,6,3,6,6,3,6,3,6,3,3,0,6,3,6,3,6,3,6,3,6,3,20,20],"f":"````{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0{{{b{{f{ce}}}}{b{dh}}}j{}{}}{{{b{l}}{b{dh}}}j}0{cc{}}0{ce{}{}}0{n{{Ab{{f{ce}}A`}}}{AdAfAhAj}{AlAfAhAj}}{{{b{d{f{ce}}}}}{{Ab{{B`{{An{ce}}}}l}}}{AdAfAhAj}{AlAfAhAj}}`{{{b{c}}}Bb{}}{c{{Ab{e}}}{}{}}000{{{b{c}}}Bd{}}055{{{b{d{f{ce}}}}{b{{An{ce}}}}}{{Ab{Bfl}}}{AdAfAhAj}{AlAfAhAj}}``","D":"Ah","p":[[1,"reference"],[0,"mut"],[5,"Store",0,30],[5,"Formatter",31],[8,"Result",31],[6,"Error",0],[5,"Connection",32],[6,"Error",33],[6,"Result",34],[10,"Ord",35],[10,"Deserialize",36],[10,"Serialize",37],[10,"Send",38],[10,"Anchor",39],[5,"CombinedChangeSet",40],[6,"Option",41],[5,"String",42],[5,"TypeId",43],[1,"unit"],[15,"Network",28]],"r":[[3,30]],"b":[[9,"impl-Debug-for-Error"],[10,"impl-Display-for-Error"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABIAAwAFAAYAEgAJAB0AAQA="}],\ ["bdk_testenv",{"t":"FEEEONNEOENNNNNNNNNNNNNNNNNNN","n":["TestEnv","anyhow","bitcoincore_rpc","bitcoind","bitcoind","borrow","borrow_mut","electrsd","electrsd","electrum_client","electrum_client","from","genesis_hash","into","invalidate_blocks","make_checkpoint_tip","mine_blocks","mine_empty_block","new","reorg","reorg_empty_blocks","reset_electrsd","rpc_client","send","try_from","try_into","type_id","vzip","wait_until_electrum_sees_block"],"q":[[0,"bdk_testenv"],[29,"electrum_client::api"],[30,"bitcoin::blockdata::block"],[31,"anyhow"],[32,"bdk_chain::local_chain"],[33,"bitcoin::address"],[34,"core::option"],[35,"alloc::vec"],[36,"bitcoincore_rpc::client"],[37,"bitcoin_units::amount"],[38,"bitcoin::blockdata::transaction"],[39,"core::result"],[40,"core::any"]],"i":[0,0,0,0,3,3,3,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],"f":"`````{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}```{{{b{f}}}{{b{{`{h}}}}}}{cc{}}{{{b{f}}}{{l{j}}}}{ce{}{}}{{{b{f}}n}{{l{A`}}}}{{{b{f}}}Ab}{{{b{f}}n{Af{Ad}}}{{l{{Ah{j}}}}}}{{{b{f}}}{{l{{Aj{nj}}}}}}{{}{{l{f}}}}{{{b{f}}n}{{l{{Ah{j}}}}}}{{{b{f}}n}{{l{{Ah{{Aj{nj}}}}}}}}{f{{l{f}}}}{{{b{f}}}{{b{{`{Al}}}}}}{{{b{f}}{b{{Ad{An}}}}B`}{{l{Bb}}}}{c{{Bd{e}}}{}{}}0{{{b{c}}}Bf{}}<{{{b{f}}}{{l{A`}}}}","D":"An","p":[[1,"reference"],[0,"mut"],[5,"TestEnv",0],[10,"ElectrumApi",29],[5,"BlockHash",30],[8,"Result",31],[1,"usize"],[1,"unit"],[5,"CheckPoint",32],[5,"Address",33],[6,"Option",34],[5,"Vec",35],[1,"tuple"],[10,"RpcApi",36],[6,"NetworkChecked",33],[5,"Amount",37],[5,"Txid",38],[6,"Result",39],[5,"TypeId",40]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA4ABAAAAAAAAgAIABYAAAAZAAMA"}],\ ["bdk_tmp_plan",{"t":"FKPPPPFFGGFFPPPGPPONNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNOOOOOONNNNNNNNOONHNNNNOOOOOOONONNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNOOOOOOOO","n":["Assets","CanDerive","Complete","DerivationError","Incomplete","Legacy","Plan","PlanKey","PlanState","RequiredSignatures","Requirements","SatisfactionMaterial","Segwitv0","SigHashP2wpkh","SigHashTaproot","SigningError","TapKey","TapScript","asset_key","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_derive","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","derivation_hint","descriptor_key","ecdsa_sigs","expected_weight","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","hash160","hash160_images","hash160_preimages","hash256","hash256_images","hash256_preimages","into","into","into","into","into","into","into","into","keys","max_locktime","min_version","plan_satisfaction","required_locktime","required_sequence","requirements","requires_hash_preimages","ripemd160","ripemd160_images","ripemd160_preimages","schnorr_sigs","sha256","sha256_images","sha256_preimages","sign_with_keymap","signatures","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_complete","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","txo_age","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","witness_version","final_script_sig","final_script_witness","keys","keys","leaf_hash","merkle_root","plan_key","plan_keys"],"q":[[0,"bdk_tmp_plan"],[151,"bdk_tmp_plan::PlanState"],[153,"bdk_tmp_plan::RequiredSignatures"],[159,"miniscript::descriptor::key"],[160,"bitcoin::bip32"],[161,"core::option"],[162,"bdk_tmp_plan::requirements"],[163,"core::clone"],[164,"bdk_tmp_plan::template"],[165,"core::fmt"],[166,"bitcoin::crypto::sighash"],[167,"miniscript::descriptor"],[168,"bitcoin::blockdata::locktime::absolute"],[169,"bitcoin::blockdata::transaction"],[170,"secp256k1"],[171,"core::result"],[172,"core::borrow"],[173,"secp256k1::context"],[174,"alloc::string"],[175,"core::any"],[176,"bitcoin::blockdata::script::witness_version"]],"i":[0,0,42,10,42,9,0,0,0,0,0,0,9,10,10,0,9,9,11,42,7,9,10,11,12,13,14,42,7,9,10,11,12,13,14,3,7,9,10,11,12,13,14,7,9,10,11,12,13,14,7,9,13,14,11,11,13,12,7,9,10,10,11,12,13,14,42,7,9,10,10,10,10,11,12,13,14,14,7,13,14,7,13,42,7,9,10,11,12,13,14,14,14,12,0,12,12,12,7,14,7,13,13,14,7,13,9,7,7,9,10,11,12,13,14,10,12,42,7,9,10,11,12,13,14,42,7,9,10,11,12,13,14,14,42,7,9,10,11,12,13,14,42,7,9,10,11,12,13,14,12,45,45,46,47,48,49,49,48],"f":"```````````````````{{{b{c}}}{{b{e}}}{}{}}0000000{{{b{dc}}}{{b{de}}}{}{}}0000000{{{b{f}}{b{h}}}{{l{j}}}}{{{b{{n{c}}}}}{{n{c}}}A`}{{{b{{Ab{c}}}}}{{Ab{c}}}A`}{{{b{Ad}}}Ad}{{{b{{Af{c}}}}}{{Af{c}}}A`}{{{b{{Ah{c}}}}}{{Ah{c}}}A`}{{{b{Aj}}}Aj}{{{b{{Al{c}}}}}{{Al{c}}}A`}{{{b{c}}{b{de}}}An{}{}}000000{{}{{n{c}}}{}}{{}{{Ab{c}}}{}}{{}Aj}{{}{{Al{c}}}{}}```{{{b{{Ah{c}}}}}B`A`}{{{b{{n{c}}}}{b{dBb}}}BdBf}{{{b{{Ab{c}}}}{b{dBb}}}BdBf}{{{b{Ad}}{b{dBb}}}Bd}0{{{b{{Af{c}}}}{b{dBb}}}BdBf}{{{b{{Ah{c}}}}{b{dBb}}}BdBf}{{{b{Aj}}{b{dBb}}}Bd}{{{b{{Al{c}}}}{b{dBb}}}BdBf}{cc{}}000{BhAd}{BjAd}{BlAd}3333``````{ce{}{}}0000000``{{{b{{Ah{c}}}}}{{l{Bn}}}A`}{{{b{{C`{h}}}}{b{{Al{c}}}}}{{l{{Ah{c}}}}}{fA`}}{{{b{{Ah{c}}}}}{{l{Cb}}}A`}{{{b{{Ah{c}}}}}{{l{Cd}}}A`}{{{b{{Ah{c}}}}}{{n{c}}}A`}{{{b{{n{c}}}}}Cf{}}```````{{{b{{Ab{Ch}}}}B`{b{Cj}}{b{{Cl{c}}}}{l{Cn}}{l{D`}}{b{d{Db{e}}}}{b{dAj}}{b{{Dd{g}}}}}{{Df{CfAd}}}{{Dj{Dh}}}{{Dj{Dl}}}{DnE`}}`{{{b{c}}}e{}{}}000000{{{b{c}}}Eb{}}{{{b{{Ah{c}}}}{b{Aj}}}{{Ed{c}}}A`}{c{{Df{e}}}{}{}}000000000000000`{{{b{c}}}Ef{}}0000000<<<<<<<<{{{b{{Ah{c}}}}}{{l{Eh}}}A`}````````","D":"Fl","p":[[1,"reference"],[0,"mut"],[10,"CanDerive",0],[5,"DefiniteDescriptorKey",159],[5,"DerivationPath",160],[6,"Option",161],[5,"Requirements",0,162],[10,"Clone",163],[6,"RequiredSignatures",0,162],[6,"SigningError",0,162],[5,"PlanKey",0,164],[5,"Plan",0],[5,"SatisfactionMaterial",0],[5,"Assets",0],[1,"unit"],[1,"usize"],[5,"Formatter",165],[8,"Result",165],[10,"Debug",165],[6,"P2wpkhError",166],[6,"Error",160],[6,"TaprootError",166],[1,"u32"],[6,"Descriptor",167],[6,"LockTime",168],[5,"Sequence",169],[1,"bool"],[6,"DescriptorPublicKey",159],[8,"KeyMap",167],[6,"Prevouts",166],[6,"TapSighashType",166],[6,"EcdsaSighashType",166],[5,"SighashCache",166],[5,"Secp256k1",170],[6,"Result",171],[5,"TxOut",169],[10,"Borrow",172],[5,"Transaction",169],[10,"Signing",173],[10,"Verification",173],[5,"String",174],[6,"PlanState",0],[5,"TypeId",175],[6,"WitnessVersion",176],[15,"Complete",151],[15,"Legacy",153],[15,"Segwitv0",153],[15,"TapScript",153],[15,"TapKey",153]],"r":[[7,164],[9,162],[10,162],[15,162]],"b":[[60,"impl-Display-for-SigningError"],[61,"impl-Debug-for-SigningError"],[70,"impl-From%3CP2wpkhError%3E-for-SigningError"],[71,"impl-From%3CError%3E-for-SigningError"],[72,"impl-From%3CTaprootError%3E-for-SigningError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAGkAEAABAAEABAABAA4AAgAUACIAOwAHAEcAAgBOAAAAUQAAAFwAAQBfAAAAYgAAAGQAAABoAAAAawAAAG0AKQCaAAEA"}],\ -["bdk_wallet",{"t":"PPEPGPFEEGEFNNDNNNNNNNNENNNNNNNNNOOCQNNNNNNNNNNQNNNNNNNNNNOOCDNONCONNNEENNNNNNNNNNNNNONNNNOHNNNNCOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMFGFPIPPPKGPPPPPPGGPFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNCONNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNMNONONNNNNNNNONNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNCNNNNNNNNNNNNONNNNNNNNHOOOOOOOOPPFPKFIGGPFPFNNNNNNNNNNNNNNNNNNMNNNHNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOGPPGPPPPPPPGPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPGPPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["External","Foreign","HdKeyPaths","Internal","KeychainKind","Local","LocalOutput","SignOptions","TxBuilder","Utxo","Wallet","WeightedUtxo","as_byte","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","confirmation_time","derivation_index","descriptor","descriptor","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fragment","from","from","from","from","hash","hash","into","into","into","into","is_spent","keychain","keys","miniscript","outpoint","outpoint","partial_cmp","psbt","satisfaction_weight","sequence","serialize","serialize","signer","template","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txout","txout","type_id","type_id","type_id","type_id","utxo","version","vzip","vzip","vzip","vzip","wallet","outpoint","psbt_input","sequence","Bare","Bare","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","FALSE","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Pkh","Pkh","Policy","ScriptContext","Segwitv0","Sh","Sh","Sh","Single","TRUE","TapKeyOrigins","Tr","Tr","Tr","Wpkh","Wpkh","Wpkh","Wsh","Wsh","Wsh","XPub","address","as_enum","as_enum","as_inner","as_node","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","build_template","build_template_mall","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_pk","check_pk","check_pk","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains_raw_pkh","derive","derived_descriptor","derived_descriptor","desc_type","descriptor_id","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","plan","plan_mall","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","substitute_raw_pkh","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","calc_checksum_bytes","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","MultiXPrv","MultiXPub","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","Single","Single","SinglePriv","SinglePub","SinglePubKey","SortedMultiVec","Tap","ValidNetworks","XOnly","XPrv","XPub","any_network","as_enum","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_template","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","full_derivation_paths","generate","generate_default","generate_default_with_aux_rand","generate_with_aux_rand","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_assets","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_single_keys","into_single_keys","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_multipath","is_multipath","is_segwit_v0","is_segwit_v0","is_taproot","is_taproot","is_uncompressed","is_x_only_key","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","n","name_str","new","num_der_paths","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","sanity_check","satisfy","script_size","serialize","sig_type","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public","to_string","to_string","to_string","to_string","top_level_checks","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","PsbtUtils","fee_amount","fee_rate","get_utxo_for","AddressInfo","ApplyBlockError","Balance","CannotConnect","ChangeSet","Descriptor","Descriptor","Descriptor","IsDust","LoadError","LoadedDescriptorDoesNotMatch","LoadedGenesisDoesNotMatch","LoadedNetworkDoesNotMatch","MissingDescriptor","MissingGenesis","MissingNetwork","NewError","NewOrLoadError","UnexpectedConnectedToHash","Update","Wallet","add","add_signer","address","all_unbounded_spk_iters","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","checkpoints","clone","clone","clone_into","clone_into","coin_selection","confirmed","default","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","eq","eq","error","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","get_descriptor_for_keychain","get_psbt_input","get_signers","get_tx","get_utxo","graph","immature","index","indexed_tx_graph","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","is_dust","is_mine","keychain","keychains","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load_from_changeset","local_chain","mark_used","network","network","new","new_or_load","new_or_load_with_genesis_hash","new_with_genesis_hash","next_derivation_index","next_unused_address","peek_address","policies","public_descriptor","reveal_addresses_to","reveal_next_address","secp_ctx","sent_and_received","serialize","sign","signer","spk_index","staged","start_full_scan","start_sync_with_revealed_spks","take_staged","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unbroadcast_transactions","unmark_used","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","connected_to_hash","expected_hash","expected","expected","got","got","got","keychain","BnBNoExactMatch","BnBTotalTriesExceeded","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Error","Excess","InsufficientFunds","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","available","needed","amount","change_fee","dust_threshold","fee","remaining_amount","BuildFeeBumpError","CoinSelection","Conversion","CreateTxError","Descriptor","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","IrreplaceableTransaction","LockTime","MiniscriptPsbt","MiniscriptPsbtError","MissingKeyOrigin","MissingNonWitnessUtxo","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","OutputUpdate","Policy","Psbt","RbfSequence","RbfSequenceCsv","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","UnknownUtxo","UnknownUtxo","UtxoUpdate","Version0","Version1Csv","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","csv","rbf","requested","required","required","required","FullyNodedExport","WalletExport","blockheight","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","fmt","from","from_str","into","label","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","External","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MiniscriptPsbt","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Psbt","Segwitv0","SighashTaproot","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","remove","sign_input","sign_input","sign_input","sign_input","sign_transaction","sign_transaction","sign_with_tap_internal_key","signers","tap_leaves_options","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","is_internal_key","AddForeignUtxoError","AddUtxoError","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","Custom","InvalidOutpoint","InvalidTxid","MissingUtxo","OnlyChange","Shuffle","TxBuilder","TxOrdering","UnknownUtxo","Untouched","add_data","add_foreign_utxo","add_foreign_utxo_with_sequence","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone_into","clone_into","clone_into","cmp","coin_selection","current_height","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","fee_absolute","fee_rate","finish","finish_with_aux_rand","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","policy_path","set_recipients","sighash","sort_tx","sort_tx_with_aux_rand","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip","foreign_utxo","input_txid","input_sort","output_sort"],"q":[[0,"bdk_wallet"],[97,"bdk_wallet::Utxo"],[100,"bdk_wallet::descriptor"],[352,"bdk_wallet::descriptor::checksum"],[354,"bdk_wallet::descriptor::error"],[386,"bdk_wallet::descriptor::policy"],[533,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[536,"bdk_wallet::descriptor::policy::Satisfaction"],[547,"bdk_wallet::descriptor::policy::SatisfiableItem"],[557,"bdk_wallet::descriptor::template"],[693,"bdk_wallet::keys"],[994,"bdk_wallet::psbt"],[998,"bdk_wallet::wallet"],[1201,"bdk_wallet::wallet::ApplyBlockError"],[1203,"bdk_wallet::wallet::NewOrLoadError"],[1209,"bdk_wallet::wallet::coin_selection"],[1301,"bdk_wallet::wallet::coin_selection::Error"],[1303,"bdk_wallet::wallet::coin_selection::Excess"],[1308,"bdk_wallet::wallet::error"],[1379,"bdk_wallet::wallet::error::CreateTxError"],[1385,"bdk_wallet::wallet::export"],[1408,"bdk_wallet::wallet::signer"],[1585,"bdk_wallet::wallet::signer::SignerContext"],[1586,"bdk_wallet::wallet::tx_builder"],[1699,"bdk_wallet::wallet::tx_builder::AddForeignUtxoError"],[1701,"bdk_wallet::wallet::tx_builder::TxOrdering"],[1703,"bdk_wallet::types"],[1704,"core::cmp"],[1705,"core::result"],[1706,"serde::de"],[1707,"core::fmt"],[1708,"core::hash"],[1709,"bitcoin::blockdata::transaction"],[1710,"core::option"],[1711,"serde::ser"],[1712,"core::any"],[1713,"miniscript::descriptor"],[1714,"bitcoin::network"],[1715,"bitcoin::address"],[1716,"miniscript"],[1717,"miniscript::miniscript"],[1718,"miniscript::miniscript::decode"],[1719,"miniscript::miniscript::context"],[1720,"miniscript::iter::tree"],[1721,"miniscript::descriptor::key"],[1722,"alloc::vec"],[1723,"miniscript::miniscript::satisfy"],[1724,"miniscript::plan"],[1725,"bitcoin_hashes::sha256"],[1726,"miniscript::miniscript::hash256"],[1727,"bitcoin_hashes::ripemd160"],[1728,"bitcoin_hashes::hash160"],[1729,"core::clone"],[1730,"secp256k1"],[1731,"bitcoin::crypto::key"],[1732,"secp256k1::context"],[1733,"bdk_chain::descriptor_ext"],[1734,"miniscript::blanket_traits"],[1735,"bitcoin::blockdata::script::owned"],[1736,"miniscript::miniscript::analyzable"],[1737,"secp256k1::context::alloc_only"],[1738,"bitcoin::blockdata::script::borrowed"],[1739,"core::ops::range"],[1740,"core::ops::function"],[1741,"miniscript::descriptor::bare"],[1742,"miniscript::descriptor::segwitv0"],[1743,"miniscript::descriptor::tr"],[1744,"miniscript::descriptor::sh"],[1745,"miniscript::miniscript::types"],[1746,"miniscript::miniscript::types::extra_props"],[1747,"miniscript::expression"],[1748,"miniscript::miniscript::iter"],[1749,"miniscript::policy::semantic"],[1750,"miniscript::policy"],[1751,"bitcoin_units::weight"],[1752,"alloc::collections::btree::map"],[1753,"alloc::string"],[1754,"hex_conservative::error"],[1755,"base58ck::error"],[1756,"bitcoin::bip32"],[1757,"miniscript::descriptor::sortedmulti"],[1758,"core::str::traits"],[1759,"core::convert"],[1760,"core::default"],[1761,"rand_core"],[1762,"bitcoin_units::amount"],[1763,"bitcoin_units::fee_rate"],[1764,"bdk_chain::keychain"],[1765,"alloc::sync"],[1766,"core::iter::traits::iterator"],[1767,"bitcoin::blockdata::block"],[1768,"bdk_chain::local_chain"],[1769,"bdk_chain::chain_data"],[1770,"core::iter::traits::collect"],[1771,"bdk_chain::tx_graph"],[1772,"bitcoin::psbt"],[1773,"bdk_chain::spk_client"],[1774,"bitcoin::psbt::map::input"],[1775,"bdk_wallet::wallet::utils"],[1776,"core::iter::traits::double_ended"],[1777,"bdk_chain::keychain::txout_index"],[1778,"bitcoin::psbt::error"],[1779,"core::marker"],[1780,"bitcoin::blockdata::script::push_bytes::primitive"],[1781,"bitcoin::blockdata::locktime::absolute"]],"i":[1,8,0,1,0,8,0,0,0,0,0,0,1,1,0,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,7,8,1,6,6,0,0,1,6,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,1,6,7,8,6,6,0,0,8,6,1,0,7,8,1,6,0,0,1,6,7,8,1,6,7,8,1,6,7,8,8,6,1,6,7,8,7,0,1,6,7,8,0,248,248,248,94,249,24,0,0,0,0,0,0,31,0,0,33,0,0,35,94,249,24,0,0,0,94,249,24,35,31,0,94,249,24,94,249,24,94,249,24,35,24,54,55,31,31,24,24,54,55,31,24,54,55,31,31,31,31,0,33,54,55,33,55,33,33,54,55,33,54,55,33,33,54,55,33,54,55,33,54,55,0,24,54,55,31,24,54,55,31,24,54,55,31,31,24,24,24,24,24,24,31,24,31,24,54,55,31,0,24,31,31,69,24,31,24,24,24,54,55,31,31,24,31,24,24,24,24,24,24,24,54,55,31,31,31,24,31,31,31,24,31,31,31,24,24,31,31,24,24,54,55,31,24,54,55,31,31,24,93,94,24,24,31,31,31,24,31,31,33,54,55,31,24,31,24,33,54,55,24,24,24,24,24,24,24,24,24,24,24,24,24,24,31,33,31,24,31,31,24,54,55,31,33,54,55,24,24,0,31,24,31,24,31,31,24,24,31,24,31,33,54,55,31,0,24,54,55,31,24,31,24,33,33,24,31,24,54,55,31,24,54,55,31,31,24,54,55,31,24,24,54,55,31,31,0,0,74,74,0,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,121,115,115,0,122,0,0,121,120,0,121,121,115,115,115,121,122,71,115,122,122,0,0,0,71,71,120,121,121,0,0,121,121,121,120,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,71,120,121,122,73,123,71,73,123,123,120,121,122,73,123,115,120,121,122,73,123,115,115,71,120,121,122,122,73,73,123,115,71,73,120,123,121,73,120,121,122,73,123,115,71,121,122,123,73,123,73,73,120,121,122,73,123,123,120,121,122,73,123,71,115,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,250,250,250,251,252,253,252,253,252,253,252,253,252,253,254,255,256,257,258,259,259,258,260,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,124,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,125,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,116,0,0,0,0,158,158,0,0,147,0,0,0,0,116,116,116,33,0,0,30,116,116,103,35,158,151,0,151,0,0,30,35,103,0,0,0,0,30,0,147,103,35,0,262,35,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,142,33,33,33,33,33,33,33,33,33,143,30,144,142,35,103,145,146,147,143,30,144,142,35,103,145,146,147,142,35,145,147,144,144,143,35,35,142,30,142,35,103,145,146,147,148,30,144,116,116,142,142,35,35,103,103,145,146,147,142,151,151,151,143,148,30,144,116,116,116,142,35,35,103,145,146,147,148,148,35,103,142,35,35,158,161,161,158,158,161,151,35,142,35,145,147,151,143,148,30,144,116,142,35,103,145,146,147,35,127,133,143,143,148,35,103,133,151,143,143,35,103,151,151,35,262,30,35,103,262,30,262,30,35,35,142,145,146,142,0,35,33,142,142,0,142,33,142,35,145,146,33,148,142,35,145,147,33,142,142,142,142,35,33,142,0,143,30,144,142,35,103,145,146,147,103,116,142,35,103,33,33,142,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,0,168,168,168,0,0,0,202,0,199,200,201,0,0,201,201,201,200,200,200,0,0,202,0,0,171,172,195,172,172,172,172,172,172,172,171,172,185,195,199,200,201,202,171,172,185,195,199,200,201,202,172,172,172,172,172,213,185,172,171,185,171,185,0,171,171,185,195,172,172,172,171,171,195,0,0,172,171,171,172,185,195,195,199,199,200,200,201,201,202,202,171,172,185,185,185,195,199,200,201,202,172,172,172,172,172,185,171,195,213,172,172,172,171,172,185,195,199,200,201,202,210,172,195,172,185,172,172,172,172,172,172,172,172,213,172,172,172,172,172,172,172,172,172,172,172,172,172,171,172,0,172,172,172,172,172,171,185,171,195,199,200,201,202,171,172,171,171,171,172,185,195,199,200,201,202,171,172,185,195,199,200,201,202,0,172,171,172,185,195,199,200,201,202,172,172,172,171,171,172,185,195,199,200,201,202,0,263,263,264,265,264,265,266,266,225,225,0,226,0,0,0,0,0,225,0,226,0,225,226,224,220,221,222,225,226,224,220,221,222,220,221,222,220,221,222,223,220,221,222,0,220,221,222,224,224,225,225,226,224,220,221,222,225,226,224,220,221,222,225,226,224,220,221,222,224,222,224,224,220,221,222,225,225,226,224,220,221,222,225,226,224,220,221,222,225,226,224,220,221,222,225,226,224,220,221,222,267,267,268,269,269,268,269,0,207,227,0,207,207,192,207,192,207,207,0,207,207,207,207,207,227,207,207,207,207,207,192,192,207,192,227,207,207,227,207,192,227,207,192,227,227,227,227,207,207,192,192,227,207,207,207,207,207,207,192,227,207,192,227,227,207,192,227,207,192,227,207,192,227,207,192,227,207,192,270,270,271,271,272,273,0,0,274,229,229,229,229,229,229,229,229,229,229,229,229,274,229,229,229,229,229,229,229,234,230,234,198,230,234,198,0,198,198,198,231,198,198,198,198,198,198,198,234,230,198,231,198,0,0,0,0,0,0,0,0,231,0,0,198,70,197,197,70,197,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,70,230,231,232,173,70,197,234,230,231,232,173,70,197,234,230,173,173,70,197,234,232,235,232,232,232,230,231,173,234,70,230,198,198,231,232,173,70,197,234,230,230,230,198,231,232,173,70,197,234,230,235,232,232,232,70,230,198,231,232,173,70,197,234,232,70,230,173,70,239,232,232,232,174,232,197,70,197,230,231,232,173,70,197,234,198,197,197,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,275,0,0,244,244,0,245,242,242,242,244,245,0,0,243,245,191,191,191,191,191,191,191,191,191,191,243,242,245,244,191,243,242,245,244,191,191,245,244,191,245,244,244,191,191,245,244,191,191,191,191,191,244,191,191,191,191,191,243,243,242,242,245,244,191,243,242,245,244,244,191,191,243,242,245,244,191,191,191,191,191,244,191,191,191,245,245,191,245,244,243,242,191,243,242,245,244,191,243,242,245,244,191,243,242,245,244,191,191,191,243,242,245,244,276,276,277,277],"f":"````````````{{{d{b}}}f}{{{d{b}}}{{d{{h{f}}}}}}`{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000`{{{d{b}}}b}{{{d{l}}}l}{{{d{n}}}n}{{{d{A`}}}A`}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{b}}{d{b}}}Ad}````{c{{Af{b}}}Ah}{c{{Af{l}}}Ah}{{{d{b}}{d{b}}}Aj}{{{d{l}}{d{l}}}Aj}{{{d{n}}{d{n}}}Aj}{{{d{A`}}{d{A`}}}Aj}{{{d{b}}{d{jAl}}}An}{{{d{l}}{d{jAl}}}An}{{{d{n}}{d{jAl}}}An}{{{d{A`}}{d{jAl}}}An}`{cc{}}000{{{d{b}}{d{jc}}}AbB`}{{{d{l}}{d{jc}}}AbB`}{ce{}{}}000````{{{d{A`}}}Bb}`{{{d{b}}{d{b}}}{{Bd{Ad}}}}``{{{d{A`}}}{{Bd{Bf}}}}{{{d{b}}c}AfBh}{{{d{l}}c}AfBh}``{{{d{c}}}e{}{}}000{c{{Af{e}}}{}{}}0000000{{{d{A`}}}{{d{Bj}}}}`{{{d{c}}}Bl{}}000`{{}{{d{Bn}}}}::::``````````````````````````````````````````{{{d{{C`{c}}}}Cb}{{Af{CdCf}}}{ChCj}}{{}Cl}0{{{d{{Cn{ce}}}}}{{d{{D`{ce}}}}}ChDb}{{{d{{d{{Cn{ce}}}}}}}{{Dd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000{{{d{{Cn{ce}}}}}{{Dn{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}0`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{Cn{cFn}}}}}{{Af{AbEh}}}Ch}2022102102{{{d{c}}}{{Af{AbEh}}}Ch}00{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{D`{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{D`{cFn}}}}}{{Af{AbEh}}}Ch}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}00`{{{d{{C`{c}}}}}{{C`{c}}}{G`Ch}}{{{d{Fl}}}Fl}{{{d{Fn}}}Fn}{{{d{{Cn{ce}}}}}{{Cn{ce}}}{G`Ch}{G`Db}}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{{C`{c}}}}{d{{C`{c}}}}}Ad{GbCh}}{{{d{Fl}}{d{Fl}}}Ad}{{{d{Fn}}{d{Fn}}}Ad}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AdChDb}{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{{C`{Df}}}}{d{{Gd{c}}}}Dh}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{Dj}}}}{d{{Gd{c}}}}}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{c}}}}}GjCh}{{{d{{C`{Df}}}}}Gl}{c{{Af{{C`{e}}}}}AhGn}{c{{Af{{Cn{eg}}}}}AhGnDb}{{{d{{C`{Df}}}}}H`}{{{d{{Cn{ce}}}}}Hb{CjCh}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}Aj{HdCh}}{{{d{Fl}}{d{Fl}}}Aj}{{{d{Fn}}{d{Fn}}}Aj}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AjChDb}`{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}`{{{d{{Cn{ce}}}}{d{Hf}}}{{Af{AbHh}}}ChDb}{{{d{Hj}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{C`{Df}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{Cn{Dfc}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}Db}{{{d{{C`{Df}}}}{d{{Gd{c}}}}{d{If}}{Ih{Dh}}}{{Af{{Bd{{Ij{Dh{C`{Gf}}}}}}Dl}}}Gh}{{{d{{C`{c}}}}{d{jAl}}}{{Af{AbIl}}}Ch}0{{{d{Fl}}{d{jAl}}}{{Af{AbIl}}}}{{{d{Fn}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{Cn{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{{C`{c}}}}e}AjCh{{J`{{d{c}}}{{In{Aj}}}}}}{{{d{{Cn{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{{{Jb{c}}}{{C`{c}}}Ch}{{{Jd{c}}}{{C`{c}}}Ch}{{{Jf{c}}}{{C`{c}}}Ch}{{{Jh{c}}}{{C`{c}}}Ch}{{{Jj{c}}}{{C`{c}}}Ch}{cc{}}{{{Jl{c}}}{{C`{c}}}Ch}111{{{D`{ce}}}{{Af{{Cn{ce}}Cf}}}ChDb}{{{D`{ce}}JnK`}{{Cn{ce}}}ChDb}{{{d{Bn}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Bn}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{Bn}}{d{Hf}}}{{Af{{Cn{ce}}Cf}}}GnDb}1{{{d{Kb}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Kb}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{{Cn{ce}}}}Kd}{{Bd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}Kd}{{Bd{c}}}ChDb}{{{d{{C`{c}}}}e}{{Af{{Ij{{Dn{{Dn{f}}}}Hb}}Cf}}}{ChCj}{{Kf{c}}}}0{{{d{{Cn{ce}}}}}AjChDb}0{{{d{{C`{Df}}}}}Aj}{{{d{{C`{c}}}}{d{je}}}Ab{KhCh}B`}{{{d{Fl}}{d{jc}}}AbB`}{{{d{Fn}}{d{jc}}}AbB`}{{{d{{Cn{ce}}}}{d{jg}}}AbChDbB`}{ce{}{}}000{{{Cn{ce}}}{{D`{ce}}}ChDb}{{{C`{Df}}}{{Af{{Dn{{C`{Df}}}}Cf}}}}{{Kj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{Kl{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}99:{{{d{{Cn{ce}}}}}{{L`{ce}}}ChDb}{{{d{{Cn{ce}}}}}{{Lb{ce}}}ChDb}{{{d{{C`{c}}}}}{{Af{{Ld{c}}Cf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{{d{{Cn{ce}}}}}{{Af{AbLf}}}ChDb}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{cFn}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{ce}}}}}{{Af{KdCf}}}ChDb}{{{d{{C`{c}}}}}{{Af{KdCf}}}Ch}1{{{d{{C`{c}}}}}{{Af{LhCf}}}Ch}{{}{{d{Bn}}}}00{{{Cn{cLj}}}{{Af{{C`{c}}Cf}}}Ch}{c{{C`{c}}}Ch}{c{{Af{{C`{c}}Cf}}}Ch}{{{Cn{cFl}}}{{Af{{C`{c}}Cf}}}Ch}{{Kd{Dn{c}}}{{Af{{C`{c}}Cf}}}Ch}{{{Jd{c}}}{{C`{c}}}Ch}{{{Jl{c}}}{{C`{c}}}Ch}4{{{Cn{cFn}}}{{Af{{C`{c}}Cf}}}Ch}3{{c{Bd{{Ll{c}}}}}{{Af{{C`{c}}Cf}}}Ch}614`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{If}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{Gd{c}}}}{d{Bn}}}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Cf}}}Mb}1{{{d{If}}{d{Hf}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}{{Bd{Ad}}}{MdCh}}{{{d{Fl}}{d{Fl}}}{{Bd{Ad}}}}{{{d{Fn}}{d{Fn}}}{{Bd{Ad}}}}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}{{Bd{Ad}}}ChDb}{{{d{c}}}KdCh}00{{{C`{Dj}}{d{c}}}{{Af{Mf{C`{Dj}}}}}{{Ed{Dj}}}}0`{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{c}}}}}{{Af{AbCf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{AbHh}}}ChDb}{{{d{{C`{c}}}}{d{jMh}}e}{{Af{AbCf}}}{ChCj}{{Kf{c}}}}{{{d{{Cn{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}0{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}{{{d{{C`{c}}}}}Hb{ChCj}}{{{d{{Cn{ce}}}}}KdChDb}{{{d{{C`{c}}}}e}AfChBh}{{{d{{Cn{ce}}}}g}AfChDbBh}{{}Mj}00{{{d{{Cn{ce}}}}{d{{M`{Fhc}}}}}{{Cn{ce}}}ChDb}`{{{d{c}}}e{}{}}000{{{d{c}}}Ml{}}0{{{d{{C`{Df}}}}{d{{M`{DfLn}}}}}Ml}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{C`{c}}}}{d{ji}}}{{Af{{Mn{g}}}}}ChCh{}{{N`{ceg}}}}{{{d{{Cn{ce}}}}{d{jk}}}{{Af{{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}0000000`{{{d{c}}}Bl{}}000={ce{}{}}000{{{d{{Cn{ce}}}}}AjChDb}{{{d{Bn}}}{{Af{MlId}}}}{{{d{Bn}}}{{Af{{Nb{f}}Id}}}}``````````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{Id}}{d{jAl}}}An}0{NdId}{CfId}{NfId}{NhId}{NjId}{NlId}{NnId}{cc{}}>{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0{{{d{c}}}Bl{}}{ce{}{}}```````````````````````````````````>>>>>>>======={{{d{O`}}}O`}{{{d{Ob}}}Ob}{{{d{Od}}}Od}{{{d{Ib}}}Ib}{{{d{Of}}}Of}{{{d{Hn}}}Hn}{{{d{c}}{d{je}}}Ab{}{}}00000``{{}Of}{{{d{O`}}{d{O`}}}Aj}{{{d{Ob}}{d{Ob}}}Aj}{{{d{Od}}{d{Od}}}Aj}{{{d{Ib}}{d{Ib}}}Aj}{{{d{Of}}{d{Of}}}Aj}{{{d{Nf}}{d{Nf}}}Aj}{{{d{O`}}{d{jAl}}}An}{{{d{Ob}}{d{jAl}}}An}{{{d{Od}}{d{jAl}}}An}{{{d{Ib}}{d{jAl}}}An}{{{d{Of}}{d{jAl}}}An}{{{d{Nf}}{d{jAl}}}An}0{{{d{Hn}}{d{jAl}}}An}{cc{}}00{AjOd}{ObIb}2222{{{d{Ib}}{d{{M`{Ml{Dn{Kd}}}}}}}{{Af{OfNf}}}}{{{d{O`}}{d{jc}}}AbB`}{{{d{Of}}{d{jc}}}AbB`}{{{d{Ob}}}Ml}`{ce{}{}}000000{{{d{Ob}}}Aj}{{{d{Od}}}Aj}{{{d{Of}}}Aj}`{{{d{Of}}{d{Of}}}{{Bd{Ad}}}}{{{d{Ib}}}Aj}`{{{d{O`}}c}AfBh}{{{d{Ob}}c}AfBh}{{{d{Od}}c}AfBh}{{{d{Ib}}c}AfBh}{{{d{Of}}c}AfBh}`{{{d{c}}}e{}{}}00000{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0000000000000{{{d{c}}}Bl{}}000000>>>>>>>``````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{OhCb}{{Af{OjId}}}}{{{Ol{c}}Cb}{{Af{OjId}}}{{On{Fl}}}}{{{A@`{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@b{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@d{c}}Cb}{{Af{OjId}}}{{On{A@f}}}}{{{A@h{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@l{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@n{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AA`{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAb{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAd{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAf{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{{{AAh{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{cc{}}00000000000{ce{}{}}00000000000{{Oj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{c{d{{Gd{I`}}}}Cb}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Id}}}{}}00000000000{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000444444444444```````````````````````````````````````````{{}AAj}{{}Cl}{{DfDh}{{Af{DjDl}}}}{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{{d{{AAl{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}00000{{{d{c}}}{{Af{AbEh}}}Ch}{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}{{{d{{AAn{ce}}}}}{{AAn{ce}}}G`Db}{{{d{Cl}}}Cl}{{{d{AB`}}}AB`}{{{d{{AAl{ce}}}}}{{AAl{ce}}}{G`Ch}{G`Db}}{{{d{Df}}}Df}{{{d{Ln}}}Ln}{{{d{ABb}}}ABb}{{{d{ABd}}}ABd}{{{d{ABf}}}ABf}{{{d{c}}{d{je}}}Ab{}{}}00000000{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Ad{GbCh}{GbDb}}{{{d{Df}}{d{Df}}}Ad}{{{d{ABb}}{d{ABb}}}Ad}{{{d{ABf}}{d{ABf}}}Ad}`{{}AB`}{{{d{{AAn{ce}}}}}{{d{g}}}{}Db{}}{{DfDh}{{Af{DjDl}}}}{c{{Af{Df}}}Ah}{{{d{{AAl{ce}}}}}Hb{CjCh}Db}{{{d{Cl}}{d{Cl}}}Aj}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Aj{HdCh}{HdDb}}{{{d{Df}}{d{Df}}}Aj}{{{d{Ln}}{d{Ln}}}Aj}{{{d{ABb}}{d{ABb}}}Aj}{{{d{ABd}}{d{ABd}}}Aj}{{{d{ABf}}{d{ABf}}}Aj}{{{d{{ABh{c}}}}{d{jAl}}}An{ABjDb}}{{{d{Cl}}{d{jAl}}}An}{{{d{AB`}}{d{jAl}}}An}{{{d{Nh}}{d{jAl}}}An}0{{{d{{AAl{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{Df}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{Ln}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{ABb}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABd}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABf}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{AAl{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{ABl{{ABn{c}}}Db}{cc{}}{AC`{{ABn{c}}}Db}1111{NnNh}2{CfNh}3{DjDf}44444{{DfAAj}{{ABh{c}}}Db}{{LnAAj}{{ABh{c}}}Db}{{{d{Bn}}}{{Af{Df}}}}{{{d{Bn}}}{{Af{Ln}}}}{{{d{Kb}}}{{Af{{AAl{ce}}Cf}}}{ACbCh}Db}{{{d{Df}}}{{Bd{ACd}}}}{{{d{Df}}}{{Dn{ACd}}}}{c{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{{}{{Af{{AAn{ADbc}}e}}}Db{}}{{{d{jc}}}{{Af{{AAn{ADbe}}g}}}{ADdADf}Db{}}{{c{d{je}}}{{Af{{AAn{{ACl{}{{ACf{g}}{ACh{c}}{ACj{i}}}}k}}i}}}{}{ADdADf}{{ACn{{h{f}}}}AD`}ABjDb}{{ce}{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{c{{Af{{AAn{ADbe}}g}}}{}Db{}}{{{d{{ABn{c}}}}}AjDb}{{{d{Df}}}Aj}{{{d{{AAl{ce}}}}{d{jg}}}Ab{KhCh}{KhDb}B`}{{{d{Df}}{d{jc}}}AbB`}{{{d{ABb}}{d{jc}}}AbB`}{{{d{ABf}}{d{jc}}}AbB`}{ce{}{}}00000000000{DfADh}{On{{Af{{ABh{c}}Nh}}}Db}{{A@j{Bd{ADj}}ACd}{{Af{{ABh{c}}Nh}}}Db}{{{AAn{ec}}}{{Af{{ABh{c}}Nh}}}Db{{On{c}}}}{{{AAn{ec}}{Bd{ADj}}ACd}{{Af{{ABh{c}}Nh}}}Db{{A@j{c}}}}{{{ABh{c}}}{{Af{{ABh{c}}Nh}}}Db}{Df{{Af{{ABh{c}}Nh}}}Db}{Ln{{Af{{ABh{c}}Nh}}}Db}{A@j{{Af{{ABn{c}}Nh}}}Db}{{{ABn{c}}}{{Af{{ABn{c}}Nh}}}Db}{{{AAn{ec}}}{{Af{{ABn{c}}Nh}}}Db{{A@j{c}}}}{{{AAn{ce}}}c{}Db}{Df{{Dn{Df}}}}{Ln{{Dn{Ln}}}}{{{ABn{c}}Cb}{{Bd{AC`}}}Db}{{{ABn{c}}Cb{d{{Gd{e}}}}}ABlDbMb}{{{d{Df}}}Aj}{{}Aj}{{{d{Cl}}}Aj}2{{{d{Ln}}}Aj}212133{{{d{{AAl{ce}}}}}KdChDb}``{{{d{{AAl{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{}AAj}{{{d{Df}}}ADl}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}44{{{d{AAj}}{d{AAj}}}AAj}5{{}{{d{Bn}}}}{{Kd{Dn{c}}}{{Af{{AAl{ce}}Cf}}}ChDb}{{{d{Df}}}Kd}``{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{ABh{c}}AAj}{{ABh{c}}}Db}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}{{Bd{Ad}}}{MdCh}{MdDb}}{{{d{Df}}{d{Df}}}{{Bd{Ad}}}}{{{d{ABb}}{d{ABb}}}{{Bd{Ad}}}}{{{d{ABf}}{d{ABf}}}{{Bd{Ad}}}}{{{d{c}}}KdCh}{{{d{{AAl{ce}}}}}{{d{{h{c}}}}}ChDb}{{{d{{AAl{ce}}}}}{{Af{AbCf}}}ChDb}{{{d{{AAl{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}{{{d{{AAl{ce}}}}}KdChDb}{{{d{Df}}c}AfBh}{{}Mj}{{{d{{AAl{ce}}}}}{{D`{ce}}}{CjCh}Db}{{}AAj}{{{d{c}}}e{}{}}00000000{{{d{Ln}}{d{{Gd{c}}}}}{{Af{DfADn}}}Mb}{{{d{c}}}Ml{}}000{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{AAl{ce}}}}{d{jk}}}{{Af{{AAl{ge}}{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000{ce{}{}}00000000000`{{{d{AE`}}}{{Bd{AEb}}}}{{{d{AE`}}}{{Bd{AEd}}}}{{{d{AE`}}Kd}{{Bd{Bj}}}}`````````````````````{{AEfAEf}AEf}{{{d{jAEh}}bAEj{AEn{AEl}}}Ab}`{{{d{AEh}}}{{M`{b{`{{AFd{}{{AF`{{AFb{Hb}}}}}}G`}}}}}}{{{d{jAEh}}{d{AFf}}Dh}{{Af{AbAFh}}}}{{{d{jAEh}}{d{AFf}}DhAFj}{{Af{AbAFl}}}}{{{d{jAEh}}c}Ab{{AG`{}{{AF`{{Ij{{d{AFn}}H`}}}}}}}}{{{d{jAEh}}c}{{Af{AbAFh}}}{{AGd{AGb}}}}{{{d{AEh}}}{{d{{AGh{AGf}}}}}}{{{d{AEh}}}AEf}{{{d{c}}}{{d{e}}}{}{}}0000000{{{d{jc}}}{{d{je}}}{}{}}0000000{{{d{jAEh}}AGj}{{Af{{AGn{AGl}}AH`}}}}{{{d{jAEh}}}{{AGn{AGl}}}}{{{d{AEh}}{d{AFn}}}{{Af{AEbAHb}}}}{{{d{AEh}}{d{AFn}}}{{Af{AEdAHb}}}}{{{d{jAEh}}{d{AFn}}}Ab}``{{{d{AEh}}}AHd}{{{d{AEf}}}AEf}{{{d{AGb}}}AGb}{{{d{c}}{d{je}}}Ab{}{}}0``{{}AEf}{{}AGb}{{{d{AHf}}}{{d{c}}}{}}{{{d{AEh}}b}{{Bd{Dh}}}}{{{d{AEh}}{d{If}}}{{Bd{{Ij{bDh}}}}}}{{{d{AEh}}b}Ml}{c{{Af{AEf}}}Ah}{{{d{AEf}}{d{AEf}}}Aj}{{{d{AHf}}{d{AHf}}}Aj}``{{{d{AEh}}{d{jAHh}}AHj}{{Af{AjAHl}}}}{{{d{AEf}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{AEh}}{d{jAl}}}An}{{{d{AGb}}{d{jAl}}}An}{{{d{AHf}}{d{jAl}}}An}0{{{d{AHn}}{d{jAl}}}An}0{{{d{AI`}}{d{jAl}}}An}0{{{d{AIb}}{d{jAl}}}An}0{{{d{AId}}{d{jAl}}}An}0{cc{}}0{{{AIf{b}}}AGb}{AIhAGb}222222{{{d{AEh}}b}{{d{Kl}}}}{{{d{AEh}}l{Bd{AIj}}Aj}{{Af{AIlAIn}}}}{{{d{AEh}}b}{{AEn{Hl}}}}{{{d{AEh}}AGj}{{Bd{{AJ`{{AEn{AFn}}AGf}}}}}}{{{d{AEh}}Bb}{{Bd{l}}}}````{{{d{jAEh}}AFj}{{Af{AjAJb}}}}{{{d{jAEh}}AFn}Aj}{{{d{jAEh}}BbBj}Ab}{ce{}{}}0000000{{{d{AJd}}{d{If}}}Aj}{{{d{AEh}}{d{If}}}Aj}`{{{d{AEh}}}{{`{{AFd{}{{AF`{{Ij{{d{b}}{d{Kl}}}}}}}}}}}}`{{{d{AEh}}}AJf}{{{d{AEh}}}{{`{{AFd{}{{AF`{l}}}}}}}}0{{{d{AEh}}b}{{`{{AJh{}{{AF`{AHf}}}}}}}}{AJj{{Af{AEhAI`}}}}{{{d{AEh}}}{{d{AJl}}}}{{{d{jAEh}}bDh}Aj}{{{d{AEh}}}Cb}`{{ccCb}{{Af{AEhAHn}}}Kj}{{cc{Bd{AJj}}Cb}{{Af{AEhAIb}}}Kj}{{cc{Bd{AJj}}CbAJn}{{Af{AEhAIb}}}Kj}{{ccCbAJn}{{Af{AEhAHn}}}Kj}{{{d{AEh}}b}Dh}{{{d{jAEh}}b}AHf}{{{d{AEh}}bDh}AHf}{{{d{AEh}}b}{{Af{{Bd{Ib}}Id}}}}{{{d{AEh}}b}{{d{Kl}}}}{{{d{jAEh}}bDh}{{`{{AFd{}{{AF`{AHf}}}}}}}}4{{{d{AEh}}}{{d{{Gd{I`}}}}}}{{{d{AEh}}{d{AFn}}}{{Ij{AEbAEb}}}}{{{d{AEf}}c}AfBh}{{{d{AEh}}{d{jAHh}}AHj}{{Af{AjAHl}}}}`{{{d{AEh}}}{{d{{AK`{b}}}}}}{{{d{AEh}}}{{Bd{{d{AJj}}}}}}{{{d{AEh}}}{{AKb{b}}}}{{{d{AEh}}}AKd}{{{d{jAEh}}}{{Bd{AJj}}}}{{{d{c}}}e{}{}}0{{{d{c}}}Ml{}}00000{{{d{AEf}}}AEb}{{{d{AEh}}}{{`{{AFd{}{{AF`{{AJ`{{AEn{AFn}}AGf}}}}}}}}}}`1{c{{Af{e}}}{}{}}000000000000000`{{{d{AEh}}}{{d{{AGh{AGf}}}}}}{{{d{c}}}Bl{}}0000000{{{d{AEh}}b}{{`{{AFd{}{{AF`{{AFb{Hb}}}}}}G`}}}}{{{d{AEh}}}{{`{{AFd{}{{AF`{{AKf{{AEn{AFn}}AGf}}}}}}}}}}{{{d{jAEh}}bDh}Aj}`{ce{}{}}0000000{{c{Bd{c}}Cb{d{{Gd{I`}}}}}{{Af{MlId}}}Kj}`````````````````````{{{d{c}}}{{d{e}}}{}{}}00000{{{d{jc}}}{{d{je}}}{}{}}00000{{{d{AKh}}}AKh}{{{d{AKj}}}AKj}{{{d{AKl}}}AKl}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{AKn}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{{d{AKh}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{{d{AKj}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{{d{AKl}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{H`AEd{d{If}}}ALd}{{}AKh}{{}AKj}{{}AKl}``{{{d{ALb}}{d{jAl}}}An}0{{{d{ALd}}{d{jAl}}}An}{{{d{AL`}}{d{jAl}}}An}{{{d{AKh}}{d{jAl}}}An}{{{d{AKj}}{d{jAl}}}An}{{{d{AKl}}{d{jAl}}}An}{cc{}}00000{ce{}{}}00000{{{d{AL`}}}H`}{H`AKl}`1{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}00000000000{{{d{c}}}Bl{}}00000666666`````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00{{{d{jc}}}{{d{je}}}{}{}}00{{{d{ALf}}}ALf}{{{d{c}}{d{je}}}Ab{}{}}{{{d{ALf}}{d{jAl}}}An}0{{{d{AIn}}{d{jAl}}}An}0{{{d{AH`}}{d{jAl}}}An}0>>{ALhAIn}{ALbAIn}{NfAIn}{ALfAIn}{IdAIn}{cc{}}{ce{}{}}00{{{d{c}}}e{}{}}{{{d{c}}}Ml{}}00{c{{Af{e}}}{}{}}00000{{{d{c}}}Bl{}}00444``````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{ALj}}}{{Bd{Ml}}}}{{{d{ALj}}}Ml}{c{{Af{ALj}}}Ah}{{{d{AEh}}{d{Bn}}Aj}{{Af{ALj{d{Bn}}}}}}{{{d{ALj}}{d{jAl}}}An}0<{{{d{Bn}}}{{Af{ALjc}}}{}}<``{{{d{ALj}}c}AfBh};::9=````````````````````````````````````{{{d{jHl}}ALlAEj{AEn{AEl}}}{{Bd{{AEn{AEl}}}}}}``{{{d{Hl}}{d{{Gd{I`}}}}}Kn}`::::::::99999999{{Kn{d{{C`{Df}}}}{d{{Gd{I`}}}}}Hl}{{{d{ALl}}}ALl}{{{d{ALn}}}ALn}{{{d{{AM`{c}}}}}{{AM`{c}}}{G`AMbABjG`}}{{{d{AEj}}}AEj}{{{d{Hl}}}Hl}{{{d{AHj}}}AHj}{{{d{AMd}}}AMd}{{{d{c}}{d{je}}}Ab{}{}}000000{{{d{ALl}}{d{ALl}}}Ad}{{{d{AEj}}{d{AEj}}}Ad}{{}AEj}{{}Hl}{{}AHj}{{}AMd}{{{d{{AM`{c}}}}}{{d{e}}}{AMbABjG`}{}}{{{d{AMf}}}{{Bd{Ln}}}}{{{d{{AM`{{AMh{AC`}}}}}}}{{Bd{Ln}}}}{{{d{{AM`{AMj}}}}}{{Bd{Ln}}}}{{{d{{AM`{{AMl{AC`}}}}}}}{{Bd{Ln}}}}{{{d{ALl}}{d{ALl}}}Aj}{{{d{ALn}}{d{ALn}}}Aj}{{{d{AEj}}{d{AEj}}}Aj}{{{d{AMd}}{d{AMd}}}Aj}{{{d{Hl}}ALl}{{Bd{{d{{AEn{AEl}}}}}}}}{{{d{ALl}}{d{jAl}}}An}{{{d{AHl}}{d{jAl}}}An}0{{{d{ALn}}{d{jAl}}}An}{{{d{{AM`{c}}}}{d{jAl}}}An{ABjAMbABjG`}}{{{d{AEj}}{d{jAl}}}An}{{{d{Hl}}{d{jAl}}}An}{{{d{AHj}}{d{jAl}}}An}{{{d{AMd}}{d{jAl}}}An}{FhALl}{ADlALl}{cc{}}0000000{{{d{ALl}}{d{jc}}}AbB`}{{{d{AMf}}{d{{Gd{I`}}}}}ALl}{{{d{{AM`{AMj}}}}{d{{Gd{I`}}}}}ALl}{{{d{{AM`{{AMl{AC`}}}}}}{d{{Gd{I`}}}}}ALl}{{{d{{AM`{{AMh{AC`}}}}}}{d{{Gd{I`}}}}}ALl}{{{d{Hl}}}{{Dn{{d{ALl}}}}}}{ce{}{}}0000000{{cALn}{{AM`{c}}}{AMbABjG`}}{{}Hl}{{{d{ALl}}{d{ALl}}}{{Bd{Ad}}}}{{{d{AEj}}{d{AEj}}}{{Bd{Ad}}}}{{{d{jHl}}ALlAEj}{{Bd{{AEn{AEl}}}}}}{{{d{AMn}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{{AM`{{AMl{AC`}}}}}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{{AM`{{AMh{AC`}}}}}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{{AM`{AMj}}}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{AEl}}{d{jAHh}}{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{c}}{d{jAHh}}{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}{}}`{{{d{Hl}}}{{Dn{{d{{AEn{AEl}}}}}}}}`{{{d{c}}}e{}{}}000000{{{d{c}}}Ml{}}``{c{{Af{e}}}{}{}}000000000000000{{{d{c}}}Bl{}}0000000{ce{}{}}0000000````````````````{{{d{j{AGn{c}}}}{d{e}}}{{d{j{AGn{c}}}}}{}{{ANb{AN`}}}}{{{d{j{AGn{c}}}}BbAIlLh}{{Af{{d{j{AGn{c}}}}ANd}}}{}}{{{d{j{AGn{c}}}}BbAIlLhBf}{{Af{{d{j{AGn{c}}}}ANd}}}{}}{{{d{j{AGn{c}}}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}HbAEb}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}Bb}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}Bb}{{Af{{d{j{AGn{c}}}}ANf}}}{}}{{{d{j{AGn{c}}}}{d{{h{Bb}}}}}{{Af{{d{j{AGn{c}}}}ANf}}}{}}{{{d{j{AGn{c}}}}Aj}{{d{j{AGn{c}}}}}{}}{{{d{c}}}{{d{e}}}{}{}}0000{{{d{jc}}}{{d{je}}}{}{}}0000{{{d{j{AGn{c}}}}ANh}{{d{j{AGn{c}}}}}{}}{{{d{{AGn{c}}}}}{{AGn{c}}}G`}{{{d{ANj}}}ANj}{{{d{ANh}}}ANh}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{ANh}}{d{ANh}}}Ad}{{{AGn{c}}e}{{AGn{e}}}{}AKn}{{{d{j{AGn{c}}}}Dh}{{d{j{AGn{c}}}}}{}}{{}ANj}{{}ANh}{{{d{j{AGn{c}}}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}Hb}{{d{j{AGn{c}}}}}{}}11{{{d{j{AGn{c}}}}Bf}{{d{j{AGn{c}}}}}{}}{{{d{ANh}}{d{ANh}}}Aj}{{{d{j{AGn{c}}}}AEb}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}AEd}{{d{j{AGn{c}}}}}{}}{{{AGn{c}}}{{Af{AHhAIn}}}AKn}{{{AGn{c}}{d{je}}}{{Af{AHhAIn}}}AKnADf}{{{d{{AGn{c}}}}{d{jAl}}}AnABj}{{{d{ANf}}{d{jAl}}}An}0{{{d{ANd}}{d{jAl}}}An}0{{{d{ANj}}{d{jAl}}}An}{{{d{ANh}}{d{jAl}}}An}{cc{}}0000{{{d{ANh}}{d{jc}}}AbB`}>{ce{}{}}0000?{{{d{j{AGn{c}}}}ANl}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}}{{d{j{AGn{c}}}}}{}}0{{{d{j{AGn{c}}}}ANj}{{d{j{AGn{c}}}}}{}}{{{d{ANh}}{d{ANh}}}{{Bd{Ad}}}}{{{d{j{AGn{c}}}}{M`{Ml{Dn{Kd}}}}b}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}{Dn{{Ij{HbAEb}}}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}AIj}{{d{j{AGn{c}}}}}{}}{{{d{ANj}}{d{jAFn}}}Ab}{{{d{ANj}}{d{jAFn}}{d{jc}}}AbADf}{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}0{c{{Af{e}}}{}{}}000000000{{{d{c}}}Bl{}}0000{{{d{j{AGn{c}}}}{Dn{Bb}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}ANn}{{d{j{AGn{c}}}}}{}}?????````","D":"FGd","p":[[6,"KeychainKind",0,1703],[1,"reference"],[1,"u8"],[1,"slice"],[0,"mut"],[5,"LocalOutput",0,1703],[5,"WeightedUtxo",0,1703],[6,"Utxo",0,1703],[1,"unit"],[6,"Ordering",1704],[6,"Result",1705],[10,"Deserializer",1706],[1,"bool"],[5,"Formatter",1707],[8,"Result",1707],[10,"Hasher",1708],[5,"OutPoint",1709],[6,"Option",1710],[5,"Sequence",1709],[10,"Serializer",1711],[5,"TxOut",1709],[5,"TypeId",1712],[1,"str"],[6,"Descriptor",100,1713],[6,"Network",1714],[5,"Address",1715],[6,"Error",1716],[10,"MiniscriptKey",1716],[10,"ToPublicKey",1716],[6,"ScriptContextEnum",693],[5,"Miniscript",100,1717],[6,"Terminal",1718],[10,"ScriptContext",693,1719],[6,"Tree",1720],[6,"DescriptorPublicKey",693,1721],[1,"u32"],[5,"DefiniteDescriptorKey",1721],[6,"ConversionError",1721],[5,"Vec",1722],[6,"Placeholder",1723],[5,"Satisfaction",1723],[10,"AssetProvider",1724],[17,"Key"],[6,"ScriptContextError",1719],[17,"Sha256"],[5,"Hash",1725],[17,"Hash256"],[5,"Hash",1726],[17,"Ripemd160"],[5,"Hash",1727],[17,"Hash160"],[5,"Hash",1728],[10,"ParseableKey",1718],[6,"Legacy",100,1719],[6,"Segwitv0",100,1719],[10,"Clone",1729],[10,"Ord",1704],[5,"Secp256k1",1730],[5,"PublicKey",1731],[10,"Verification",1732],[6,"DescriptorType",1713],[5,"DescriptorId",1733],[10,"FromStrKey",1734],[1,"u64"],[5,"ScriptBuf",1735],[10,"PartialEq",1704],[5,"ExtParams",1736],[6,"AnalysisError",1736],[10,"ExtractPolicy",100],[5,"SignersContainer",1408],[6,"BuildSatisfaction",386],[6,"All",1737],[5,"Policy",386],[6,"Error",354],[5,"Script",1738],[5,"Range",1739],[1,"tuple"],[5,"Error",1707],[17,"Output"],[10,"FnMut",1740],[5,"Pkh",1741],[5,"Wpkh",1742],[5,"Tr",1743],[5,"Sh",1744],[5,"Bare",1741],[5,"Wsh",1742],[5,"Type",1745],[5,"ExtData",1746],[5,"Tree",1747],[1,"usize"],[10,"Satisfier",1723],[10,"Hash",1708],[10,"IntoWalletDescriptor",100],[8,"ExtendedDescriptor",100],[8,"KeyMap",693,1713],[5,"Iter",1748],[5,"PkIter",1748],[6,"Policy",1749],[6,"LiftError",1750],[5,"Weight",1751],[6,"BareCtx",1719],[6,"TapTree",1743],[6,"DescriptorSecretKey",693,1721],[5,"BTreeMap",1752],[10,"Signing",1732],[10,"PartialOrd",1704],[5,"Plan",1724],[5,"TxIn",1709],[6,"SigType",1719],[5,"String",1753],[6,"TranslateErr",1716],[10,"Translator",1716],[1,"array"],[6,"HexToBytesError",1754],[6,"PolicyError",386],[6,"KeyError",693],[6,"Error",1755],[6,"ParsePublicKeyError",1731],[6,"Error",1756],[6,"PkOrF",386],[6,"SatisfiableItem",386],[6,"Satisfaction",386],[5,"Condition",386],[10,"DescriptorTemplate",557],[8,"DescriptorTemplateOut",557],[5,"P2Pkh",557],[10,"IntoDescriptorKey",693],[5,"P2Wpkh_P2Sh",557],[5,"P2Wpkh",557],[5,"P2TR",557],[6,"Tap",1719],[5,"Bip44",557],[10,"DerivableKey",693],[5,"Bip44Public",557],[5,"Bip49",557],[5,"Bip49Public",557],[5,"Bip84",557],[5,"Bip84Public",557],[5,"Bip86",557],[5,"Bip86Public",557],[8,"ValidNetworks",693],[5,"SortedMultiVec",693,1757],[5,"GeneratedKey",693],[5,"PrivateKeyGenerateOptions",693],[5,"SinglePub",693,1721],[5,"SinglePriv",693,1721],[6,"SinglePubKey",693,1721],[6,"DescriptorKey",693],[10,"Debug",1707],[5,"Xpub",1756],[6,"ExtendedKey",693],[5,"Xpriv",1756],[10,"FromStr",1758],[5,"DerivationPath",1756],[17,"Entropy"],[17,"Options"],[17,"Error"],[10,"GeneratableKey",693],[10,"AsMut",1759],[10,"Default",1760],[10,"GeneratableDefaultOptions",693],[10,"CryptoRng",1761],[10,"RngCore",1761],[5,"Assets",1724],[8,"KeySource",1756],[5,"Fingerprint",1756],[5,"DescriptorKeyParseError",1721],[10,"PsbtUtils",994],[5,"Amount",1762],[5,"FeeRate",1763],[5,"Balance",998,1764],[5,"Wallet",998],[5,"SignerOrdering",1408],[10,"TransactionSigner",1408],[5,"Arc",1765],[17,"Item"],[8,"Indexed",1764],[10,"Iterator",1766],[5,"Block",1767],[5,"CannotConnectError",1768],[5,"BlockId",1769],[6,"ApplyHeaderError",1768],[5,"Transaction",1709],[10,"IntoIterator",1770],[5,"Update",998],[10,"Into",1759],[5,"ConfirmationTimeHeightAnchor",1769],[5,"TxGraph",1771],[5,"Txid",1709],[8,"DefaultCoinSelectionAlgorithm",1209],[5,"TxBuilder",1586],[6,"BuildFeeBumpError",1308],[6,"CalculateFeeError",1771],[5,"CheckPointIter",1768],[5,"AddressInfo",998],[5,"Psbt",1772],[5,"SignOptions",1408],[6,"SignerError",1408],[6,"NewError",998],[6,"LoadError",998],[6,"NewOrLoadError",998],[6,"ApplyBlockError",998],[5,"FullScanResult",1773],[5,"SyncResult",1773],[5,"PsbtSighashType",1774],[5,"Input",1774],[6,"CreateTxError",1308],[5,"CanonicalTx",1771],[5,"AlterCheckPointError",1768],[10,"IsDust",998,1775],[5,"CheckPoint",1768],[10,"DoubleEndedIterator",1776],[8,"ChangeSet",998],[5,"LocalChain",1768],[5,"BlockHash",1767],[5,"KeychainTxOutIndex",1777],[5,"FullScanRequest",1773],[5,"SyncRequest",1773],[5,"TxNode",1771],[5,"LargestFirstCoinSelection",1209],[5,"OldestFirstCoinSelection",1209],[5,"BranchAndBoundCoinSelection",1209],[10,"CoinSelectionAlgorithm",1209],[5,"CoinSelectionResult",1209],[6,"Error",1209],[6,"Excess",1209],[6,"MiniscriptPsbtError",1308],[6,"Error",1778],[5,"FullyNodedExport",1385],[6,"SignerId",1408],[6,"SignerContext",1408],[5,"SignerWrapper",1408],[10,"Sized",1779],[6,"TapLeavesOptions",1408],[10,"SignerCommon",1408],[5,"DescriptorXKey",1721],[5,"PrivateKey",1731],[5,"DescriptorMultiXKey",1721],[10,"InputSigner",1408],[5,"PushBytes",1780],[10,"AsRef",1759],[6,"AddForeignUtxoError",1586],[6,"AddUtxoError",1586],[6,"ChangeSpendPolicy",1586],[6,"TxOrdering",1586],[6,"LockTime",1781],[1,"i32"],[15,"Foreign",97],[8,"DerivedDescriptor",100],[15,"PsbtTimelocks",533],[15,"Complete",536],[15,"Partial",536],[15,"PartialComplete",536],[15,"Sha256Preimage",547],[15,"Hash256Preimage",547],[15,"Ripemd160Preimage",547],[15,"Hash160Preimage",547],[15,"Thresh",547],[15,"Multisig",547],[15,"AbsoluteTimelock",547],[15,"RelativeTimelock",547],[10,"ExtScriptContext",693],[15,"UnexpectedConnectedToHash",1201],[15,"LoadedGenesisDoesNotMatch",1203],[15,"LoadedNetworkDoesNotMatch",1203],[15,"LoadedDescriptorDoesNotMatch",1203],[15,"InsufficientFunds",1301],[15,"Change",1303],[15,"NoChange",1303],[15,"RbfSequenceCsv",1379],[15,"LockTime",1379],[15,"FeeTooLow",1379],[15,"FeeRateTooLow",1379],[8,"WalletExport",1385],[15,"Tap",1585],[15,"InvalidTxid",1699],[15,"Custom",1701]],"r":[[2,100],[4,1703],[6,1703],[7,1408],[8,1586],[9,1703],[10,998],[11,1703],[70,998],[71,100],[104,1713],[106,1721],[113,1719],[114,1717],[119,386],[120,1719],[121,1719],[155,352],[696,1721],[697,1721],[712,1713],[722,1719],[727,1721],[728,1721],[729,1721],[730,1757],[1000,1764],[1006,1775]],"b":[[193,"impl-Descriptor%3CDescriptorPublicKey%3E"],[194,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[213,"impl-Display-for-Descriptor%3CPk%3E"],[214,"impl-Debug-for-Descriptor%3CPk%3E"],[217,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[218,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[221,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[222,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[223,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[224,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[225,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[227,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[370,"impl-Debug-for-Error"],[371,"impl-Display-for-Error"],[372,"impl-From%3CHexToBytesError%3E-for-Error"],[373,"impl-From%3CError%3E-for-Error"],[374,"impl-From%3CPolicyError%3E-for-Error"],[375,"impl-From%3CKeyError%3E-for-Error"],[376,"impl-From%3CError%3E-for-Error"],[377,"impl-From%3CParsePublicKeyError%3E-for-Error"],[378,"impl-From%3CError%3E-for-Error"],[461,"impl-Debug-for-PolicyError"],[462,"impl-Display-for-PolicyError"],[811,"impl-Display-for-KeyError"],[812,"impl-Debug-for-KeyError"],[813,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[814,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[815,"impl-Display-for-DescriptorPublicKey"],[816,"impl-Debug-for-DescriptorPublicKey"],[817,"impl-Debug-for-DescriptorSecretKey"],[818,"impl-Display-for-DescriptorSecretKey"],[823,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[825,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[830,"impl-From%3CError%3E-for-KeyError"],[832,"impl-From%3CError%3E-for-KeyError"],[874,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[875,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1071,"impl-Display-for-Balance"],[1072,"impl-Debug-for-Balance"],[1075,"impl-Debug-for-AddressInfo"],[1076,"impl-Display-for-AddressInfo"],[1077,"impl-Debug-for-NewError"],[1078,"impl-Display-for-NewError"],[1079,"impl-Display-for-LoadError"],[1080,"impl-Debug-for-LoadError"],[1081,"impl-Debug-for-NewOrLoadError"],[1082,"impl-Display-for-NewOrLoadError"],[1083,"impl-Display-for-ApplyBlockError"],[1084,"impl-Debug-for-ApplyBlockError"],[1087,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[1088,"impl-From%3CSyncResult%3E-for-Update"],[1250,"impl-Display-for-Error"],[1251,"impl-Debug-for-Error"],[1346,"impl-Display-for-MiniscriptPsbtError"],[1347,"impl-Debug-for-MiniscriptPsbtError"],[1348,"impl-Display-for-CreateTxError"],[1349,"impl-Debug-for-CreateTxError"],[1350,"impl-Debug-for-BuildFeeBumpError"],[1351,"impl-Display-for-BuildFeeBumpError"],[1354,"impl-From%3CError%3E-for-CreateTxError"],[1355,"impl-From%3CError%3E-for-CreateTxError"],[1356,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1357,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1358,"impl-From%3CError%3E-for-CreateTxError"],[1395,"impl-Display-for-FullyNodedExport"],[1396,"impl-Debug-for-FullyNodedExport"],[1488,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1489,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1490,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1497,"impl-Debug-for-SignerError"],[1498,"impl-Display-for-SignerError"],[1505,"impl-From%3CHash%3E-for-SignerId"],[1506,"impl-From%3CFingerprint%3E-for-SignerId"],[1517,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1518,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1519,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1535,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1536,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1537,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1643,"impl-Debug-for-AddUtxoError"],[1644,"impl-Display-for-AddUtxoError"],[1645,"impl-Display-for-AddForeignUtxoError"],[1646,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAAMEAAwEPAR8DeANrBQ==","e":"OzAAAAEAAG0DfAADAAAACAABAAsAAAAOABMAJgAJADUAAQA+AAAAQQAAAEUADwBXAAMAXQADAGoAAAB4AAAAjAABAI8AAACRAAcAnAAAAJ4AAQChAAAApAABAKcAAQCrAAEArgABALEAAQC0AAsAxQADAMoAAwDTAAEA1gAMAOQAAADqAAAA9wADAAIBAAAIAQEADAEBABMBAQApAQMALgEBADwBAQA/AQEAQwEFAE4BBwBXAQMAXAEDAHEBCgB+AQQApgEZAMIBDgDUAQEA2wEBAOoBAADtAQQA8wEiADwCFwBVAgsAeQI8AOQCFwAGAxUAHQMBACADAAAiAxYAOgMAAD8DAABBAwAAQwMAAEsDAQBYAwMAaAMAAGsDBABxAwEAgQMBAIYDAACQAwAAlQMDAJ4DAACiAwgArAMDALMDLwD8AwAABAQAAAYEDwAeBAMAJAQCACoEAgAwBA0AQAQBAHcEAAB/BAcAiwQPAJ0EBwCpBAcAxwQRANoEAgDeBAIA4wQGAPoEGwA7BQ0ASwUEAFQFDwBuBQEAcgUAAHQFAQB3BQAAewUFAKoFDwC7BRQA0QUGANkFCgDsBQAA7gUCAPwFAQAABgIABAYAAAgGBwASBh8ASwYJAFYGBgBfBgEAZgYAAGsGBgB3BgAAgwYAAIkGEwCfBgQA"}],\ +["bdk_wallet",{"t":"PPEPGPFEEGEFNNDNNNNNNNNENNNNNNNNNOOCQNNNNNNNNNNQNNNNNNNNNNOOCDNONCONNNEENNNNNNNNNNNNNONNNNOHNNNNCOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMFGFPIPPPKGPPPPPPGGPFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNCONNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNMNONONNNNNNNNONNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNCNNNNNNNNNNNNONNNNNNNNHOOOOOOOOPPFPKFIGGPFPFNNNNNNNNNNNNNNNNNNMNNNHNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOGPPGPPPPPPPGPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPGPPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["External","Foreign","HdKeyPaths","Internal","KeychainKind","Local","LocalOutput","SignOptions","TxBuilder","Utxo","Wallet","WeightedUtxo","as_byte","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","confirmation_time","derivation_index","descriptor","descriptor","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fragment","from","from","from","from","hash","hash","into","into","into","into","is_spent","keychain","keys","miniscript","outpoint","outpoint","partial_cmp","psbt","satisfaction_weight","sequence","serialize","serialize","signer","template","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txout","txout","type_id","type_id","type_id","type_id","utxo","version","vzip","vzip","vzip","vzip","wallet","outpoint","psbt_input","sequence","Bare","Bare","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","FALSE","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Pkh","Pkh","Policy","ScriptContext","Segwitv0","Sh","Sh","Sh","Single","TRUE","TapKeyOrigins","Tr","Tr","Tr","Wpkh","Wpkh","Wpkh","Wsh","Wsh","Wsh","XPub","address","as_enum","as_enum","as_inner","as_node","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","build_template","build_template_mall","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_pk","check_pk","check_pk","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains_raw_pkh","derive","derived_descriptor","derived_descriptor","desc_type","descriptor_id","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","plan","plan_mall","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","substitute_raw_pkh","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","calc_checksum_bytes","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","MultiXPrv","MultiXPub","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","Single","Single","SinglePriv","SinglePub","SinglePubKey","SortedMultiVec","Tap","ValidNetworks","XOnly","XPrv","XPub","any_network","as_enum","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_template","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","full_derivation_paths","generate","generate_default","generate_default_with_aux_rand","generate_with_aux_rand","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_assets","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_single_keys","into_single_keys","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_multipath","is_multipath","is_segwit_v0","is_segwit_v0","is_taproot","is_taproot","is_uncompressed","is_x_only_key","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","n","name_str","new","num_der_paths","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","sanity_check","satisfy","script_size","serialize","sig_type","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public","to_string","to_string","to_string","to_string","top_level_checks","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","PsbtUtils","fee_amount","fee_rate","get_utxo_for","AddressInfo","ApplyBlockError","Balance","CannotConnect","ChangeSet","Descriptor","Descriptor","Descriptor","IsDust","LoadError","LoadedDescriptorDoesNotMatch","LoadedGenesisDoesNotMatch","LoadedNetworkDoesNotMatch","MissingDescriptor","MissingGenesis","MissingNetwork","NewError","NewOrLoadError","UnexpectedConnectedToHash","Update","Wallet","add","add_signer","address","all_unbounded_spk_iters","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","checkpoints","clone","clone","clone_into","clone_into","coin_selection","confirmed","default","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","eq","eq","error","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","get_descriptor_for_keychain","get_psbt_input","get_signers","get_tx","get_utxo","graph","immature","index","indexed_tx_graph","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","is_dust","is_mine","keychain","keychains","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load_from_changeset","local_chain","mark_used","network","network","new","new_or_load","new_or_load_with_genesis_hash","new_with_genesis_hash","next_derivation_index","next_unused_address","peek_address","policies","public_descriptor","reveal_addresses_to","reveal_next_address","secp_ctx","sent_and_received","serialize","sign","signer","spk_index","staged","start_full_scan","start_sync_with_revealed_spks","take_staged","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unbroadcast_transactions","unmark_used","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","connected_to_hash","expected_hash","expected","expected","got","got","got","keychain","BnBNoExactMatch","BnBTotalTriesExceeded","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Error","Excess","InsufficientFunds","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","available","needed","amount","change_fee","dust_threshold","fee","remaining_amount","BuildFeeBumpError","CoinSelection","Conversion","CreateTxError","Descriptor","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","IrreplaceableTransaction","LockTime","MiniscriptPsbt","MiniscriptPsbtError","MissingKeyOrigin","MissingNonWitnessUtxo","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","OutputUpdate","Policy","Psbt","RbfSequence","RbfSequenceCsv","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","UnknownUtxo","UnknownUtxo","UtxoUpdate","Version0","Version1Csv","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","csv","rbf","requested","required","required","required","FullyNodedExport","WalletExport","blockheight","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","fmt","from","from_str","into","label","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","External","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MiniscriptPsbt","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Psbt","Segwitv0","SighashTaproot","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","remove","sign_input","sign_input","sign_input","sign_input","sign_transaction","sign_transaction","sign_with_tap_internal_key","signers","tap_leaves_options","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","is_internal_key","AddForeignUtxoError","AddUtxoError","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","Custom","InvalidOutpoint","InvalidTxid","MissingUtxo","OnlyChange","Shuffle","TxBuilder","TxOrdering","UnknownUtxo","Untouched","add_data","add_foreign_utxo","add_foreign_utxo_with_sequence","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone_into","clone_into","clone_into","cmp","coin_selection","current_height","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","fee_absolute","fee_rate","finish","finish_with_aux_rand","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","policy_path","set_recipients","sighash","sort_tx","sort_tx_with_aux_rand","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip","foreign_utxo","input_txid","input_sort","output_sort"],"q":[[0,"bdk_wallet"],[97,"bdk_wallet::Utxo"],[100,"bdk_wallet::descriptor"],[352,"bdk_wallet::descriptor::checksum"],[354,"bdk_wallet::descriptor::error"],[386,"bdk_wallet::descriptor::policy"],[533,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[536,"bdk_wallet::descriptor::policy::Satisfaction"],[547,"bdk_wallet::descriptor::policy::SatisfiableItem"],[557,"bdk_wallet::descriptor::template"],[693,"bdk_wallet::keys"],[994,"bdk_wallet::psbt"],[998,"bdk_wallet::wallet"],[1201,"bdk_wallet::wallet::ApplyBlockError"],[1203,"bdk_wallet::wallet::NewOrLoadError"],[1209,"bdk_wallet::wallet::coin_selection"],[1301,"bdk_wallet::wallet::coin_selection::Error"],[1303,"bdk_wallet::wallet::coin_selection::Excess"],[1308,"bdk_wallet::wallet::error"],[1379,"bdk_wallet::wallet::error::CreateTxError"],[1385,"bdk_wallet::wallet::export"],[1408,"bdk_wallet::wallet::signer"],[1585,"bdk_wallet::wallet::signer::SignerContext"],[1586,"bdk_wallet::wallet::tx_builder"],[1699,"bdk_wallet::wallet::tx_builder::AddForeignUtxoError"],[1701,"bdk_wallet::wallet::tx_builder::TxOrdering"],[1703,"bdk_wallet::types"],[1704,"core::cmp"],[1705,"core::result"],[1706,"serde::de"],[1707,"core::fmt"],[1708,"core::hash"],[1709,"bitcoin::blockdata::transaction"],[1710,"core::option"],[1711,"serde::ser"],[1712,"core::any"],[1713,"miniscript::descriptor"],[1714,"bitcoin::network"],[1715,"bitcoin::address"],[1716,"miniscript"],[1717,"miniscript::miniscript"],[1718,"miniscript::miniscript::decode"],[1719,"miniscript::miniscript::context"],[1720,"miniscript::iter::tree"],[1721,"miniscript::descriptor::key"],[1722,"alloc::vec"],[1723,"miniscript::miniscript::satisfy"],[1724,"miniscript::plan"],[1725,"bitcoin_hashes::sha256"],[1726,"miniscript::miniscript::hash256"],[1727,"bitcoin_hashes::ripemd160"],[1728,"bitcoin_hashes::hash160"],[1729,"core::clone"],[1730,"secp256k1"],[1731,"bitcoin::crypto::key"],[1732,"secp256k1::context"],[1733,"bdk_chain::descriptor_ext"],[1734,"miniscript::blanket_traits"],[1735,"bitcoin::blockdata::script::owned"],[1736,"miniscript::miniscript::analyzable"],[1737,"secp256k1::context::alloc_only"],[1738,"bitcoin::blockdata::script::borrowed"],[1739,"core::ops::range"],[1740,"core::ops::function"],[1741,"miniscript::descriptor::bare"],[1742,"miniscript::descriptor::segwitv0"],[1743,"miniscript::descriptor::tr"],[1744,"miniscript::descriptor::sh"],[1745,"miniscript::miniscript::types"],[1746,"miniscript::miniscript::types::extra_props"],[1747,"miniscript::expression"],[1748,"miniscript::miniscript::iter"],[1749,"miniscript::policy::semantic"],[1750,"miniscript::policy"],[1751,"bitcoin_units::weight"],[1752,"alloc::collections::btree::map"],[1753,"alloc::string"],[1754,"hex_conservative::error"],[1755,"base58ck::error"],[1756,"bitcoin::bip32"],[1757,"miniscript::descriptor::sortedmulti"],[1758,"core::str::traits"],[1759,"core::convert"],[1760,"core::default"],[1761,"rand_core"],[1762,"bitcoin_units::amount"],[1763,"bitcoin_units::fee_rate"],[1764,"bdk_chain::balance"],[1765,"alloc::sync"],[1766,"bdk_chain"],[1767,"core::iter::traits::iterator"],[1768,"bitcoin::blockdata::block"],[1769,"bdk_chain::local_chain"],[1770,"bdk_chain::chain_data"],[1771,"core::iter::traits::collect"],[1772,"bdk_chain::tx_graph"],[1773,"bitcoin::psbt"],[1774,"bdk_chain::spk_client"],[1775,"bitcoin::psbt::map::input"],[1776,"bdk_wallet::wallet::utils"],[1777,"core::iter::traits::double_ended"],[1778,"bdk_chain::indexer::keychain_txout"],[1779,"bitcoin::psbt::error"],[1780,"core::marker"],[1781,"bitcoin::blockdata::script::push_bytes::primitive"],[1782,"bitcoin::blockdata::locktime::absolute"]],"i":[1,8,0,1,0,8,0,0,0,0,0,0,1,1,0,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,7,8,1,6,6,0,0,1,6,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,1,6,7,8,6,6,0,0,8,6,1,0,7,8,1,6,0,0,1,6,7,8,1,6,7,8,1,6,7,8,8,6,1,6,7,8,7,0,1,6,7,8,0,248,248,248,94,249,24,0,0,0,0,0,0,31,0,0,33,0,0,35,94,249,24,0,0,0,94,249,24,35,31,0,94,249,24,94,249,24,94,249,24,35,24,54,55,31,31,24,24,54,55,31,24,54,55,31,31,31,31,0,33,54,55,33,55,33,33,54,55,33,54,55,33,33,54,55,33,54,55,33,54,55,0,24,54,55,31,24,54,55,31,24,54,55,31,31,24,24,24,24,24,24,31,24,31,24,54,55,31,0,24,31,31,69,24,31,24,24,24,54,55,31,31,24,31,24,24,24,24,24,24,24,54,55,31,31,31,24,31,31,31,24,31,31,31,24,24,31,31,24,24,54,55,31,24,54,55,31,31,24,93,94,24,24,31,31,31,24,31,31,33,54,55,31,24,31,24,33,54,55,24,24,24,24,24,24,24,24,24,24,24,24,24,24,31,33,31,24,31,31,24,54,55,31,33,54,55,24,24,0,31,24,31,24,31,31,24,24,31,24,31,33,54,55,31,0,24,54,55,31,24,31,24,33,33,24,31,24,54,55,31,24,54,55,31,31,24,54,55,31,24,24,54,55,31,31,0,0,74,74,0,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,121,115,115,0,122,0,0,121,120,0,121,121,115,115,115,121,122,71,115,122,122,0,0,0,71,71,120,121,121,0,0,121,121,121,120,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,71,120,121,122,73,123,71,73,123,123,120,121,122,73,123,115,120,121,122,73,123,115,115,71,120,121,122,122,73,73,123,115,71,73,120,123,121,73,120,121,122,73,123,115,71,121,122,123,73,123,73,73,120,121,122,73,123,123,120,121,122,73,123,71,115,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,250,250,250,251,252,253,252,253,252,253,252,253,252,253,254,255,256,257,258,259,259,258,260,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,124,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,125,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,116,0,0,0,0,158,158,0,0,147,0,0,0,0,116,116,116,33,0,0,30,116,116,103,35,158,151,0,151,0,0,30,35,103,0,0,0,0,30,0,147,103,35,0,262,35,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,142,33,33,33,33,33,33,33,33,33,143,30,144,142,35,103,145,146,147,143,30,144,142,35,103,145,146,147,142,35,145,147,144,144,143,35,35,142,30,142,35,103,145,146,147,148,30,144,116,116,142,142,35,35,103,103,145,146,147,142,151,151,151,143,148,30,144,116,116,116,142,35,35,103,145,146,147,148,148,35,103,142,35,35,158,161,161,158,158,161,151,35,142,35,145,147,151,143,148,30,144,116,142,35,103,145,146,147,35,127,133,143,143,148,35,103,133,151,143,143,35,103,151,151,35,262,30,35,103,262,30,262,30,35,35,142,145,146,142,0,35,33,142,142,0,142,33,142,35,145,146,33,148,142,35,145,147,33,142,142,142,142,35,33,142,0,143,30,144,142,35,103,145,146,147,103,116,142,35,103,33,33,142,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,151,143,148,30,144,116,142,35,103,145,146,147,0,168,168,168,0,0,0,202,0,199,200,201,0,0,201,201,201,200,200,200,0,0,202,0,0,171,172,195,172,172,172,172,172,172,172,171,172,185,195,199,200,201,202,171,172,185,195,199,200,201,202,172,172,172,172,172,213,185,172,171,185,171,185,0,171,171,185,195,172,172,172,171,171,195,0,0,172,171,171,172,185,195,195,199,199,200,200,201,201,202,202,171,172,185,185,185,195,199,200,201,202,172,172,172,172,172,185,171,195,213,172,172,172,171,172,185,195,199,200,201,202,210,172,195,172,185,172,172,172,172,172,172,172,172,213,172,172,172,172,172,172,172,172,172,172,172,172,172,171,172,0,172,172,172,172,172,171,185,171,195,199,200,201,202,171,172,171,171,171,172,185,195,199,200,201,202,171,172,185,195,199,200,201,202,0,172,171,172,185,195,199,200,201,202,172,172,172,171,171,172,185,195,199,200,201,202,0,263,263,264,265,264,265,266,266,225,225,0,226,0,0,0,0,0,225,0,226,0,225,226,224,220,221,222,225,226,224,220,221,222,220,221,222,220,221,222,223,220,221,222,0,220,221,222,224,224,225,225,226,224,220,221,222,225,226,224,220,221,222,225,226,224,220,221,222,224,222,224,224,220,221,222,225,225,226,224,220,221,222,225,226,224,220,221,222,225,226,224,220,221,222,225,226,224,220,221,222,267,267,268,269,269,268,269,0,207,227,0,207,207,192,207,192,207,207,0,207,207,207,207,207,227,207,207,207,207,207,192,192,207,192,227,207,207,227,207,192,227,207,192,227,227,227,227,207,207,192,192,227,207,207,207,207,207,207,192,227,207,192,227,227,207,192,227,207,192,227,207,192,227,207,192,227,207,192,270,270,271,271,272,273,0,0,274,229,229,229,229,229,229,229,229,229,229,229,229,274,229,229,229,229,229,229,229,234,230,234,198,230,234,198,0,198,198,198,231,198,198,198,198,198,198,198,234,230,198,231,198,0,0,0,0,0,0,0,0,231,0,0,198,70,197,197,70,197,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,70,230,231,232,173,70,197,234,230,231,232,173,70,197,234,230,173,173,70,197,234,232,235,232,232,232,230,231,173,234,70,230,198,198,231,232,173,70,197,234,230,230,230,198,231,232,173,70,197,234,230,235,232,232,232,70,230,198,231,232,173,70,197,234,232,70,230,173,70,239,232,232,232,174,232,197,70,197,230,231,232,173,70,197,234,198,197,197,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,230,198,231,232,173,70,197,234,275,0,0,244,244,0,245,242,242,242,244,245,0,0,243,245,191,191,191,191,191,191,191,191,191,191,243,242,245,244,191,243,242,245,244,191,191,245,244,191,245,244,244,191,191,245,244,191,191,191,191,191,244,191,191,191,191,191,243,243,242,242,245,244,191,243,242,245,244,244,191,191,243,242,245,244,191,191,191,191,191,244,191,191,191,245,245,191,245,244,243,242,191,243,242,245,244,191,243,242,245,244,191,243,242,245,244,191,191,191,243,242,245,244,276,276,277,277],"f":"````````````{{{d{b}}}f}{{{d{b}}}{{d{{h{f}}}}}}`{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000`{{{d{b}}}b}{{{d{l}}}l}{{{d{n}}}n}{{{d{A`}}}A`}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{b}}{d{b}}}Ad}````{c{{Af{b}}}Ah}{c{{Af{l}}}Ah}{{{d{b}}{d{b}}}Aj}{{{d{l}}{d{l}}}Aj}{{{d{n}}{d{n}}}Aj}{{{d{A`}}{d{A`}}}Aj}{{{d{b}}{d{jAl}}}An}{{{d{l}}{d{jAl}}}An}{{{d{n}}{d{jAl}}}An}{{{d{A`}}{d{jAl}}}An}`{cc{}}000{{{d{b}}{d{jc}}}AbB`}{{{d{l}}{d{jc}}}AbB`}{ce{}{}}000````{{{d{A`}}}Bb}`{{{d{b}}{d{b}}}{{Bd{Ad}}}}``{{{d{A`}}}{{Bd{Bf}}}}{{{d{b}}c}AfBh}{{{d{l}}c}AfBh}``{{{d{c}}}e{}{}}000{c{{Af{e}}}{}{}}0000000{{{d{A`}}}{{d{Bj}}}}`{{{d{c}}}Bl{}}000`{{}{{d{Bn}}}}::::``````````````````````````````````````````{{{d{{C`{c}}}}Cb}{{Af{CdCf}}}{ChCj}}{{}Cl}0{{{d{{Cn{ce}}}}}{{d{{D`{ce}}}}}ChDb}{{{d{{d{{Cn{ce}}}}}}}{{Dd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000{{{d{{Cn{ce}}}}}{{Dn{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}0`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{Cn{cFn}}}}}{{Af{AbEh}}}Ch}2022102102{{{d{c}}}{{Af{AbEh}}}Ch}00{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{D`{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{D`{cFn}}}}}{{Af{AbEh}}}Ch}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}00`{{{d{{C`{c}}}}}{{C`{c}}}{G`Ch}}{{{d{Fl}}}Fl}{{{d{Fn}}}Fn}{{{d{{Cn{ce}}}}}{{Cn{ce}}}{G`Ch}{G`Db}}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{{C`{c}}}}{d{{C`{c}}}}}Ad{GbCh}}{{{d{Fl}}{d{Fl}}}Ad}{{{d{Fn}}{d{Fn}}}Ad}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AdChDb}{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{{C`{Df}}}}{d{{Gd{c}}}}Dh}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{Dj}}}}{d{{Gd{c}}}}}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{c}}}}}GjCh}{{{d{{C`{Df}}}}}Gl}{c{{Af{{C`{e}}}}}AhGn}{c{{Af{{Cn{eg}}}}}AhGnDb}{{{d{{C`{Df}}}}}H`}{{{d{{Cn{ce}}}}}Hb{CjCh}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}Aj{HdCh}}{{{d{Fl}}{d{Fl}}}Aj}{{{d{Fn}}{d{Fn}}}Aj}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AjChDb}`{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}`{{{d{{Cn{ce}}}}{d{Hf}}}{{Af{AbHh}}}ChDb}{{{d{Hj}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{C`{Df}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{Cn{Dfc}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}Db}{{{d{{C`{Df}}}}{d{{Gd{c}}}}{d{If}}{Ih{Dh}}}{{Af{{Bd{{Ij{Dh{C`{Gf}}}}}}Dl}}}Gh}{{{d{{C`{c}}}}{d{jAl}}}{{Af{AbIl}}}Ch}0{{{d{Fl}}{d{jAl}}}{{Af{AbIl}}}}{{{d{Fn}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{Cn{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{{C`{c}}}}e}AjCh{{J`{{d{c}}}{{In{Aj}}}}}}{{{d{{Cn{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{{{Jb{c}}}{{C`{c}}}Ch}{{{Jd{c}}}{{C`{c}}}Ch}{{{Jf{c}}}{{C`{c}}}Ch}{{{Jh{c}}}{{C`{c}}}Ch}{{{Jj{c}}}{{C`{c}}}Ch}{cc{}}{{{Jl{c}}}{{C`{c}}}Ch}111{{{D`{ce}}}{{Af{{Cn{ce}}Cf}}}ChDb}{{{D`{ce}}JnK`}{{Cn{ce}}}ChDb}{{{d{Bn}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Bn}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{Bn}}{d{Hf}}}{{Af{{Cn{ce}}Cf}}}GnDb}1{{{d{Kb}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Kb}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{{Cn{ce}}}}Kd}{{Bd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}Kd}{{Bd{c}}}ChDb}{{{d{{C`{c}}}}e}{{Af{{Ij{{Dn{{Dn{f}}}}Hb}}Cf}}}{ChCj}{{Kf{c}}}}0{{{d{{Cn{ce}}}}}AjChDb}0{{{d{{C`{Df}}}}}Aj}{{{d{{C`{c}}}}{d{je}}}Ab{KhCh}B`}{{{d{Fl}}{d{jc}}}AbB`}{{{d{Fn}}{d{jc}}}AbB`}{{{d{{Cn{ce}}}}{d{jg}}}AbChDbB`}{ce{}{}}000{{{Cn{ce}}}{{D`{ce}}}ChDb}{{{C`{Df}}}{{Af{{Dn{{C`{Df}}}}Cf}}}}{{Kj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{Kl{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}99:{{{d{{Cn{ce}}}}}{{L`{ce}}}ChDb}{{{d{{Cn{ce}}}}}{{Lb{ce}}}ChDb}{{{d{{C`{c}}}}}{{Af{{Ld{c}}Cf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{{d{{Cn{ce}}}}}{{Af{AbLf}}}ChDb}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{cFn}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{ce}}}}}{{Af{KdCf}}}ChDb}{{{d{{C`{c}}}}}{{Af{KdCf}}}Ch}1{{{d{{C`{c}}}}}{{Af{LhCf}}}Ch}{{}{{d{Bn}}}}00{{{Cn{cLj}}}{{Af{{C`{c}}Cf}}}Ch}{c{{C`{c}}}Ch}{c{{Af{{C`{c}}Cf}}}Ch}{{{Cn{cFl}}}{{Af{{C`{c}}Cf}}}Ch}{{Kd{Dn{c}}}{{Af{{C`{c}}Cf}}}Ch}{{{Jd{c}}}{{C`{c}}}Ch}{{{Jl{c}}}{{C`{c}}}Ch}4{{{Cn{cFn}}}{{Af{{C`{c}}Cf}}}Ch}3{{c{Bd{{Ll{c}}}}}{{Af{{C`{c}}Cf}}}Ch}614`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{If}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{Gd{c}}}}{d{Bn}}}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Cf}}}Mb}1{{{d{If}}{d{Hf}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}{{Bd{Ad}}}{MdCh}}{{{d{Fl}}{d{Fl}}}{{Bd{Ad}}}}{{{d{Fn}}{d{Fn}}}{{Bd{Ad}}}}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}{{Bd{Ad}}}ChDb}{{{d{c}}}KdCh}00{{{C`{Dj}}{d{c}}}{{Af{Mf{C`{Dj}}}}}{{Ed{Dj}}}}0`{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{c}}}}}{{Af{AbCf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{AbHh}}}ChDb}{{{d{{C`{c}}}}{d{jMh}}e}{{Af{AbCf}}}{ChCj}{{Kf{c}}}}{{{d{{Cn{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}0{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}{{{d{{C`{c}}}}}Hb{ChCj}}{{{d{{Cn{ce}}}}}KdChDb}{{{d{{C`{c}}}}e}AfChBh}{{{d{{Cn{ce}}}}g}AfChDbBh}{{}Mj}00{{{d{{Cn{ce}}}}{d{{M`{Fhc}}}}}{{Cn{ce}}}ChDb}`{{{d{c}}}e{}{}}000{{{d{c}}}Ml{}}0{{{d{{C`{Df}}}}{d{{M`{DfLn}}}}}Ml}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{C`{c}}}}{d{ji}}}{{Af{{Mn{g}}}}}ChCh{}{{N`{ceg}}}}{{{d{{Cn{ce}}}}{d{jk}}}{{Af{{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}0000000`{{{d{c}}}Bl{}}000={ce{}{}}000{{{d{{Cn{ce}}}}}AjChDb}{{{d{Bn}}}{{Af{MlId}}}}{{{d{Bn}}}{{Af{{Nb{f}}Id}}}}``````````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{Id}}{d{jAl}}}An}0{NdId}{CfId}{NfId}{NhId}{NjId}{NlId}{NnId}{cc{}}>{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0{{{d{c}}}Bl{}}{ce{}{}}```````````````````````````````````>>>>>>>======={{{d{O`}}}O`}{{{d{Ob}}}Ob}{{{d{Od}}}Od}{{{d{Ib}}}Ib}{{{d{Of}}}Of}{{{d{Hn}}}Hn}{{{d{c}}{d{je}}}Ab{}{}}00000``{{}Of}{{{d{O`}}{d{O`}}}Aj}{{{d{Ob}}{d{Ob}}}Aj}{{{d{Od}}{d{Od}}}Aj}{{{d{Ib}}{d{Ib}}}Aj}{{{d{Of}}{d{Of}}}Aj}{{{d{Nf}}{d{Nf}}}Aj}{{{d{O`}}{d{jAl}}}An}{{{d{Ob}}{d{jAl}}}An}{{{d{Od}}{d{jAl}}}An}{{{d{Ib}}{d{jAl}}}An}{{{d{Of}}{d{jAl}}}An}{{{d{Nf}}{d{jAl}}}An}0{{{d{Hn}}{d{jAl}}}An}{cc{}}00{AjOd}{ObIb}2222{{{d{Ib}}{d{{M`{Ml{Dn{Kd}}}}}}}{{Af{OfNf}}}}{{{d{O`}}{d{jc}}}AbB`}{{{d{Of}}{d{jc}}}AbB`}{{{d{Ob}}}Ml}`{ce{}{}}000000{{{d{Ob}}}Aj}{{{d{Od}}}Aj}{{{d{Of}}}Aj}`{{{d{Of}}{d{Of}}}{{Bd{Ad}}}}{{{d{Ib}}}Aj}`{{{d{O`}}c}AfBh}{{{d{Ob}}c}AfBh}{{{d{Od}}c}AfBh}{{{d{Ib}}c}AfBh}{{{d{Of}}c}AfBh}`{{{d{c}}}e{}{}}00000{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0000000000000{{{d{c}}}Bl{}}000000>>>>>>>``````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{OhCb}{{Af{OjId}}}}{{{Ol{c}}Cb}{{Af{OjId}}}{{On{Fl}}}}{{{A@`{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@b{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@d{c}}Cb}{{Af{OjId}}}{{On{A@f}}}}{{{A@h{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@l{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@n{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AA`{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAb{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAd{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAf{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{{{AAh{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{cc{}}00000000000{ce{}{}}00000000000{{Oj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{c{d{{Gd{I`}}}}Cb}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Id}}}{}}00000000000{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000444444444444```````````````````````````````````````````{{}AAj}{{}Cl}{{DfDh}{{Af{DjDl}}}}{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{{d{{AAl{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}00000{{{d{c}}}{{Af{AbEh}}}Ch}{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}{{{d{{AAn{ce}}}}}{{AAn{ce}}}G`Db}{{{d{Cl}}}Cl}{{{d{AB`}}}AB`}{{{d{{AAl{ce}}}}}{{AAl{ce}}}{G`Ch}{G`Db}}{{{d{Df}}}Df}{{{d{Ln}}}Ln}{{{d{ABb}}}ABb}{{{d{ABd}}}ABd}{{{d{ABf}}}ABf}{{{d{c}}{d{je}}}Ab{}{}}00000000{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Ad{GbCh}{GbDb}}{{{d{Df}}{d{Df}}}Ad}{{{d{ABb}}{d{ABb}}}Ad}{{{d{ABf}}{d{ABf}}}Ad}`{{}AB`}{{{d{{AAn{ce}}}}}{{d{g}}}{}Db{}}{{DfDh}{{Af{DjDl}}}}{c{{Af{Df}}}Ah}{{{d{{AAl{ce}}}}}Hb{CjCh}Db}{{{d{Cl}}{d{Cl}}}Aj}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Aj{HdCh}{HdDb}}{{{d{Df}}{d{Df}}}Aj}{{{d{Ln}}{d{Ln}}}Aj}{{{d{ABb}}{d{ABb}}}Aj}{{{d{ABd}}{d{ABd}}}Aj}{{{d{ABf}}{d{ABf}}}Aj}{{{d{{ABh{c}}}}{d{jAl}}}An{ABjDb}}{{{d{Cl}}{d{jAl}}}An}{{{d{AB`}}{d{jAl}}}An}{{{d{Nh}}{d{jAl}}}An}0{{{d{{AAl{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{Df}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{Ln}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{ABb}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABd}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABf}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{AAl{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{ABl{{ABn{c}}}Db}{cc{}}{AC`{{ABn{c}}}Db}1111{NnNh}2{CfNh}3{DjDf}44444{{DfAAj}{{ABh{c}}}Db}{{LnAAj}{{ABh{c}}}Db}{{{d{Bn}}}{{Af{Df}}}}{{{d{Bn}}}{{Af{Ln}}}}{{{d{Kb}}}{{Af{{AAl{ce}}Cf}}}{ACbCh}Db}{{{d{Df}}}{{Bd{ACd}}}}{{{d{Df}}}{{Dn{ACd}}}}{c{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{{}{{Af{{AAn{ADbc}}e}}}Db{}}{{{d{jc}}}{{Af{{AAn{ADbe}}g}}}{ADdADf}Db{}}{{c{d{je}}}{{Af{{AAn{{ACl{}{{ACf{g}}{ACh{c}}{ACj{i}}}}k}}i}}}{}{ADdADf}{{ACn{{h{f}}}}AD`}ABjDb}{{ce}{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{c{{Af{{AAn{ADbe}}g}}}{}Db{}}{{{d{{ABn{c}}}}}AjDb}{{{d{Df}}}Aj}{{{d{{AAl{ce}}}}{d{jg}}}Ab{KhCh}{KhDb}B`}{{{d{Df}}{d{jc}}}AbB`}{{{d{ABb}}{d{jc}}}AbB`}{{{d{ABf}}{d{jc}}}AbB`}{ce{}{}}00000000000{DfADh}{On{{Af{{ABh{c}}Nh}}}Db}{{A@j{Bd{ADj}}ACd}{{Af{{ABh{c}}Nh}}}Db}{{{AAn{ec}}}{{Af{{ABh{c}}Nh}}}Db{{On{c}}}}{{{AAn{ec}}{Bd{ADj}}ACd}{{Af{{ABh{c}}Nh}}}Db{{A@j{c}}}}{{{ABh{c}}}{{Af{{ABh{c}}Nh}}}Db}{Df{{Af{{ABh{c}}Nh}}}Db}{Ln{{Af{{ABh{c}}Nh}}}Db}{A@j{{Af{{ABn{c}}Nh}}}Db}{{{ABn{c}}}{{Af{{ABn{c}}Nh}}}Db}{{{AAn{ec}}}{{Af{{ABn{c}}Nh}}}Db{{A@j{c}}}}{{{AAn{ce}}}c{}Db}{Df{{Dn{Df}}}}{Ln{{Dn{Ln}}}}{{{ABn{c}}Cb}{{Bd{AC`}}}Db}{{{ABn{c}}Cb{d{{Gd{e}}}}}ABlDbMb}{{{d{Df}}}Aj}{{}Aj}{{{d{Cl}}}Aj}2{{{d{Ln}}}Aj}212133{{{d{{AAl{ce}}}}}KdChDb}``{{{d{{AAl{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{}AAj}{{{d{Df}}}ADl}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}44{{{d{AAj}}{d{AAj}}}AAj}5{{}{{d{Bn}}}}{{Kd{Dn{c}}}{{Af{{AAl{ce}}Cf}}}ChDb}{{{d{Df}}}Kd}``{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{ABh{c}}AAj}{{ABh{c}}}Db}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}{{Bd{Ad}}}{MdCh}{MdDb}}{{{d{Df}}{d{Df}}}{{Bd{Ad}}}}{{{d{ABb}}{d{ABb}}}{{Bd{Ad}}}}{{{d{ABf}}{d{ABf}}}{{Bd{Ad}}}}{{{d{c}}}KdCh}{{{d{{AAl{ce}}}}}{{d{{h{c}}}}}ChDb}{{{d{{AAl{ce}}}}}{{Af{AbCf}}}ChDb}{{{d{{AAl{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}{{{d{{AAl{ce}}}}}KdChDb}{{{d{Df}}c}AfBh}{{}Mj}{{{d{{AAl{ce}}}}}{{D`{ce}}}{CjCh}Db}{{}AAj}{{{d{c}}}e{}{}}00000000{{{d{Ln}}{d{{Gd{c}}}}}{{Af{DfADn}}}Mb}{{{d{c}}}Ml{}}000{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{AAl{ce}}}}{d{jk}}}{{Af{{AAl{ge}}{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000{ce{}{}}00000000000`{{{d{AE`}}}{{Bd{AEb}}}}{{{d{AE`}}}{{Bd{AEd}}}}{{{d{AE`}}Kd}{{Bd{Bj}}}}`````````````````````{{AEfAEf}AEf}{{{d{jAEh}}bAEj{AEn{AEl}}}Ab}`{{{d{AEh}}}{{M`{b{`{{AFd{}{{AF`{{AFb{Hb}}}}}}G`}}}}}}{{{d{jAEh}}{d{AFf}}Dh}{{Af{AbAFh}}}}{{{d{jAEh}}{d{AFf}}DhAFj}{{Af{AbAFl}}}}{{{d{jAEh}}c}Ab{{AG`{}{{AF`{{Ij{{d{AFn}}H`}}}}}}}}{{{d{jAEh}}c}{{Af{AbAFh}}}{{AGd{AGb}}}}{{{d{AEh}}}{{d{{AGh{AGf}}}}}}{{{d{AEh}}}AEf}{{{d{c}}}{{d{e}}}{}{}}0000000{{{d{jc}}}{{d{je}}}{}{}}0000000{{{d{jAEh}}AGj}{{Af{{AGn{AGl}}AH`}}}}{{{d{jAEh}}}{{AGn{AGl}}}}{{{d{AEh}}{d{AFn}}}{{Af{AEbAHb}}}}{{{d{AEh}}{d{AFn}}}{{Af{AEdAHb}}}}{{{d{jAEh}}{d{AFn}}}Ab}``{{{d{AEh}}}AHd}{{{d{AEf}}}AEf}{{{d{AGb}}}AGb}{{{d{c}}{d{je}}}Ab{}{}}0``{{}AEf}{{}AGb}{{{d{AHf}}}{{d{c}}}{}}{{{d{AEh}}b}{{Bd{Dh}}}}{{{d{AEh}}{d{If}}}{{Bd{{Ij{bDh}}}}}}{{{d{AEh}}b}Ml}{c{{Af{AEf}}}Ah}{{{d{AEf}}{d{AEf}}}Aj}{{{d{AHf}}{d{AHf}}}Aj}``{{{d{AEh}}{d{jAHh}}AHj}{{Af{AjAHl}}}}{{{d{AEf}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{AEh}}{d{jAl}}}An}{{{d{AGb}}{d{jAl}}}An}{{{d{AHf}}{d{jAl}}}An}0{{{d{AHn}}{d{jAl}}}An}0{{{d{AI`}}{d{jAl}}}An}0{{{d{AIb}}{d{jAl}}}An}0{{{d{AId}}{d{jAl}}}An}0{cc{}}0{{{AIf{b}}}AGb}{AIhAGb}222222{{{d{AEh}}b}{{d{Kl}}}}{{{d{AEh}}l{Bd{AIj}}Aj}{{Af{AIlAIn}}}}{{{d{AEh}}b}{{AEn{Hl}}}}{{{d{AEh}}AGj}{{Bd{{AJ`{{AEn{AFn}}AGf}}}}}}{{{d{AEh}}Bb}{{Bd{l}}}}````{{{d{jAEh}}AFj}{{Af{AjAJb}}}}{{{d{jAEh}}AFn}Aj}{{{d{jAEh}}BbBj}Ab}{ce{}{}}0000000{{{d{AJd}}{d{If}}}Aj}{{{d{AEh}}{d{If}}}Aj}`{{{d{AEh}}}{{`{{AFd{}{{AF`{{Ij{{d{b}}{d{Kl}}}}}}}}}}}}`{{{d{AEh}}}AJf}{{{d{AEh}}}{{`{{AFd{}{{AF`{l}}}}}}}}0{{{d{AEh}}b}{{`{{AJh{}{{AF`{AHf}}}}}}}}{AJj{{Af{AEhAI`}}}}{{{d{AEh}}}{{d{AJl}}}}{{{d{jAEh}}bDh}Aj}{{{d{AEh}}}Cb}`{{ccCb}{{Af{AEhAHn}}}Kj}{{cc{Bd{AJj}}Cb}{{Af{AEhAIb}}}Kj}{{cc{Bd{AJj}}CbAJn}{{Af{AEhAIb}}}Kj}{{ccCbAJn}{{Af{AEhAHn}}}Kj}{{{d{AEh}}b}Dh}{{{d{jAEh}}b}AHf}{{{d{AEh}}bDh}AHf}{{{d{AEh}}b}{{Af{{Bd{Ib}}Id}}}}{{{d{AEh}}b}{{d{Kl}}}}{{{d{jAEh}}bDh}{{`{{AFd{}{{AF`{AHf}}}}}}}}4{{{d{AEh}}}{{d{{Gd{I`}}}}}}{{{d{AEh}}{d{AFn}}}{{Ij{AEbAEb}}}}{{{d{AEf}}c}AfBh}{{{d{AEh}}{d{jAHh}}AHj}{{Af{AjAHl}}}}`{{{d{AEh}}}{{d{{AK`{b}}}}}}{{{d{AEh}}}{{Bd{{d{AJj}}}}}}{{{d{AEh}}}{{AKb{b}}}}{{{d{AEh}}}AKd}{{{d{jAEh}}}{{Bd{AJj}}}}{{{d{c}}}e{}{}}0{{{d{c}}}Ml{}}00000{{{d{AEf}}}AEb}{{{d{AEh}}}{{`{{AFd{}{{AF`{{AJ`{{AEn{AFn}}AGf}}}}}}}}}}`1{c{{Af{e}}}{}{}}000000000000000`{{{d{AEh}}}{{d{{AGh{AGf}}}}}}{{{d{c}}}Bl{}}0000000{{{d{AEh}}b}{{`{{AFd{}{{AF`{{AFb{Hb}}}}}}G`}}}}{{{d{AEh}}}{{`{{AFd{}{{AF`{{AKf{{AEn{AFn}}AGf}}}}}}}}}}{{{d{jAEh}}bDh}Aj}`{ce{}{}}0000000{{c{Bd{c}}Cb{d{{Gd{I`}}}}}{{Af{MlId}}}Kj}`````````````````````{{{d{c}}}{{d{e}}}{}{}}00000{{{d{jc}}}{{d{je}}}{}{}}00000{{{d{AKh}}}AKh}{{{d{AKj}}}AKj}{{{d{AKl}}}AKl}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{AKn}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{{d{AKh}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{{d{AKj}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{{d{AKl}}{Dn{n}}{Dn{n}}AEdH`{d{If}}}{{Af{AL`ALb}}}}{{H`AEd{d{If}}}ALd}{{}AKh}{{}AKj}{{}AKl}``{{{d{ALb}}{d{jAl}}}An}0{{{d{ALd}}{d{jAl}}}An}{{{d{AL`}}{d{jAl}}}An}{{{d{AKh}}{d{jAl}}}An}{{{d{AKj}}{d{jAl}}}An}{{{d{AKl}}{d{jAl}}}An}{cc{}}00000{ce{}{}}00000{{{d{AL`}}}H`}{H`AKl}`1{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}00000000000{{{d{c}}}Bl{}}00000666666`````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00{{{d{jc}}}{{d{je}}}{}{}}00{{{d{ALf}}}ALf}{{{d{c}}{d{je}}}Ab{}{}}{{{d{ALf}}{d{jAl}}}An}0{{{d{AIn}}{d{jAl}}}An}0{{{d{AH`}}{d{jAl}}}An}0>>{ALhAIn}{ALbAIn}{NfAIn}{ALfAIn}{IdAIn}{cc{}}{ce{}{}}00{{{d{c}}}e{}{}}{{{d{c}}}Ml{}}00{c{{Af{e}}}{}{}}00000{{{d{c}}}Bl{}}00444``````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{ALj}}}{{Bd{Ml}}}}{{{d{ALj}}}Ml}{c{{Af{ALj}}}Ah}{{{d{AEh}}{d{Bn}}Aj}{{Af{ALj{d{Bn}}}}}}{{{d{ALj}}{d{jAl}}}An}0<{{{d{Bn}}}{{Af{ALjc}}}{}}<``{{{d{ALj}}c}AfBh};::9=````````````````````````````````````{{{d{jHl}}ALlAEj{AEn{AEl}}}{{Bd{{AEn{AEl}}}}}}``{{{d{Hl}}{d{{Gd{I`}}}}}Kn}`::::::::99999999{{Kn{d{{C`{Df}}}}{d{{Gd{I`}}}}}Hl}{{{d{ALl}}}ALl}{{{d{ALn}}}ALn}{{{d{{AM`{c}}}}}{{AM`{c}}}{G`AMbABjG`}}{{{d{AEj}}}AEj}{{{d{Hl}}}Hl}{{{d{AHj}}}AHj}{{{d{AMd}}}AMd}{{{d{c}}{d{je}}}Ab{}{}}000000{{{d{ALl}}{d{ALl}}}Ad}{{{d{AEj}}{d{AEj}}}Ad}{{}AEj}{{}Hl}{{}AHj}{{}AMd}{{{d{{AM`{c}}}}}{{d{e}}}{AMbABjG`}{}}{{{d{AMf}}}{{Bd{Ln}}}}{{{d{{AM`{{AMh{AC`}}}}}}}{{Bd{Ln}}}}{{{d{{AM`{AMj}}}}}{{Bd{Ln}}}}{{{d{{AM`{{AMl{AC`}}}}}}}{{Bd{Ln}}}}{{{d{ALl}}{d{ALl}}}Aj}{{{d{ALn}}{d{ALn}}}Aj}{{{d{AEj}}{d{AEj}}}Aj}{{{d{AMd}}{d{AMd}}}Aj}{{{d{Hl}}ALl}{{Bd{{d{{AEn{AEl}}}}}}}}{{{d{ALl}}{d{jAl}}}An}{{{d{AHl}}{d{jAl}}}An}0{{{d{ALn}}{d{jAl}}}An}{{{d{{AM`{c}}}}{d{jAl}}}An{ABjAMbABjG`}}{{{d{AEj}}{d{jAl}}}An}{{{d{Hl}}{d{jAl}}}An}{{{d{AHj}}{d{jAl}}}An}{{{d{AMd}}{d{jAl}}}An}{FhALl}{ADlALl}{cc{}}0000000{{{d{ALl}}{d{jc}}}AbB`}{{{d{AMf}}{d{{Gd{I`}}}}}ALl}{{{d{{AM`{AMj}}}}{d{{Gd{I`}}}}}ALl}{{{d{{AM`{{AMl{AC`}}}}}}{d{{Gd{I`}}}}}ALl}{{{d{{AM`{{AMh{AC`}}}}}}{d{{Gd{I`}}}}}ALl}{{{d{Hl}}}{{Dn{{d{ALl}}}}}}{ce{}{}}0000000{{cALn}{{AM`{c}}}{AMbABjG`}}{{}Hl}{{{d{ALl}}{d{ALl}}}{{Bd{Ad}}}}{{{d{AEj}}{d{AEj}}}{{Bd{Ad}}}}{{{d{jHl}}ALlAEj}{{Bd{{AEn{AEl}}}}}}{{{d{AMn}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{{AM`{{AMl{AC`}}}}}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{{AM`{{AMh{AC`}}}}}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{{AM`{AMj}}}}{d{jAHh}}Kd{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{AEl}}{d{jAHh}}{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}}{{{d{c}}{d{jAHh}}{d{AHj}}{d{{Gd{I`}}}}}{{Af{AbAHl}}}{}}`{{{d{Hl}}}{{Dn{{d{{AEn{AEl}}}}}}}}`{{{d{c}}}e{}{}}000000{{{d{c}}}Ml{}}``{c{{Af{e}}}{}{}}000000000000000{{{d{c}}}Bl{}}0000000{ce{}{}}0000000````````````````{{{d{j{AGn{c}}}}{d{e}}}{{d{j{AGn{c}}}}}{}{{ANb{AN`}}}}{{{d{j{AGn{c}}}}BbAIlLh}{{Af{{d{j{AGn{c}}}}ANd}}}{}}{{{d{j{AGn{c}}}}BbAIlLhBf}{{Af{{d{j{AGn{c}}}}ANd}}}{}}{{{d{j{AGn{c}}}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}HbAEb}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}Bb}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}Bb}{{Af{{d{j{AGn{c}}}}ANf}}}{}}{{{d{j{AGn{c}}}}{d{{h{Bb}}}}}{{Af{{d{j{AGn{c}}}}ANf}}}{}}{{{d{j{AGn{c}}}}Aj}{{d{j{AGn{c}}}}}{}}{{{d{c}}}{{d{e}}}{}{}}0000{{{d{jc}}}{{d{je}}}{}{}}0000{{{d{j{AGn{c}}}}ANh}{{d{j{AGn{c}}}}}{}}{{{d{{AGn{c}}}}}{{AGn{c}}}G`}{{{d{ANj}}}ANj}{{{d{ANh}}}ANh}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{ANh}}{d{ANh}}}Ad}{{{AGn{c}}e}{{AGn{e}}}{}AKn}{{{d{j{AGn{c}}}}Dh}{{d{j{AGn{c}}}}}{}}{{}ANj}{{}ANh}{{{d{j{AGn{c}}}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}Hb}{{d{j{AGn{c}}}}}{}}11{{{d{j{AGn{c}}}}Bf}{{d{j{AGn{c}}}}}{}}{{{d{ANh}}{d{ANh}}}Aj}{{{d{j{AGn{c}}}}AEb}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}AEd}{{d{j{AGn{c}}}}}{}}{{{AGn{c}}}{{Af{AHhAIn}}}AKn}{{{AGn{c}}{d{je}}}{{Af{AHhAIn}}}AKnADf}{{{d{{AGn{c}}}}{d{jAl}}}AnABj}{{{d{ANf}}{d{jAl}}}An}0{{{d{ANd}}{d{jAl}}}An}0{{{d{ANj}}{d{jAl}}}An}{{{d{ANh}}{d{jAl}}}An}{cc{}}0000{{{d{ANh}}{d{jc}}}AbB`}>{ce{}{}}0000?{{{d{j{AGn{c}}}}ANl}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}}{{d{j{AGn{c}}}}}{}}0{{{d{j{AGn{c}}}}ANj}{{d{j{AGn{c}}}}}{}}{{{d{ANh}}{d{ANh}}}{{Bd{Ad}}}}{{{d{j{AGn{c}}}}{M`{Ml{Dn{Kd}}}}b}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}{Dn{{Ij{HbAEb}}}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}AIj}{{d{j{AGn{c}}}}}{}}{{{d{ANj}}{d{jAFn}}}Ab}{{{d{ANj}}{d{jAFn}}{d{jc}}}AbADf}{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}0{c{{Af{e}}}{}{}}000000000{{{d{c}}}Bl{}}0000{{{d{j{AGn{c}}}}{Dn{Bb}}}{{d{j{AGn{c}}}}}{}}{{{d{j{AGn{c}}}}ANn}{{d{j{AGn{c}}}}}{}}?????````","D":"FGd","p":[[6,"KeychainKind",0,1703],[1,"reference"],[1,"u8"],[1,"slice"],[0,"mut"],[5,"LocalOutput",0,1703],[5,"WeightedUtxo",0,1703],[6,"Utxo",0,1703],[1,"unit"],[6,"Ordering",1704],[6,"Result",1705],[10,"Deserializer",1706],[1,"bool"],[5,"Formatter",1707],[8,"Result",1707],[10,"Hasher",1708],[5,"OutPoint",1709],[6,"Option",1710],[5,"Sequence",1709],[10,"Serializer",1711],[5,"TxOut",1709],[5,"TypeId",1712],[1,"str"],[6,"Descriptor",100,1713],[6,"Network",1714],[5,"Address",1715],[6,"Error",1716],[10,"MiniscriptKey",1716],[10,"ToPublicKey",1716],[6,"ScriptContextEnum",693],[5,"Miniscript",100,1717],[6,"Terminal",1718],[10,"ScriptContext",693,1719],[6,"Tree",1720],[6,"DescriptorPublicKey",693,1721],[1,"u32"],[5,"DefiniteDescriptorKey",1721],[6,"ConversionError",1721],[5,"Vec",1722],[6,"Placeholder",1723],[5,"Satisfaction",1723],[10,"AssetProvider",1724],[17,"Key"],[6,"ScriptContextError",1719],[17,"Sha256"],[5,"Hash",1725],[17,"Hash256"],[5,"Hash",1726],[17,"Ripemd160"],[5,"Hash",1727],[17,"Hash160"],[5,"Hash",1728],[10,"ParseableKey",1718],[6,"Legacy",100,1719],[6,"Segwitv0",100,1719],[10,"Clone",1729],[10,"Ord",1704],[5,"Secp256k1",1730],[5,"PublicKey",1731],[10,"Verification",1732],[6,"DescriptorType",1713],[5,"DescriptorId",1733],[10,"FromStrKey",1734],[1,"u64"],[5,"ScriptBuf",1735],[10,"PartialEq",1704],[5,"ExtParams",1736],[6,"AnalysisError",1736],[10,"ExtractPolicy",100],[5,"SignersContainer",1408],[6,"BuildSatisfaction",386],[6,"All",1737],[5,"Policy",386],[6,"Error",354],[5,"Script",1738],[5,"Range",1739],[1,"tuple"],[5,"Error",1707],[17,"Output"],[10,"FnMut",1740],[5,"Pkh",1741],[5,"Wpkh",1742],[5,"Tr",1743],[5,"Sh",1744],[5,"Bare",1741],[5,"Wsh",1742],[5,"Type",1745],[5,"ExtData",1746],[5,"Tree",1747],[1,"usize"],[10,"Satisfier",1723],[10,"Hash",1708],[10,"IntoWalletDescriptor",100],[8,"ExtendedDescriptor",100],[8,"KeyMap",693,1713],[5,"Iter",1748],[5,"PkIter",1748],[6,"Policy",1749],[6,"LiftError",1750],[5,"Weight",1751],[6,"BareCtx",1719],[6,"TapTree",1743],[6,"DescriptorSecretKey",693,1721],[5,"BTreeMap",1752],[10,"Signing",1732],[10,"PartialOrd",1704],[5,"Plan",1724],[5,"TxIn",1709],[6,"SigType",1719],[5,"String",1753],[6,"TranslateErr",1716],[10,"Translator",1716],[1,"array"],[6,"HexToBytesError",1754],[6,"PolicyError",386],[6,"KeyError",693],[6,"Error",1755],[6,"ParsePublicKeyError",1731],[6,"Error",1756],[6,"PkOrF",386],[6,"SatisfiableItem",386],[6,"Satisfaction",386],[5,"Condition",386],[10,"DescriptorTemplate",557],[8,"DescriptorTemplateOut",557],[5,"P2Pkh",557],[10,"IntoDescriptorKey",693],[5,"P2Wpkh_P2Sh",557],[5,"P2Wpkh",557],[5,"P2TR",557],[6,"Tap",1719],[5,"Bip44",557],[10,"DerivableKey",693],[5,"Bip44Public",557],[5,"Bip49",557],[5,"Bip49Public",557],[5,"Bip84",557],[5,"Bip84Public",557],[5,"Bip86",557],[5,"Bip86Public",557],[8,"ValidNetworks",693],[5,"SortedMultiVec",693,1757],[5,"GeneratedKey",693],[5,"PrivateKeyGenerateOptions",693],[5,"SinglePub",693,1721],[5,"SinglePriv",693,1721],[6,"SinglePubKey",693,1721],[6,"DescriptorKey",693],[10,"Debug",1707],[5,"Xpub",1756],[6,"ExtendedKey",693],[5,"Xpriv",1756],[10,"FromStr",1758],[5,"DerivationPath",1756],[17,"Entropy"],[17,"Options"],[17,"Error"],[10,"GeneratableKey",693],[10,"AsMut",1759],[10,"Default",1760],[10,"GeneratableDefaultOptions",693],[10,"CryptoRng",1761],[10,"RngCore",1761],[5,"Assets",1724],[8,"KeySource",1756],[5,"Fingerprint",1756],[5,"DescriptorKeyParseError",1721],[10,"PsbtUtils",994],[5,"Amount",1762],[5,"FeeRate",1763],[5,"Balance",998,1764],[5,"Wallet",998],[5,"SignerOrdering",1408],[10,"TransactionSigner",1408],[5,"Arc",1765],[17,"Item"],[8,"Indexed",1766],[10,"Iterator",1767],[5,"Block",1768],[5,"CannotConnectError",1769],[5,"BlockId",1770],[6,"ApplyHeaderError",1769],[5,"Transaction",1709],[10,"IntoIterator",1771],[5,"Update",998],[10,"Into",1759],[5,"ConfirmationTimeHeightAnchor",1770],[5,"TxGraph",1772],[5,"Txid",1709],[8,"DefaultCoinSelectionAlgorithm",1209],[5,"TxBuilder",1586],[6,"BuildFeeBumpError",1308],[6,"CalculateFeeError",1772],[5,"CheckPointIter",1769],[5,"AddressInfo",998],[5,"Psbt",1773],[5,"SignOptions",1408],[6,"SignerError",1408],[6,"NewError",998],[6,"LoadError",998],[6,"NewOrLoadError",998],[6,"ApplyBlockError",998],[5,"FullScanResult",1774],[5,"SyncResult",1774],[5,"PsbtSighashType",1775],[5,"Input",1775],[6,"CreateTxError",1308],[5,"CanonicalTx",1772],[5,"AlterCheckPointError",1769],[10,"IsDust",998,1776],[5,"CheckPoint",1769],[10,"DoubleEndedIterator",1777],[8,"ChangeSet",998],[5,"LocalChain",1769],[5,"BlockHash",1768],[5,"KeychainTxOutIndex",1778],[5,"FullScanRequest",1774],[5,"SyncRequest",1774],[5,"TxNode",1772],[5,"LargestFirstCoinSelection",1209],[5,"OldestFirstCoinSelection",1209],[5,"BranchAndBoundCoinSelection",1209],[10,"CoinSelectionAlgorithm",1209],[5,"CoinSelectionResult",1209],[6,"Error",1209],[6,"Excess",1209],[6,"MiniscriptPsbtError",1308],[6,"Error",1779],[5,"FullyNodedExport",1385],[6,"SignerId",1408],[6,"SignerContext",1408],[5,"SignerWrapper",1408],[10,"Sized",1780],[6,"TapLeavesOptions",1408],[10,"SignerCommon",1408],[5,"DescriptorXKey",1721],[5,"PrivateKey",1731],[5,"DescriptorMultiXKey",1721],[10,"InputSigner",1408],[5,"PushBytes",1781],[10,"AsRef",1759],[6,"AddForeignUtxoError",1586],[6,"AddUtxoError",1586],[6,"ChangeSpendPolicy",1586],[6,"TxOrdering",1586],[6,"LockTime",1782],[1,"i32"],[15,"Foreign",97],[8,"DerivedDescriptor",100],[15,"PsbtTimelocks",533],[15,"Complete",536],[15,"Partial",536],[15,"PartialComplete",536],[15,"Sha256Preimage",547],[15,"Hash256Preimage",547],[15,"Ripemd160Preimage",547],[15,"Hash160Preimage",547],[15,"Thresh",547],[15,"Multisig",547],[15,"AbsoluteTimelock",547],[15,"RelativeTimelock",547],[10,"ExtScriptContext",693],[15,"UnexpectedConnectedToHash",1201],[15,"LoadedGenesisDoesNotMatch",1203],[15,"LoadedNetworkDoesNotMatch",1203],[15,"LoadedDescriptorDoesNotMatch",1203],[15,"InsufficientFunds",1301],[15,"Change",1303],[15,"NoChange",1303],[15,"RbfSequenceCsv",1379],[15,"LockTime",1379],[15,"FeeTooLow",1379],[15,"FeeRateTooLow",1379],[8,"WalletExport",1385],[15,"Tap",1585],[15,"InvalidTxid",1699],[15,"Custom",1701]],"r":[[2,100],[4,1703],[6,1703],[7,1408],[8,1586],[9,1703],[10,998],[11,1703],[70,998],[71,100],[104,1713],[106,1721],[113,1719],[114,1717],[119,386],[120,1719],[121,1719],[155,352],[696,1721],[697,1721],[712,1713],[722,1719],[727,1721],[728,1721],[729,1721],[730,1757],[1000,1764],[1006,1776]],"b":[[193,"impl-Descriptor%3CDescriptorPublicKey%3E"],[194,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[213,"impl-Display-for-Descriptor%3CPk%3E"],[214,"impl-Debug-for-Descriptor%3CPk%3E"],[217,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[218,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[221,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[222,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[223,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[224,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[225,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[227,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[370,"impl-Debug-for-Error"],[371,"impl-Display-for-Error"],[372,"impl-From%3CHexToBytesError%3E-for-Error"],[373,"impl-From%3CError%3E-for-Error"],[374,"impl-From%3CPolicyError%3E-for-Error"],[375,"impl-From%3CKeyError%3E-for-Error"],[376,"impl-From%3CError%3E-for-Error"],[377,"impl-From%3CParsePublicKeyError%3E-for-Error"],[378,"impl-From%3CError%3E-for-Error"],[461,"impl-Debug-for-PolicyError"],[462,"impl-Display-for-PolicyError"],[811,"impl-Display-for-KeyError"],[812,"impl-Debug-for-KeyError"],[813,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[814,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[815,"impl-Display-for-DescriptorPublicKey"],[816,"impl-Debug-for-DescriptorPublicKey"],[817,"impl-Debug-for-DescriptorSecretKey"],[818,"impl-Display-for-DescriptorSecretKey"],[823,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[825,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[830,"impl-From%3CError%3E-for-KeyError"],[832,"impl-From%3CError%3E-for-KeyError"],[874,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[875,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1071,"impl-Display-for-Balance"],[1072,"impl-Debug-for-Balance"],[1075,"impl-Debug-for-AddressInfo"],[1076,"impl-Display-for-AddressInfo"],[1077,"impl-Debug-for-NewError"],[1078,"impl-Display-for-NewError"],[1079,"impl-Display-for-LoadError"],[1080,"impl-Debug-for-LoadError"],[1081,"impl-Debug-for-NewOrLoadError"],[1082,"impl-Display-for-NewOrLoadError"],[1083,"impl-Display-for-ApplyBlockError"],[1084,"impl-Debug-for-ApplyBlockError"],[1087,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[1088,"impl-From%3CSyncResult%3E-for-Update"],[1250,"impl-Display-for-Error"],[1251,"impl-Debug-for-Error"],[1346,"impl-Display-for-MiniscriptPsbtError"],[1347,"impl-Debug-for-MiniscriptPsbtError"],[1348,"impl-Display-for-CreateTxError"],[1349,"impl-Debug-for-CreateTxError"],[1350,"impl-Debug-for-BuildFeeBumpError"],[1351,"impl-Display-for-BuildFeeBumpError"],[1354,"impl-From%3CError%3E-for-CreateTxError"],[1355,"impl-From%3CError%3E-for-CreateTxError"],[1356,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1357,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1358,"impl-From%3CError%3E-for-CreateTxError"],[1395,"impl-Display-for-FullyNodedExport"],[1396,"impl-Debug-for-FullyNodedExport"],[1488,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1489,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1490,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1497,"impl-Debug-for-SignerError"],[1498,"impl-Display-for-SignerError"],[1505,"impl-From%3CHash%3E-for-SignerId"],[1506,"impl-From%3CFingerprint%3E-for-SignerId"],[1517,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1518,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1519,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1535,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1536,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1537,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1643,"impl-Debug-for-AddUtxoError"],[1644,"impl-Display-for-AddUtxoError"],[1645,"impl-Display-for-AddForeignUtxoError"],[1646,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAAMEAAwEPAR8DeANrBQ==","e":"OzAAAAEAAG0DfAADAAAACAABAAsAAAAOABMAJgAJADUAAQA+AAAAQQAAAEUADwBXAAMAXQADAGoAAAB4AAAAjAABAI8AAACRAAcAnAAAAJ4AAQChAAAApAABAKcAAQCrAAEArgABALEAAQC0AAsAxQADAMoAAwDTAAEA1gAMAOQAAADqAAAA9wADAAIBAAAIAQEADAEBABMBAQApAQMALgEBADwBAQA/AQEAQwEFAE4BBwBXAQMAXAEDAHEBCgB+AQQApgEZAMIBDgDUAQEA2wEBAOoBAADtAQQA8wEiADwCFwBVAgsAeQI8AOQCFwAGAxUAHQMBACADAAAiAxYAOgMAAD8DAABBAwAAQwMAAEsDAQBYAwMAaAMAAGsDBABxAwEAgQMBAIYDAACQAwAAlQMDAJ4DAACiAwgArAMDALMDLwD8AwAABAQAAAYEDwAeBAMAJAQCACoEAgAwBA0AQAQBAHcEAAB/BAcAiwQPAJ0EBwCpBAcAxwQRANoEAgDeBAIA4wQGAPoEGwA7BQ0ASwUEAFQFDwBuBQEAcgUAAHQFAQB3BQAAewUFAKoFDwC7BRQA0QUGANkFCgDsBQAA7gUCAPwFAQAABgIABAYAAAgGBwASBh8ASwYJAFYGBgBfBgEAZgYAAGsGBgB3BgAAgwYAAIkGEwCfBgQA"}],\ ["example_bitcoind_rpc_polling",{"t":"PSISSSGPSPFGSPPNNNNHNNNNNNNNNNONNNNNNNNNNNNNNHNOOOHNNNNNNNNNNNNNNNONNNOO","n":["Block","CHANNEL_BOUND","ChangeSet","DB_COMMIT_DELAY","DB_MAGIC","DB_PATH","Emission","Live","MEMPOOL_EMIT_DELAY","Mempool","RpcArgs","RpcCommands","STDOUT_PRINT_DELAY","Sync","Tip","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","await_flag","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","fallback_height","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","has_subcommand","into","into","into","main","new_client","rpc_cookie","rpc_password","rpc_user","start_ctrlc_handler","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","url","vzip","vzip","vzip","rpc_args","rpc_args"],"q":[[0,"example_bitcoind_rpc_polling"],[70,"example_bitcoind_rpc_polling::RpcCommands"],[72,"clap::builder::command"],[73,"core::sync::atomic"],[74,"core::time"],[75,"core::fmt"],[76,"clap::parser::matches::arg_matches"],[77,"clap::error"],[78,"core::result"],[79,"anyhow"],[80,"bitcoincore_rpc::client"],[81,"alloc::sync"],[82,"core::any"]],"i":[10,0,0,0,0,0,0,8,0,10,0,0,0,8,10,7,7,8,8,0,10,7,8,10,7,8,7,8,7,8,7,10,7,8,10,7,8,7,8,7,8,8,10,7,8,0,7,7,7,7,0,7,8,10,7,8,10,7,8,10,7,8,7,8,7,8,7,10,7,8,21,22],"f":"```````````````{bb}000{{{f{d}}h}j}{{{f{c}}}{{f{e}}}{}{}}00{{{f{lc}}}{{f{le}}}{}{}}00{{{f{n}}}n}{{{f{A`}}}A`}{{{f{c}}{f{le}}}Ab{}{}}0`{{{f{Ad}}{f{lAf}}}Ah}{{{f{n}}{f{lAf}}}Ah}{{{f{A`}}{f{lAf}}}Ah}{cc{}}00{{{f{Aj}}}{{An{nAl}}}}{{{f{Aj}}}{{An{A`Al}}}}{{{f{lAj}}}{{An{nAl}}}}{{{f{lAj}}}{{An{A`Al}}}}{{{f{B`}}}j}{ce{}{}}00{{}{{Bb{Ab}}}}{{{f{n}}}{{Bb{Bd}}}}```{{}{{Bf{d}}}}{{{f{c}}}e{}{}}0{c{{An{e}}}{}{}}00000{{{f{c}}}Bh{}}00{{{f{ln}}{f{Aj}}}{{An{AbAl}}}}{{{f{lA`}}{f{Aj}}}{{An{AbAl}}}}{{{f{ln}}{f{lAj}}}{{An{AbAl}}}}{{{f{lA`}}{f{lAj}}}{{An{AbAl}}}}`:::``","D":"Bb","p":[[8,"Command",72],[5,"AtomicBool",73],[1,"reference"],[5,"Duration",74],[1,"bool"],[0,"mut"],[5,"RpcArgs",0],[6,"RpcCommands",0],[1,"unit"],[6,"Emission",0],[5,"Formatter",75],[8,"Result",75],[5,"ArgMatches",76],[5,"Error",77],[6,"Result",78],[1,"str"],[8,"Result",79],[5,"Client",80],[5,"Arc",81],[5,"TypeId",82],[15,"Sync",70],[15,"Live",70]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADcACgAAAAEAAwAAAAUAAgAKAAIADwAPACAAAgAmAAQALgABADMADwBEAAQA"}],\ ["example_cli",{"t":"PGFPPPGGFPPFPGIIPPPPPPPIPPPGEONNNNNNNNENNNNNNNNNNNNNNNNOOENNNNNNNNNNNOOHOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNOOOOHONNNNNNNNNNOONHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOO","n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","CoinSelectionAlgo","Commands","CreateTxChange","External","Index","Init","Internal","Keychain","KeychainChangeSet","KeychainTxGraph","LargestFirst","List","List","New","NewestFirst","Next","OldestFirst","PlannedUtxo","Send","SmallestFirst","TxOut","TxOutCmd","anyhow","args","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","bdk_file_store","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_descriptor","change_keychain","clap","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","cp_limit","create_tx","db","db_path","default","descriptor","deserialize","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_str","handle_commands","has_subcommand","has_subcommand","has_subcommand","index","index","index","index_changeset","init","init_changeset","into","into","into","into","into","into","into","into","into_app","into_app_for_update","keymap","network","partial_cmp","planned_utxos","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","change","addr_cmd","address","chain_specific","coin_select","txout_cmd","value","confirmed","spent","unconfirmed","unspent"],"q":[[0,"example_cli"],[176,"example_cli::AddressCmd"],[177,"example_cli::Commands"],[183,"example_cli::TxOutCmd"],[187,"clap::builder::command"],[188,"core::clone"],[189,"clap::derive"],[190,"core::cmp"],[191,"miniscript::descriptor::key"],[192,"alloc::collections::btree::map"],[193,"bitcoin::address"],[194,"bitcoin::blockdata::transaction"],[195,"core::option"],[196,"anyhow"],[197,"bdk_chain::tx_data_traits"],[198,"bdk_chain::chain_oracle"],[199,"core::result"],[200,"serde::de"],[201,"core::fmt"],[202,"clap::parser::matches::arg_matches"],[203,"clap::error"],[204,"std::sync::mutex"],[205,"bdk_file_store::store"],[206,"bitcoin::network"],[207,"core::default"],[208,"serde::ser"],[209,"core::convert"],[210,"core::marker"],[211,"core::ops::function"],[212,"bdk_tmp_plan"],[213,"alloc::vec"],[214,"alloc::string"],[215,"core::any"]],"i":[4,0,0,4,8,4,0,0,0,11,9,0,11,0,0,0,8,9,10,9,8,9,8,0,4,8,4,0,0,52,34,34,4,9,10,4,9,10,0,21,52,34,4,8,9,10,11,21,52,34,4,8,9,10,11,34,21,0,4,8,9,10,11,4,8,9,10,11,11,34,34,0,52,34,8,34,11,11,11,11,4,8,8,9,10,11,11,21,52,34,4,8,9,10,11,34,4,9,10,34,4,9,10,8,0,4,9,10,14,21,52,21,0,52,21,52,34,4,8,9,10,11,34,34,52,34,11,0,11,4,8,9,10,11,8,11,21,52,34,4,8,9,10,11,21,52,34,4,8,9,10,11,21,52,34,4,8,9,10,11,34,4,9,10,34,4,9,10,21,52,34,4,8,9,10,11,60,61,62,62,62,63,62,64,64,64,64],"f":"``````````````````````````````{bb}0000000`{{{d{c}}}{{d{e}}}{}{}}0000000{{{d{fc}}}{{d{fe}}}{}{}}0000000```{{{d{{h{ce}}}}}{{h{ce}}}{jl}{jn}}{{{d{A`}}}A`}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{Af}}}Af}{{{d{c}}{d{fe}}}Ah{}{}}0000{{{d{Af}}{d{Af}}}Aj}``{{{d{f{Al{c}}}}{d{e}}{d{{Bb{AnB`}}}}A`BdBf}{{C`{{Bn{Bh{Bl{Bj}}}}}}}CbCd}``{{}A`}`{c{{Cf{Af}}}Ch}{{{d{Af}}{d{Af}}}Cj}{{{d{c}}{d{e}}}Cj{}{}}0{{{d{{h{ce}}}}{d{fCl}}}Cn{D`l}{D`n}}{{{d{A`}}{d{fCl}}}Cn}0{{{d{Ab}}{d{fCl}}}Cn}{{{d{Ad}}{d{fCl}}}Cn}{{{d{Af}}{d{fCl}}}Cn}0{cc{}}0000000{{{d{Db}}}{{Cf{{Dd{ce}}Df}}}ln}{{{d{Db}}}{{Cf{{h{ce}}Df}}}ln}{{{d{Db}}}{{Cf{AbDf}}}}{{{d{Db}}}{{Cf{AdDf}}}}{{{d{fDb}}}{{Cf{{Dd{ce}}Df}}}ln}{{{d{fDb}}}{{Cf{{h{ce}}Df}}}ln}{{{d{fDb}}}{{Cf{AbDf}}}}{{{d{fDb}}}{{Cf{AdDf}}}}{{{d{Dh}}}{{Cf{A`c}}}{}}{{{d{{Dj{{Al{c}}}}}}{d{{Dj{{Dl{e}}}}}}{d{{Dj{g}}}}{d{{Bb{AnB`}}}}Dnk{h{mi}}}{{C`{Ah}}}Cb{E`EbEdEf{Ej{{Eh{c}}}}ElEnD`}Cdn{{Fb{i{d{Bh}}}{{F`{{C`{Ah}}}}}}}l}{{{d{Dh}}}Cj}00````{{{d{{Ff{Fd}}}}{d{Dh}}}{{C`{{Fh{ceg}}}}}ln{E`EbEfEdD`ElEn}}`{ce{}{}}0000000{{}b}0``{{{d{Af}}{d{Af}}}{{Bl{Aj}}}}{{{d{{Al{c}}}}{d{e}}{d{{Fj{g}}}}}{{Cf{{Fn{{Fl{gc}}}}}}}CbCd{jG`}}{{{d{Af}}c}CfGb}{{{d{c}}}e{}{}}0000{{{d{c}}}Gd{}}0{c{{Cf{e}}}{}{}}000000000000000{{{d{c}}}Gf{}}0000000{{{d{f{Dd{ce}}}}{d{Db}}}{{Cf{AhDf}}}ln}{{{d{f{h{ce}}}}{d{Db}}}{{Cf{AhDf}}}ln}{{{d{fAb}}{d{Db}}}{{Cf{AhDf}}}}{{{d{fAd}}{d{Db}}}{{Cf{AhDf}}}}{{{d{f{Dd{ce}}}}{d{fDb}}}{{Cf{AhDf}}}ln}{{{d{f{h{ce}}}}{d{fDb}}}{{Cf{AhDf}}}ln}{{{d{fAb}}{d{fDb}}}{{Cf{AhDf}}}}{{{d{fAd}}{d{fDb}}}{{Cf{AhDf}}}}{ce{}{}}0000000```````````","D":"E`","p":[[8,"Command",187],[1,"reference"],[0,"mut"],[6,"Commands",0],[10,"Clone",188],[10,"Subcommand",189],[10,"Args",189],[6,"CoinSelectionAlgo",0],[6,"AddressCmd",0],[6,"TxOutCmd",0],[6,"Keychain",0],[1,"unit"],[6,"Ordering",190],[8,"KeychainTxGraph",0],[6,"DescriptorPublicKey",191],[6,"DescriptorSecretKey",191],[5,"BTreeMap",192],[5,"Address",193],[1,"u64"],[5,"Transaction",194],[5,"CreateTxChange",0],[6,"Option",195],[1,"tuple"],[8,"Result",196],[10,"Anchor",197],[10,"ChainOracle",198],[6,"Result",199],[10,"Deserializer",200],[1,"bool"],[5,"Formatter",201],[8,"Result",201],[10,"Debug",201],[5,"ArgMatches",202],[5,"Args",0],[5,"Error",203],[1,"str"],[5,"Mutex",204],[5,"Store",205],[6,"Network",206],[10,"Default",207],[10,"Append",197],[10,"DeserializeOwned",200],[10,"Serialize",208],[8,"KeychainChangeSet",0],[10,"From",209],[10,"Send",210],[10,"Sync",210],[17,"Output"],[10,"FnOnce",211],[1,"u8"],[1,"slice"],[5,"Init",0],[5,"Assets",212],[8,"PlannedUtxo",0],[5,"Vec",213],[10,"CanDerive",212],[10,"Serializer",208],[5,"String",214],[5,"TypeId",215],[15,"List",176],[15,"Address",177],[15,"Send",177],[15,"TxOut",177],[15,"List",183]],"r":[],"b":[[81,"impl-Display-for-CoinSelectionAlgo"],[82,"impl-Debug-for-CoinSelectionAlgo"],[85,"impl-Debug-for-Keychain"],[86,"impl-Display-for-Keychain"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAJMAEQAAAAAAAgABAAUABQANAAQAFQAAABcAAQAaAAAAHAABAB8AKQBKAA0AYAAMAG4AAABwAAAAewABAH4AMgCyAAAAtAACAA=="}],\ ["example_electrum",{"t":"ISSFGPFPNNNNNNONNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNOOOOOOOOO","n":["ChangeSet","DB_MAGIC","DB_PATH","ElectrumArgs","ElectrumCommands","Scan","ScanOptions","Sync","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","batch_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","client","clone","clone","clone","clone_into","clone_into","clone_into","electrum_args","electrum_url","eq","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","has_subcommand","into","into","into","into_app","into_app_for_update","main","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","all_spks","electrum_args","electrum_args","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":[[0,"example_electrum"],[71,"example_electrum::ElectrumCommands"],[80,"clap::builder::command"],[81,"bitcoin::network"],[82,"electrum_client::client"],[83,"anyhow"],[84,"core::fmt"],[85,"clap::parser::matches::arg_matches"],[86,"clap::error"],[87,"core::result"],[88,"core::any"]],"i":[0,0,0,0,0,8,0,8,4,9,4,9,8,8,9,8,4,9,8,4,9,4,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,8,4,9,9,9,0,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,19,20,19,20,19,20,19,19,19],"f":"````````{bb}00000`{{{d{c}}}{{d{e}}}{}{}}00{{{d{fc}}}{{d{fe}}}{}{}}00{{{d{h}}j}{{n{l}}}}{{{d{A`}}}A`}{{{d{h}}}h}{{{d{Ab}}}Ab}{{{d{c}}{d{fe}}}Ad{}{}}00{{{d{A`}}}h}`{{{d{Ab}}{d{Ab}}}Af}{{{d{A`}}{d{fAh}}}Aj}{{{d{h}}{d{fAh}}}Aj}{{{d{Ab}}{d{fAh}}}Aj}{cc{}}00{{{d{Al}}}{{B`{A`An}}}}{{{d{Al}}}{{B`{hAn}}}}{{{d{Al}}}{{B`{AbAn}}}}{{{d{fAl}}}{{B`{A`An}}}}{{{d{fAl}}}{{B`{hAn}}}}{{{d{fAl}}}{{B`{AbAn}}}}{{{d{Bb}}}Af}{ce{}{}}00{{}b}0{{}{{n{Ad}}}}{{{d{c}}}e{}{}}00{c{{B`{e}}}{}{}}00000{{{d{c}}}Bd{}}00{{{d{fA`}}{d{Al}}}{{B`{AdAn}}}}{{{d{fh}}{d{Al}}}{{B`{AdAn}}}}{{{d{fAb}}{d{Al}}}{{B`{AdAn}}}}{{{d{fA`}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fh}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fAb}}{d{fAl}}}{{B`{AdAn}}}};;;`````````","D":"An","p":[[8,"Command",80],[1,"reference"],[0,"mut"],[5,"ElectrumArgs",0],[6,"Network",81],[5,"Client",82],[8,"Result",83],[6,"ElectrumCommands",0],[5,"ScanOptions",0],[1,"unit"],[1,"bool"],[5,"Formatter",84],[8,"Result",84],[5,"ArgMatches",85],[5,"Error",86],[6,"Result",87],[1,"str"],[5,"TypeId",88],[15,"Sync",71],[15,"Scan",71]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEEACAAAAAUABwAAAAkABQAQAA0AHwADACYABgAwABcASQADAA=="}],\ diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js index 82609f29bf..d93b8adcc4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("bdk_chain", 0, "This crate is a collection of core structures for Bitcoin …\nTrait that “anchors” blockchain data to a specific …\nAn Anchor that can be constructed from a given block, …\nTrait that makes an object appendable.\nMaximum BIP32 derivation index.\nA reference to a block in the canonical chain.\nHow many confirmations are needed f or a coinbase output …\nRepresents a service that tracks the blockchain.\nRepresents the observed position of some chain data.\nA changeset containing crate structures typically …\nAn Anchor implementation that also records the exact …\nBlock height and timestamp at which a transaction is …\nAn Anchor implementation that also records the exact …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nA trait to extend the functionality of a miniscript …\nRepresents the unique ID of a descriptor.\nError type.\nA TxOut with as much data as we can retrieve about it\nAn iterator for derived script pubkeys.\nAn index storing TxOuts that have a script pubkey that …\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nThe script pubkeys that are being tracked by the index.\nReturns the BlockId that the associated blockchain data is …\nThe anchor block.\nThe anchor block.\nAppend another object of the same type onto self.\nReturns a reference to the inner hash (sha256, sh256d …\nChanges to the LocalChain.\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\nThe exact confirmation height of the transaction.\nThe confirmation height of the transaction being anchored.\nGet the upper bound of the chain data’s confirmation …\nGet the upper bound of the chain data’s confirmation …\nDetermines the upper bound of the confirmation height.\nThe confirmation time of the transaction being anchored.\nGet a reference to the internal descriptor.\nReturns the descriptor ID, calculated as the sha256 hash …\nReturns the minimum value (in satoshis) at which an output …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct the anchor from a given block, block height and …\nCreates this wrapper type from the inner hash type.\nGet the best chain’s chain tip.\nThe hash of the block.\nThe height of the block.\nReturns the index associated with the script pubkey.\nContains the IndexedTxGraph and associated types. Refer to …\nChanges to IndexedTxGraph.\nAdds a script pubkey to scan for. Returns false and does …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether block of BlockId exists as an ancestor …\nReturns whether ChainPosition is confirmed or not.\nReturns whether ConfirmationTime is the confirmed variant.\nWhether the utxo is/was/will be spendable with chain tip.\nReturns whether the structure is considered empty.\nWhether the txout is considered mature.\nWhether this output is on a coinbase transaction.\nWhether any of the inputs of this transaction spend a …\nReturns whether the script pubkey at index has been used …\nModule for keychain related structures.\nThe LocalChain is a local implementation of ChainOracle.\nMarks the script pubkey at index as used even though it …\nComputes the net value transfer effect of tx on the script …\nStores the network type of the transaction data.\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nGet a reference to the set of indexed outpoints.\nIterates over all the outputs with script pubkeys in an …\nScans a transaction’s outputs for matching script …\nScan a single TxOut for a matching script pubkey and …\nComputes the total value transfer effect tx has on the …\nThe txid and chain position of the transaction (if any) …\nReturns the script that has been inserted at the index.\nHelper types for spk-based blockchain clients.\nTake the value, replacing it with the default value.\nTake the value, replacing it with the default value.\nReturns the inner hash (sha256, sh256d etc.).\nModule for structures that store and traverse transactions.\nReturns the txout and script pubkey index of the TxOut at …\nThe TxOut.\nIterate over all known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nConstruct an unconfirmed variant using the given last_seen …\nUndoes the effect of mark_used. Returns whether the index …\nIterates over all unused script pubkeys in an index range.\nConfirmation height.\nThe last-seen timestamp in unix seconds.\nConfirmation time in unix seconds.\nRepresents changes to an IndexedTxGraph.\nThe resultant “changeset” when new transaction data is …\nThe IndexedTxGraph combines a TxGraph and an Indexer …\nUtilities for indexing transaction data.\nBatch insert all transactions of the given block of height.\nBatch insert all transactions of the given block of height…\nApply changeset to itself.\nApplies the ChangeSet to the IndexedTxGraph.\nApply an update directly.\nBatch insert transactions, filtering out those that are …\nBatch insert unconfirmed transactions, filtering out those …\nBatch insert unconfirmed transactions.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet a reference of the internal transaction graph.\nTxGraph changeset.\nTransaction index.\nScans a transaction for relevant outpoints, which are …\nScan and index the given outpoint and txout.\nIndexer changeset.\nDetermines the ChangeSet between self and an empty Indexer.\nDetermines the ChangeSet between self and an empty …\nInsert an anchor for a given transaction.\nInsert a unix timestamp of when a transaction is seen in …\nInsert and index a transaction into the graph.\nInsert a floating txout of given outpoint.\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether the transaction should be included in …\nConstruct a new IndexedTxGraph with a given index.\nBalance, differentiated into various categories.\nRepresents updates to the derivation index of a …\nThe default lookahead for a KeychainTxOutIndex\nThe descriptor has already been assigned to a keychain so …\nA tuple of keychain index and T representing the indexed …\nError returned from KeychainTxOutIndex::insert_descriptor\nThe keychain is already assigned to a descriptor so you can…\nA tuple of keychain K, derivation index (u32) and a T …\nKeychainTxOutIndex controls how script pubkeys are …\nThe keychain doesn’t exist. Most likley hasn’t been …\nGet unbounded spk iterators for all keychains.\nMerge another ChangeSet<K> into self.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nConfirmed and immediately spendable balance\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGets the descriptor associated with the keychain. Returns …\nAll coinbase outputs not yet matured\nReturns the keychain and keychain index associated with …\nReturn a reference to the internal SpkTxOutIndex.\nInsert a descriptor with a keychain associated to it.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the changeset are empty.\nReturns whether the spk under the keychain’s index has …\nIterate over all OutPoints that have TxOuts with script …\nIterate over OutPoints that have script pubkeys derived …\nReturn all keychains and their corresponding descriptors.\nContains the keychains that have been added and their …\nContains for each descriptor_id the last revealed index of …\nGet the last derivation index revealed for keychain. …\nGet the last derivation index that is revealed for each …\nReturns the highest derivation index of the keychain where …\nReturns the highest derivation index of each keychain that …\nGet the lookahead setting.\nStore lookahead scripts until target_index (inclusive).\nMarks the script pubkey at index as used even though the …\nComputes the net value that this transaction gives to the …\nConstruct a KeychainTxOutIndex with the given lookahead.\nGet the next derivation index for keychain. The next index …\nGets the next unused script pubkey in the keychain. I.e., …\nGet the set of indexed outpoints, corresponding to tracked …\nAttempts to reveal the next script pubkey for keychain.\nReveals script pubkeys of the keychain’s descriptor up …\nConvenience method to call Self::reveal_to_target on …\nIterate over revealed spks of the given keychain with …\nIterate over revealed spks of keychains in range\nComputes the total value transfer effect tx has on the …\nReturn the script that exists under the given keychain’s …\nGet the whole balance visible to the wallet.\nUnconfirmed UTXOs generated by a wallet tx\nGet sum of trusted_pending and confirmed coins.\nReturn the TxOut of outpoint if it has been indexed, and …\nIterate over known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nGet an unbounded spk iterator over a given keychain. …\nUndoes the effect of mark_used. Returns whether the index …\nUnconfirmed UTXOs received from an external wallet\nIterate over revealed, but unused, spks of the given …\nIterate over revealed, but unused, spks of all keychains.\nThe descriptor you have attempted to reassign\nThe keychain that the descriptor is already assigned to\nThe descriptor that the keychain is already assigned to\nThe keychain that you have attempted to reassign\nRepresents a failure when trying to insert/remove a …\nThe error type for LocalChain::apply_header_connected_to.\nOccurs when the update cannot connect with the original …\nOccurs when an update does not have a common checkpoint …\nThe ChangeSet represents changes to LocalChain.\nA LocalChain checkpoint is used to find the agreement …\nIterates over checkpoints backwards.\nOccurs when connected_to block conflicts with either the …\nThis is a local implementation of ChainOracle.\nAn error which occurs when a LocalChain is constructed …\nApply the given changeset.\nUpdate the chain with a given Header connecting it with …\nUpdate the chain with a given Header at height which you …\nApplies the given update to the chain.\nGet the BlockId of the checkpoint.\nRemoves blocks from (and inclusive of) the given block_id.\nExtends the checkpoint linked list by a iterator of block …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a checkpoint from a list of BlockIds in …\nConstructs a LocalChain from a BTreeMap of height to …\nConstruct a LocalChain from an initial changeset.\nConstruct LocalChain from genesis hash.\nConstruct a checkpoint from the given header and block …\nConstruct a LocalChain from a given checkpoint tip.\nGet the genesis hash.\nGet checkpoint at height.\nGet checkpoint at given height (if it exists).\nGet the block hash of the checkpoint.\nGet the height of the checkpoint.\nThe checkpoint’s height.\nDerives an initial ChangeSet, meaning that it can be …\nInserts block_id at its height within the chain.\nInsert a BlockId.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate from this checkpoint in descending height.\nIterate over checkpoints in descending height order.\nConstruct a new base block at the front of a linked list.\nThe original checkpoint’s block hash which cannot be …\nGet the previous checkpoint in the chain\nPuts another checkpoint onto the linked list representing …\nIterate checkpoints over a height range.\nIterate checkpoints over a height range.\nGet the highest checkpoint.\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client full scan.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client sync.\nChain on additional OutPoints that will be synced against.\nChain on additional Scripts that will be synced against.\nChain on additional Scripts that will be synced against.\nA checkpoint for the current chain LocalChain::tip. The …\nA checkpoint for the current LocalChain::tip. The full …\nChain on additional Txids that will be synced against.\nThe update to apply to the receiving LocalChain.\nThe update to apply to the receiving TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new SyncRequest from a given cp tip.\nConstruct a new FullScanRequest from a given chain_tip.\nConstruct a new FullScanRequest from a given chain_tip and …\nThe update to apply to the receiving TxGraph.\nThe update to apply to the receiving LocalChain.\nAdd a closure that will be called for OutPoints previously …\nAdd a closure that will be called for Scripts previously …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for Txids previously …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nLast active indices for the corresponding keychains (K).\nTransactions with these outpoints or spent from these …\nPopulate the request with revealed script pubkeys from …\nSet the OutPoints that will be synced against.\nSet the Scripts that will be synced against.\nSet the Scripts for a given keychain.\nSet the Txids that will be synced against.\nTransactions that spend from or to these indexed script …\nIterators of script pubkeys indexed by the keychain index.\nTransactions with these txids.\nErrors returned by TxGraph::calculate_fee.\nA transaction that is included in the chain, or is still …\nThe ChangeSet represents changes to a TxGraph.\nMissing TxOut for one or more of the inputs of the tx\nWhen the transaction is invalid according to the graph it …\nAn iterator that traverses ancestors of a given root …\nAn iterator that traverses transaction descendants.\nA graph of transactions and spends.\nA transaction node in the TxGraph.\nGet all transaction anchors known by TxGraph.\nIterate over all tx outputs known by TxGraph.\nIterates over the heights of that the new transaction …\nThe blocks that the transaction is “anchored” in.\nAdded anchors.\nApplies ChangeSet to TxGraph.\nExtends this graph with another so that self becomes the …\nGet the total balance of outpoints that are in chain of …\nBatch insert unconfirmed transactions.\nCalculates the fee of a given transaction. Returns …\nHow the transaction is observed as (confirmed or …\nGiven a transaction, return an iterator of txids that …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nIterate over floating txouts known by TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nIterate over all full transactions in the graph.\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nGet a transaction by txid. This only returns Some for full …\nGet a transaction node by txid. This only returns Some for …\nObtains a single tx output (if any) at the specified …\nDetermines the ChangeSet between self and an empty TxGraph.\nInserts the given anchor into TxGraph.\nInserts the given seen_at for txid into TxGraph.\nInserts the given transaction into TxGraph.\nInserts the given TxOut at OutPoint.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nWhether the graph has any transactions or outputs in it.\nAdded last-seen unix timestamps of transactions.\nThe last-seen unix timestamp of the transaction as …\nList graph transactions that are in chain with chain_tip.\nTransform the TxGraph to have Anchors of another type.\nTransform the ChangeSet to have Anchors of another type.\nConstruct a new TxGraph from a list of transactions.\nThe transactions spending from this output.\nGet the total balance of outpoints that are in chain of …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nList graph transactions that are in chain with chain_tip.\nA partial or full representation of the transaction.\nThe transaction node (as part of the graph).\nReturns known outputs of a given txid.\nIterates over the transactions spending from txid.\nTxid of the transaction.\nIterates over all outpoints contained within ChangeSet.\nAdded txouts.\nAdded transactions.\nIterate over graph transactions with no anchors or …\nUpdate the last seen time for all unconfirmed transactions.\nCreates an iterator that filters and maps ancestor …\nCreates an iterator that both filters and maps conflicting …\nCreates an iterator that filters and maps descendants from …") \ No newline at end of file +searchState.loadedDescShard("bdk_chain", 0, "This crate is a collection of core structures for Bitcoin …\nTrait that “anchors” blockchain data to a specific …\nAn Anchor that can be constructed from a given block, …\nTrait that makes an object appendable.\nMaximum BIP32 derivation index.\nBalance, differentiated into various categories.\nA reference to a block in the canonical chain.\nHow many confirmations are needed f or a coinbase output …\nRepresents a service that tracks the blockchain.\nRepresents the observed position of some chain data.\nA changeset containing crate structures typically …\nAn Anchor implementation that also records the exact …\nBlock height and timestamp at which a transaction is …\nAn Anchor implementation that also records the exact …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nA trait to extend the functionality of a miniscript …\nRepresents the unique ID of a descriptor.\nError type.\nA TxOut with as much data as we can retrieve about it\nA tuple of keychain index and T representing the indexed …\nA tuple of keychain K, derivation index (u32) and a T …\nAn iterator for derived script pubkeys.\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nReturns the BlockId that the associated blockchain data is …\nThe anchor block.\nThe anchor block.\nAppend another object of the same type onto self.\nReturns a reference to the inner hash (sha256, sh256d …\nChanges to the LocalChain.\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\nThe exact confirmation height of the transaction.\nThe confirmation height of the transaction being anchored.\nGet the upper bound of the chain data’s confirmation …\nGet the upper bound of the chain data’s confirmation …\nDetermines the upper bound of the confirmation height.\nThe confirmation time of the transaction being anchored.\nConfirmed and immediately spendable balance\nGet a reference to the internal descriptor.\nReturns the descriptor ID, calculated as the sha256 hash …\nReturns the minimum value (in satoshis) at which an output …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct the anchor from a given block, block height and …\nCreates this wrapper type from the inner hash type.\nGet the best chain’s chain tip.\nThe hash of the block.\nThe height of the block.\nAll coinbase outputs not yet matured\nContains the IndexedTxGraph and associated types. Refer to …\nChanges to IndexedTxGraph.\nIndexer provides utilities for indexing transaction data.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether block of BlockId exists as an ancestor …\nReturns whether ChainPosition is confirmed or not.\nReturns whether ConfirmationTime is the confirmed variant.\nWhether the utxo is/was/will be spendable with chain tip.\nReturns whether the structure is considered empty.\nWhether the txout is considered mature.\nWhether this output is on a coinbase transaction.\nThe LocalChain is a local implementation of ChainOracle.\nStores the network type of the transaction data.\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nThe txid and chain position of the transaction (if any) …\nHelper types for spk-based blockchain clients.\nTake the value, replacing it with the default value.\nTake the value, replacing it with the default value.\nReturns the inner hash (sha256, sh256d etc.).\nGet the whole balance visible to the wallet.\nUnconfirmed UTXOs generated by a wallet tx\nGet sum of trusted_pending and confirmed coins.\nModule for structures that store and traverse transactions.\nThe TxOut.\nConstruct an unconfirmed variant using the given last_seen …\nUnconfirmed UTXOs received from an external wallet\nConfirmation height.\nThe last-seen timestamp in unix seconds.\nConfirmation time in unix seconds.\nRepresents changes to an IndexedTxGraph.\nThe IndexedTxGraph combines a TxGraph and an Indexer …\nBatch insert all transactions of the given block of height.\nBatch insert all transactions of the given block of height…\nApplies the ChangeSet to the IndexedTxGraph.\nApply an update directly.\nBatch insert transactions, filtering out those that are …\nBatch insert unconfirmed transactions, filtering out those …\nBatch insert unconfirmed transactions.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet a reference of the internal transaction graph.\nTxGraph changeset.\nTransaction index.\nIndexer changeset.\nDetermines the ChangeSet between self and an empty …\nInsert an anchor for a given transaction.\nInsert a unix timestamp of when a transaction is seen in …\nInsert and index a transaction into the graph.\nInsert a floating txout of given outpoint.\nCalls U::from(self).\nCalls U::from(self).\nConstruct a new IndexedTxGraph with a given index.\nThe resultant “changeset” when new transaction data is …\nUtilities for indexing transaction data.\nApply changeset to itself.\nScans a transaction for relevant outpoints, which are …\nScan and index the given outpoint and txout.\nDetermines the ChangeSet between self and an empty Indexer.\nDetermines whether the transaction should be included in …\nKeychainTxOutIndex controls how script pubkeys are …\nSpkTxOutIndex is an index storing TxOuts that have a …\nRepresents updates to the derivation index of a …\nThe default lookahead for a KeychainTxOutIndex\nThe descriptor has already been assigned to a keychain so …\nError returned from KeychainTxOutIndex::insert_descriptor\nThe keychain is already assigned to a descriptor so you can…\nKeychainTxOutIndex controls how script pubkeys are …\nThe keychain doesn’t exist. Most likley hasn’t been …\nGet unbounded spk iterators for all keychains.\nMerge another ChangeSet<K> into self.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGets the descriptor associated with the keychain. Returns …\nReturns the keychain and keychain index associated with …\nReturn a reference to the internal SpkTxOutIndex.\nInsert a descriptor with a keychain associated to it.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the changeset are empty.\nReturns whether the spk under the keychain’s index has …\nIterate over all OutPoints that have TxOuts with script …\nIterate over OutPoints that have script pubkeys derived …\nReturn all keychains and their corresponding descriptors.\nContains the keychains that have been added and their …\nContains for each descriptor_id the last revealed index of …\nGet the last derivation index revealed for keychain. …\nGet the last derivation index that is revealed for each …\nReturns the highest derivation index of the keychain where …\nReturns the highest derivation index of each keychain that …\nGet the lookahead setting.\nStore lookahead scripts until target_index (inclusive).\nMarks the script pubkey at index as used even though the …\nComputes the net value that this transaction gives to the …\nConstruct a KeychainTxOutIndex with the given lookahead.\nGet the next derivation index for keychain. The next index …\nGets the next unused script pubkey in the keychain. I.e., …\nGet the set of indexed outpoints, corresponding to tracked …\nAttempts to reveal the next script pubkey for keychain.\nReveals script pubkeys of the keychain’s descriptor up …\nConvenience method to call Self::reveal_to_target on …\nIterate over revealed spks of the given keychain with …\nIterate over revealed spks of keychains in range\nComputes the total value transfer effect tx has on the …\nReturn the script that exists under the given keychain’s …\nReturn the TxOut of outpoint if it has been indexed, and …\nIterate over known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nGet an unbounded spk iterator over a given keychain. …\nUndoes the effect of mark_used. Returns whether the index …\nIterate over revealed, but unused, spks of the given …\nIterate over revealed, but unused, spks of all keychains.\nThe descriptor you have attempted to reassign\nThe keychain that the descriptor is already assigned to\nThe descriptor that the keychain is already assigned to\nThe keychain that you have attempted to reassign\nAn index storing TxOuts that have a script pubkey that …\nThe script pubkeys that are being tracked by the index.\nReturns the argument unchanged.\nReturns the index associated with the script pubkey.\nAdds a script pubkey to scan for. Returns false and does …\nCalls U::from(self).\nWhether any of the inputs of this transaction spend a …\nReturns whether the script pubkey at index has been used …\nMarks the script pubkey at index as used even though it …\nComputes the net value transfer effect of tx on the script …\nGet a reference to the set of indexed outpoints.\nIterates over all the outputs with script pubkeys in an …\nScans a transaction’s outputs for matching script …\nScan a single TxOut for a matching script pubkey and …\nComputes the total value transfer effect tx has on the …\nReturns the script that has been inserted at the index.\nReturns the txout and script pubkey index of the TxOut at …\nIterate over all known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nUndoes the effect of mark_used. Returns whether the index …\nIterates over all unused script pubkeys in an index range.\nRepresents a failure when trying to insert/remove a …\nThe error type for LocalChain::apply_header_connected_to.\nOccurs when the update cannot connect with the original …\nOccurs when an update does not have a common checkpoint …\nThe ChangeSet represents changes to LocalChain.\nA LocalChain checkpoint is used to find the agreement …\nIterates over checkpoints backwards.\nOccurs when connected_to block conflicts with either the …\nThis is a local implementation of ChainOracle.\nAn error which occurs when a LocalChain is constructed …\nApply the given changeset.\nUpdate the chain with a given Header connecting it with …\nUpdate the chain with a given Header at height which you …\nApplies the given update to the chain.\nGet the BlockId of the checkpoint.\nRemoves blocks from (and inclusive of) the given block_id.\nExtends the checkpoint linked list by a iterator of block …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a checkpoint from a list of BlockIds in …\nConstructs a LocalChain from a BTreeMap of height to …\nConstruct a LocalChain from an initial changeset.\nConstruct LocalChain from genesis hash.\nConstruct a checkpoint from the given header and block …\nConstruct a LocalChain from a given checkpoint tip.\nGet the genesis hash.\nGet checkpoint at height.\nGet checkpoint at given height (if it exists).\nGet the block hash of the checkpoint.\nGet the height of the checkpoint.\nThe checkpoint’s height.\nDerives an initial ChangeSet, meaning that it can be …\nInserts block_id at its height within the chain.\nInsert a BlockId.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate from this checkpoint in descending height.\nIterate over checkpoints in descending height order.\nConstruct a new base block at the front of a linked list.\nThe original checkpoint’s block hash which cannot be …\nGet the previous checkpoint in the chain\nPuts another checkpoint onto the linked list representing …\nIterate checkpoints over a height range.\nIterate checkpoints over a height range.\nGet the highest checkpoint.\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client full scan.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client sync.\nChain on additional OutPoints that will be synced against.\nChain on additional Scripts that will be synced against.\nChain on additional Scripts that will be synced against.\nA checkpoint for the current chain LocalChain::tip. The …\nA checkpoint for the current LocalChain::tip. The full …\nChain on additional Txids that will be synced against.\nThe update to apply to the receiving LocalChain.\nThe update to apply to the receiving TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new SyncRequest from a given cp tip.\nConstruct a new FullScanRequest from a given chain_tip.\nConstruct a new FullScanRequest from a given chain_tip and …\nThe update to apply to the receiving TxGraph.\nThe update to apply to the receiving LocalChain.\nAdd a closure that will be called for OutPoints previously …\nAdd a closure that will be called for Scripts previously …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for Txids previously …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nLast active indices for the corresponding keychains (K).\nTransactions with these outpoints or spent from these …\nPopulate the request with revealed script pubkeys from …\nSet the OutPoints that will be synced against.\nSet the Scripts that will be synced against.\nSet the Scripts for a given keychain.\nSet the Txids that will be synced against.\nTransactions that spend from or to these indexed script …\nIterators of script pubkeys indexed by the keychain index.\nTransactions with these txids.\nErrors returned by TxGraph::calculate_fee.\nA transaction that is included in the chain, or is still …\nThe ChangeSet represents changes to a TxGraph.\nMissing TxOut for one or more of the inputs of the tx\nWhen the transaction is invalid according to the graph it …\nAn iterator that traverses ancestors of a given root …\nAn iterator that traverses transaction descendants.\nA graph of transactions and spends.\nA transaction node in the TxGraph.\nGet all transaction anchors known by TxGraph.\nIterate over all tx outputs known by TxGraph.\nIterates over the heights of that the new transaction …\nThe blocks that the transaction is “anchored” in.\nAdded anchors.\nApplies ChangeSet to TxGraph.\nExtends this graph with another so that self becomes the …\nGet the total balance of outpoints that are in chain of …\nBatch insert unconfirmed transactions.\nCalculates the fee of a given transaction. Returns …\nHow the transaction is observed as (confirmed or …\nGiven a transaction, return an iterator of txids that …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nIterate over floating txouts known by TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nIterate over all full transactions in the graph.\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nGet a transaction by txid. This only returns Some for full …\nGet a transaction node by txid. This only returns Some for …\nObtains a single tx output (if any) at the specified …\nDetermines the ChangeSet between self and an empty TxGraph.\nInserts the given anchor into TxGraph.\nInserts the given seen_at for txid into TxGraph.\nInserts the given transaction into TxGraph.\nInserts the given TxOut at OutPoint.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nWhether the graph has any transactions or outputs in it.\nAdded last-seen unix timestamps of transactions.\nThe last-seen unix timestamp of the transaction as …\nList graph transactions that are in chain with chain_tip.\nTransform the TxGraph to have Anchors of another type.\nTransform the ChangeSet to have Anchors of another type.\nConstruct a new TxGraph from a list of transactions.\nThe transactions spending from this output.\nGet the total balance of outpoints that are in chain of …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nList graph transactions that are in chain with chain_tip.\nA partial or full representation of the transaction.\nThe transaction node (as part of the graph).\nReturns known outputs of a given txid.\nIterates over the transactions spending from txid.\nTxid of the transaction.\nIterates over all outpoints contained within ChangeSet.\nAdded txouts.\nAdded transactions.\nIterate over graph transactions with no anchors or …\nUpdate the last seen time for all unconfirmed transactions.\nCreates an iterator that filters and maps ancestor …\nCreates an iterator that both filters and maps conflicting …\nCreates an iterator that filters and maps descendants from …") \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html index 1ee22d6039..d75e264032 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html @@ -1 +1 @@ -Settings

    Rustdoc settings

    Back
    \ No newline at end of file +Settings

    Rustdoc settings

    Back
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src-files.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src-files.js index 212e840896..68e2f724f6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src-files.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src-files.js @@ -1,6 +1,6 @@ var srcIndex = new Map(JSON.parse('[\ ["bdk_bitcoind_rpc",["",[],["lib.rs"]]],\ -["bdk_chain",["",[["keychain",[],["txout_index.rs"]]],["chain_data.rs","chain_oracle.rs","changeset.rs","descriptor_ext.rs","example_utils.rs","indexed_tx_graph.rs","keychain.rs","lib.rs","local_chain.rs","spk_client.rs","spk_iter.rs","spk_txout_index.rs","tx_data_traits.rs","tx_graph.rs"]]],\ +["bdk_chain",["",[["indexer",[],["keychain_txout.rs","spk_txout.rs"]]],["balance.rs","chain_data.rs","chain_oracle.rs","changeset.rs","descriptor_ext.rs","example_utils.rs","indexed_tx_graph.rs","indexer.rs","lib.rs","local_chain.rs","spk_client.rs","spk_iter.rs","tx_data_traits.rs","tx_graph.rs"]]],\ ["bdk_coin_select",["",[],["bnb.rs","coin_selector.rs","lib.rs"]]],\ ["bdk_electrum",["",[],["bdk_electrum_client.rs","lib.rs"]]],\ ["bdk_esplora",["",[],["async_ext.rs","blocking_ext.rs","lib.rs"]]],\ diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/balance.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/balance.rs.html new file mode 100644 index 0000000000..5cd22a3ac7 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/balance.rs.html @@ -0,0 +1,115 @@ +balance.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    use bitcoin::Amount;
    +
    +/// Balance, differentiated into various categories.
    +#[derive(Debug, PartialEq, Eq, Clone, Default)]
    +#[cfg_attr(
    +    feature = "serde",
    +    derive(serde::Deserialize, serde::Serialize),
    +    serde(crate = "serde_crate",)
    +)]
    +pub struct Balance {
    +    /// All coinbase outputs not yet matured
    +    pub immature: Amount,
    +    /// Unconfirmed UTXOs generated by a wallet tx
    +    pub trusted_pending: Amount,
    +    /// Unconfirmed UTXOs received from an external wallet
    +    pub untrusted_pending: Amount,
    +    /// Confirmed and immediately spendable balance
    +    pub confirmed: Amount,
    +}
    +
    +impl Balance {
    +    /// Get sum of trusted_pending and confirmed coins.
    +    ///
    +    /// This is the balance you can spend right now that shouldn't get cancelled via another party
    +    /// double spending it.
    +    pub fn trusted_spendable(&self) -> Amount {
    +        self.confirmed + self.trusted_pending
    +    }
    +
    +    /// Get the whole balance visible to the wallet.
    +    pub fn total(&self) -> Amount {
    +        self.confirmed + self.trusted_pending + self.untrusted_pending + self.immature
    +    }
    +}
    +
    +impl core::fmt::Display for Balance {
    +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    +        write!(
    +            f,
    +            "{{ immature: {}, trusted_pending: {}, untrusted_pending: {}, confirmed: {} }}",
    +            self.immature, self.trusted_pending, self.untrusted_pending, self.confirmed
    +        )
    +    }
    +}
    +
    +impl core::ops::Add for Balance {
    +    type Output = Self;
    +
    +    fn add(self, other: Self) -> Self {
    +        Self {
    +            immature: self.immature + other.immature,
    +            trusted_pending: self.trusted_pending + other.trusted_pending,
    +            untrusted_pending: self.untrusted_pending + other.untrusted_pending,
    +            confirmed: self.confirmed + other.confirmed,
    +        }
    +    }
    +}
    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/changeset.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/changeset.rs.html index a24a264380..7498db4c1e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/changeset.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/changeset.rs.html @@ -87,6 +87,10 @@ 87 88 89 +90 +91 +92 +93
    /// A changeset containing [`crate`] structures typically persisted together.
     #[cfg(feature = "miniscript")]
     #[derive(Debug, Clone, PartialEq)]
    @@ -105,7 +109,8 @@
         /// Changes to the [`LocalChain`](crate::local_chain::LocalChain).
         pub chain: crate::local_chain::ChangeSet,
         /// Changes to [`IndexedTxGraph`](crate::indexed_tx_graph::IndexedTxGraph).
    -    pub indexed_tx_graph: crate::indexed_tx_graph::ChangeSet<A, crate::keychain::ChangeSet<K>>,
    +    pub indexed_tx_graph:
    +        crate::indexed_tx_graph::ChangeSet<A, crate::indexer::keychain_txout::ChangeSet<K>>,
         /// Stores the network type of the transaction data.
         pub network: Option<bitcoin::Network>,
     }
    @@ -151,11 +156,14 @@
     }
     
     #[cfg(feature = "miniscript")]
    -impl<K, A> From<crate::indexed_tx_graph::ChangeSet<A, crate::keychain::ChangeSet<K>>>
    +impl<K, A> From<crate::indexed_tx_graph::ChangeSet<A, crate::indexer::keychain_txout::ChangeSet<K>>>
         for CombinedChangeSet<K, A>
     {
         fn from(
    -        indexed_tx_graph: crate::indexed_tx_graph::ChangeSet<A, crate::keychain::ChangeSet<K>>,
    +        indexed_tx_graph: crate::indexed_tx_graph::ChangeSet<
    +            A,
    +            crate::indexer::keychain_txout::ChangeSet<K>,
    +        >,
         ) -> Self {
             Self {
                 indexed_tx_graph,
    @@ -165,8 +173,8 @@
     }
     
     #[cfg(feature = "miniscript")]
    -impl<K, A> From<crate::keychain::ChangeSet<K>> for CombinedChangeSet<K, A> {
    -    fn from(indexer: crate::keychain::ChangeSet<K>) -> Self {
    +impl<K, A> From<crate::indexer::keychain_txout::ChangeSet<K>> for CombinedChangeSet<K, A> {
    +    fn from(indexer: crate::indexer::keychain_txout::ChangeSet<K>) -> Self {
             Self {
                 indexed_tx_graph: crate::indexed_tx_graph::ChangeSet {
                     indexer,
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexed_tx_graph.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexed_tx_graph.rs.html
    index dd1e63a4e8..4aeeeaafff 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexed_tx_graph.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexed_tx_graph.rs.html
    @@ -336,28 +336,6 @@
     336
     337
     338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
     

    //! Contains the [`IndexedTxGraph`] and associated types. Refer to the
     //! [`IndexedTxGraph`] documentation for more.
     use alloc::vec::Vec;
    @@ -365,7 +343,7 @@
     
     use crate::{
         tx_graph::{self, TxGraph},
    -    Anchor, AnchorFromBlockPosition, Append, BlockId,
    +    Anchor, AnchorFromBlockPosition, Append, BlockId, Indexer,
     };
     
     /// The [`IndexedTxGraph`] combines a [`TxGraph`] and an [`Indexer`] implementation.
    @@ -680,8 +658,10 @@
     }
     
     #[cfg(feature = "miniscript")]
    -impl<A, K> From<crate::keychain::ChangeSet<K>> for ChangeSet<A, crate::keychain::ChangeSet<K>> {
    -    fn from(indexer: crate::keychain::ChangeSet<K>) -> Self {
    +impl<A, K> From<crate::indexer::keychain_txout::ChangeSet<K>>
    +    for ChangeSet<A, crate::indexer::keychain_txout::ChangeSet<K>>
    +{
    +    fn from(indexer: crate::indexer::keychain_txout::ChangeSet<K>) -> Self {
             Self {
                 graph: Default::default(),
                 indexer,
    @@ -689,30 +669,6 @@
         }
     }
     
    -/// Utilities for indexing transaction data.
    -///
    -/// Types which implement this trait can be used to construct an [`IndexedTxGraph`].
    -/// This trait's methods should rarely be called directly.
    -pub trait Indexer {
    -    /// The resultant "changeset" when new transaction data is indexed.
    -    type ChangeSet;
    -
    -    /// Scan and index the given `outpoint` and `txout`.
    -    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet;
    -
    -    /// Scans a transaction for relevant outpoints, which are stored and indexed internally.
    -    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet;
    -
    -    /// Apply changeset to itself.
    -    fn apply_changeset(&mut self, changeset: Self::ChangeSet);
    -
    -    /// Determines the [`ChangeSet`] between `self` and an empty [`Indexer`].
    -    fn initial_changeset(&self) -> Self::ChangeSet;
    -
    -    /// Determines whether the transaction should be included in the index.
    -    fn is_tx_relevant(&self, tx: &Transaction) -> bool;
    -}
    -
     impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I> {
         fn as_ref(&self) -> &TxGraph<A> {
             &self.graph
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer.rs.html
    new file mode 100644
    index 0000000000..8ff5dad579
    --- /dev/null
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer.rs.html
    @@ -0,0 +1,67 @@
    +indexer.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    //! [`Indexer`] provides utilities for indexing transaction data.
    +
    +use bitcoin::{OutPoint, Transaction, TxOut};
    +
    +#[cfg(feature = "miniscript")]
    +pub mod keychain_txout;
    +pub mod spk_txout;
    +
    +/// Utilities for indexing transaction data.
    +///
    +/// Types which implement this trait can be used to construct an [`IndexedTxGraph`].
    +/// This trait's methods should rarely be called directly.
    +///
    +/// [`IndexedTxGraph`]: crate::IndexedTxGraph
    +pub trait Indexer {
    +    /// The resultant "changeset" when new transaction data is indexed.
    +    type ChangeSet;
    +
    +    /// Scan and index the given `outpoint` and `txout`.
    +    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet;
    +
    +    /// Scans a transaction for relevant outpoints, which are stored and indexed internally.
    +    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet;
    +
    +    /// Apply changeset to itself.
    +    fn apply_changeset(&mut self, changeset: Self::ChangeSet);
    +
    +    /// Determines the [`ChangeSet`](Indexer::ChangeSet) between `self` and an empty [`Indexer`].
    +    fn initial_changeset(&self) -> Self::ChangeSet;
    +
    +    /// Determines whether the transaction should be included in the index.
    +    fn is_tx_relevant(&self, tx: &Transaction) -> bool;
    +}
    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer/keychain_txout.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer/keychain_txout.rs.html new file mode 100644 index 0000000000..6b313d96bf --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer/keychain_txout.rs.html @@ -0,0 +1,1893 @@ +keychain_txout.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +321
    +322
    +323
    +324
    +325
    +326
    +327
    +328
    +329
    +330
    +331
    +332
    +333
    +334
    +335
    +336
    +337
    +338
    +339
    +340
    +341
    +342
    +343
    +344
    +345
    +346
    +347
    +348
    +349
    +350
    +351
    +352
    +353
    +354
    +355
    +356
    +357
    +358
    +359
    +360
    +361
    +362
    +363
    +364
    +365
    +366
    +367
    +368
    +369
    +370
    +371
    +372
    +373
    +374
    +375
    +376
    +377
    +378
    +379
    +380
    +381
    +382
    +383
    +384
    +385
    +386
    +387
    +388
    +389
    +390
    +391
    +392
    +393
    +394
    +395
    +396
    +397
    +398
    +399
    +400
    +401
    +402
    +403
    +404
    +405
    +406
    +407
    +408
    +409
    +410
    +411
    +412
    +413
    +414
    +415
    +416
    +417
    +418
    +419
    +420
    +421
    +422
    +423
    +424
    +425
    +426
    +427
    +428
    +429
    +430
    +431
    +432
    +433
    +434
    +435
    +436
    +437
    +438
    +439
    +440
    +441
    +442
    +443
    +444
    +445
    +446
    +447
    +448
    +449
    +450
    +451
    +452
    +453
    +454
    +455
    +456
    +457
    +458
    +459
    +460
    +461
    +462
    +463
    +464
    +465
    +466
    +467
    +468
    +469
    +470
    +471
    +472
    +473
    +474
    +475
    +476
    +477
    +478
    +479
    +480
    +481
    +482
    +483
    +484
    +485
    +486
    +487
    +488
    +489
    +490
    +491
    +492
    +493
    +494
    +495
    +496
    +497
    +498
    +499
    +500
    +501
    +502
    +503
    +504
    +505
    +506
    +507
    +508
    +509
    +510
    +511
    +512
    +513
    +514
    +515
    +516
    +517
    +518
    +519
    +520
    +521
    +522
    +523
    +524
    +525
    +526
    +527
    +528
    +529
    +530
    +531
    +532
    +533
    +534
    +535
    +536
    +537
    +538
    +539
    +540
    +541
    +542
    +543
    +544
    +545
    +546
    +547
    +548
    +549
    +550
    +551
    +552
    +553
    +554
    +555
    +556
    +557
    +558
    +559
    +560
    +561
    +562
    +563
    +564
    +565
    +566
    +567
    +568
    +569
    +570
    +571
    +572
    +573
    +574
    +575
    +576
    +577
    +578
    +579
    +580
    +581
    +582
    +583
    +584
    +585
    +586
    +587
    +588
    +589
    +590
    +591
    +592
    +593
    +594
    +595
    +596
    +597
    +598
    +599
    +600
    +601
    +602
    +603
    +604
    +605
    +606
    +607
    +608
    +609
    +610
    +611
    +612
    +613
    +614
    +615
    +616
    +617
    +618
    +619
    +620
    +621
    +622
    +623
    +624
    +625
    +626
    +627
    +628
    +629
    +630
    +631
    +632
    +633
    +634
    +635
    +636
    +637
    +638
    +639
    +640
    +641
    +642
    +643
    +644
    +645
    +646
    +647
    +648
    +649
    +650
    +651
    +652
    +653
    +654
    +655
    +656
    +657
    +658
    +659
    +660
    +661
    +662
    +663
    +664
    +665
    +666
    +667
    +668
    +669
    +670
    +671
    +672
    +673
    +674
    +675
    +676
    +677
    +678
    +679
    +680
    +681
    +682
    +683
    +684
    +685
    +686
    +687
    +688
    +689
    +690
    +691
    +692
    +693
    +694
    +695
    +696
    +697
    +698
    +699
    +700
    +701
    +702
    +703
    +704
    +705
    +706
    +707
    +708
    +709
    +710
    +711
    +712
    +713
    +714
    +715
    +716
    +717
    +718
    +719
    +720
    +721
    +722
    +723
    +724
    +725
    +726
    +727
    +728
    +729
    +730
    +731
    +732
    +733
    +734
    +735
    +736
    +737
    +738
    +739
    +740
    +741
    +742
    +743
    +744
    +745
    +746
    +747
    +748
    +749
    +750
    +751
    +752
    +753
    +754
    +755
    +756
    +757
    +758
    +759
    +760
    +761
    +762
    +763
    +764
    +765
    +766
    +767
    +768
    +769
    +770
    +771
    +772
    +773
    +774
    +775
    +776
    +777
    +778
    +779
    +780
    +781
    +782
    +783
    +784
    +785
    +786
    +787
    +788
    +789
    +790
    +791
    +792
    +793
    +794
    +795
    +796
    +797
    +798
    +799
    +800
    +801
    +802
    +803
    +804
    +805
    +806
    +807
    +808
    +809
    +810
    +811
    +812
    +813
    +814
    +815
    +816
    +817
    +818
    +819
    +820
    +821
    +822
    +823
    +824
    +825
    +826
    +827
    +828
    +829
    +830
    +831
    +832
    +833
    +834
    +835
    +836
    +837
    +838
    +839
    +840
    +841
    +842
    +843
    +844
    +845
    +846
    +847
    +848
    +849
    +850
    +851
    +852
    +853
    +854
    +855
    +856
    +857
    +858
    +859
    +860
    +861
    +862
    +863
    +864
    +865
    +866
    +867
    +868
    +869
    +870
    +871
    +872
    +873
    +874
    +875
    +876
    +877
    +878
    +879
    +880
    +881
    +882
    +883
    +884
    +885
    +886
    +887
    +888
    +889
    +890
    +891
    +892
    +893
    +894
    +895
    +896
    +897
    +898
    +899
    +900
    +901
    +902
    +903
    +904
    +905
    +906
    +907
    +908
    +909
    +910
    +911
    +912
    +913
    +914
    +915
    +916
    +917
    +918
    +919
    +920
    +921
    +922
    +923
    +924
    +925
    +926
    +927
    +928
    +929
    +930
    +931
    +932
    +933
    +934
    +935
    +936
    +937
    +938
    +939
    +940
    +941
    +942
    +943
    +944
    +945
    +946
    +
    //! [`KeychainTxOutIndex`] controls how script pubkeys are revealed for multiple keychains and
    +//! indexes [`TxOut`]s with them.
    +
    +use crate::{
    +    collections::*,
    +    miniscript::{Descriptor, DescriptorPublicKey},
    +    spk_iter::BIP32_MAX_INDEX,
    +    DescriptorExt, DescriptorId, Indexed, Indexer, KeychainIndexed, SpkIterator, SpkTxOutIndex,
    +};
    +use alloc::{borrow::ToOwned, vec::Vec};
    +use bitcoin::{Amount, OutPoint, Script, ScriptBuf, SignedAmount, Transaction, TxOut, Txid};
    +use core::{
    +    fmt::Debug,
    +    ops::{Bound, RangeBounds},
    +};
    +
    +use crate::Append;
    +
    +/// The default lookahead for a [`KeychainTxOutIndex`]
    +pub const DEFAULT_LOOKAHEAD: u32 = 25;
    +
    +/// [`KeychainTxOutIndex`] controls how script pubkeys are revealed for multiple keychains, and
    +/// indexes [`TxOut`]s with them.
    +///
    +/// A single keychain is a chain of script pubkeys derived from a single [`Descriptor`]. Keychains
    +/// are identified using the `K` generic. Script pubkeys are identified by the keychain that they
    +/// are derived from `K`, as well as the derivation index `u32`.
    +///
    +/// There is a strict 1-to-1 relationship between descriptors and keychains. Each keychain has one
    +/// and only one descriptor and each descriptor has one and only one keychain. The
    +/// [`insert_descriptor`] method will return an error if you try and violate this invariant. This
    +/// rule is a proxy for a stronger rule: no two descriptors should produce the same script pubkey.
    +/// Having two descriptors produce the same script pubkey should cause whichever keychain derives
    +/// the script pubkey first to be the effective owner of it but you should not rely on this
    +/// behaviour. ⚠ It is up you, the developer, not to violate this invariant.
    +///
    +/// # Revealed script pubkeys
    +///
    +/// Tracking how script pubkeys are revealed is useful for collecting chain data. For example, if
    +/// the user has requested 5 script pubkeys (to receive money with), we only need to use those
    +/// script pubkeys to scan for chain data.
    +///
    +/// Call [`reveal_to_target`] or [`reveal_next_spk`] to reveal more script pubkeys.
    +/// Call [`revealed_keychain_spks`] or [`revealed_spks`] to iterate through revealed script pubkeys.
    +///
    +/// # Lookahead script pubkeys
    +///
    +/// When an user first recovers a wallet (i.e. from a recovery phrase and/or descriptor), we will
    +/// NOT have knowledge of which script pubkeys are revealed. So when we index a transaction or
    +/// txout (using [`index_tx`]/[`index_txout`]) we scan the txouts against script pubkeys derived
    +/// above the last revealed index. These additionally-derived script pubkeys are called the
    +/// lookahead.
    +///
    +/// The [`KeychainTxOutIndex`] is constructed with the `lookahead` and cannot be altered. See
    +/// [`DEFAULT_LOOKAHEAD`] for the value used in the `Default` implementation. Use [`new`] to set a
    +/// custom `lookahead`.
    +///
    +/// # Unbounded script pubkey iterator
    +///
    +/// For script-pubkey-based chain sources (such as Electrum/Esplora), an initial scan is best done
    +/// by iterating though derived script pubkeys one by one and requesting transaction histories for
    +/// each script pubkey. We will stop after x-number of script pubkeys have empty histories. An
    +/// unbounded script pubkey iterator is useful to pass to such a chain source because it doesn't
    +/// require holding a reference to the index.
    +///
    +/// Call [`unbounded_spk_iter`] to get an unbounded script pubkey iterator for a given keychain.
    +/// Call [`all_unbounded_spk_iters`] to get unbounded script pubkey iterators for all keychains.
    +///
    +/// # Change sets
    +///
    +/// Methods that can update the last revealed index or add keychains will return [`ChangeSet`] to report
    +/// these changes. This should be persisted for future recovery.
    +///
    +/// ## Synopsis
    +///
    +/// ```
    +/// use bdk_chain::indexer::keychain_txout::KeychainTxOutIndex;
    +/// # use bdk_chain::{ miniscript::{Descriptor, DescriptorPublicKey} };
    +/// # use core::str::FromStr;
    +///
    +/// // imagine our service has internal and external addresses but also addresses for users
    +/// #[derive(Clone, Debug, PartialEq, Eq, Ord, PartialOrd)]
    +/// enum MyKeychain {
    +///     External,
    +///     Internal,
    +///     MyAppUser {
    +///         user_id: u32
    +///     }
    +/// }
    +///
    +/// let mut txout_index = KeychainTxOutIndex::<MyKeychain>::default();
    +///
    +/// # let secp = bdk_chain::bitcoin::secp256k1::Secp256k1::signing_only();
    +/// # let (external_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/0/*)").unwrap();
    +/// # let (internal_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/*)").unwrap();
    +/// # let (descriptor_42, _) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/2/*)").unwrap();
    +/// let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor)?;
    +/// let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor)?;
    +/// let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42)?;
    +///
    +/// let new_spk_for_user = txout_index.reveal_next_spk(&MyKeychain::MyAppUser{ user_id: 42 });
    +/// # Ok::<_, bdk_chain::indexer::keychain_txout::InsertDescriptorError<_>>(())
    +/// ```
    +///
    +/// [`Ord`]: core::cmp::Ord
    +/// [`SpkTxOutIndex`]: crate::spk_txout_index::SpkTxOutIndex
    +/// [`Descriptor`]: crate::miniscript::Descriptor
    +/// [`reveal_to_target`]: Self::reveal_to_target
    +/// [`reveal_next_spk`]: Self::reveal_next_spk
    +/// [`revealed_keychain_spks`]: Self::revealed_keychain_spks
    +/// [`revealed_spks`]: Self::revealed_spks
    +/// [`index_tx`]: Self::index_tx
    +/// [`index_txout`]: Self::index_txout
    +/// [`new`]: Self::new
    +/// [`unbounded_spk_iter`]: Self::unbounded_spk_iter
    +/// [`all_unbounded_spk_iters`]: Self::all_unbounded_spk_iters
    +/// [`outpoints`]: Self::outpoints
    +/// [`txouts`]: Self::txouts
    +/// [`unused_spks`]: Self::unused_spks
    +/// [`insert_descriptor`]: Self::insert_descriptor
    +#[derive(Clone, Debug)]
    +pub struct KeychainTxOutIndex<K> {
    +    inner: SpkTxOutIndex<(K, u32)>,
    +    keychain_to_descriptor_id: BTreeMap<K, DescriptorId>,
    +    descriptor_id_to_keychain: HashMap<DescriptorId, K>,
    +    descriptors: HashMap<DescriptorId, Descriptor<DescriptorPublicKey>>,
    +    last_revealed: HashMap<DescriptorId, u32>,
    +    lookahead: u32,
    +}
    +
    +impl<K> Default for KeychainTxOutIndex<K> {
    +    fn default() -> Self {
    +        Self::new(DEFAULT_LOOKAHEAD)
    +    }
    +}
    +
    +impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K> {
    +    type ChangeSet = ChangeSet<K>;
    +
    +    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet {
    +        let mut changeset = ChangeSet::default();
    +        if let Some((keychain, index)) = self.inner.scan_txout(outpoint, txout).cloned() {
    +            let did = self
    +                .keychain_to_descriptor_id
    +                .get(&keychain)
    +                .expect("invariant");
    +            if self.last_revealed.get(did) < Some(&index) {
    +                self.last_revealed.insert(*did, index);
    +                changeset.last_revealed.insert(*did, index);
    +                self.replenish_inner_index(*did, &keychain, self.lookahead);
    +            }
    +        }
    +        changeset
    +    }
    +
    +    fn index_tx(&mut self, tx: &bitcoin::Transaction) -> Self::ChangeSet {
    +        let mut changeset = ChangeSet::<K>::default();
    +        let txid = tx.compute_txid();
    +        for (op, txout) in tx.output.iter().enumerate() {
    +            changeset.append(self.index_txout(OutPoint::new(txid, op as u32), txout));
    +        }
    +        changeset
    +    }
    +
    +    fn initial_changeset(&self) -> Self::ChangeSet {
    +        ChangeSet {
    +            keychains_added: self
    +                .keychains()
    +                .map(|(k, v)| (k.clone(), v.clone()))
    +                .collect(),
    +            last_revealed: self.last_revealed.clone().into_iter().collect(),
    +        }
    +    }
    +
    +    fn apply_changeset(&mut self, changeset: Self::ChangeSet) {
    +        self.apply_changeset(changeset)
    +    }
    +
    +    fn is_tx_relevant(&self, tx: &bitcoin::Transaction) -> bool {
    +        self.inner.is_relevant(tx)
    +    }
    +}
    +
    +impl<K> KeychainTxOutIndex<K> {
    +    /// Construct a [`KeychainTxOutIndex`] with the given `lookahead`.
    +    ///
    +    /// The `lookahead` is the number of script pubkeys to derive and cache from the internal
    +    /// descriptors over and above the last revealed script index. Without a lookahead the index
    +    /// will miss outputs you own when processing transactions whose output script pubkeys lie
    +    /// beyond the last revealed index. In certain situations, such as when performing an initial
    +    /// scan of the blockchain during wallet import, it may be uncertain or unknown what the index
    +    /// of the last revealed script pubkey actually is.
    +    ///
    +    /// Refer to [struct-level docs](KeychainTxOutIndex) for more about `lookahead`.
    +    pub fn new(lookahead: u32) -> Self {
    +        Self {
    +            inner: SpkTxOutIndex::default(),
    +            keychain_to_descriptor_id: Default::default(),
    +            descriptors: Default::default(),
    +            descriptor_id_to_keychain: Default::default(),
    +            last_revealed: Default::default(),
    +            lookahead,
    +        }
    +    }
    +}
    +
    +/// Methods that are *re-exposed* from the internal [`SpkTxOutIndex`].
    +impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
    +    /// Return a reference to the internal [`SpkTxOutIndex`].
    +    ///
    +    /// **WARNING**: The internal index will contain lookahead spks. Refer to
    +    /// [struct-level docs](KeychainTxOutIndex) for more about `lookahead`.
    +    pub fn inner(&self) -> &SpkTxOutIndex<(K, u32)> {
    +        &self.inner
    +    }
    +
    +    /// Get the set of indexed outpoints, corresponding to tracked keychains.
    +    pub fn outpoints(&self) -> &BTreeSet<KeychainIndexed<K, OutPoint>> {
    +        self.inner.outpoints()
    +    }
    +
    +    /// Iterate over known txouts that spend to tracked script pubkeys.
    +    pub fn txouts(
    +        &self,
    +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> + ExactSizeIterator
    +    {
    +        self.inner
    +            .txouts()
    +            .map(|(index, op, txout)| (index.clone(), (op, txout)))
    +    }
    +
    +    /// Finds all txouts on a transaction that has previously been scanned and indexed.
    +    pub fn txouts_in_tx(
    +        &self,
    +        txid: Txid,
    +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> {
    +        self.inner
    +            .txouts_in_tx(txid)
    +            .map(|(index, op, txout)| (index.clone(), (op, txout)))
    +    }
    +
    +    /// Return the [`TxOut`] of `outpoint` if it has been indexed, and if it corresponds to a
    +    /// tracked keychain.
    +    ///
    +    /// The associated keychain and keychain index of the txout's spk is also returned.
    +    ///
    +    /// This calls [`SpkTxOutIndex::txout`] internally.
    +    pub fn txout(&self, outpoint: OutPoint) -> Option<KeychainIndexed<K, &TxOut>> {
    +        self.inner
    +            .txout(outpoint)
    +            .map(|(index, txout)| (index.clone(), txout))
    +    }
    +
    +    /// Return the script that exists under the given `keychain`'s `index`.
    +    ///
    +    /// This calls [`SpkTxOutIndex::spk_at_index`] internally.
    +    pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script> {
    +        self.inner.spk_at_index(&(keychain.clone(), index))
    +    }
    +
    +    /// Returns the keychain and keychain index associated with the spk.
    +    ///
    +    /// This calls [`SpkTxOutIndex::index_of_spk`] internally.
    +    pub fn index_of_spk(&self, script: &Script) -> Option<&(K, u32)> {
    +        self.inner.index_of_spk(script)
    +    }
    +
    +    /// Returns whether the spk under the `keychain`'s `index` has been used.
    +    ///
    +    /// Here, "unused" means that after the script pubkey was stored in the index, the index has
    +    /// never scanned a transaction output with it.
    +    ///
    +    /// This calls [`SpkTxOutIndex::is_used`] internally.
    +    pub fn is_used(&self, keychain: K, index: u32) -> bool {
    +        self.inner.is_used(&(keychain, index))
    +    }
    +
    +    /// Marks the script pubkey at `index` as used even though the tracker hasn't seen an output
    +    /// with it.
    +    ///
    +    /// This only has an effect when the `index` had been added to `self` already and was unused.
    +    ///
    +    /// Returns whether the spk under the given `keychain` and `index` is successfully
    +    /// marked as used. Returns false either when there is no descriptor under the given
    +    /// keychain, or when the spk is already marked as used.
    +    ///
    +    /// This is useful when you want to reserve a script pubkey for something but don't want to add
    +    /// the transaction output using it to the index yet. Other callers will consider `index` on
    +    /// `keychain` used until you call [`unmark_used`].
    +    ///
    +    /// This calls [`SpkTxOutIndex::mark_used`] internally.
    +    ///
    +    /// [`unmark_used`]: Self::unmark_used
    +    pub fn mark_used(&mut self, keychain: K, index: u32) -> bool {
    +        self.inner.mark_used(&(keychain, index))
    +    }
    +
    +    /// Undoes the effect of [`mark_used`]. Returns whether the `index` is inserted back into
    +    /// `unused`.
    +    ///
    +    /// Note that if `self` has scanned an output with this script pubkey, then this will have no
    +    /// effect.
    +    ///
    +    /// This calls [`SpkTxOutIndex::unmark_used`] internally.
    +    ///
    +    /// [`mark_used`]: Self::mark_used
    +    pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool {
    +        self.inner.unmark_used(&(keychain, index))
    +    }
    +
    +    /// Computes the total value transfer effect `tx` has on the script pubkeys belonging to the
    +    /// keychains in `range`. Value is *sent* when a script pubkey in the `range` is on an input and
    +    /// *received* when it is on an output. For `sent` to be computed correctly, the output being
    +    /// spent must have already been scanned by the index. Calculating received just uses the
    +    /// [`Transaction`] outputs directly, so it will be correct even if it has not been scanned.
    +    pub fn sent_and_received(
    +        &self,
    +        tx: &Transaction,
    +        range: impl RangeBounds<K>,
    +    ) -> (Amount, Amount) {
    +        self.inner
    +            .sent_and_received(tx, self.map_to_inner_bounds(range))
    +    }
    +
    +    /// Computes the net value that this transaction gives to the script pubkeys in the index and
    +    /// *takes* from the transaction outputs in the index. Shorthand for calling
    +    /// [`sent_and_received`] and subtracting sent from received.
    +    ///
    +    /// This calls [`SpkTxOutIndex::net_value`] internally.
    +    ///
    +    /// [`sent_and_received`]: Self::sent_and_received
    +    pub fn net_value(&self, tx: &Transaction, range: impl RangeBounds<K>) -> SignedAmount {
    +        self.inner.net_value(tx, self.map_to_inner_bounds(range))
    +    }
    +}
    +
    +impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
    +    /// Return all keychains and their corresponding descriptors.
    +    pub fn keychains(
    +        &self,
    +    ) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_
    +    {
    +        self.keychain_to_descriptor_id
    +            .iter()
    +            .map(|(k, did)| (k, self.descriptors.get(did).expect("invariant")))
    +    }
    +
    +    /// Insert a descriptor with a keychain associated to it.
    +    ///
    +    /// Adding a descriptor means you will be able to derive new script pubkeys under it and the
    +    /// txout index will discover transaction outputs with those script pubkeys (once they've been
    +    /// derived and added to the index).
    +    ///
    +    /// keychain <-> descriptor is a one-to-one mapping that cannot be changed. Attempting to do so
    +    /// will return a [`InsertDescriptorError<K>`].
    +    ///
    +    /// `[KeychainTxOutIndex]` will prevent you from inserting two descriptors which derive the same
    +    /// script pubkey at index 0, but it's up to you to ensure that descriptors don't collide at
    +    /// other indices. If they do nothing catastrophic happens at the `KeychainTxOutIndex` level
    +    /// (one keychain just becomes the defacto owner of that spk arbitrarily) but this may have
    +    /// subtle implications up the application stack like one UTXO being missing from one keychain
    +    /// because it has been assigned to another which produces the same script pubkey.
    +    pub fn insert_descriptor(
    +        &mut self,
    +        keychain: K,
    +        descriptor: Descriptor<DescriptorPublicKey>,
    +    ) -> Result<ChangeSet<K>, InsertDescriptorError<K>> {
    +        let mut changeset = ChangeSet::<K>::default();
    +        let did = descriptor.descriptor_id();
    +        if !self.keychain_to_descriptor_id.contains_key(&keychain)
    +            && !self.descriptor_id_to_keychain.contains_key(&did)
    +        {
    +            self.descriptors.insert(did, descriptor.clone());
    +            self.keychain_to_descriptor_id.insert(keychain.clone(), did);
    +            self.descriptor_id_to_keychain.insert(did, keychain.clone());
    +            self.replenish_inner_index(did, &keychain, self.lookahead);
    +            changeset
    +                .keychains_added
    +                .insert(keychain.clone(), descriptor);
    +        } else {
    +            if let Some(existing_desc_id) = self.keychain_to_descriptor_id.get(&keychain) {
    +                let descriptor = self.descriptors.get(existing_desc_id).expect("invariant");
    +                if *existing_desc_id != did {
    +                    return Err(InsertDescriptorError::KeychainAlreadyAssigned {
    +                        existing_assignment: descriptor.clone(),
    +                        keychain,
    +                    });
    +                }
    +            }
    +
    +            if let Some(existing_keychain) = self.descriptor_id_to_keychain.get(&did) {
    +                let descriptor = self.descriptors.get(&did).expect("invariant").clone();
    +
    +                if *existing_keychain != keychain {
    +                    return Err(InsertDescriptorError::DescriptorAlreadyAssigned {
    +                        existing_assignment: existing_keychain.clone(),
    +                        descriptor,
    +                    });
    +                }
    +            }
    +        }
    +
    +        Ok(changeset)
    +    }
    +
    +    /// Gets the descriptor associated with the keychain. Returns `None` if the keychain doesn't
    +    /// have a descriptor associated with it.
    +    pub fn get_descriptor(&self, keychain: &K) -> Option<&Descriptor<DescriptorPublicKey>> {
    +        let did = self.keychain_to_descriptor_id.get(keychain)?;
    +        self.descriptors.get(did)
    +    }
    +
    +    /// Get the lookahead setting.
    +    ///
    +    /// Refer to [`new`] for more information on the `lookahead`.
    +    ///
    +    /// [`new`]: Self::new
    +    pub fn lookahead(&self) -> u32 {
    +        self.lookahead
    +    }
    +
    +    /// Store lookahead scripts until `target_index` (inclusive).
    +    ///
    +    /// This does not change the global `lookahead` setting.
    +    pub fn lookahead_to_target(&mut self, keychain: &K, target_index: u32) {
    +        if let Some((next_index, _)) = self.next_index(keychain) {
    +            let temp_lookahead = (target_index + 1)
    +                .checked_sub(next_index)
    +                .filter(|&index| index > 0);
    +
    +            if let Some(temp_lookahead) = temp_lookahead {
    +                self.replenish_inner_index_keychain(keychain, temp_lookahead);
    +            }
    +        }
    +    }
    +
    +    fn replenish_inner_index_did(&mut self, did: DescriptorId, lookahead: u32) {
    +        if let Some(keychain) = self.descriptor_id_to_keychain.get(&did).cloned() {
    +            self.replenish_inner_index(did, &keychain, lookahead);
    +        }
    +    }
    +
    +    fn replenish_inner_index_keychain(&mut self, keychain: &K, lookahead: u32) {
    +        if let Some(did) = self.keychain_to_descriptor_id.get(keychain) {
    +            self.replenish_inner_index(*did, keychain, lookahead);
    +        }
    +    }
    +
    +    /// Syncs the state of the inner spk index after changes to a keychain
    +    fn replenish_inner_index(&mut self, did: DescriptorId, keychain: &K, lookahead: u32) {
    +        let descriptor = self.descriptors.get(&did).expect("invariant");
    +        let next_store_index = self
    +            .inner
    +            .all_spks()
    +            .range(&(keychain.clone(), u32::MIN)..=&(keychain.clone(), u32::MAX))
    +            .last()
    +            .map_or(0, |((_, index), _)| *index + 1);
    +        let next_reveal_index = self.last_revealed.get(&did).map_or(0, |v| *v + 1);
    +        for (new_index, new_spk) in
    +            SpkIterator::new_with_range(descriptor, next_store_index..next_reveal_index + lookahead)
    +        {
    +            let _inserted = self
    +                .inner
    +                .insert_spk((keychain.clone(), new_index), new_spk);
    +            debug_assert!(_inserted, "replenish lookahead: must not have existing spk: keychain={:?}, lookahead={}, next_store_index={}, next_reveal_index={}", keychain, lookahead, next_store_index, next_reveal_index);
    +        }
    +    }
    +
    +    /// Get an unbounded spk iterator over a given `keychain`. Returns `None` if the provided
    +    /// keychain doesn't exist
    +    pub fn unbounded_spk_iter(
    +        &self,
    +        keychain: &K,
    +    ) -> Option<SpkIterator<Descriptor<DescriptorPublicKey>>> {
    +        let descriptor = self.get_descriptor(keychain)?.clone();
    +        Some(SpkIterator::new(descriptor))
    +    }
    +
    +    /// Get unbounded spk iterators for all keychains.
    +    pub fn all_unbounded_spk_iters(
    +        &self,
    +    ) -> BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>> {
    +        self.keychain_to_descriptor_id
    +            .iter()
    +            .map(|(k, did)| {
    +                (
    +                    k.clone(),
    +                    SpkIterator::new(self.descriptors.get(did).expect("invariant").clone()),
    +                )
    +            })
    +            .collect()
    +    }
    +
    +    /// Iterate over revealed spks of keychains in `range`
    +    pub fn revealed_spks(
    +        &self,
    +        range: impl RangeBounds<K>,
    +    ) -> impl Iterator<Item = KeychainIndexed<K, &Script>> {
    +        let start = range.start_bound();
    +        let end = range.end_bound();
    +        let mut iter_last_revealed = self
    +            .keychain_to_descriptor_id
    +            .range((start, end))
    +            .map(|(k, did)| (k, self.last_revealed.get(did).cloned()));
    +        let mut iter_spks = self
    +            .inner
    +            .all_spks()
    +            .range(self.map_to_inner_bounds((start, end)));
    +        let mut current_keychain = iter_last_revealed.next();
    +        // The reason we need a tricky algorithm is because of the "lookahead" feature which means
    +        // that some of the spks in the SpkTxoutIndex will not have been revealed yet. So we need to
    +        // filter out those spks that are above the last_revealed for that keychain. To do this we
    +        // iterate through the last_revealed for each keychain and the spks for each keychain in
    +        // tandem. This minimizes BTreeMap queries.
    +        core::iter::from_fn(move || loop {
    +            let ((keychain, index), spk) = iter_spks.next()?;
    +            // We need to find the last revealed that matches the current spk we are considering so
    +            // we skip ahead.
    +            while current_keychain?.0 < keychain {
    +                current_keychain = iter_last_revealed.next();
    +            }
    +            let (current_keychain, last_revealed) = current_keychain?;
    +
    +            if current_keychain == keychain && Some(*index) <= last_revealed {
    +                break Some(((keychain.clone(), *index), spk.as_script()));
    +            }
    +        })
    +    }
    +
    +    /// Iterate over revealed spks of the given `keychain` with ascending indices.
    +    ///
    +    /// This is a double ended iterator so you can easily reverse it to get an iterator where
    +    /// the script pubkeys that were most recently revealed are first.
    +    pub fn revealed_keychain_spks<'a>(
    +        &'a self,
    +        keychain: &'a K,
    +    ) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + 'a {
    +        let end = self
    +            .last_revealed_index(keychain)
    +            .map(|v| v + 1)
    +            .unwrap_or(0);
    +        self.inner
    +            .all_spks()
    +            .range((keychain.clone(), 0)..(keychain.clone(), end))
    +            .map(|((_, index), spk)| (*index, spk.as_script()))
    +    }
    +
    +    /// Iterate over revealed, but unused, spks of all keychains.
    +    pub fn unused_spks(
    +        &self,
    +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, &Script>> + Clone {
    +        self.keychain_to_descriptor_id.keys().flat_map(|keychain| {
    +            self.unused_keychain_spks(keychain)
    +                .map(|(i, spk)| ((keychain.clone(), i), spk))
    +        })
    +    }
    +
    +    /// Iterate over revealed, but unused, spks of the given `keychain`.
    +    /// Returns an empty iterator if the provided keychain doesn't exist.
    +    pub fn unused_keychain_spks(
    +        &self,
    +        keychain: &K,
    +    ) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + Clone {
    +        let end = match self.keychain_to_descriptor_id.get(keychain) {
    +            Some(did) => self.last_revealed.get(did).map(|v| *v + 1).unwrap_or(0),
    +            None => 0,
    +        };
    +
    +        self.inner
    +            .unused_spks((keychain.clone(), 0)..(keychain.clone(), end))
    +            .map(|((_, i), spk)| (*i, spk))
    +    }
    +
    +    /// Get the next derivation index for `keychain`. The next index is the index after the last revealed
    +    /// derivation index.
    +    ///
    +    /// The second field in the returned tuple represents whether the next derivation index is new.
    +    /// There are two scenarios where the next derivation index is reused (not new):
    +    ///
    +    /// 1. The keychain's descriptor has no wildcard, and a script has already been revealed.
    +    /// 2. The number of revealed scripts has already reached 2^31 (refer to BIP-32).
    +    ///
    +    /// Not checking the second field of the tuple may result in address reuse.
    +    ///
    +    /// Returns None if the provided `keychain` doesn't exist.
    +    pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)> {
    +        let did = self.keychain_to_descriptor_id.get(keychain)?;
    +        let last_index = self.last_revealed.get(did).cloned();
    +        let descriptor = self.descriptors.get(did).expect("invariant");
    +
    +        // we can only get the next index if the wildcard exists.
    +        let has_wildcard = descriptor.has_wildcard();
    +
    +        Some(match last_index {
    +            // if there is no index, next_index is always 0.
    +            None => (0, true),
    +            // descriptors without wildcards can only have one index.
    +            Some(_) if !has_wildcard => (0, false),
    +            // derivation index must be < 2^31 (BIP-32).
    +            Some(index) if index > BIP32_MAX_INDEX => {
    +                unreachable!("index is out of bounds")
    +            }
    +            Some(index) if index == BIP32_MAX_INDEX => (index, false),
    +            // get the next derivation index.
    +            Some(index) => (index + 1, true),
    +        })
    +    }
    +
    +    /// Get the last derivation index that is revealed for each keychain.
    +    ///
    +    /// Keychains with no revealed indices will not be included in the returned [`BTreeMap`].
    +    pub fn last_revealed_indices(&self) -> BTreeMap<K, u32> {
    +        self.last_revealed
    +            .iter()
    +            .filter_map(|(desc_id, index)| {
    +                let keychain = self.descriptor_id_to_keychain.get(desc_id)?;
    +                Some((keychain.clone(), *index))
    +            })
    +            .collect()
    +    }
    +
    +    /// Get the last derivation index revealed for `keychain`. Returns None if the keychain doesn't
    +    /// exist, or if the keychain doesn't have any revealed scripts.
    +    pub fn last_revealed_index(&self, keychain: &K) -> Option<u32> {
    +        let descriptor_id = self.keychain_to_descriptor_id.get(keychain)?;
    +        self.last_revealed.get(descriptor_id).cloned()
    +    }
    +
    +    /// Convenience method to call [`Self::reveal_to_target`] on multiple keychains.
    +    pub fn reveal_to_target_multi(&mut self, keychains: &BTreeMap<K, u32>) -> ChangeSet<K> {
    +        let mut changeset = ChangeSet::default();
    +
    +        for (keychain, &index) in keychains {
    +            if let Some((_, new_changeset)) = self.reveal_to_target(keychain, index) {
    +                changeset.append(new_changeset);
    +            }
    +        }
    +
    +        changeset
    +    }
    +
    +    /// Reveals script pubkeys of the `keychain`'s descriptor **up to and including** the
    +    /// `target_index`.
    +    ///
    +    /// If the `target_index` cannot be reached (due to the descriptor having no wildcard and/or
    +    /// the `target_index` is in the hardened index range), this method will make a best-effort and
    +    /// reveal up to the last possible index.
    +    ///
    +    /// This returns list of newly revealed indices (alongside their scripts) and a
    +    /// [`ChangeSet`], which reports updates to the latest revealed index. If no new script
    +    /// pubkeys are revealed, then both of these will be empty.
    +    ///
    +    /// Returns None if the provided `keychain` doesn't exist.
    +    #[must_use]
    +    pub fn reveal_to_target(
    +        &mut self,
    +        keychain: &K,
    +        target_index: u32,
    +    ) -> Option<(Vec<Indexed<ScriptBuf>>, ChangeSet<K>)> {
    +        let mut changeset = ChangeSet::default();
    +        let mut spks: Vec<Indexed<ScriptBuf>> = vec![];
    +        while let Some((i, new)) = self.next_index(keychain) {
    +            if !new || i > target_index {
    +                break;
    +            }
    +            match self.reveal_next_spk(keychain) {
    +                Some(((i, spk), change)) => {
    +                    spks.push((i, spk));
    +                    changeset.append(change);
    +                }
    +                None => break,
    +            }
    +        }
    +
    +        Some((spks, changeset))
    +    }
    +
    +    /// Attempts to reveal the next script pubkey for `keychain`.
    +    ///
    +    /// Returns the derivation index of the revealed script pubkey, the revealed script pubkey and a
    +    /// [`ChangeSet`] which represents changes in the last revealed index (if any).
    +    /// Returns None if the provided keychain doesn't exist.
    +    ///
    +    /// When a new script cannot be revealed, we return the last revealed script and an empty
    +    /// [`ChangeSet`]. There are two scenarios when a new script pubkey cannot be derived:
    +    ///
    +    ///  1. The descriptor has no wildcard and already has one script revealed.
    +    ///  2. The descriptor has already revealed scripts up to the numeric bound.
    +    ///  3. There is no descriptor associated with the given keychain.
    +    pub fn reveal_next_spk(&mut self, keychain: &K) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)> {
    +        let (next_index, new) = self.next_index(keychain)?;
    +        let mut changeset = ChangeSet::default();
    +
    +        if new {
    +            let did = self.keychain_to_descriptor_id.get(keychain)?;
    +            self.last_revealed.insert(*did, next_index);
    +            changeset.last_revealed.insert(*did, next_index);
    +            self.replenish_inner_index(*did, keychain, self.lookahead);
    +        }
    +        let script = self
    +            .inner
    +            .spk_at_index(&(keychain.clone(), next_index))
    +            .expect("we just inserted it");
    +        Some(((next_index, script.into()), changeset))
    +    }
    +
    +    /// Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest
    +    /// index that has not been used yet.
    +    ///
    +    /// This will derive and reveal a new script pubkey if no more unused script pubkeys exist.
    +    ///
    +    /// If the descriptor has no wildcard and already has a used script pubkey or if a descriptor
    +    /// has used all scripts up to the derivation bounds, then the last derived script pubkey will be
    +    /// returned.
    +    ///
    +    /// Returns `None` if there are no script pubkeys that have been used and no new script pubkey
    +    /// could be revealed (see [`reveal_next_spk`] for when this happens).
    +    ///
    +    /// [`reveal_next_spk`]: Self::reveal_next_spk
    +    pub fn next_unused_spk(&mut self, keychain: &K) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)> {
    +        let next_unused = self
    +            .unused_keychain_spks(keychain)
    +            .next()
    +            .map(|(i, spk)| ((i, spk.to_owned()), ChangeSet::default()));
    +
    +        next_unused.or_else(|| self.reveal_next_spk(keychain))
    +    }
    +
    +    /// Iterate over all [`OutPoint`]s that have `TxOut`s with script pubkeys derived from
    +    /// `keychain`.
    +    pub fn keychain_outpoints<'a>(
    +        &'a self,
    +        keychain: &'a K,
    +    ) -> impl DoubleEndedIterator<Item = Indexed<OutPoint>> + 'a {
    +        self.keychain_outpoints_in_range(keychain..=keychain)
    +            .map(|((_, i), op)| (i, op))
    +    }
    +
    +    /// Iterate over [`OutPoint`]s that have script pubkeys derived from keychains in `range`.
    +    pub fn keychain_outpoints_in_range<'a>(
    +        &'a self,
    +        range: impl RangeBounds<K> + 'a,
    +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, OutPoint>> + 'a {
    +        self.inner
    +            .outputs_in_range(self.map_to_inner_bounds(range))
    +            .map(|((k, i), op)| ((k.clone(), *i), op))
    +    }
    +
    +    fn map_to_inner_bounds(&self, bound: impl RangeBounds<K>) -> impl RangeBounds<(K, u32)> {
    +        let start = match bound.start_bound() {
    +            Bound::Included(keychain) => Bound::Included((keychain.clone(), u32::MIN)),
    +            Bound::Excluded(keychain) => Bound::Excluded((keychain.clone(), u32::MAX)),
    +            Bound::Unbounded => Bound::Unbounded,
    +        };
    +        let end = match bound.end_bound() {
    +            Bound::Included(keychain) => Bound::Included((keychain.clone(), u32::MAX)),
    +            Bound::Excluded(keychain) => Bound::Excluded((keychain.clone(), u32::MIN)),
    +            Bound::Unbounded => Bound::Unbounded,
    +        };
    +
    +        (start, end)
    +    }
    +
    +    /// Returns the highest derivation index of the `keychain` where [`KeychainTxOutIndex`] has
    +    /// found a [`TxOut`] with it's script pubkey.
    +    pub fn last_used_index(&self, keychain: &K) -> Option<u32> {
    +        self.keychain_outpoints(keychain).last().map(|(i, _)| i)
    +    }
    +
    +    /// Returns the highest derivation index of each keychain that [`KeychainTxOutIndex`] has found
    +    /// a [`TxOut`] with it's script pubkey.
    +    pub fn last_used_indices(&self) -> BTreeMap<K, u32> {
    +        self.keychain_to_descriptor_id
    +            .iter()
    +            .filter_map(|(keychain, _)| {
    +                self.last_used_index(keychain)
    +                    .map(|index| (keychain.clone(), index))
    +            })
    +            .collect()
    +    }
    +
    +    /// Applies the `ChangeSet<K>` to the [`KeychainTxOutIndex<K>`]
    +    ///
    +    /// Keychains added by the `keychains_added` field of `ChangeSet<K>` respect the one-to-one
    +    /// keychain <-> descriptor invariant by silently ignoring attempts to violate it (but will
    +    /// panic if `debug_assertions` are enabled).
    +    pub fn apply_changeset(&mut self, changeset: ChangeSet<K>) {
    +        let ChangeSet {
    +            keychains_added,
    +            last_revealed,
    +        } = changeset;
    +        for (keychain, descriptor) in keychains_added {
    +            let _ignore_invariant_violation = self.insert_descriptor(keychain, descriptor);
    +        }
    +
    +        for (&desc_id, &index) in &last_revealed {
    +            let v = self.last_revealed.entry(desc_id).or_default();
    +            *v = index.max(*v);
    +        }
    +
    +        for did in last_revealed.keys() {
    +            self.replenish_inner_index_did(*did, self.lookahead);
    +        }
    +    }
    +}
    +
    +#[derive(Clone, Debug, PartialEq)]
    +/// Error returned from [`KeychainTxOutIndex::insert_descriptor`]
    +pub enum InsertDescriptorError<K> {
    +    /// The descriptor has already been assigned to a keychain so you can't assign it to another
    +    DescriptorAlreadyAssigned {
    +        /// The descriptor you have attempted to reassign
    +        descriptor: Descriptor<DescriptorPublicKey>,
    +        /// The keychain that the descriptor is already assigned to
    +        existing_assignment: K,
    +    },
    +    /// The keychain is already assigned to a descriptor so you can't reassign it
    +    KeychainAlreadyAssigned {
    +        /// The keychain that you have attempted to reassign
    +        keychain: K,
    +        /// The descriptor that the keychain is already assigned to
    +        existing_assignment: Descriptor<DescriptorPublicKey>,
    +    },
    +}
    +
    +impl<K: core::fmt::Debug> core::fmt::Display for InsertDescriptorError<K> {
    +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    +        match self {
    +            InsertDescriptorError::DescriptorAlreadyAssigned {
    +                existing_assignment: existing,
    +                descriptor,
    +            } => {
    +                write!(
    +                    f,
    +                    "attempt to re-assign descriptor {descriptor:?} already assigned to {existing:?}"
    +                )
    +            }
    +            InsertDescriptorError::KeychainAlreadyAssigned {
    +                existing_assignment: existing,
    +                keychain,
    +            } => {
    +                write!(
    +                    f,
    +                    "attempt to re-assign keychain {keychain:?} already assigned to {existing:?}"
    +                )
    +            }
    +        }
    +    }
    +}
    +
    +#[cfg(feature = "std")]
    +impl<K: core::fmt::Debug> std::error::Error for InsertDescriptorError<K> {}
    +
    +/// Represents updates to the derivation index of a [`KeychainTxOutIndex`].
    +/// It maps each keychain `K` to a descriptor and its last revealed index.
    +///
    +/// It can be applied to [`KeychainTxOutIndex`] with [`apply_changeset`].
    +///
    +/// The `last_revealed` field is monotone in that [`append`] will never decrease it.
    +/// `keychains_added` is *not* monotone, once it is set any attempt to change it is subject to the
    +/// same *one-to-one* keychain <-> descriptor mapping invariant as [`KeychainTxOutIndex`] itself.
    +///
    +/// [`apply_changeset`]: KeychainTxOutIndex::apply_changeset
    +/// [`append`]: Self::append
    +#[derive(Clone, Debug, PartialEq)]
    +#[cfg_attr(
    +    feature = "serde",
    +    derive(serde::Deserialize, serde::Serialize),
    +    serde(
    +        crate = "serde_crate",
    +        bound(
    +            deserialize = "K: Ord + serde::Deserialize<'de>",
    +            serialize = "K: Ord + serde::Serialize"
    +        )
    +    )
    +)]
    +#[must_use]
    +pub struct ChangeSet<K> {
    +    /// Contains the keychains that have been added and their respective descriptor
    +    pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
    +    /// Contains for each descriptor_id the last revealed index of derivation
    +    pub last_revealed: BTreeMap<DescriptorId, u32>,
    +}
    +
    +impl<K: Ord> Append for ChangeSet<K> {
    +    /// Merge another [`ChangeSet<K>`] into self.
    +    ///
    +    /// For the `keychains_added` field this method respects the invariants of
    +    /// [`insert_descriptor`]. `last_revealed` always becomes the larger of the two.
    +    ///
    +    /// [`insert_descriptor`]: KeychainTxOutIndex::insert_descriptor
    +    fn append(&mut self, other: Self) {
    +        for (new_keychain, new_descriptor) in other.keychains_added {
    +            // enforce 1-to-1 invariance
    +            if !self.keychains_added.contains_key(&new_keychain)
    +                // FIXME: very inefficient
    +                && self
    +                    .keychains_added
    +                    .values()
    +                    .all(|descriptor| descriptor != &new_descriptor)
    +            {
    +                self.keychains_added.insert(new_keychain, new_descriptor);
    +            }
    +        }
    +
    +        // for `last_revealed`, entries of `other` will take precedence ONLY if it is greater than
    +        // what was originally in `self`.
    +        for (desc_id, index) in other.last_revealed {
    +            use crate::collections::btree_map::Entry;
    +            match self.last_revealed.entry(desc_id) {
    +                Entry::Vacant(entry) => {
    +                    entry.insert(index);
    +                }
    +                Entry::Occupied(mut entry) => {
    +                    if *entry.get() < index {
    +                        entry.insert(index);
    +                    }
    +                }
    +            }
    +        }
    +    }
    +
    +    /// Returns whether the changeset are empty.
    +    fn is_empty(&self) -> bool {
    +        self.last_revealed.is_empty() && self.keychains_added.is_empty()
    +    }
    +}
    +
    +impl<K> Default for ChangeSet<K> {
    +    fn default() -> Self {
    +        Self {
    +            last_revealed: BTreeMap::default(),
    +            keychains_added: BTreeMap::default(),
    +        }
    +    }
    +}
    +
    +#[derive(Clone, Debug, Eq, PartialEq)]
    +/// The keychain doesn't exist. Most likley hasn't been inserted with [`KeychainTxOutIndex::insert_descriptor`].
    +pub struct NoSuchKeychain<K>(K);
    +
    +impl<K: Debug> core::fmt::Display for NoSuchKeychain<K> {
    +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    +        write!(f, "no such keychain {:?} exists", &self.0)
    +    }
    +}
    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer/spk_txout.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer/spk_txout.rs.html new file mode 100644 index 0000000000..2ce5310d0d --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/indexer/spk_txout.rs.html @@ -0,0 +1,669 @@ +spk_txout.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +321
    +322
    +323
    +324
    +325
    +326
    +327
    +328
    +329
    +330
    +331
    +332
    +333
    +334
    +
    //! [`SpkTxOutIndex`] is an index storing [`TxOut`]s that have a script pubkey that matches those in a list.
    +
    +use core::ops::RangeBounds;
    +
    +use crate::{
    +    collections::{hash_map::Entry, BTreeMap, BTreeSet, HashMap},
    +    Indexer,
    +};
    +use bitcoin::{Amount, OutPoint, Script, ScriptBuf, SignedAmount, Transaction, TxOut, Txid};
    +
    +/// An index storing [`TxOut`]s that have a script pubkey that matches those in a list.
    +///
    +/// The basic idea is that you insert script pubkeys you care about into the index with
    +/// [`insert_spk`] and then when you call [`Indexer::index_tx`] or [`Indexer::index_txout`], the
    +/// index will look at any txouts you pass in and store and index any txouts matching one of its
    +/// script pubkeys.
    +///
    +/// Each script pubkey is associated with an application-defined index script index `I`, which must be
    +/// [`Ord`]. Usually, this is used to associate the derivation index of the script pubkey or even a
    +/// combination of `(keychain, derivation_index)`.
    +///
    +/// Note there is no harm in scanning transactions that disappear from the blockchain or were never
    +/// in there in the first place. `SpkTxOutIndex` is intentionally *monotone* -- you cannot delete or
    +/// modify txouts that have been indexed. To find out which txouts from the index are actually in the
    +/// chain or unspent, you must use other sources of information like a [`TxGraph`].
    +///
    +/// [`TxOut`]: bitcoin::TxOut
    +/// [`insert_spk`]: Self::insert_spk
    +/// [`Ord`]: core::cmp::Ord
    +/// [`TxGraph`]: crate::tx_graph::TxGraph
    +#[derive(Clone, Debug)]
    +pub struct SpkTxOutIndex<I> {
    +    /// script pubkeys ordered by index
    +    spks: BTreeMap<I, ScriptBuf>,
    +    /// A reverse lookup from spk to spk index
    +    spk_indices: HashMap<ScriptBuf, I>,
    +    /// The set of unused indexes.
    +    unused: BTreeSet<I>,
    +    /// Lookup index and txout by outpoint.
    +    txouts: BTreeMap<OutPoint, (I, TxOut)>,
    +    /// Lookup from spk index to outpoints that had that spk
    +    spk_txouts: BTreeSet<(I, OutPoint)>,
    +}
    +
    +impl<I> Default for SpkTxOutIndex<I> {
    +    fn default() -> Self {
    +        Self {
    +            txouts: Default::default(),
    +            spks: Default::default(),
    +            spk_indices: Default::default(),
    +            spk_txouts: Default::default(),
    +            unused: Default::default(),
    +        }
    +    }
    +}
    +
    +impl<I: Clone + Ord + core::fmt::Debug> Indexer for SpkTxOutIndex<I> {
    +    type ChangeSet = ();
    +
    +    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet {
    +        self.scan_txout(outpoint, txout);
    +        Default::default()
    +    }
    +
    +    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet {
    +        self.scan(tx);
    +        Default::default()
    +    }
    +
    +    fn initial_changeset(&self) -> Self::ChangeSet {}
    +
    +    fn apply_changeset(&mut self, _changeset: Self::ChangeSet) {
    +        // This applies nothing.
    +    }
    +
    +    fn is_tx_relevant(&self, tx: &Transaction) -> bool {
    +        self.is_relevant(tx)
    +    }
    +}
    +
    +impl<I: Clone + Ord + core::fmt::Debug> SpkTxOutIndex<I> {
    +    /// Scans a transaction's outputs for matching script pubkeys.
    +    ///
    +    /// Typically, this is used in two situations:
    +    ///
    +    /// 1. After loading transaction data from the disk, you may scan over all the txouts to restore all
    +    /// your txouts.
    +    /// 2. When getting new data from the chain, you usually scan it before incorporating it into your chain state.
    +    pub fn scan(&mut self, tx: &Transaction) -> BTreeSet<I> {
    +        let mut scanned_indices = BTreeSet::new();
    +        let txid = tx.compute_txid();
    +        for (i, txout) in tx.output.iter().enumerate() {
    +            let op = OutPoint::new(txid, i as u32);
    +            if let Some(spk_i) = self.scan_txout(op, txout) {
    +                scanned_indices.insert(spk_i.clone());
    +            }
    +        }
    +
    +        scanned_indices
    +    }
    +
    +    /// Scan a single `TxOut` for a matching script pubkey and returns the index that matches the
    +    /// script pubkey (if any).
    +    pub fn scan_txout(&mut self, op: OutPoint, txout: &TxOut) -> Option<&I> {
    +        let spk_i = self.spk_indices.get(&txout.script_pubkey);
    +        if let Some(spk_i) = spk_i {
    +            self.txouts.insert(op, (spk_i.clone(), txout.clone()));
    +            self.spk_txouts.insert((spk_i.clone(), op));
    +            self.unused.remove(spk_i);
    +        }
    +        spk_i
    +    }
    +
    +    /// Get a reference to the set of indexed outpoints.
    +    pub fn outpoints(&self) -> &BTreeSet<(I, OutPoint)> {
    +        &self.spk_txouts
    +    }
    +
    +    /// Iterate over all known txouts that spend to tracked script pubkeys.
    +    pub fn txouts(
    +        &self,
    +    ) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)> + ExactSizeIterator {
    +        self.txouts
    +            .iter()
    +            .map(|(op, (index, txout))| (index, *op, txout))
    +    }
    +
    +    /// Finds all txouts on a transaction that has previously been scanned and indexed.
    +    pub fn txouts_in_tx(
    +        &self,
    +        txid: Txid,
    +    ) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)> {
    +        self.txouts
    +            .range(OutPoint::new(txid, u32::MIN)..=OutPoint::new(txid, u32::MAX))
    +            .map(|(op, (index, txout))| (index, *op, txout))
    +    }
    +
    +    /// Iterates over all the outputs with script pubkeys in an index range.
    +    pub fn outputs_in_range(
    +        &self,
    +        range: impl RangeBounds<I>,
    +    ) -> impl DoubleEndedIterator<Item = (&I, OutPoint)> {
    +        use bitcoin::hashes::Hash;
    +        use core::ops::Bound::*;
    +        let min_op = OutPoint {
    +            txid: Txid::all_zeros(),
    +            vout: u32::MIN,
    +        };
    +        let max_op = OutPoint {
    +            txid: Txid::from_byte_array([0xff; Txid::LEN]),
    +            vout: u32::MAX,
    +        };
    +
    +        let start = match range.start_bound() {
    +            Included(index) => Included((index.clone(), min_op)),
    +            Excluded(index) => Excluded((index.clone(), max_op)),
    +            Unbounded => Unbounded,
    +        };
    +
    +        let end = match range.end_bound() {
    +            Included(index) => Included((index.clone(), max_op)),
    +            Excluded(index) => Excluded((index.clone(), min_op)),
    +            Unbounded => Unbounded,
    +        };
    +
    +        self.spk_txouts.range((start, end)).map(|(i, op)| (i, *op))
    +    }
    +
    +    /// Returns the txout and script pubkey index of the `TxOut` at `OutPoint`.
    +    ///
    +    /// Returns `None` if the `TxOut` hasn't been scanned or if nothing matching was found there.
    +    pub fn txout(&self, outpoint: OutPoint) -> Option<(&I, &TxOut)> {
    +        self.txouts.get(&outpoint).map(|v| (&v.0, &v.1))
    +    }
    +
    +    /// Returns the script that has been inserted at the `index`.
    +    ///
    +    /// If that index hasn't been inserted yet, it will return `None`.
    +    pub fn spk_at_index(&self, index: &I) -> Option<&Script> {
    +        self.spks.get(index).map(|s| s.as_script())
    +    }
    +
    +    /// The script pubkeys that are being tracked by the index.
    +    pub fn all_spks(&self) -> &BTreeMap<I, ScriptBuf> {
    +        &self.spks
    +    }
    +
    +    /// Adds a script pubkey to scan for. Returns `false` and does nothing if spk already exists in the map
    +    ///
    +    /// the index will look for outputs spending to this spk whenever it scans new data.
    +    pub fn insert_spk(&mut self, index: I, spk: ScriptBuf) -> bool {
    +        match self.spk_indices.entry(spk.clone()) {
    +            Entry::Vacant(value) => {
    +                value.insert(index.clone());
    +                self.spks.insert(index.clone(), spk);
    +                self.unused.insert(index);
    +                true
    +            }
    +            Entry::Occupied(_) => false,
    +        }
    +    }
    +
    +    /// Iterates over all unused script pubkeys in an index range.
    +    ///
    +    /// Here, "unused" means that after the script pubkey was stored in the index, the index has
    +    /// never scanned a transaction output with it.
    +    ///
    +    /// # Example
    +    ///
    +    /// ```rust
    +    /// # use bdk_chain::SpkTxOutIndex;
    +    ///
    +    /// // imagine our spks are indexed like (keychain, derivation_index).
    +    /// let txout_index = SpkTxOutIndex::<(u32, u32)>::default();
    +    /// let all_unused_spks = txout_index.unused_spks(..);
    +    /// let change_index = 1;
    +    /// let unused_change_spks =
    +    ///     txout_index.unused_spks((change_index, u32::MIN)..(change_index, u32::MAX));
    +    /// ```
    +    pub fn unused_spks<R>(&self, range: R) -> impl DoubleEndedIterator<Item = (&I, &Script)> + Clone
    +    where
    +        R: RangeBounds<I>,
    +    {
    +        self.unused
    +            .range(range)
    +            .map(move |index| (index, self.spk_at_index(index).expect("must exist")))
    +    }
    +
    +    /// Returns whether the script pubkey at `index` has been used or not.
    +    ///
    +    /// Here, "unused" means that after the script pubkey was stored in the index, the index has
    +    /// never scanned a transaction output with it.
    +    pub fn is_used(&self, index: &I) -> bool {
    +        !self.unused.contains(index)
    +    }
    +
    +    /// Marks the script pubkey at `index` as used even though it hasn't seen an output spending to it.
    +    /// This only affects when the `index` had already been added to `self` and was unused.
    +    ///
    +    /// Returns whether the `index` was initially present as `unused`.
    +    ///
    +    /// This is useful when you want to reserve a script pubkey for something but don't want to add
    +    /// the transaction output using it to the index yet. Other callers will consider the `index` used
    +    /// until you call [`unmark_used`].
    +    ///
    +    /// [`unmark_used`]: Self::unmark_used
    +    pub fn mark_used(&mut self, index: &I) -> bool {
    +        self.unused.remove(index)
    +    }
    +
    +    /// Undoes the effect of [`mark_used`]. Returns whether the `index` is inserted back into
    +    /// `unused`.
    +    ///
    +    /// Note that if `self` has scanned an output with this script pubkey then this will have no
    +    /// effect.
    +    ///
    +    /// [`mark_used`]: Self::mark_used
    +    pub fn unmark_used(&mut self, index: &I) -> bool {
    +        // we cannot set the index as unused when it does not exist
    +        if !self.spks.contains_key(index) {
    +            return false;
    +        }
    +        // we cannot set the index as unused when txouts are indexed under it
    +        if self.outputs_in_range(index..=index).next().is_some() {
    +            return false;
    +        }
    +        self.unused.insert(index.clone())
    +    }
    +
    +    /// Returns the index associated with the script pubkey.
    +    pub fn index_of_spk(&self, script: &Script) -> Option<&I> {
    +        self.spk_indices.get(script)
    +    }
    +
    +    /// Computes the total value transfer effect `tx` has on the script pubkeys in `range`. Value is
    +    /// *sent* when a script pubkey in the `range` is on an input and *received* when it is on an
    +    /// output. For `sent` to be computed correctly, the output being spent must have already been
    +    /// scanned by the index. Calculating received just uses the [`Transaction`] outputs directly,
    +    /// so it will be correct even if it has not been scanned.
    +    pub fn sent_and_received(
    +        &self,
    +        tx: &Transaction,
    +        range: impl RangeBounds<I>,
    +    ) -> (Amount, Amount) {
    +        let mut sent = Amount::ZERO;
    +        let mut received = Amount::ZERO;
    +
    +        for txin in &tx.input {
    +            if let Some((index, txout)) = self.txout(txin.previous_output) {
    +                if range.contains(index) {
    +                    sent += txout.value;
    +                }
    +            }
    +        }
    +        for txout in &tx.output {
    +            if let Some(index) = self.index_of_spk(&txout.script_pubkey) {
    +                if range.contains(index) {
    +                    received += txout.value;
    +                }
    +            }
    +        }
    +
    +        (sent, received)
    +    }
    +
    +    /// Computes the net value transfer effect of `tx` on the script pubkeys in `range`. Shorthand
    +    /// for calling [`sent_and_received`] and subtracting sent from received.
    +    ///
    +    /// [`sent_and_received`]: Self::sent_and_received
    +    pub fn net_value(&self, tx: &Transaction, range: impl RangeBounds<I>) -> SignedAmount {
    +        let (sent, received) = self.sent_and_received(tx, range);
    +        received.to_signed().expect("valid `SignedAmount`")
    +            - sent.to_signed().expect("valid `SignedAmount`")
    +    }
    +
    +    /// Whether any of the inputs of this transaction spend a txout tracked or whether any output
    +    /// matches one of our script pubkeys.
    +    ///
    +    /// It is easily possible to misuse this method and get false negatives by calling it before you
    +    /// have scanned the `TxOut`s the transaction is spending. For example, if you want to filter out
    +    /// all the transactions in a block that are irrelevant, you **must first scan all the
    +    /// transactions in the block** and only then use this method.
    +    pub fn is_relevant(&self, tx: &Transaction) -> bool {
    +        let input_matches = tx
    +            .input
    +            .iter()
    +            .any(|input| self.txouts.contains_key(&input.previous_output));
    +        let output_matches = tx
    +            .output
    +            .iter()
    +            .any(|output| self.spk_indices.contains_key(&output.script_pubkey));
    +        input_matches || output_matches
    +    }
    +}
    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html deleted file mode 100644 index 06f5d9d5e4..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html +++ /dev/null @@ -1,157 +0,0 @@ -keychain.rs - source
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -
    //! Module for keychain related structures.
    -//!
    -//! A keychain here is a set of application-defined indexes for a miniscript descriptor where we can
    -//! derive script pubkeys at a particular derivation index. The application's index is simply
    -//! anything that implements `Ord`.
    -//!
    -//! [`KeychainTxOutIndex`] indexes script pubkeys of keychains and scans in relevant outpoints (that
    -//! has a `txout` containing an indexed script pubkey). Internally, this uses [`SpkTxOutIndex`], but
    -//! also maintains "revealed" and "lookahead" index counts per keychain.
    -//!
    -//! [`SpkTxOutIndex`]: crate::SpkTxOutIndex
    -
    -#[cfg(feature = "miniscript")]
    -mod txout_index;
    -use bitcoin::{Amount, ScriptBuf};
    -#[cfg(feature = "miniscript")]
    -pub use txout_index::*;
    -
    -/// Balance, differentiated into various categories.
    -#[derive(Debug, PartialEq, Eq, Clone, Default)]
    -#[cfg_attr(
    -    feature = "serde",
    -    derive(serde::Deserialize, serde::Serialize),
    -    serde(crate = "serde_crate",)
    -)]
    -pub struct Balance {
    -    /// All coinbase outputs not yet matured
    -    pub immature: Amount,
    -    /// Unconfirmed UTXOs generated by a wallet tx
    -    pub trusted_pending: Amount,
    -    /// Unconfirmed UTXOs received from an external wallet
    -    pub untrusted_pending: Amount,
    -    /// Confirmed and immediately spendable balance
    -    pub confirmed: Amount,
    -}
    -
    -impl Balance {
    -    /// Get sum of trusted_pending and confirmed coins.
    -    ///
    -    /// This is the balance you can spend right now that shouldn't get cancelled via another party
    -    /// double spending it.
    -    pub fn trusted_spendable(&self) -> Amount {
    -        self.confirmed + self.trusted_pending
    -    }
    -
    -    /// Get the whole balance visible to the wallet.
    -    pub fn total(&self) -> Amount {
    -        self.confirmed + self.trusted_pending + self.untrusted_pending + self.immature
    -    }
    -}
    -
    -/// A tuple of keychain index and `T` representing the indexed value.
    -pub type Indexed<T> = (u32, T);
    -/// A tuple of keychain `K`, derivation index (`u32`) and a `T` associated with them.
    -pub type KeychainIndexed<K, T> = ((K, u32), T);
    -
    -impl core::fmt::Display for Balance {
    -    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    -        write!(
    -            f,
    -            "{{ immature: {}, trusted_pending: {}, untrusted_pending: {}, confirmed: {} }}",
    -            self.immature, self.trusted_pending, self.untrusted_pending, self.confirmed
    -        )
    -    }
    -}
    -
    -impl core::ops::Add for Balance {
    -    type Output = Self;
    -
    -    fn add(self, other: Self) -> Self {
    -        Self {
    -            immature: self.immature + other.immature,
    -            trusted_pending: self.trusted_pending + other.trusted_pending,
    -            untrusted_pending: self.untrusted_pending + other.untrusted_pending,
    -            confirmed: self.confirmed + other.confirmed,
    -        }
    -    }
    -}
    -
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html deleted file mode 100644 index 4b41b46941..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html +++ /dev/null @@ -1,1893 +0,0 @@ -txout_index.rs - source
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -378
    -379
    -380
    -381
    -382
    -383
    -384
    -385
    -386
    -387
    -388
    -389
    -390
    -391
    -392
    -393
    -394
    -395
    -396
    -397
    -398
    -399
    -400
    -401
    -402
    -403
    -404
    -405
    -406
    -407
    -408
    -409
    -410
    -411
    -412
    -413
    -414
    -415
    -416
    -417
    -418
    -419
    -420
    -421
    -422
    -423
    -424
    -425
    -426
    -427
    -428
    -429
    -430
    -431
    -432
    -433
    -434
    -435
    -436
    -437
    -438
    -439
    -440
    -441
    -442
    -443
    -444
    -445
    -446
    -447
    -448
    -449
    -450
    -451
    -452
    -453
    -454
    -455
    -456
    -457
    -458
    -459
    -460
    -461
    -462
    -463
    -464
    -465
    -466
    -467
    -468
    -469
    -470
    -471
    -472
    -473
    -474
    -475
    -476
    -477
    -478
    -479
    -480
    -481
    -482
    -483
    -484
    -485
    -486
    -487
    -488
    -489
    -490
    -491
    -492
    -493
    -494
    -495
    -496
    -497
    -498
    -499
    -500
    -501
    -502
    -503
    -504
    -505
    -506
    -507
    -508
    -509
    -510
    -511
    -512
    -513
    -514
    -515
    -516
    -517
    -518
    -519
    -520
    -521
    -522
    -523
    -524
    -525
    -526
    -527
    -528
    -529
    -530
    -531
    -532
    -533
    -534
    -535
    -536
    -537
    -538
    -539
    -540
    -541
    -542
    -543
    -544
    -545
    -546
    -547
    -548
    -549
    -550
    -551
    -552
    -553
    -554
    -555
    -556
    -557
    -558
    -559
    -560
    -561
    -562
    -563
    -564
    -565
    -566
    -567
    -568
    -569
    -570
    -571
    -572
    -573
    -574
    -575
    -576
    -577
    -578
    -579
    -580
    -581
    -582
    -583
    -584
    -585
    -586
    -587
    -588
    -589
    -590
    -591
    -592
    -593
    -594
    -595
    -596
    -597
    -598
    -599
    -600
    -601
    -602
    -603
    -604
    -605
    -606
    -607
    -608
    -609
    -610
    -611
    -612
    -613
    -614
    -615
    -616
    -617
    -618
    -619
    -620
    -621
    -622
    -623
    -624
    -625
    -626
    -627
    -628
    -629
    -630
    -631
    -632
    -633
    -634
    -635
    -636
    -637
    -638
    -639
    -640
    -641
    -642
    -643
    -644
    -645
    -646
    -647
    -648
    -649
    -650
    -651
    -652
    -653
    -654
    -655
    -656
    -657
    -658
    -659
    -660
    -661
    -662
    -663
    -664
    -665
    -666
    -667
    -668
    -669
    -670
    -671
    -672
    -673
    -674
    -675
    -676
    -677
    -678
    -679
    -680
    -681
    -682
    -683
    -684
    -685
    -686
    -687
    -688
    -689
    -690
    -691
    -692
    -693
    -694
    -695
    -696
    -697
    -698
    -699
    -700
    -701
    -702
    -703
    -704
    -705
    -706
    -707
    -708
    -709
    -710
    -711
    -712
    -713
    -714
    -715
    -716
    -717
    -718
    -719
    -720
    -721
    -722
    -723
    -724
    -725
    -726
    -727
    -728
    -729
    -730
    -731
    -732
    -733
    -734
    -735
    -736
    -737
    -738
    -739
    -740
    -741
    -742
    -743
    -744
    -745
    -746
    -747
    -748
    -749
    -750
    -751
    -752
    -753
    -754
    -755
    -756
    -757
    -758
    -759
    -760
    -761
    -762
    -763
    -764
    -765
    -766
    -767
    -768
    -769
    -770
    -771
    -772
    -773
    -774
    -775
    -776
    -777
    -778
    -779
    -780
    -781
    -782
    -783
    -784
    -785
    -786
    -787
    -788
    -789
    -790
    -791
    -792
    -793
    -794
    -795
    -796
    -797
    -798
    -799
    -800
    -801
    -802
    -803
    -804
    -805
    -806
    -807
    -808
    -809
    -810
    -811
    -812
    -813
    -814
    -815
    -816
    -817
    -818
    -819
    -820
    -821
    -822
    -823
    -824
    -825
    -826
    -827
    -828
    -829
    -830
    -831
    -832
    -833
    -834
    -835
    -836
    -837
    -838
    -839
    -840
    -841
    -842
    -843
    -844
    -845
    -846
    -847
    -848
    -849
    -850
    -851
    -852
    -853
    -854
    -855
    -856
    -857
    -858
    -859
    -860
    -861
    -862
    -863
    -864
    -865
    -866
    -867
    -868
    -869
    -870
    -871
    -872
    -873
    -874
    -875
    -876
    -877
    -878
    -879
    -880
    -881
    -882
    -883
    -884
    -885
    -886
    -887
    -888
    -889
    -890
    -891
    -892
    -893
    -894
    -895
    -896
    -897
    -898
    -899
    -900
    -901
    -902
    -903
    -904
    -905
    -906
    -907
    -908
    -909
    -910
    -911
    -912
    -913
    -914
    -915
    -916
    -917
    -918
    -919
    -920
    -921
    -922
    -923
    -924
    -925
    -926
    -927
    -928
    -929
    -930
    -931
    -932
    -933
    -934
    -935
    -936
    -937
    -938
    -939
    -940
    -941
    -942
    -943
    -944
    -945
    -946
    -
    use crate::{
    -    collections::*,
    -    indexed_tx_graph::Indexer,
    -    miniscript::{Descriptor, DescriptorPublicKey},
    -    spk_iter::BIP32_MAX_INDEX,
    -    DescriptorExt, DescriptorId, SpkIterator, SpkTxOutIndex,
    -};
    -use alloc::{borrow::ToOwned, vec::Vec};
    -use bitcoin::{Amount, OutPoint, Script, SignedAmount, Transaction, TxOut, Txid};
    -use core::{
    -    fmt::Debug,
    -    ops::{Bound, RangeBounds},
    -};
    -
    -use super::*;
    -use crate::Append;
    -
    -/// The default lookahead for a [`KeychainTxOutIndex`]
    -pub const DEFAULT_LOOKAHEAD: u32 = 25;
    -
    -/// [`KeychainTxOutIndex`] controls how script pubkeys are revealed for multiple keychains, and
    -/// indexes [`TxOut`]s with them.
    -///
    -/// A single keychain is a chain of script pubkeys derived from a single [`Descriptor`]. Keychains
    -/// are identified using the `K` generic. Script pubkeys are identified by the keychain that they
    -/// are derived from `K`, as well as the derivation index `u32`.
    -///
    -/// There is a strict 1-to-1 relationship between descriptors and keychains. Each keychain has one
    -/// and only one descriptor and each descriptor has one and only one keychain. The
    -/// [`insert_descriptor`] method will return an error if you try and violate this invariant. This
    -/// rule is a proxy for a stronger rule: no two descriptors should produce the same script pubkey.
    -/// Having two descriptors produce the same script pubkey should cause whichever keychain derives
    -/// the script pubkey first to be the effective owner of it but you should not rely on this
    -/// behaviour. ⚠ It is up you, the developer, not to violate this invariant.
    -///
    -/// # Revealed script pubkeys
    -///
    -/// Tracking how script pubkeys are revealed is useful for collecting chain data. For example, if
    -/// the user has requested 5 script pubkeys (to receive money with), we only need to use those
    -/// script pubkeys to scan for chain data.
    -///
    -/// Call [`reveal_to_target`] or [`reveal_next_spk`] to reveal more script pubkeys.
    -/// Call [`revealed_keychain_spks`] or [`revealed_spks`] to iterate through revealed script pubkeys.
    -///
    -/// # Lookahead script pubkeys
    -///
    -/// When an user first recovers a wallet (i.e. from a recovery phrase and/or descriptor), we will
    -/// NOT have knowledge of which script pubkeys are revealed. So when we index a transaction or
    -/// txout (using [`index_tx`]/[`index_txout`]) we scan the txouts against script pubkeys derived
    -/// above the last revealed index. These additionally-derived script pubkeys are called the
    -/// lookahead.
    -///
    -/// The [`KeychainTxOutIndex`] is constructed with the `lookahead` and cannot be altered. See
    -/// [`DEFAULT_LOOKAHEAD`] for the value used in the `Default` implementation. Use [`new`] to set a
    -/// custom `lookahead`.
    -///
    -/// # Unbounded script pubkey iterator
    -///
    -/// For script-pubkey-based chain sources (such as Electrum/Esplora), an initial scan is best done
    -/// by iterating though derived script pubkeys one by one and requesting transaction histories for
    -/// each script pubkey. We will stop after x-number of script pubkeys have empty histories. An
    -/// unbounded script pubkey iterator is useful to pass to such a chain source because it doesn't
    -/// require holding a reference to the index.
    -///
    -/// Call [`unbounded_spk_iter`] to get an unbounded script pubkey iterator for a given keychain.
    -/// Call [`all_unbounded_spk_iters`] to get unbounded script pubkey iterators for all keychains.
    -///
    -/// # Change sets
    -///
    -/// Methods that can update the last revealed index or add keychains will return [`ChangeSet`] to report
    -/// these changes. This should be persisted for future recovery.
    -///
    -/// ## Synopsis
    -///
    -/// ```
    -/// use bdk_chain::keychain::KeychainTxOutIndex;
    -/// # use bdk_chain::{ miniscript::{Descriptor, DescriptorPublicKey} };
    -/// # use core::str::FromStr;
    -///
    -/// // imagine our service has internal and external addresses but also addresses for users
    -/// #[derive(Clone, Debug, PartialEq, Eq, Ord, PartialOrd)]
    -/// enum MyKeychain {
    -///     External,
    -///     Internal,
    -///     MyAppUser {
    -///         user_id: u32
    -///     }
    -/// }
    -///
    -/// let mut txout_index = KeychainTxOutIndex::<MyKeychain>::default();
    -///
    -/// # let secp = bdk_chain::bitcoin::secp256k1::Secp256k1::signing_only();
    -/// # let (external_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/0/*)").unwrap();
    -/// # let (internal_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/*)").unwrap();
    -/// # let (descriptor_42, _) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/2/*)").unwrap();
    -/// let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor)?;
    -/// let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor)?;
    -/// let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42)?;
    -///
    -/// let new_spk_for_user = txout_index.reveal_next_spk(&MyKeychain::MyAppUser{ user_id: 42 });
    -/// # Ok::<_, bdk_chain::keychain::InsertDescriptorError<_>>(())
    -/// ```
    -///
    -/// [`Ord`]: core::cmp::Ord
    -/// [`SpkTxOutIndex`]: crate::spk_txout_index::SpkTxOutIndex
    -/// [`Descriptor`]: crate::miniscript::Descriptor
    -/// [`reveal_to_target`]: Self::reveal_to_target
    -/// [`reveal_next_spk`]: Self::reveal_next_spk
    -/// [`revealed_keychain_spks`]: Self::revealed_keychain_spks
    -/// [`revealed_spks`]: Self::revealed_spks
    -/// [`index_tx`]: Self::index_tx
    -/// [`index_txout`]: Self::index_txout
    -/// [`new`]: Self::new
    -/// [`unbounded_spk_iter`]: Self::unbounded_spk_iter
    -/// [`all_unbounded_spk_iters`]: Self::all_unbounded_spk_iters
    -/// [`outpoints`]: Self::outpoints
    -/// [`txouts`]: Self::txouts
    -/// [`unused_spks`]: Self::unused_spks
    -/// [`insert_descriptor`]: Self::insert_descriptor
    -#[derive(Clone, Debug)]
    -pub struct KeychainTxOutIndex<K> {
    -    inner: SpkTxOutIndex<(K, u32)>,
    -    keychain_to_descriptor_id: BTreeMap<K, DescriptorId>,
    -    descriptor_id_to_keychain: HashMap<DescriptorId, K>,
    -    descriptors: HashMap<DescriptorId, Descriptor<DescriptorPublicKey>>,
    -    last_revealed: HashMap<DescriptorId, u32>,
    -    lookahead: u32,
    -}
    -
    -impl<K> Default for KeychainTxOutIndex<K> {
    -    fn default() -> Self {
    -        Self::new(DEFAULT_LOOKAHEAD)
    -    }
    -}
    -
    -impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K> {
    -    type ChangeSet = ChangeSet<K>;
    -
    -    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet {
    -        let mut changeset = ChangeSet::default();
    -        if let Some((keychain, index)) = self.inner.scan_txout(outpoint, txout).cloned() {
    -            let did = self
    -                .keychain_to_descriptor_id
    -                .get(&keychain)
    -                .expect("invariant");
    -            if self.last_revealed.get(did) < Some(&index) {
    -                self.last_revealed.insert(*did, index);
    -                changeset.last_revealed.insert(*did, index);
    -                self.replenish_inner_index(*did, &keychain, self.lookahead);
    -            }
    -        }
    -        changeset
    -    }
    -
    -    fn index_tx(&mut self, tx: &bitcoin::Transaction) -> Self::ChangeSet {
    -        let mut changeset = ChangeSet::<K>::default();
    -        let txid = tx.compute_txid();
    -        for (op, txout) in tx.output.iter().enumerate() {
    -            changeset.append(self.index_txout(OutPoint::new(txid, op as u32), txout));
    -        }
    -        changeset
    -    }
    -
    -    fn initial_changeset(&self) -> Self::ChangeSet {
    -        ChangeSet {
    -            keychains_added: self
    -                .keychains()
    -                .map(|(k, v)| (k.clone(), v.clone()))
    -                .collect(),
    -            last_revealed: self.last_revealed.clone().into_iter().collect(),
    -        }
    -    }
    -
    -    fn apply_changeset(&mut self, changeset: Self::ChangeSet) {
    -        self.apply_changeset(changeset)
    -    }
    -
    -    fn is_tx_relevant(&self, tx: &bitcoin::Transaction) -> bool {
    -        self.inner.is_relevant(tx)
    -    }
    -}
    -
    -impl<K> KeychainTxOutIndex<K> {
    -    /// Construct a [`KeychainTxOutIndex`] with the given `lookahead`.
    -    ///
    -    /// The `lookahead` is the number of script pubkeys to derive and cache from the internal
    -    /// descriptors over and above the last revealed script index. Without a lookahead the index
    -    /// will miss outputs you own when processing transactions whose output script pubkeys lie
    -    /// beyond the last revealed index. In certain situations, such as when performing an initial
    -    /// scan of the blockchain during wallet import, it may be uncertain or unknown what the index
    -    /// of the last revealed script pubkey actually is.
    -    ///
    -    /// Refer to [struct-level docs](KeychainTxOutIndex) for more about `lookahead`.
    -    pub fn new(lookahead: u32) -> Self {
    -        Self {
    -            inner: SpkTxOutIndex::default(),
    -            keychain_to_descriptor_id: Default::default(),
    -            descriptors: Default::default(),
    -            descriptor_id_to_keychain: Default::default(),
    -            last_revealed: Default::default(),
    -            lookahead,
    -        }
    -    }
    -}
    -
    -/// Methods that are *re-exposed* from the internal [`SpkTxOutIndex`].
    -impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
    -    /// Return a reference to the internal [`SpkTxOutIndex`].
    -    ///
    -    /// **WARNING**: The internal index will contain lookahead spks. Refer to
    -    /// [struct-level docs](KeychainTxOutIndex) for more about `lookahead`.
    -    pub fn inner(&self) -> &SpkTxOutIndex<(K, u32)> {
    -        &self.inner
    -    }
    -
    -    /// Get the set of indexed outpoints, corresponding to tracked keychains.
    -    pub fn outpoints(&self) -> &BTreeSet<KeychainIndexed<K, OutPoint>> {
    -        self.inner.outpoints()
    -    }
    -
    -    /// Iterate over known txouts that spend to tracked script pubkeys.
    -    pub fn txouts(
    -        &self,
    -    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> + ExactSizeIterator
    -    {
    -        self.inner
    -            .txouts()
    -            .map(|(index, op, txout)| (index.clone(), (op, txout)))
    -    }
    -
    -    /// Finds all txouts on a transaction that has previously been scanned and indexed.
    -    pub fn txouts_in_tx(
    -        &self,
    -        txid: Txid,
    -    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> {
    -        self.inner
    -            .txouts_in_tx(txid)
    -            .map(|(index, op, txout)| (index.clone(), (op, txout)))
    -    }
    -
    -    /// Return the [`TxOut`] of `outpoint` if it has been indexed, and if it corresponds to a
    -    /// tracked keychain.
    -    ///
    -    /// The associated keychain and keychain index of the txout's spk is also returned.
    -    ///
    -    /// This calls [`SpkTxOutIndex::txout`] internally.
    -    pub fn txout(&self, outpoint: OutPoint) -> Option<KeychainIndexed<K, &TxOut>> {
    -        self.inner
    -            .txout(outpoint)
    -            .map(|(index, txout)| (index.clone(), txout))
    -    }
    -
    -    /// Return the script that exists under the given `keychain`'s `index`.
    -    ///
    -    /// This calls [`SpkTxOutIndex::spk_at_index`] internally.
    -    pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script> {
    -        self.inner.spk_at_index(&(keychain.clone(), index))
    -    }
    -
    -    /// Returns the keychain and keychain index associated with the spk.
    -    ///
    -    /// This calls [`SpkTxOutIndex::index_of_spk`] internally.
    -    pub fn index_of_spk(&self, script: &Script) -> Option<&(K, u32)> {
    -        self.inner.index_of_spk(script)
    -    }
    -
    -    /// Returns whether the spk under the `keychain`'s `index` has been used.
    -    ///
    -    /// Here, "unused" means that after the script pubkey was stored in the index, the index has
    -    /// never scanned a transaction output with it.
    -    ///
    -    /// This calls [`SpkTxOutIndex::is_used`] internally.
    -    pub fn is_used(&self, keychain: K, index: u32) -> bool {
    -        self.inner.is_used(&(keychain, index))
    -    }
    -
    -    /// Marks the script pubkey at `index` as used even though the tracker hasn't seen an output
    -    /// with it.
    -    ///
    -    /// This only has an effect when the `index` had been added to `self` already and was unused.
    -    ///
    -    /// Returns whether the spk under the given `keychain` and `index` is successfully
    -    /// marked as used. Returns false either when there is no descriptor under the given
    -    /// keychain, or when the spk is already marked as used.
    -    ///
    -    /// This is useful when you want to reserve a script pubkey for something but don't want to add
    -    /// the transaction output using it to the index yet. Other callers will consider `index` on
    -    /// `keychain` used until you call [`unmark_used`].
    -    ///
    -    /// This calls [`SpkTxOutIndex::mark_used`] internally.
    -    ///
    -    /// [`unmark_used`]: Self::unmark_used
    -    pub fn mark_used(&mut self, keychain: K, index: u32) -> bool {
    -        self.inner.mark_used(&(keychain, index))
    -    }
    -
    -    /// Undoes the effect of [`mark_used`]. Returns whether the `index` is inserted back into
    -    /// `unused`.
    -    ///
    -    /// Note that if `self` has scanned an output with this script pubkey, then this will have no
    -    /// effect.
    -    ///
    -    /// This calls [`SpkTxOutIndex::unmark_used`] internally.
    -    ///
    -    /// [`mark_used`]: Self::mark_used
    -    pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool {
    -        self.inner.unmark_used(&(keychain, index))
    -    }
    -
    -    /// Computes the total value transfer effect `tx` has on the script pubkeys belonging to the
    -    /// keychains in `range`. Value is *sent* when a script pubkey in the `range` is on an input and
    -    /// *received* when it is on an output. For `sent` to be computed correctly, the output being
    -    /// spent must have already been scanned by the index. Calculating received just uses the
    -    /// [`Transaction`] outputs directly, so it will be correct even if it has not been scanned.
    -    pub fn sent_and_received(
    -        &self,
    -        tx: &Transaction,
    -        range: impl RangeBounds<K>,
    -    ) -> (Amount, Amount) {
    -        self.inner
    -            .sent_and_received(tx, self.map_to_inner_bounds(range))
    -    }
    -
    -    /// Computes the net value that this transaction gives to the script pubkeys in the index and
    -    /// *takes* from the transaction outputs in the index. Shorthand for calling
    -    /// [`sent_and_received`] and subtracting sent from received.
    -    ///
    -    /// This calls [`SpkTxOutIndex::net_value`] internally.
    -    ///
    -    /// [`sent_and_received`]: Self::sent_and_received
    -    pub fn net_value(&self, tx: &Transaction, range: impl RangeBounds<K>) -> SignedAmount {
    -        self.inner.net_value(tx, self.map_to_inner_bounds(range))
    -    }
    -}
    -
    -impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
    -    /// Return all keychains and their corresponding descriptors.
    -    pub fn keychains(
    -        &self,
    -    ) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_
    -    {
    -        self.keychain_to_descriptor_id
    -            .iter()
    -            .map(|(k, did)| (k, self.descriptors.get(did).expect("invariant")))
    -    }
    -
    -    /// Insert a descriptor with a keychain associated to it.
    -    ///
    -    /// Adding a descriptor means you will be able to derive new script pubkeys under it and the
    -    /// txout index will discover transaction outputs with those script pubkeys (once they've been
    -    /// derived and added to the index).
    -    ///
    -    /// keychain <-> descriptor is a one-to-one mapping that cannot be changed. Attempting to do so
    -    /// will return a [`InsertDescriptorError<K>`].
    -    ///
    -    /// `[KeychainTxOutIndex]` will prevent you from inserting two descriptors which derive the same
    -    /// script pubkey at index 0, but it's up to you to ensure that descriptors don't collide at
    -    /// other indices. If they do nothing catastrophic happens at the `KeychainTxOutIndex` level
    -    /// (one keychain just becomes the defacto owner of that spk arbitrarily) but this may have
    -    /// subtle implications up the application stack like one UTXO being missing from one keychain
    -    /// because it has been assigned to another which produces the same script pubkey.
    -    pub fn insert_descriptor(
    -        &mut self,
    -        keychain: K,
    -        descriptor: Descriptor<DescriptorPublicKey>,
    -    ) -> Result<ChangeSet<K>, InsertDescriptorError<K>> {
    -        let mut changeset = ChangeSet::<K>::default();
    -        let did = descriptor.descriptor_id();
    -        if !self.keychain_to_descriptor_id.contains_key(&keychain)
    -            && !self.descriptor_id_to_keychain.contains_key(&did)
    -        {
    -            self.descriptors.insert(did, descriptor.clone());
    -            self.keychain_to_descriptor_id.insert(keychain.clone(), did);
    -            self.descriptor_id_to_keychain.insert(did, keychain.clone());
    -            self.replenish_inner_index(did, &keychain, self.lookahead);
    -            changeset
    -                .keychains_added
    -                .insert(keychain.clone(), descriptor);
    -        } else {
    -            if let Some(existing_desc_id) = self.keychain_to_descriptor_id.get(&keychain) {
    -                let descriptor = self.descriptors.get(existing_desc_id).expect("invariant");
    -                if *existing_desc_id != did {
    -                    return Err(InsertDescriptorError::KeychainAlreadyAssigned {
    -                        existing_assignment: descriptor.clone(),
    -                        keychain,
    -                    });
    -                }
    -            }
    -
    -            if let Some(existing_keychain) = self.descriptor_id_to_keychain.get(&did) {
    -                let descriptor = self.descriptors.get(&did).expect("invariant").clone();
    -
    -                if *existing_keychain != keychain {
    -                    return Err(InsertDescriptorError::DescriptorAlreadyAssigned {
    -                        existing_assignment: existing_keychain.clone(),
    -                        descriptor,
    -                    });
    -                }
    -            }
    -        }
    -
    -        Ok(changeset)
    -    }
    -
    -    /// Gets the descriptor associated with the keychain. Returns `None` if the keychain doesn't
    -    /// have a descriptor associated with it.
    -    pub fn get_descriptor(&self, keychain: &K) -> Option<&Descriptor<DescriptorPublicKey>> {
    -        let did = self.keychain_to_descriptor_id.get(keychain)?;
    -        self.descriptors.get(did)
    -    }
    -
    -    /// Get the lookahead setting.
    -    ///
    -    /// Refer to [`new`] for more information on the `lookahead`.
    -    ///
    -    /// [`new`]: Self::new
    -    pub fn lookahead(&self) -> u32 {
    -        self.lookahead
    -    }
    -
    -    /// Store lookahead scripts until `target_index` (inclusive).
    -    ///
    -    /// This does not change the global `lookahead` setting.
    -    pub fn lookahead_to_target(&mut self, keychain: &K, target_index: u32) {
    -        if let Some((next_index, _)) = self.next_index(keychain) {
    -            let temp_lookahead = (target_index + 1)
    -                .checked_sub(next_index)
    -                .filter(|&index| index > 0);
    -
    -            if let Some(temp_lookahead) = temp_lookahead {
    -                self.replenish_inner_index_keychain(keychain, temp_lookahead);
    -            }
    -        }
    -    }
    -
    -    fn replenish_inner_index_did(&mut self, did: DescriptorId, lookahead: u32) {
    -        if let Some(keychain) = self.descriptor_id_to_keychain.get(&did).cloned() {
    -            self.replenish_inner_index(did, &keychain, lookahead);
    -        }
    -    }
    -
    -    fn replenish_inner_index_keychain(&mut self, keychain: &K, lookahead: u32) {
    -        if let Some(did) = self.keychain_to_descriptor_id.get(keychain) {
    -            self.replenish_inner_index(*did, keychain, lookahead);
    -        }
    -    }
    -
    -    /// Syncs the state of the inner spk index after changes to a keychain
    -    fn replenish_inner_index(&mut self, did: DescriptorId, keychain: &K, lookahead: u32) {
    -        let descriptor = self.descriptors.get(&did).expect("invariant");
    -        let next_store_index = self
    -            .inner
    -            .all_spks()
    -            .range(&(keychain.clone(), u32::MIN)..=&(keychain.clone(), u32::MAX))
    -            .last()
    -            .map_or(0, |((_, index), _)| *index + 1);
    -        let next_reveal_index = self.last_revealed.get(&did).map_or(0, |v| *v + 1);
    -        for (new_index, new_spk) in
    -            SpkIterator::new_with_range(descriptor, next_store_index..next_reveal_index + lookahead)
    -        {
    -            let _inserted = self
    -                .inner
    -                .insert_spk((keychain.clone(), new_index), new_spk);
    -            debug_assert!(_inserted, "replenish lookahead: must not have existing spk: keychain={:?}, lookahead={}, next_store_index={}, next_reveal_index={}", keychain, lookahead, next_store_index, next_reveal_index);
    -        }
    -    }
    -
    -    /// Get an unbounded spk iterator over a given `keychain`. Returns `None` if the provided
    -    /// keychain doesn't exist
    -    pub fn unbounded_spk_iter(
    -        &self,
    -        keychain: &K,
    -    ) -> Option<SpkIterator<Descriptor<DescriptorPublicKey>>> {
    -        let descriptor = self.get_descriptor(keychain)?.clone();
    -        Some(SpkIterator::new(descriptor))
    -    }
    -
    -    /// Get unbounded spk iterators for all keychains.
    -    pub fn all_unbounded_spk_iters(
    -        &self,
    -    ) -> BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>> {
    -        self.keychain_to_descriptor_id
    -            .iter()
    -            .map(|(k, did)| {
    -                (
    -                    k.clone(),
    -                    SpkIterator::new(self.descriptors.get(did).expect("invariant").clone()),
    -                )
    -            })
    -            .collect()
    -    }
    -
    -    /// Iterate over revealed spks of keychains in `range`
    -    pub fn revealed_spks(
    -        &self,
    -        range: impl RangeBounds<K>,
    -    ) -> impl Iterator<Item = KeychainIndexed<K, &Script>> {
    -        let start = range.start_bound();
    -        let end = range.end_bound();
    -        let mut iter_last_revealed = self
    -            .keychain_to_descriptor_id
    -            .range((start, end))
    -            .map(|(k, did)| (k, self.last_revealed.get(did).cloned()));
    -        let mut iter_spks = self
    -            .inner
    -            .all_spks()
    -            .range(self.map_to_inner_bounds((start, end)));
    -        let mut current_keychain = iter_last_revealed.next();
    -        // The reason we need a tricky algorithm is because of the "lookahead" feature which means
    -        // that some of the spks in the SpkTxoutIndex will not have been revealed yet. So we need to
    -        // filter out those spks that are above the last_revealed for that keychain. To do this we
    -        // iterate through the last_revealed for each keychain and the spks for each keychain in
    -        // tandem. This minimizes BTreeMap queries.
    -        core::iter::from_fn(move || loop {
    -            let ((keychain, index), spk) = iter_spks.next()?;
    -            // We need to find the last revealed that matches the current spk we are considering so
    -            // we skip ahead.
    -            while current_keychain?.0 < keychain {
    -                current_keychain = iter_last_revealed.next();
    -            }
    -            let (current_keychain, last_revealed) = current_keychain?;
    -
    -            if current_keychain == keychain && Some(*index) <= last_revealed {
    -                break Some(((keychain.clone(), *index), spk.as_script()));
    -            }
    -        })
    -    }
    -
    -    /// Iterate over revealed spks of the given `keychain` with ascending indices.
    -    ///
    -    /// This is a double ended iterator so you can easily reverse it to get an iterator where
    -    /// the script pubkeys that were most recently revealed are first.
    -    pub fn revealed_keychain_spks<'a>(
    -        &'a self,
    -        keychain: &'a K,
    -    ) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + 'a {
    -        let end = self
    -            .last_revealed_index(keychain)
    -            .map(|v| v + 1)
    -            .unwrap_or(0);
    -        self.inner
    -            .all_spks()
    -            .range((keychain.clone(), 0)..(keychain.clone(), end))
    -            .map(|((_, index), spk)| (*index, spk.as_script()))
    -    }
    -
    -    /// Iterate over revealed, but unused, spks of all keychains.
    -    pub fn unused_spks(
    -        &self,
    -    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, &Script>> + Clone {
    -        self.keychain_to_descriptor_id.keys().flat_map(|keychain| {
    -            self.unused_keychain_spks(keychain)
    -                .map(|(i, spk)| ((keychain.clone(), i), spk))
    -        })
    -    }
    -
    -    /// Iterate over revealed, but unused, spks of the given `keychain`.
    -    /// Returns an empty iterator if the provided keychain doesn't exist.
    -    pub fn unused_keychain_spks(
    -        &self,
    -        keychain: &K,
    -    ) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + Clone {
    -        let end = match self.keychain_to_descriptor_id.get(keychain) {
    -            Some(did) => self.last_revealed.get(did).map(|v| *v + 1).unwrap_or(0),
    -            None => 0,
    -        };
    -
    -        self.inner
    -            .unused_spks((keychain.clone(), 0)..(keychain.clone(), end))
    -            .map(|((_, i), spk)| (*i, spk))
    -    }
    -
    -    /// Get the next derivation index for `keychain`. The next index is the index after the last revealed
    -    /// derivation index.
    -    ///
    -    /// The second field in the returned tuple represents whether the next derivation index is new.
    -    /// There are two scenarios where the next derivation index is reused (not new):
    -    ///
    -    /// 1. The keychain's descriptor has no wildcard, and a script has already been revealed.
    -    /// 2. The number of revealed scripts has already reached 2^31 (refer to BIP-32).
    -    ///
    -    /// Not checking the second field of the tuple may result in address reuse.
    -    ///
    -    /// Returns None if the provided `keychain` doesn't exist.
    -    pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)> {
    -        let did = self.keychain_to_descriptor_id.get(keychain)?;
    -        let last_index = self.last_revealed.get(did).cloned();
    -        let descriptor = self.descriptors.get(did).expect("invariant");
    -
    -        // we can only get the next index if the wildcard exists.
    -        let has_wildcard = descriptor.has_wildcard();
    -
    -        Some(match last_index {
    -            // if there is no index, next_index is always 0.
    -            None => (0, true),
    -            // descriptors without wildcards can only have one index.
    -            Some(_) if !has_wildcard => (0, false),
    -            // derivation index must be < 2^31 (BIP-32).
    -            Some(index) if index > BIP32_MAX_INDEX => {
    -                unreachable!("index is out of bounds")
    -            }
    -            Some(index) if index == BIP32_MAX_INDEX => (index, false),
    -            // get the next derivation index.
    -            Some(index) => (index + 1, true),
    -        })
    -    }
    -
    -    /// Get the last derivation index that is revealed for each keychain.
    -    ///
    -    /// Keychains with no revealed indices will not be included in the returned [`BTreeMap`].
    -    pub fn last_revealed_indices(&self) -> BTreeMap<K, u32> {
    -        self.last_revealed
    -            .iter()
    -            .filter_map(|(desc_id, index)| {
    -                let keychain = self.descriptor_id_to_keychain.get(desc_id)?;
    -                Some((keychain.clone(), *index))
    -            })
    -            .collect()
    -    }
    -
    -    /// Get the last derivation index revealed for `keychain`. Returns None if the keychain doesn't
    -    /// exist, or if the keychain doesn't have any revealed scripts.
    -    pub fn last_revealed_index(&self, keychain: &K) -> Option<u32> {
    -        let descriptor_id = self.keychain_to_descriptor_id.get(keychain)?;
    -        self.last_revealed.get(descriptor_id).cloned()
    -    }
    -
    -    /// Convenience method to call [`Self::reveal_to_target`] on multiple keychains.
    -    pub fn reveal_to_target_multi(&mut self, keychains: &BTreeMap<K, u32>) -> ChangeSet<K> {
    -        let mut changeset = ChangeSet::default();
    -
    -        for (keychain, &index) in keychains {
    -            if let Some((_, new_changeset)) = self.reveal_to_target(keychain, index) {
    -                changeset.append(new_changeset);
    -            }
    -        }
    -
    -        changeset
    -    }
    -
    -    /// Reveals script pubkeys of the `keychain`'s descriptor **up to and including** the
    -    /// `target_index`.
    -    ///
    -    /// If the `target_index` cannot be reached (due to the descriptor having no wildcard and/or
    -    /// the `target_index` is in the hardened index range), this method will make a best-effort and
    -    /// reveal up to the last possible index.
    -    ///
    -    /// This returns list of newly revealed indices (alongside their scripts) and a
    -    /// [`ChangeSet`], which reports updates to the latest revealed index. If no new script
    -    /// pubkeys are revealed, then both of these will be empty.
    -    ///
    -    /// Returns None if the provided `keychain` doesn't exist.
    -    #[must_use]
    -    pub fn reveal_to_target(
    -        &mut self,
    -        keychain: &K,
    -        target_index: u32,
    -    ) -> Option<(Vec<Indexed<ScriptBuf>>, ChangeSet<K>)> {
    -        let mut changeset = ChangeSet::default();
    -        let mut spks: Vec<Indexed<ScriptBuf>> = vec![];
    -        while let Some((i, new)) = self.next_index(keychain) {
    -            if !new || i > target_index {
    -                break;
    -            }
    -            match self.reveal_next_spk(keychain) {
    -                Some(((i, spk), change)) => {
    -                    spks.push((i, spk));
    -                    changeset.append(change);
    -                }
    -                None => break,
    -            }
    -        }
    -
    -        Some((spks, changeset))
    -    }
    -
    -    /// Attempts to reveal the next script pubkey for `keychain`.
    -    ///
    -    /// Returns the derivation index of the revealed script pubkey, the revealed script pubkey and a
    -    /// [`ChangeSet`] which represents changes in the last revealed index (if any).
    -    /// Returns None if the provided keychain doesn't exist.
    -    ///
    -    /// When a new script cannot be revealed, we return the last revealed script and an empty
    -    /// [`ChangeSet`]. There are two scenarios when a new script pubkey cannot be derived:
    -    ///
    -    ///  1. The descriptor has no wildcard and already has one script revealed.
    -    ///  2. The descriptor has already revealed scripts up to the numeric bound.
    -    ///  3. There is no descriptor associated with the given keychain.
    -    pub fn reveal_next_spk(&mut self, keychain: &K) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)> {
    -        let (next_index, new) = self.next_index(keychain)?;
    -        let mut changeset = ChangeSet::default();
    -
    -        if new {
    -            let did = self.keychain_to_descriptor_id.get(keychain)?;
    -            self.last_revealed.insert(*did, next_index);
    -            changeset.last_revealed.insert(*did, next_index);
    -            self.replenish_inner_index(*did, keychain, self.lookahead);
    -        }
    -        let script = self
    -            .inner
    -            .spk_at_index(&(keychain.clone(), next_index))
    -            .expect("we just inserted it");
    -        Some(((next_index, script.into()), changeset))
    -    }
    -
    -    /// Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest
    -    /// index that has not been used yet.
    -    ///
    -    /// This will derive and reveal a new script pubkey if no more unused script pubkeys exist.
    -    ///
    -    /// If the descriptor has no wildcard and already has a used script pubkey or if a descriptor
    -    /// has used all scripts up to the derivation bounds, then the last derived script pubkey will be
    -    /// returned.
    -    ///
    -    /// Returns `None` if there are no script pubkeys that have been used and no new script pubkey
    -    /// could be revealed (see [`reveal_next_spk`] for when this happens).
    -    ///
    -    /// [`reveal_next_spk`]: Self::reveal_next_spk
    -    pub fn next_unused_spk(&mut self, keychain: &K) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)> {
    -        let next_unused = self
    -            .unused_keychain_spks(keychain)
    -            .next()
    -            .map(|(i, spk)| ((i, spk.to_owned()), ChangeSet::default()));
    -
    -        next_unused.or_else(|| self.reveal_next_spk(keychain))
    -    }
    -
    -    /// Iterate over all [`OutPoint`]s that have `TxOut`s with script pubkeys derived from
    -    /// `keychain`.
    -    pub fn keychain_outpoints<'a>(
    -        &'a self,
    -        keychain: &'a K,
    -    ) -> impl DoubleEndedIterator<Item = Indexed<OutPoint>> + 'a {
    -        self.keychain_outpoints_in_range(keychain..=keychain)
    -            .map(|((_, i), op)| (i, op))
    -    }
    -
    -    /// Iterate over [`OutPoint`]s that have script pubkeys derived from keychains in `range`.
    -    pub fn keychain_outpoints_in_range<'a>(
    -        &'a self,
    -        range: impl RangeBounds<K> + 'a,
    -    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, OutPoint>> + 'a {
    -        self.inner
    -            .outputs_in_range(self.map_to_inner_bounds(range))
    -            .map(|((k, i), op)| ((k.clone(), *i), op))
    -    }
    -
    -    fn map_to_inner_bounds(&self, bound: impl RangeBounds<K>) -> impl RangeBounds<(K, u32)> {
    -        let start = match bound.start_bound() {
    -            Bound::Included(keychain) => Bound::Included((keychain.clone(), u32::MIN)),
    -            Bound::Excluded(keychain) => Bound::Excluded((keychain.clone(), u32::MAX)),
    -            Bound::Unbounded => Bound::Unbounded,
    -        };
    -        let end = match bound.end_bound() {
    -            Bound::Included(keychain) => Bound::Included((keychain.clone(), u32::MAX)),
    -            Bound::Excluded(keychain) => Bound::Excluded((keychain.clone(), u32::MIN)),
    -            Bound::Unbounded => Bound::Unbounded,
    -        };
    -
    -        (start, end)
    -    }
    -
    -    /// Returns the highest derivation index of the `keychain` where [`KeychainTxOutIndex`] has
    -    /// found a [`TxOut`] with it's script pubkey.
    -    pub fn last_used_index(&self, keychain: &K) -> Option<u32> {
    -        self.keychain_outpoints(keychain).last().map(|(i, _)| i)
    -    }
    -
    -    /// Returns the highest derivation index of each keychain that [`KeychainTxOutIndex`] has found
    -    /// a [`TxOut`] with it's script pubkey.
    -    pub fn last_used_indices(&self) -> BTreeMap<K, u32> {
    -        self.keychain_to_descriptor_id
    -            .iter()
    -            .filter_map(|(keychain, _)| {
    -                self.last_used_index(keychain)
    -                    .map(|index| (keychain.clone(), index))
    -            })
    -            .collect()
    -    }
    -
    -    /// Applies the `ChangeSet<K>` to the [`KeychainTxOutIndex<K>`]
    -    ///
    -    /// Keychains added by the `keychains_added` field of `ChangeSet<K>` respect the one-to-one
    -    /// keychain <-> descriptor invariant by silently ignoring attempts to violate it (but will
    -    /// panic if `debug_assertions` are enabled).
    -    pub fn apply_changeset(&mut self, changeset: ChangeSet<K>) {
    -        let ChangeSet {
    -            keychains_added,
    -            last_revealed,
    -        } = changeset;
    -        for (keychain, descriptor) in keychains_added {
    -            let _ignore_invariant_violation = self.insert_descriptor(keychain, descriptor);
    -        }
    -
    -        for (&desc_id, &index) in &last_revealed {
    -            let v = self.last_revealed.entry(desc_id).or_default();
    -            *v = index.max(*v);
    -        }
    -
    -        for did in last_revealed.keys() {
    -            self.replenish_inner_index_did(*did, self.lookahead);
    -        }
    -    }
    -}
    -
    -#[derive(Clone, Debug, PartialEq)]
    -/// Error returned from [`KeychainTxOutIndex::insert_descriptor`]
    -pub enum InsertDescriptorError<K> {
    -    /// The descriptor has already been assigned to a keychain so you can't assign it to another
    -    DescriptorAlreadyAssigned {
    -        /// The descriptor you have attempted to reassign
    -        descriptor: Descriptor<DescriptorPublicKey>,
    -        /// The keychain that the descriptor is already assigned to
    -        existing_assignment: K,
    -    },
    -    /// The keychain is already assigned to a descriptor so you can't reassign it
    -    KeychainAlreadyAssigned {
    -        /// The keychain that you have attempted to reassign
    -        keychain: K,
    -        /// The descriptor that the keychain is already assigned to
    -        existing_assignment: Descriptor<DescriptorPublicKey>,
    -    },
    -}
    -
    -impl<K: core::fmt::Debug> core::fmt::Display for InsertDescriptorError<K> {
    -    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    -        match self {
    -            InsertDescriptorError::DescriptorAlreadyAssigned {
    -                existing_assignment: existing,
    -                descriptor,
    -            } => {
    -                write!(
    -                    f,
    -                    "attempt to re-assign descriptor {descriptor:?} already assigned to {existing:?}"
    -                )
    -            }
    -            InsertDescriptorError::KeychainAlreadyAssigned {
    -                existing_assignment: existing,
    -                keychain,
    -            } => {
    -                write!(
    -                    f,
    -                    "attempt to re-assign keychain {keychain:?} already assigned to {existing:?}"
    -                )
    -            }
    -        }
    -    }
    -}
    -
    -#[cfg(feature = "std")]
    -impl<K: core::fmt::Debug> std::error::Error for InsertDescriptorError<K> {}
    -
    -/// Represents updates to the derivation index of a [`KeychainTxOutIndex`].
    -/// It maps each keychain `K` to a descriptor and its last revealed index.
    -///
    -/// It can be applied to [`KeychainTxOutIndex`] with [`apply_changeset`].
    -///
    -/// The `last_revealed` field is monotone in that [`append`] will never decrease it.
    -/// `keychains_added` is *not* monotone, once it is set any attempt to change it is subject to the
    -/// same *one-to-one* keychain <-> descriptor mapping invariant as [`KeychainTxOutIndex`] itself.
    -///
    -/// [`KeychainTxOutIndex`]: crate::keychain::KeychainTxOutIndex
    -/// [`apply_changeset`]: crate::keychain::KeychainTxOutIndex::apply_changeset
    -/// [`append`]: Self::append
    -#[derive(Clone, Debug, PartialEq)]
    -#[cfg_attr(
    -    feature = "serde",
    -    derive(serde::Deserialize, serde::Serialize),
    -    serde(
    -        crate = "serde_crate",
    -        bound(
    -            deserialize = "K: Ord + serde::Deserialize<'de>",
    -            serialize = "K: Ord + serde::Serialize"
    -        )
    -    )
    -)]
    -#[must_use]
    -pub struct ChangeSet<K> {
    -    /// Contains the keychains that have been added and their respective descriptor
    -    pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
    -    /// Contains for each descriptor_id the last revealed index of derivation
    -    pub last_revealed: BTreeMap<DescriptorId, u32>,
    -}
    -
    -impl<K: Ord> Append for ChangeSet<K> {
    -    /// Merge another [`ChangeSet<K>`] into self.
    -    ///
    -    /// For the `keychains_added` field this method respects the invariants of
    -    /// [`insert_descriptor`]. `last_revealed` always becomes the larger of the two.
    -    ///
    -    /// [`insert_descriptor`]: KeychainTxOutIndex::insert_descriptor
    -    fn append(&mut self, other: Self) {
    -        for (new_keychain, new_descriptor) in other.keychains_added {
    -            // enforce 1-to-1 invariance
    -            if !self.keychains_added.contains_key(&new_keychain)
    -                // FIXME: very inefficient
    -                && self
    -                    .keychains_added
    -                    .values()
    -                    .all(|descriptor| descriptor != &new_descriptor)
    -            {
    -                self.keychains_added.insert(new_keychain, new_descriptor);
    -            }
    -        }
    -
    -        // for `last_revealed`, entries of `other` will take precedence ONLY if it is greater than
    -        // what was originally in `self`.
    -        for (desc_id, index) in other.last_revealed {
    -            use crate::collections::btree_map::Entry;
    -            match self.last_revealed.entry(desc_id) {
    -                Entry::Vacant(entry) => {
    -                    entry.insert(index);
    -                }
    -                Entry::Occupied(mut entry) => {
    -                    if *entry.get() < index {
    -                        entry.insert(index);
    -                    }
    -                }
    -            }
    -        }
    -    }
    -
    -    /// Returns whether the changeset are empty.
    -    fn is_empty(&self) -> bool {
    -        self.last_revealed.is_empty() && self.keychains_added.is_empty()
    -    }
    -}
    -
    -impl<K> Default for ChangeSet<K> {
    -    fn default() -> Self {
    -        Self {
    -            last_revealed: BTreeMap::default(),
    -            keychains_added: BTreeMap::default(),
    -        }
    -    }
    -}
    -
    -#[derive(Clone, Debug, Eq, PartialEq)]
    -/// The keychain doesn't exist. Most likley hasn't been inserted with [`KeychainTxOutIndex::insert_descriptor`].
    -pub struct NoSuchKeychain<K>(K);
    -
    -impl<K: Debug> core::fmt::Display for NoSuchKeychain<K> {
    -    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    -        write!(f, "no such keychain {:?} exists", &self.0)
    -    }
    -}
    -
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html index 36ec18be6e..e4e2ba998b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html @@ -98,6 +98,12 @@ 98 99 100 +101 +102 +103 +104 +105 +106
    //! This crate is a collection of core structures for [Bitcoin Dev Kit].
     //!
     //! The goal of this crate is to give wallets the mechanisms needed to:
    @@ -121,14 +127,15 @@
     #![warn(missing_docs)]
     
     pub use bitcoin;
    -mod spk_txout_index;
    -pub use spk_txout_index::*;
    +mod balance;
    +pub use balance::*;
     mod chain_data;
     pub use chain_data::*;
     pub mod indexed_tx_graph;
     pub use indexed_tx_graph::IndexedTxGraph;
    -pub mod keychain;
    -pub use keychain::{Indexed, KeychainIndexed};
    +pub mod indexer;
    +pub use indexer::spk_txout::*;
    +pub use indexer::Indexer;
     pub mod local_chain;
     mod tx_data_traits;
     pub mod tx_graph;
    @@ -198,4 +205,9 @@
     
     /// How many confirmations are needed f or a coinbase output to be spent.
     pub const COINBASE_MATURITY: u32 = 100;
    +
    +/// A tuple of keychain index and `T` representing the indexed value.
    +pub type Indexed<T> = (u32, T);
    +/// A tuple of keychain `K`, derivation index (`u32`) and a `T` associated with them.
    +pub type KeychainIndexed<K, T> = ((K, u32), T);
     

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html index e2af80b009..a5dd85f58e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html @@ -386,12 +386,10 @@ 386 387 388 -389
    //! Helper types for spk-based blockchain clients.
     
     use crate::{
    -    collections::BTreeMap, keychain::Indexed, local_chain::CheckPoint,
    -    ConfirmationTimeHeightAnchor, TxGraph,
    +    collections::BTreeMap, local_chain::CheckPoint, ConfirmationTimeHeightAnchor, Indexed, TxGraph,
     };
     use alloc::boxed::Box;
     use bitcoin::{OutPoint, Script, ScriptBuf, Txid};
    @@ -549,7 +547,7 @@
         #[must_use]
         pub fn populate_with_revealed_spks<K: Clone + Ord + core::fmt::Debug + Send + Sync>(
             self,
    -        index: &crate::keychain::KeychainTxOutIndex<K>,
    +        index: &crate::indexer::keychain_txout::KeychainTxOutIndex<K>,
             spk_range: impl core::ops::RangeBounds<K>,
         ) -> Self {
             use alloc::borrow::ToOwned;
    @@ -605,12 +603,12 @@
         /// [`KeychainTxOutIndex::all_unbounded_spk_iters`] and is used to populate the
         /// [`FullScanRequest`].
         ///
    -    /// [`KeychainTxOutIndex::all_unbounded_spk_iters`]: crate::keychain::KeychainTxOutIndex::all_unbounded_spk_iters
    +    /// [`KeychainTxOutIndex::all_unbounded_spk_iters`]: crate::indexer::keychain_txout::KeychainTxOutIndex::all_unbounded_spk_iters
         #[cfg(feature = "miniscript")]
         #[must_use]
         pub fn from_keychain_txout_index(
             chain_tip: CheckPoint,
    -        index: &crate::keychain::KeychainTxOutIndex<K>,
    +        index: &crate::indexer::keychain_txout::KeychainTxOutIndex<K>,
         ) -> Self
         where
             K: core::fmt::Debug,
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html
    index 7584951c30..ca6adf3e94 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html
    @@ -272,8 +272,8 @@
     272
     
    use crate::{
         bitcoin::{secp256k1::Secp256k1, ScriptBuf},
    -    keychain::Indexed,
         miniscript::{Descriptor, DescriptorPublicKey},
    +    Indexed,
     };
     use core::{borrow::Borrow, ops::Bound, ops::RangeBounds};
     
    @@ -409,7 +409,7 @@
     mod test {
         use crate::{
             bitcoin::secp256k1::Secp256k1,
    -        keychain::KeychainTxOutIndex,
    +        indexer::keychain_txout::KeychainTxOutIndex,
             miniscript::{Descriptor, DescriptorPublicKey},
             spk_iter::{SpkIterator, BIP32_MAX_INDEX},
         };
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html
    deleted file mode 100644
    index f0f493f0d1..0000000000
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html
    +++ /dev/null
    @@ -1,665 +0,0 @@
    -spk_txout_index.rs - source
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -
    use core::ops::RangeBounds;
    -
    -use crate::{
    -    collections::{hash_map::Entry, BTreeMap, BTreeSet, HashMap},
    -    indexed_tx_graph::Indexer,
    -};
    -use bitcoin::{Amount, OutPoint, Script, ScriptBuf, SignedAmount, Transaction, TxOut, Txid};
    -
    -/// An index storing [`TxOut`]s that have a script pubkey that matches those in a list.
    -///
    -/// The basic idea is that you insert script pubkeys you care about into the index with
    -/// [`insert_spk`] and then when you call [`Indexer::index_tx`] or [`Indexer::index_txout`], the
    -/// index will look at any txouts you pass in and store and index any txouts matching one of its
    -/// script pubkeys.
    -///
    -/// Each script pubkey is associated with an application-defined index script index `I`, which must be
    -/// [`Ord`]. Usually, this is used to associate the derivation index of the script pubkey or even a
    -/// combination of `(keychain, derivation_index)`.
    -///
    -/// Note there is no harm in scanning transactions that disappear from the blockchain or were never
    -/// in there in the first place. `SpkTxOutIndex` is intentionally *monotone* -- you cannot delete or
    -/// modify txouts that have been indexed. To find out which txouts from the index are actually in the
    -/// chain or unspent, you must use other sources of information like a [`TxGraph`].
    -///
    -/// [`TxOut`]: bitcoin::TxOut
    -/// [`insert_spk`]: Self::insert_spk
    -/// [`Ord`]: core::cmp::Ord
    -/// [`TxGraph`]: crate::tx_graph::TxGraph
    -#[derive(Clone, Debug)]
    -pub struct SpkTxOutIndex<I> {
    -    /// script pubkeys ordered by index
    -    spks: BTreeMap<I, ScriptBuf>,
    -    /// A reverse lookup from spk to spk index
    -    spk_indices: HashMap<ScriptBuf, I>,
    -    /// The set of unused indexes.
    -    unused: BTreeSet<I>,
    -    /// Lookup index and txout by outpoint.
    -    txouts: BTreeMap<OutPoint, (I, TxOut)>,
    -    /// Lookup from spk index to outpoints that had that spk
    -    spk_txouts: BTreeSet<(I, OutPoint)>,
    -}
    -
    -impl<I> Default for SpkTxOutIndex<I> {
    -    fn default() -> Self {
    -        Self {
    -            txouts: Default::default(),
    -            spks: Default::default(),
    -            spk_indices: Default::default(),
    -            spk_txouts: Default::default(),
    -            unused: Default::default(),
    -        }
    -    }
    -}
    -
    -impl<I: Clone + Ord + core::fmt::Debug> Indexer for SpkTxOutIndex<I> {
    -    type ChangeSet = ();
    -
    -    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet {
    -        self.scan_txout(outpoint, txout);
    -        Default::default()
    -    }
    -
    -    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet {
    -        self.scan(tx);
    -        Default::default()
    -    }
    -
    -    fn initial_changeset(&self) -> Self::ChangeSet {}
    -
    -    fn apply_changeset(&mut self, _changeset: Self::ChangeSet) {
    -        // This applies nothing.
    -    }
    -
    -    fn is_tx_relevant(&self, tx: &Transaction) -> bool {
    -        self.is_relevant(tx)
    -    }
    -}
    -
    -impl<I: Clone + Ord + core::fmt::Debug> SpkTxOutIndex<I> {
    -    /// Scans a transaction's outputs for matching script pubkeys.
    -    ///
    -    /// Typically, this is used in two situations:
    -    ///
    -    /// 1. After loading transaction data from the disk, you may scan over all the txouts to restore all
    -    /// your txouts.
    -    /// 2. When getting new data from the chain, you usually scan it before incorporating it into your chain state.
    -    pub fn scan(&mut self, tx: &Transaction) -> BTreeSet<I> {
    -        let mut scanned_indices = BTreeSet::new();
    -        let txid = tx.compute_txid();
    -        for (i, txout) in tx.output.iter().enumerate() {
    -            let op = OutPoint::new(txid, i as u32);
    -            if let Some(spk_i) = self.scan_txout(op, txout) {
    -                scanned_indices.insert(spk_i.clone());
    -            }
    -        }
    -
    -        scanned_indices
    -    }
    -
    -    /// Scan a single `TxOut` for a matching script pubkey and returns the index that matches the
    -    /// script pubkey (if any).
    -    pub fn scan_txout(&mut self, op: OutPoint, txout: &TxOut) -> Option<&I> {
    -        let spk_i = self.spk_indices.get(&txout.script_pubkey);
    -        if let Some(spk_i) = spk_i {
    -            self.txouts.insert(op, (spk_i.clone(), txout.clone()));
    -            self.spk_txouts.insert((spk_i.clone(), op));
    -            self.unused.remove(spk_i);
    -        }
    -        spk_i
    -    }
    -
    -    /// Get a reference to the set of indexed outpoints.
    -    pub fn outpoints(&self) -> &BTreeSet<(I, OutPoint)> {
    -        &self.spk_txouts
    -    }
    -
    -    /// Iterate over all known txouts that spend to tracked script pubkeys.
    -    pub fn txouts(
    -        &self,
    -    ) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)> + ExactSizeIterator {
    -        self.txouts
    -            .iter()
    -            .map(|(op, (index, txout))| (index, *op, txout))
    -    }
    -
    -    /// Finds all txouts on a transaction that has previously been scanned and indexed.
    -    pub fn txouts_in_tx(
    -        &self,
    -        txid: Txid,
    -    ) -> impl DoubleEndedIterator<Item = (&I, OutPoint, &TxOut)> {
    -        self.txouts
    -            .range(OutPoint::new(txid, u32::MIN)..=OutPoint::new(txid, u32::MAX))
    -            .map(|(op, (index, txout))| (index, *op, txout))
    -    }
    -
    -    /// Iterates over all the outputs with script pubkeys in an index range.
    -    pub fn outputs_in_range(
    -        &self,
    -        range: impl RangeBounds<I>,
    -    ) -> impl DoubleEndedIterator<Item = (&I, OutPoint)> {
    -        use bitcoin::hashes::Hash;
    -        use core::ops::Bound::*;
    -        let min_op = OutPoint {
    -            txid: Txid::all_zeros(),
    -            vout: u32::MIN,
    -        };
    -        let max_op = OutPoint {
    -            txid: Txid::from_byte_array([0xff; Txid::LEN]),
    -            vout: u32::MAX,
    -        };
    -
    -        let start = match range.start_bound() {
    -            Included(index) => Included((index.clone(), min_op)),
    -            Excluded(index) => Excluded((index.clone(), max_op)),
    -            Unbounded => Unbounded,
    -        };
    -
    -        let end = match range.end_bound() {
    -            Included(index) => Included((index.clone(), max_op)),
    -            Excluded(index) => Excluded((index.clone(), min_op)),
    -            Unbounded => Unbounded,
    -        };
    -
    -        self.spk_txouts.range((start, end)).map(|(i, op)| (i, *op))
    -    }
    -
    -    /// Returns the txout and script pubkey index of the `TxOut` at `OutPoint`.
    -    ///
    -    /// Returns `None` if the `TxOut` hasn't been scanned or if nothing matching was found there.
    -    pub fn txout(&self, outpoint: OutPoint) -> Option<(&I, &TxOut)> {
    -        self.txouts.get(&outpoint).map(|v| (&v.0, &v.1))
    -    }
    -
    -    /// Returns the script that has been inserted at the `index`.
    -    ///
    -    /// If that index hasn't been inserted yet, it will return `None`.
    -    pub fn spk_at_index(&self, index: &I) -> Option<&Script> {
    -        self.spks.get(index).map(|s| s.as_script())
    -    }
    -
    -    /// The script pubkeys that are being tracked by the index.
    -    pub fn all_spks(&self) -> &BTreeMap<I, ScriptBuf> {
    -        &self.spks
    -    }
    -
    -    /// Adds a script pubkey to scan for. Returns `false` and does nothing if spk already exists in the map
    -    ///
    -    /// the index will look for outputs spending to this spk whenever it scans new data.
    -    pub fn insert_spk(&mut self, index: I, spk: ScriptBuf) -> bool {
    -        match self.spk_indices.entry(spk.clone()) {
    -            Entry::Vacant(value) => {
    -                value.insert(index.clone());
    -                self.spks.insert(index.clone(), spk);
    -                self.unused.insert(index);
    -                true
    -            }
    -            Entry::Occupied(_) => false,
    -        }
    -    }
    -
    -    /// Iterates over all unused script pubkeys in an index range.
    -    ///
    -    /// Here, "unused" means that after the script pubkey was stored in the index, the index has
    -    /// never scanned a transaction output with it.
    -    ///
    -    /// # Example
    -    ///
    -    /// ```rust
    -    /// # use bdk_chain::SpkTxOutIndex;
    -    ///
    -    /// // imagine our spks are indexed like (keychain, derivation_index).
    -    /// let txout_index = SpkTxOutIndex::<(u32, u32)>::default();
    -    /// let all_unused_spks = txout_index.unused_spks(..);
    -    /// let change_index = 1;
    -    /// let unused_change_spks =
    -    ///     txout_index.unused_spks((change_index, u32::MIN)..(change_index, u32::MAX));
    -    /// ```
    -    pub fn unused_spks<R>(&self, range: R) -> impl DoubleEndedIterator<Item = (&I, &Script)> + Clone
    -    where
    -        R: RangeBounds<I>,
    -    {
    -        self.unused
    -            .range(range)
    -            .map(move |index| (index, self.spk_at_index(index).expect("must exist")))
    -    }
    -
    -    /// Returns whether the script pubkey at `index` has been used or not.
    -    ///
    -    /// Here, "unused" means that after the script pubkey was stored in the index, the index has
    -    /// never scanned a transaction output with it.
    -    pub fn is_used(&self, index: &I) -> bool {
    -        !self.unused.contains(index)
    -    }
    -
    -    /// Marks the script pubkey at `index` as used even though it hasn't seen an output spending to it.
    -    /// This only affects when the `index` had already been added to `self` and was unused.
    -    ///
    -    /// Returns whether the `index` was initially present as `unused`.
    -    ///
    -    /// This is useful when you want to reserve a script pubkey for something but don't want to add
    -    /// the transaction output using it to the index yet. Other callers will consider the `index` used
    -    /// until you call [`unmark_used`].
    -    ///
    -    /// [`unmark_used`]: Self::unmark_used
    -    pub fn mark_used(&mut self, index: &I) -> bool {
    -        self.unused.remove(index)
    -    }
    -
    -    /// Undoes the effect of [`mark_used`]. Returns whether the `index` is inserted back into
    -    /// `unused`.
    -    ///
    -    /// Note that if `self` has scanned an output with this script pubkey then this will have no
    -    /// effect.
    -    ///
    -    /// [`mark_used`]: Self::mark_used
    -    pub fn unmark_used(&mut self, index: &I) -> bool {
    -        // we cannot set the index as unused when it does not exist
    -        if !self.spks.contains_key(index) {
    -            return false;
    -        }
    -        // we cannot set the index as unused when txouts are indexed under it
    -        if self.outputs_in_range(index..=index).next().is_some() {
    -            return false;
    -        }
    -        self.unused.insert(index.clone())
    -    }
    -
    -    /// Returns the index associated with the script pubkey.
    -    pub fn index_of_spk(&self, script: &Script) -> Option<&I> {
    -        self.spk_indices.get(script)
    -    }
    -
    -    /// Computes the total value transfer effect `tx` has on the script pubkeys in `range`. Value is
    -    /// *sent* when a script pubkey in the `range` is on an input and *received* when it is on an
    -    /// output. For `sent` to be computed correctly, the output being spent must have already been
    -    /// scanned by the index. Calculating received just uses the [`Transaction`] outputs directly,
    -    /// so it will be correct even if it has not been scanned.
    -    pub fn sent_and_received(
    -        &self,
    -        tx: &Transaction,
    -        range: impl RangeBounds<I>,
    -    ) -> (Amount, Amount) {
    -        let mut sent = Amount::ZERO;
    -        let mut received = Amount::ZERO;
    -
    -        for txin in &tx.input {
    -            if let Some((index, txout)) = self.txout(txin.previous_output) {
    -                if range.contains(index) {
    -                    sent += txout.value;
    -                }
    -            }
    -        }
    -        for txout in &tx.output {
    -            if let Some(index) = self.index_of_spk(&txout.script_pubkey) {
    -                if range.contains(index) {
    -                    received += txout.value;
    -                }
    -            }
    -        }
    -
    -        (sent, received)
    -    }
    -
    -    /// Computes the net value transfer effect of `tx` on the script pubkeys in `range`. Shorthand
    -    /// for calling [`sent_and_received`] and subtracting sent from received.
    -    ///
    -    /// [`sent_and_received`]: Self::sent_and_received
    -    pub fn net_value(&self, tx: &Transaction, range: impl RangeBounds<I>) -> SignedAmount {
    -        let (sent, received) = self.sent_and_received(tx, range);
    -        received.to_signed().expect("valid `SignedAmount`")
    -            - sent.to_signed().expect("valid `SignedAmount`")
    -    }
    -
    -    /// Whether any of the inputs of this transaction spend a txout tracked or whether any output
    -    /// matches one of our script pubkeys.
    -    ///
    -    /// It is easily possible to misuse this method and get false negatives by calling it before you
    -    /// have scanned the `TxOut`s the transaction is spending. For example, if you want to filter out
    -    /// all the transactions in a block that are irrelevant, you **must first scan all the
    -    /// transactions in the block** and only then use this method.
    -    pub fn is_relevant(&self, tx: &Transaction) -> bool {
    -        let input_matches = tx
    -            .input
    -            .iter()
    -            .any(|input| self.txouts.contains_key(&input.previous_output));
    -        let output_matches = tx
    -            .output
    -            .iter()
    -            .any(|output| self.spk_indices.contains_key(&output.script_pubkey));
    -        input_matches || output_matches
    -    }
    -}
    -
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html index ce3eaddd02..c83571637d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html @@ -1584,7 +1584,6 @@ 1584 1585 1586 -1587
    //! Module for structures that store and traverse transactions.
     //!
     //! [`TxGraph`] contains transactions and indexes them so you can easily traverse the graph of
    @@ -1676,8 +1675,7 @@
     //! [`insert_txout`]: TxGraph::insert_txout
     
     use crate::{
    -    collections::*, keychain::Balance, Anchor, Append, BlockId, ChainOracle, ChainPosition,
    -    FullTxOut,
    +    collections::*, Anchor, Append, Balance, BlockId, ChainOracle, ChainPosition, FullTxOut,
     };
     use alloc::collections::vec_deque::VecDeque;
     use alloc::sync::Arc;
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html
    index 7516b889a3..a9c2b55db3 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html
    @@ -821,7 +821,7 @@
     }
     
     /// This performs a full scan to get an update for the [`TxGraph`] and
    -/// [`KeychainTxOutIndex`](bdk_chain::keychain::KeychainTxOutIndex).
    +/// [`KeychainTxOutIndex`](bdk_chain::indexer::keychain_txout::KeychainTxOutIndex).
     async fn full_scan_for_index_and_graph<K: Ord + Clone + Send>(
         client: &esplora_client::AsyncClient,
         keychain_spks: BTreeMap<
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html
    index 7703fe04c9..20a754e6f8 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html
    @@ -998,7 +998,7 @@
     }
     
     /// This performs a full scan to get an update for the [`TxGraph`] and
    -/// [`KeychainTxOutIndex`](bdk_chain::keychain::KeychainTxOutIndex).
    +/// [`KeychainTxOutIndex`](bdk_chain::indexer::keychain_txout::KeychainTxOutIndex).
     fn full_scan_for_index_and_graph_blocking<K: Ord + Clone>(
         client: &esplora_client::BlockingClient,
         keychain_spks: BTreeMap<K, impl IntoIterator<Item = Indexed<ScriptBuf>>>,
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_sqlite/store.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_sqlite/store.rs.html
    index c217367f8d..f0efcc3d91 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_sqlite/store.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_sqlite/store.rs.html
    @@ -756,6 +756,7 @@
     756
     757
     758
    +759
     
    use bdk_chain::bitcoin::consensus::{deserialize, serialize};
     use bdk_chain::bitcoin::hashes::Hash;
     use bdk_chain::bitcoin::{Amount, Network, OutPoint, ScriptBuf, Transaction, TxOut};
    @@ -772,7 +773,8 @@
     use crate::Error;
     use bdk_chain::CombinedChangeSet;
     use bdk_chain::{
    -    indexed_tx_graph, keychain, local_chain, tx_graph, Anchor, Append, DescriptorExt, DescriptorId,
    +    indexed_tx_graph, indexer::keychain_txout, local_chain, tx_graph, Anchor, Append,
    +    DescriptorExt, DescriptorId,
     };
     
     /// Persists data in to a relational schema based [SQLite] database file.
    @@ -945,7 +947,7 @@
         /// If keychain exists only update last active index.
         fn insert_keychains(
             db_transaction: &rusqlite::Transaction,
    -        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>>,
    +        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>>,
         ) -> Result<(), Error> {
             let keychain_changeset = &tx_graph_changeset.indexer;
             for (keychain, descriptor) in keychain_changeset.keychains_added.iter() {
    @@ -964,7 +966,7 @@
         /// Update descriptor last revealed index.
         fn update_last_revealed(
             db_transaction: &rusqlite::Transaction,
    -        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>>,
    +        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>>,
         ) -> Result<(), Error> {
             let keychain_changeset = &tx_graph_changeset.indexer;
             for (descriptor_id, last_revealed) in keychain_changeset.last_revealed.iter() {
    @@ -1037,7 +1039,7 @@
         /// Error if trying to insert existing txid.
         fn insert_txs(
             db_transaction: &rusqlite::Transaction,
    -        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>>,
    +        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>>,
         ) -> Result<(), Error> {
             for tx in tx_graph_changeset.graph.txs.iter() {
                 let insert_tx_stmt = &mut db_transaction
    @@ -1101,7 +1103,7 @@
         /// Error if trying to insert existing outpoint.
         fn insert_txouts(
             db_transaction: &rusqlite::Transaction,
    -        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>>,
    +        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>>,
         ) -> Result<(), Error> {
             for txout in tx_graph_changeset.graph.txouts.iter() {
                 let insert_txout_stmt = &mut db_transaction
    @@ -1151,7 +1153,7 @@
         /// Update transaction last seen times.
         fn update_last_seen(
             db_transaction: &rusqlite::Transaction,
    -        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>>,
    +        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>>,
         ) -> Result<(), Error> {
             for tx_last_seen in tx_graph_changeset.graph.last_seen.iter() {
                 let insert_or_update_tx_stmt = &mut db_transaction
    @@ -1176,7 +1178,7 @@
         /// Insert anchors.
         fn insert_anchors(
             db_transaction: &rusqlite::Transaction,
    -        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>>,
    +        tx_graph_changeset: &indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>>,
         ) -> Result<(), Error> {
             // serde_json::to_string
             for anchor in tx_graph_changeset.graph.anchors.iter() {
    @@ -1272,12 +1274,12 @@
                 last_seen,
             };
     
    -        let indexer: keychain::ChangeSet<K> = keychain::ChangeSet {
    +        let indexer = keychain_txout::ChangeSet {
                 keychains_added,
                 last_revealed,
             };
     
    -        let indexed_tx_graph: indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<K>> =
    +        let indexed_tx_graph: indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<K>> =
                 indexed_tx_graph::ChangeSet { graph, indexer };
     
             if network.is_none() && chain.is_empty() && indexed_tx_graph.is_empty() {
    @@ -1305,7 +1307,7 @@
         use bdk_chain::miniscript::Descriptor;
         use bdk_chain::CombinedChangeSet;
         use bdk_chain::{
    -        indexed_tx_graph, keychain, tx_graph, BlockId, ConfirmationHeightAnchor,
    +        indexed_tx_graph, tx_graph, BlockId, ConfirmationHeightAnchor,
             ConfirmationTimeHeightAnchor, DescriptorExt,
         };
         use std::str::FromStr;
    @@ -1442,12 +1444,12 @@
                 .into(),
             };
     
    -        let keychain_changeset = keychain::ChangeSet {
    +        let keychain_changeset = keychain_txout::ChangeSet {
                 keychains_added: [(ext_keychain, ext_desc), (int_keychain, int_desc)].into(),
                 last_revealed: [(ext_desc_id, 124), (int_desc_id, 421)].into(),
             };
     
    -        let graph_changeset: indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<Keychain>> =
    +        let graph_changeset: indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<Keychain>> =
                 indexed_tx_graph::ChangeSet {
                     graph: tx_graph_changeset,
                     indexer: keychain_changeset,
    @@ -1470,10 +1472,10 @@
                 last_seen: [(tx2.compute_txid(), 1708919121)].into(),
             };
     
    -        let graph_changeset2: indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<Keychain>> =
    +        let graph_changeset2: indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<Keychain>> =
                 indexed_tx_graph::ChangeSet {
                     graph: tx_graph_changeset2,
    -                indexer: keychain::ChangeSet::default(),
    +                indexer: keychain_txout::ChangeSet::default(),
                 };
     
             changesets.push(CombinedChangeSet {
    @@ -1490,10 +1492,10 @@
                 last_seen: BTreeMap::default(),
             };
     
    -        let graph_changeset3: indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<Keychain>> =
    +        let graph_changeset3: indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<Keychain>> =
                 indexed_tx_graph::ChangeSet {
                     graph: tx_graph_changeset3,
    -                indexer: keychain::ChangeSet::default(),
    +                indexer: keychain_txout::ChangeSet::default(),
                 };
     
             changesets.push(CombinedChangeSet {
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html
    index fab6c187b6..57a3ff70c4 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html
    @@ -2541,10 +2541,10 @@
         sync::Arc,
         vec::Vec,
     };
    -pub use bdk_chain::keychain::Balance;
    +pub use bdk_chain::Balance;
     use bdk_chain::{
         indexed_tx_graph,
    -    keychain::KeychainTxOutIndex,
    +    indexer::keychain_txout::KeychainTxOutIndex,
         local_chain::{
             self, ApplyHeaderError, CannotConnectError, CheckPoint, CheckPointIter, LocalChain,
         },
    @@ -2634,7 +2634,7 @@
     
     /// An update to [`Wallet`].
     ///
    -/// It updates [`bdk_chain::keychain::KeychainTxOutIndex`], [`bdk_chain::TxGraph`] and [`local_chain::LocalChain`] atomically.
    +/// It updates [`KeychainTxOutIndex`], [`bdk_chain::TxGraph`] and [`local_chain::LocalChain`] atomically.
     #[derive(Debug, Clone, Default)]
     pub struct Update {
         /// Contains the last active derivation indices per keychain (`K`), which is used to update the
    @@ -4973,7 +4973,7 @@
         let _ = index
             .insert_descriptor(KeychainKind::Internal, descriptor)
             .map_err(|e| {
    -            use bdk_chain::keychain::InsertDescriptorError;
    +            use bdk_chain::indexer::keychain_txout::InsertDescriptorError;
                 match e {
                     InsertDescriptorError::DescriptorAlreadyAssigned { .. } => {
                         crate::descriptor::error::Error::ExternalAndInternalAreTheSame
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html
    index 8f1c704c0f..3ad59a5116 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html
    @@ -387,6 +387,7 @@
     387
     388
     389
    +390
     
    use std::{
         path::PathBuf,
         sync::{
    @@ -402,7 +403,8 @@
     };
     use bdk_chain::{
         bitcoin::{constants::genesis_block, Block, Transaction},
    -    indexed_tx_graph, keychain,
    +    indexed_tx_graph,
    +    indexer::keychain_txout,
         local_chain::{self, LocalChain},
         Append, ConfirmationTimeHeightAnchor, IndexedTxGraph,
     };
    @@ -426,7 +428,7 @@
     
     type ChangeSet = (
         local_chain::ChangeSet,
    -    indexed_tx_graph::ChangeSet<ConfirmationTimeHeightAnchor, keychain::ChangeSet<Keychain>>,
    +    indexed_tx_graph::ChangeSet<ConfirmationTimeHeightAnchor, keychain_txout::ChangeSet<Keychain>>,
     );
     
     #[derive(Debug)]
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html
    index 18bf43a164..ed4adf15f7 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html
    @@ -761,7 +761,7 @@
             transaction, Address, Amount, Network, Sequence, Transaction, TxIn, TxOut,
         },
         indexed_tx_graph::{self, IndexedTxGraph},
    -    keychain::{self, KeychainTxOutIndex},
    +    indexer::keychain_txout::{self, KeychainTxOutIndex},
         local_chain,
         miniscript::{
             descriptor::{DescriptorSecretKey, KeyMap},
    @@ -777,7 +777,7 @@
     pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;
     pub type KeychainChangeSet<A> = (
         local_chain::ChangeSet,
    -    indexed_tx_graph::ChangeSet<A, keychain::ChangeSet<Keychain>>,
    +    indexed_tx_graph::ChangeSet<A, keychain_txout::ChangeSet<Keychain>>,
     );
     
     #[derive(Parser)]
    @@ -938,7 +938,7 @@
     }
     
     pub struct CreateTxChange {
    -    pub index_changeset: keychain::ChangeSet<Keychain>,
    +    pub index_changeset: keychain_txout::ChangeSet<Keychain>,
         pub change_keychain: Keychain,
         pub index: u32,
     }
    @@ -954,7 +954,7 @@
     where
         O::Error: std::error::Error + Send + Sync + 'static,
     {
    -    let mut changeset = keychain::ChangeSet::default();
    +    let mut changeset = keychain_txout::ChangeSet::default();
     
         let assets = bdk_tmp_plan::Assets {
             keys: keymap.iter().map(|(pk, _)| pk.clone()).collect(),
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html
    index 6507524ae9..560cc388ff 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html
    @@ -363,7 +363,7 @@
         bitcoin::{constants::genesis_block, Address, Network, Txid},
         collections::BTreeSet,
         indexed_tx_graph::{self, IndexedTxGraph},
    -    keychain,
    +    indexer::keychain_txout,
         local_chain::{self, LocalChain},
         spk_client::{FullScanRequest, SyncRequest},
         Append, ConfirmationHeightAnchor,
    @@ -456,7 +456,7 @@
     
     type ChangeSet = (
         local_chain::ChangeSet,
    -    indexed_tx_graph::ChangeSet<ConfirmationHeightAnchor, keychain::ChangeSet<Keychain>>,
    +    indexed_tx_graph::ChangeSet<ConfirmationHeightAnchor, keychain_txout::ChangeSet<Keychain>>,
     );
     
     fn main() -> anyhow::Result<()> {
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html
    index d72bfc7727..2ae85d09b0 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html
    @@ -373,7 +373,7 @@
     use bdk_chain::{
         bitcoin::{constants::genesis_block, Address, Network, Txid},
         indexed_tx_graph::{self, IndexedTxGraph},
    -    keychain,
    +    indexer::keychain_txout,
         local_chain::{self, LocalChain},
         spk_client::{FullScanRequest, SyncRequest},
         Append, ConfirmationTimeHeightAnchor,
    @@ -392,7 +392,7 @@
     
     type ChangeSet = (
         local_chain::ChangeSet,
    -    indexed_tx_graph::ChangeSet<ConfirmationTimeHeightAnchor, keychain::ChangeSet<Keychain>>,
    +    indexed_tx_graph::ChangeSet<ConfirmationTimeHeightAnchor, keychain_txout::ChangeSet<Keychain>>,
     );
     
     #[derive(Subcommand, Debug, Clone)]
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/indexed_tx_graph/trait.Indexer.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/indexed_tx_graph/trait.Indexer.js
    deleted file mode 100644
    index 1a8211de1a..0000000000
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/indexed_tx_graph/trait.Indexer.js
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -(function() {var implementors = {
    -"bdk_chain":[]
    -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/indexer/trait.Indexer.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/indexer/trait.Indexer.js
    new file mode 100644
    index 0000000000..1a8211de1a
    --- /dev/null
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/indexer/trait.Indexer.js
    @@ -0,0 +1,3 @@
    +(function() {var implementors = {
    +"bdk_chain":[]
    +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js
    index 25af096799..59a08da91b 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl Clone for ConfirmationTime"],["impl Clone for ApplyHeaderError"],["impl Clone for Balance"],["impl Clone for AlterCheckPointError"],["impl Clone for CannotConnectError"],["impl Clone for CheckPoint"],["impl Clone for LocalChain"],["impl Clone for MissingGenesisError"],["impl Clone for BlockId"],["impl Clone for ConfirmationHeightAnchor"],["impl Clone for ConfirmationTimeHeightAnchor"],["impl Clone for DescriptorId"],["impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>"],["impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>"],["impl<A: Clone> Clone for ChainPosition<A>"],["impl<A: Clone> Clone for FullTxOut<A>"],["impl<A: Clone> Clone for ChangeSet<A>"],["impl<A: Clone> Clone for TxGraph<A>"],["impl<A: Clone, IA: Clone> Clone for ChangeSet<A, IA>"],["impl<D: Clone> Clone for SpkIterator<D>"],["impl<I: Clone> Clone for SpkTxOutIndex<I>"],["impl<K: Clone> Clone for InsertDescriptorError<K>"],["impl<K: Clone> Clone for ChangeSet<K>"],["impl<K: Clone> Clone for KeychainTxOutIndex<K>"],["impl<K: Clone> Clone for NoSuchKeychain<K>"],["impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>"]],
    +"bdk_chain":[["impl Clone for ConfirmationTime"],["impl Clone for ApplyHeaderError"],["impl Clone for AlterCheckPointError"],["impl Clone for CannotConnectError"],["impl Clone for CheckPoint"],["impl Clone for LocalChain"],["impl Clone for MissingGenesisError"],["impl Clone for Balance"],["impl Clone for BlockId"],["impl Clone for ConfirmationHeightAnchor"],["impl Clone for ConfirmationTimeHeightAnchor"],["impl Clone for DescriptorId"],["impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>"],["impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>"],["impl<A: Clone> Clone for ChainPosition<A>"],["impl<A: Clone> Clone for FullTxOut<A>"],["impl<A: Clone> Clone for ChangeSet<A>"],["impl<A: Clone> Clone for TxGraph<A>"],["impl<A: Clone, IA: Clone> Clone for ChangeSet<A, IA>"],["impl<D: Clone> Clone for SpkIterator<D>"],["impl<I: Clone> Clone for SpkTxOutIndex<I>"],["impl<K: Clone> Clone for InsertDescriptorError<K>"],["impl<K: Clone> Clone for ChangeSet<K>"],["impl<K: Clone> Clone for KeychainTxOutIndex<K>"],["impl<K: Clone> Clone for NoSuchKeychain<K>"],["impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>"]],
     "bdk_coin_select":[["impl Clone for ExcessStrategyKind"],["impl Clone for SelectionConstraint"],["impl Clone for CoinSelectorOpt"],["impl Clone for ExcessStrategy"],["impl Clone for Selection"],["impl Clone for SelectionError"],["impl Clone for WeightedValue"],["impl<'a> Clone for CoinSelector<'a>"]],
     "bdk_tmp_plan":[["impl Clone for SigningError"],["impl Clone for SatisfactionMaterial"],["impl<AK: Clone> Clone for Plan<AK>"],["impl<Ak: Clone> Clone for RequiredSignatures<Ak>"],["impl<Ak: Clone> Clone for PlanKey<Ak>"],["impl<Ak: Clone> Clone for Requirements<Ak>"],["impl<K: Clone> Clone for Assets<K>"]],
     "bdk_wallet":[["impl Clone for PkOrF"],["impl Clone for Satisfaction"],["impl Clone for SatisfiableItem"],["impl Clone for KeychainKind"],["impl Clone for Utxo"],["impl Clone for ScriptContextEnum"],["impl Clone for MiniscriptPsbtError"],["impl Clone for SignerContext"],["impl Clone for SignerId"],["impl Clone for TapLeavesOptions"],["impl Clone for ChangeSpendPolicy"],["impl Clone for TxOrdering"],["impl Clone for Condition"],["impl Clone for Policy"],["impl Clone for PrivateKeyGenerateOptions"],["impl Clone for LocalOutput"],["impl Clone for WeightedUtxo"],["impl Clone for BranchAndBoundCoinSelection"],["impl Clone for LargestFirstCoinSelection"],["impl Clone for OldestFirstCoinSelection"],["impl Clone for SignOptions"],["impl Clone for SignerOrdering"],["impl Clone for SignersContainer"],["impl Clone for Update"],["impl<'a> Clone for BuildSatisfaction<'a>"],["impl<'a, Cs: Clone> Clone for TxBuilder<'a, Cs>"],["impl<K: Clone, Ctx: ScriptContext> Clone for GeneratedKey<K, Ctx>"],["impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>"]],
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js
    index 7c2e76cd73..86f9895f0f 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl Eq for ConfirmationTime"],["impl Eq for CalculateFeeError"],["impl Eq for Balance"],["impl Eq for BlockId"],["impl Eq for ConfirmationHeightAnchor"],["impl Eq for ConfirmationTimeHeightAnchor"],["impl Eq for DescriptorId"],["impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>"],["impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>"],["impl<A: Eq> Eq for ChainPosition<A>"],["impl<A: Eq> Eq for FullTxOut<A>"],["impl<K: Eq> Eq for NoSuchKeychain<K>"]],
    +"bdk_chain":[["impl Eq for ConfirmationTime"],["impl Eq for CalculateFeeError"],["impl Eq for Balance"],["impl Eq for BlockId"],["impl Eq for ConfirmationHeightAnchor"],["impl Eq for ConfirmationTimeHeightAnchor"],["impl Eq for DescriptorId"],["impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>"],["impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>"],["impl<A: Eq> Eq for ChainPosition<A>"],["impl<A: Eq> Eq for FullTxOut<A>"],["impl<K: Eq> Eq for NoSuchKeychain<K>"]],
     "bdk_coin_select":[["impl Eq for ExcessStrategyKind"],["impl Eq for SelectionConstraint"]],
     "bdk_wallet":[["impl Eq for PkOrF"],["impl Eq for PolicyError"],["impl Eq for Satisfaction"],["impl Eq for SatisfiableItem"],["impl Eq for KeychainKind"],["impl Eq for Utxo"],["impl Eq for ScriptContextEnum"],["impl Eq for SignerContext"],["impl Eq for SignerId"],["impl Eq for TapLeavesOptions"],["impl Eq for ChangeSpendPolicy"],["impl Eq for Condition"],["impl Eq for Policy"],["impl Eq for LocalOutput"],["impl Eq for WeightedUtxo"],["impl Eq for SignerOrdering"],["impl Eq for AddressInfo"]],
     "example_cli":[["impl Eq for Keychain"]]
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js
    index 9c131dbef2..54c63e1495 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl PartialEq for ConfirmationTime"],["impl PartialEq for ApplyHeaderError"],["impl PartialEq for CalculateFeeError"],["impl PartialEq for Balance"],["impl PartialEq for AlterCheckPointError"],["impl PartialEq for CannotConnectError"],["impl PartialEq for CheckPoint"],["impl PartialEq for LocalChain"],["impl PartialEq for MissingGenesisError"],["impl PartialEq for BlockId"],["impl PartialEq for ConfirmationHeightAnchor"],["impl PartialEq for ConfirmationTimeHeightAnchor"],["impl PartialEq for DescriptorId"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for TxNode<'a, T, A>"],["impl<A: PartialEq> PartialEq for ChainPosition<A>"],["impl<A: PartialEq> PartialEq for FullTxOut<A>"],["impl<A: PartialEq> PartialEq for ChangeSet<A>"],["impl<A: PartialEq> PartialEq for TxGraph<A>"],["impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>"],["impl<K: PartialEq> PartialEq for InsertDescriptorError<K>"],["impl<K: PartialEq> PartialEq for ChangeSet<K>"],["impl<K: PartialEq> PartialEq for NoSuchKeychain<K>"],["impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>"]],
    +"bdk_chain":[["impl PartialEq for ConfirmationTime"],["impl PartialEq for ApplyHeaderError"],["impl PartialEq for CalculateFeeError"],["impl PartialEq for AlterCheckPointError"],["impl PartialEq for CannotConnectError"],["impl PartialEq for CheckPoint"],["impl PartialEq for LocalChain"],["impl PartialEq for MissingGenesisError"],["impl PartialEq for Balance"],["impl PartialEq for BlockId"],["impl PartialEq for ConfirmationHeightAnchor"],["impl PartialEq for ConfirmationTimeHeightAnchor"],["impl PartialEq for DescriptorId"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for TxNode<'a, T, A>"],["impl<A: PartialEq> PartialEq for ChainPosition<A>"],["impl<A: PartialEq> PartialEq for FullTxOut<A>"],["impl<A: PartialEq> PartialEq for ChangeSet<A>"],["impl<A: PartialEq> PartialEq for TxGraph<A>"],["impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>"],["impl<K: PartialEq> PartialEq for InsertDescriptorError<K>"],["impl<K: PartialEq> PartialEq for ChangeSet<K>"],["impl<K: PartialEq> PartialEq for NoSuchKeychain<K>"],["impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>"]],
     "bdk_coin_select":[["impl PartialEq for ExcessStrategyKind"],["impl PartialEq for SelectionConstraint"]],
     "bdk_wallet":[["impl PartialEq for PkOrF"],["impl PartialEq for PolicyError"],["impl PartialEq for Satisfaction"],["impl PartialEq for SatisfiableItem"],["impl PartialEq for KeychainKind"],["impl PartialEq for Utxo"],["impl PartialEq for ScriptContextEnum"],["impl PartialEq for SignerContext"],["impl PartialEq for SignerId"],["impl PartialEq for TapLeavesOptions"],["impl PartialEq for ChangeSpendPolicy"],["impl PartialEq for Condition"],["impl PartialEq for Policy"],["impl PartialEq for LocalOutput"],["impl PartialEq for WeightedUtxo"],["impl PartialEq for SignerOrdering"],["impl PartialEq for AddressInfo"]],
     "example_cli":[["impl PartialEq for Keychain"]],
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js
    index dbd166d78e..74f23a71da 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js
    @@ -1,4 +1,4 @@
     (function() {var implementors = {
     "bdk_chain":[["impl AsRef<[u8; 32]> for DescriptorId"],["impl AsRef<[u8]> for DescriptorId"],["impl<A> AsRef<TxGraph<A>> for TxGraph<A>"],["impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>"]],
    -"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]]
    +"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js
    index 3554e8e322..89be7ace65 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js
    @@ -1,8 +1,8 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl From<(&u32, &BlockHash)> for BlockId"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<ChainPosition<ConfirmationTimeHeightAnchor>> for ConfirmationTime"],["impl From<BlockId> for (u32, BlockHash)"],["impl From<DescriptorId> for Hash"],["impl From<Hash> for DescriptorId"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>"],["impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>"],["impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>"],["impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>"]],
    +"bdk_chain":[["impl From<(&u32, &BlockHash)> for BlockId"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<ChainPosition<ConfirmationTimeHeightAnchor>> for ConfirmationTime"],["impl From<BlockId> for (u32, BlockHash)"],["impl From<DescriptorId> for Hash"],["impl From<Hash> for DescriptorId"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>"],["impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>"],["impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>"],["impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>"]],
     "bdk_coin_select":[["impl From<usize> for BnbLimit"],["impl From<Duration> for BnbLimit"]],
     "bdk_file_store":[["impl From<Error> for FileError"],["impl From<Error> for IterError"]],
     "bdk_tmp_plan":[["impl From<Error> for SigningError"],["impl From<P2wpkhError> for SigningError"],["impl From<TaprootError> for SigningError"]],
    -"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<KeyError> for Error"],["impl From<Error> for CreateTxError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<bool> for Satisfaction"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<SyncResult> for Update"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Error> for CreateTxError"],["impl From<Fingerprint> for SignerId"],["impl From<Hash> for SignerId"],["impl From<HexToBytesError> for Error"],["impl From<ParsePublicKeyError> for Error"],["impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>"]],
    +"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<KeyError> for Error"],["impl From<Error> for CreateTxError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<bool> for Satisfaction"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Error> for CreateTxError"],["impl From<Fingerprint> for SignerId"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<Hash> for SignerId"],["impl From<HexToBytesError> for Error"],["impl From<ParsePublicKeyError> for Error"],["impl From<SyncResult> for Update"],["impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>"]],
     "example_bitcoind_rpc_polling":[["impl From<RpcArgs> for Auth"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/default/trait.Default.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/default/trait.Default.js
    index 89a5fbe015..66ce46fbb0 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/default/trait.Default.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/default/trait.Default.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl Default for Balance"],["impl Default for BlockId"],["impl Default for ConfirmationHeightAnchor"],["impl Default for ConfirmationTimeHeightAnchor"],["impl<A> Default for ChangeSet<A>"],["impl<A> Default for TxGraph<A>"],["impl<A, I: Default> Default for IndexedTxGraph<A, I>"],["impl<A, IA: Default> Default for ChangeSet<A, IA>"],["impl<I> Default for SpkTxOutIndex<I>"],["impl<K> Default for ChangeSet<K>"],["impl<K> Default for KeychainTxOutIndex<K>"],["impl<K, A> Default for CombinedChangeSet<K, A>"]],
    +"bdk_chain":[["impl Default for Balance"],["impl Default for BlockId"],["impl Default for ConfirmationHeightAnchor"],["impl Default for ConfirmationTimeHeightAnchor"],["impl<A> Default for ChangeSet<A>"],["impl<A> Default for TxGraph<A>"],["impl<A, I: Default> Default for IndexedTxGraph<A, I>"],["impl<A, IA: Default> Default for ChangeSet<A, IA>"],["impl<I> Default for SpkTxOutIndex<I>"],["impl<K> Default for ChangeSet<K>"],["impl<K> Default for KeychainTxOutIndex<K>"],["impl<K, A> Default for CombinedChangeSet<K, A>"]],
     "bdk_tmp_plan":[["impl Default for SatisfactionMaterial"],["impl<Ak> Default for RequiredSignatures<Ak>"],["impl<Ak> Default for Requirements<Ak>"],["impl<K> Default for Assets<K>"]],
     "bdk_wallet":[["impl Default for TapLeavesOptions"],["impl Default for ChangeSpendPolicy"],["impl Default for TxOrdering"],["impl Default for Condition"],["impl Default for PrivateKeyGenerateOptions"],["impl Default for BranchAndBoundCoinSelection"],["impl Default for LargestFirstCoinSelection"],["impl Default for OldestFirstCoinSelection"],["impl Default for SignOptions"],["impl Default for SignerOrdering"],["impl Default for SignersContainer"],["impl Default for Update"]],
     "example_cli":[["impl Default for CoinSelectionAlgo"]]
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js
    index c6811abee1..8d4f54496f 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl Error for ApplyHeaderError"],["impl Error for CalculateFeeError"],["impl Error for AlterCheckPointError"],["impl Error for CannotConnectError"],["impl Error for MissingGenesisError"],["impl<K: Debug> Error for InsertDescriptorError<K>"]],
    +"bdk_chain":[["impl Error for ApplyHeaderError"],["impl Error for CalculateFeeError"],["impl Error for AlterCheckPointError"],["impl Error for CannotConnectError"],["impl Error for MissingGenesisError"],["impl<K: Debug> Error for InsertDescriptorError<K>"]],
     "bdk_coin_select":[["impl Error for SelectionError"]],
     "bdk_file_store":[["impl Error for FileError"],["impl Error for IterError"],["impl<C: Debug> Error for AggregateChangesetsError<C>"]],
     "bdk_sqlite":[["impl Error for Error"]],
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js
    index eb6621cfcb..0daf848774 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js
    @@ -1,6 +1,6 @@
     (function() {var implementors = {
     "bdk_bitcoind_rpc":[["impl<B: Debug> Debug for BlockEvent<B>"]],
    -"bdk_chain":[["impl Debug for ConfirmationTime"],["impl Debug for ApplyHeaderError"],["impl Debug for CalculateFeeError"],["impl Debug for Balance"],["impl Debug for AlterCheckPointError"],["impl Debug for CannotConnectError"],["impl Debug for CheckPoint"],["impl Debug for LocalChain"],["impl Debug for MissingGenesisError"],["impl Debug for BlockId"],["impl Debug for ConfirmationHeightAnchor"],["impl Debug for ConfirmationTimeHeightAnchor"],["impl Debug for DescriptorId"],["impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>"],["impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl<A: Debug> Debug for FullTxOut<A>"],["impl<A: Debug> Debug for ChangeSet<A>"],["impl<A: Debug> Debug for TxGraph<A>"],["impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>"],["impl<A: Debug, IA: Debug> Debug for ChangeSet<A, IA>"],["impl<I: Debug> Debug for SpkTxOutIndex<I>"],["impl<K: Debug> Debug for InsertDescriptorError<K>"],["impl<K: Debug> Debug for ChangeSet<K>"],["impl<K: Debug> Debug for KeychainTxOutIndex<K>"],["impl<K: Debug> Debug for NoSuchKeychain<K>"],["impl<K: Debug, A: Debug> Debug for CombinedChangeSet<K, A>"]],
    +"bdk_chain":[["impl Debug for ConfirmationTime"],["impl Debug for ApplyHeaderError"],["impl Debug for CalculateFeeError"],["impl Debug for AlterCheckPointError"],["impl Debug for CannotConnectError"],["impl Debug for CheckPoint"],["impl Debug for LocalChain"],["impl Debug for MissingGenesisError"],["impl Debug for Balance"],["impl Debug for BlockId"],["impl Debug for ConfirmationHeightAnchor"],["impl Debug for ConfirmationTimeHeightAnchor"],["impl Debug for DescriptorId"],["impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>"],["impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl<A: Debug> Debug for FullTxOut<A>"],["impl<A: Debug> Debug for ChangeSet<A>"],["impl<A: Debug> Debug for TxGraph<A>"],["impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>"],["impl<A: Debug, IA: Debug> Debug for ChangeSet<A, IA>"],["impl<I: Debug> Debug for SpkTxOutIndex<I>"],["impl<K: Debug> Debug for InsertDescriptorError<K>"],["impl<K: Debug> Debug for ChangeSet<K>"],["impl<K: Debug> Debug for KeychainTxOutIndex<K>"],["impl<K: Debug> Debug for NoSuchKeychain<K>"],["impl<K: Debug, A: Debug> Debug for CombinedChangeSet<K, A>"]],
     "bdk_coin_select":[["impl Debug for ExcessStrategyKind"],["impl Debug for SelectionConstraint"],["impl Debug for CoinSelectorOpt"],["impl Debug for ExcessStrategy"],["impl Debug for Selection"],["impl Debug for SelectionError"],["impl Debug for WeightedValue"],["impl<'a> Debug for CoinSelector<'a>"]],
     "bdk_electrum":[["impl<E: Debug> Debug for BdkElectrumClient<E>"]],
     "bdk_file_store":[["impl Debug for FileError"],["impl Debug for IterError"],["impl<C> Debug for Store<C>
    where\n C: Sync + Send + Debug,
    "],["impl<C: Debug> Debug for AggregateChangesetsError<C>"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js index a1200ec5c1..5e1499476f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Display for ApplyHeaderError"],["impl Display for CalculateFeeError"],["impl Display for Balance"],["impl Display for AlterCheckPointError"],["impl Display for CannotConnectError"],["impl Display for MissingGenesisError"],["impl Display for DescriptorId"],["impl<K: Debug> Display for InsertDescriptorError<K>"],["impl<K: Debug> Display for NoSuchKeychain<K>"]], +"bdk_chain":[["impl Display for ApplyHeaderError"],["impl Display for CalculateFeeError"],["impl Display for AlterCheckPointError"],["impl Display for CannotConnectError"],["impl Display for MissingGenesisError"],["impl Display for Balance"],["impl Display for DescriptorId"],["impl<K: Debug> Display for InsertDescriptorError<K>"],["impl<K: Debug> Display for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl Display for ExcessStrategyKind"],["impl Display for SelectionConstraint"],["impl Display for SelectionError"]], "bdk_file_store":[["impl Display for FileError"],["impl Display for IterError"],["impl<C> Display for AggregateChangesetsError<C>"]], "bdk_sqlite":[["impl Display for Error"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js index f667ceeaae..9a261b9ac5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Freeze for Emitter<'c, C>",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Freeze for BlockEvent<B>
    where\n B: Freeze,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Freeze for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Freeze for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Freeze for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Freeze for TxAncestors<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Freeze for ChainPosition<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Freeze for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Freeze for FullTxOut<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Freeze for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>
    where\n I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for ChangeSet<A, IA>
    where\n IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Freeze for SpkIterator<D>
    where\n D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !Freeze for InsertDescriptorError<K>",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Freeze for ChangeSet<K>",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for NoSuchKeychain<K>
    where\n K: Freeze,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K> Freeze for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Freeze for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Freeze for CombinedChangeSet<K, A>",1,["bdk_chain::changeset::CombinedChangeSet"]]], +"bdk_chain":[["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Freeze for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Freeze for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Freeze for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Freeze for Balance",1,["bdk_chain::balance::Balance"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Freeze for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Freeze for TxAncestors<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Freeze for ChainPosition<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Freeze for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Freeze for FullTxOut<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Freeze for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>
    where\n I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for ChangeSet<A, IA>
    where\n IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Freeze for SpkIterator<D>
    where\n D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::indexer::spk_txout::SpkTxOutIndex"]],["impl<K> !Freeze for InsertDescriptorError<K>",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Freeze for ChangeSet<K>",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Freeze for NoSuchKeychain<K>
    where\n K: Freeze,
    ",1,["bdk_chain::indexer::keychain_txout::NoSuchKeychain"]],["impl<K> Freeze for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Freeze for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Freeze for CombinedChangeSet<K, A>",1,["bdk_chain::changeset::CombinedChangeSet"]]], "bdk_coin_select":[["impl Freeze for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Freeze for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Freeze for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Freeze for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Freeze for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Freeze for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Freeze for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Freeze for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Freeze for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Freeze for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> Freeze for BnbIter<'c, 'f, S>
    where\n S: Freeze,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Freeze for Bnb<'c, S>
    where\n S: Freeze,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Freeze for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> !Freeze for BdkElectrumClient<E>",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Freeze for ElectrumFullScanResult<K>",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Freeze for FileError",1,["bdk_file_store::FileError"]],["impl Freeze for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Freeze for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Freeze for AggregateChangesetsError<C>
    where\n C: Freeze,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Freeze for Store<C>",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js index dcd75d02d9..2dde1a23db 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Send for Emitter<'c, C>
    where\n C: Sync,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Send for BlockEvent<B>
    where\n B: Send,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Send for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Send for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Send for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Send for TxNode<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Send for TxAncestors<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Send for ChainPosition<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Send for SyncResult<A>
    where\n A: Send,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Send for FullTxOut<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Send for ChangeSet<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Send for TxGraph<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Send for IndexedTxGraph<A, I>
    where\n I: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for ChangeSet<A, IA>
    where\n IA: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Send for SpkIterator<D>
    where\n D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Send for SpkTxOutIndex<I>
    where\n I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Send for InsertDescriptorError<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Send for ChangeSet<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Send for KeychainTxOutIndex<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for NoSuchKeychain<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K> Send for FullScanRequest<K>
    where\n K: Send,
    ",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Send for FullScanResult<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Send for CombinedChangeSet<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], +"bdk_chain":[["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Send for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Send for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Send for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Send for Balance",1,["bdk_chain::balance::Balance"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Send for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Send for TxNode<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Send for TxAncestors<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Send for ChainPosition<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Send for SyncResult<A>
    where\n A: Send,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Send for FullTxOut<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Send for ChangeSet<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Send for TxGraph<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Send for IndexedTxGraph<A, I>
    where\n I: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for ChangeSet<A, IA>
    where\n IA: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Send for SpkIterator<D>
    where\n D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Send for SpkTxOutIndex<I>
    where\n I: Send,
    ",1,["bdk_chain::indexer::spk_txout::SpkTxOutIndex"]],["impl<K> Send for InsertDescriptorError<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Send for ChangeSet<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl<K> Send for KeychainTxOutIndex<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Send for NoSuchKeychain<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::NoSuchKeychain"]],["impl<K> Send for FullScanRequest<K>
    where\n K: Send,
    ",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Send for FullScanResult<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Send for CombinedChangeSet<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], "bdk_coin_select":[["impl Send for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Send for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Send for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Send for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Send for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Send for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Send for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Send for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Send for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Send for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !Send for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Send for Bnb<'c, S>
    where\n S: Send,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Send for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> Send for BdkElectrumClient<E>
    where\n E: Send,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Send for ElectrumFullScanResult<K>
    where\n K: Send,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Send for FileError",1,["bdk_file_store::FileError"]],["impl Send for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Send for EntryIter<'t, T>
    where\n T: Send,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Send for AggregateChangesetsError<C>
    where\n C: Send,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Send for Store<C>",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js index a4711a3ab7..0b94f78118 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for ApplyHeaderError"],["impl StructuralPartialEq for CalculateFeeError"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for AlterCheckPointError"],["impl StructuralPartialEq for CannotConnectError"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for MissingGenesisError"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationHeightAnchor"],["impl StructuralPartialEq for ConfirmationTimeHeightAnchor"],["impl StructuralPartialEq for DescriptorId"],["impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>"],["impl<A> StructuralPartialEq for ChainPosition<A>"],["impl<A> StructuralPartialEq for FullTxOut<A>"],["impl<A> StructuralPartialEq for ChangeSet<A>"],["impl<A> StructuralPartialEq for TxGraph<A>"],["impl<A, IA> StructuralPartialEq for ChangeSet<A, IA>"],["impl<K> StructuralPartialEq for InsertDescriptorError<K>"],["impl<K> StructuralPartialEq for ChangeSet<K>"],["impl<K> StructuralPartialEq for NoSuchKeychain<K>"],["impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>"]], +"bdk_chain":[["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for ApplyHeaderError"],["impl StructuralPartialEq for CalculateFeeError"],["impl StructuralPartialEq for AlterCheckPointError"],["impl StructuralPartialEq for CannotConnectError"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for MissingGenesisError"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationHeightAnchor"],["impl StructuralPartialEq for ConfirmationTimeHeightAnchor"],["impl StructuralPartialEq for DescriptorId"],["impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>"],["impl<A> StructuralPartialEq for ChainPosition<A>"],["impl<A> StructuralPartialEq for FullTxOut<A>"],["impl<A> StructuralPartialEq for ChangeSet<A>"],["impl<A> StructuralPartialEq for TxGraph<A>"],["impl<A, IA> StructuralPartialEq for ChangeSet<A, IA>"],["impl<K> StructuralPartialEq for InsertDescriptorError<K>"],["impl<K> StructuralPartialEq for ChangeSet<K>"],["impl<K> StructuralPartialEq for NoSuchKeychain<K>"],["impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>"]], "bdk_coin_select":[["impl StructuralPartialEq for ExcessStrategyKind"],["impl StructuralPartialEq for SelectionConstraint"]], "bdk_wallet":[["impl StructuralPartialEq for PkOrF"],["impl StructuralPartialEq for PolicyError"],["impl StructuralPartialEq for Satisfaction"],["impl StructuralPartialEq for SatisfiableItem"],["impl StructuralPartialEq for KeychainKind"],["impl StructuralPartialEq for Utxo"],["impl StructuralPartialEq for ScriptContextEnum"],["impl StructuralPartialEq for SignerContext"],["impl StructuralPartialEq for SignerId"],["impl StructuralPartialEq for TapLeavesOptions"],["impl StructuralPartialEq for ChangeSpendPolicy"],["impl StructuralPartialEq for Condition"],["impl StructuralPartialEq for Policy"],["impl StructuralPartialEq for LocalOutput"],["impl StructuralPartialEq for WeightedUtxo"],["impl StructuralPartialEq for SignerOrdering"],["impl StructuralPartialEq for AddressInfo"]], "example_cli":[["impl StructuralPartialEq for Keychain"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js index 25e88be853..aa87ee7131 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Sync for Emitter<'c, C>
    where\n C: Sync,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Sync for BlockEvent<B>
    where\n B: Sync,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl !Sync for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Sync for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Sync for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Sync for TxAncestors<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Sync for ChainPosition<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Sync for SyncResult<A>
    where\n A: Sync,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Sync for FullTxOut<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Sync for ChangeSet<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Sync for TxGraph<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Sync for IndexedTxGraph<A, I>
    where\n I: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for ChangeSet<A, IA>
    where\n IA: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Sync for SpkIterator<D>
    where\n D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Sync for SpkTxOutIndex<I>
    where\n I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !Sync for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Sync for InsertDescriptorError<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Sync for ChangeSet<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Sync for KeychainTxOutIndex<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Sync for NoSuchKeychain<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K, A> Sync for FullScanResult<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Sync for CombinedChangeSet<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], +"bdk_chain":[["impl !Sync for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Sync for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Sync for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Sync for Balance",1,["bdk_chain::balance::Balance"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Sync for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Sync for TxAncestors<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Sync for ChainPosition<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Sync for SyncResult<A>
    where\n A: Sync,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Sync for FullTxOut<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Sync for ChangeSet<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Sync for TxGraph<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Sync for IndexedTxGraph<A, I>
    where\n I: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for ChangeSet<A, IA>
    where\n IA: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Sync for SpkIterator<D>
    where\n D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Sync for SpkTxOutIndex<I>
    where\n I: Sync,
    ",1,["bdk_chain::indexer::spk_txout::SpkTxOutIndex"]],["impl<K> !Sync for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Sync for InsertDescriptorError<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Sync for ChangeSet<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl<K> Sync for KeychainTxOutIndex<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Sync for NoSuchKeychain<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::NoSuchKeychain"]],["impl<K, A> Sync for FullScanResult<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Sync for CombinedChangeSet<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], "bdk_coin_select":[["impl Sync for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Sync for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Sync for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Sync for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Sync for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Sync for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Sync for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Sync for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Sync for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Sync for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !Sync for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Sync for Bnb<'c, S>
    where\n S: Sync,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Sync for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> Sync for BdkElectrumClient<E>
    where\n E: Sync,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Sync for ElectrumFullScanResult<K>
    where\n K: Sync,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Sync for FileError",1,["bdk_file_store::FileError"]],["impl Sync for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Sync for EntryIter<'t, T>
    where\n T: Sync,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Sync for AggregateChangesetsError<C>
    where\n C: Sync,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Sync for Store<C>",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js index ebd3bf3182..3efefc5f12 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Unpin for Emitter<'c, C>",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Unpin for BlockEvent<B>
    where\n B: Unpin,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Unpin for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Unpin for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Unpin for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Unpin for TxAncestors<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Unpin for ChainPosition<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Unpin for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Unpin for FullTxOut<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Unpin for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>
    where\n I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for ChangeSet<A, IA>
    where\n IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Unpin for SpkIterator<D>
    where\n D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Unpin for SpkTxOutIndex<I>
    where\n I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Unpin for InsertDescriptorError<K>
    where\n K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Unpin for ChangeSet<K>",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Unpin for KeychainTxOutIndex<K>
    where\n K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for NoSuchKeychain<K>
    where\n K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K> Unpin for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Unpin for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Unpin for CombinedChangeSet<K, A>",1,["bdk_chain::changeset::CombinedChangeSet"]]], +"bdk_chain":[["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Unpin for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Unpin for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Unpin for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Unpin for Balance",1,["bdk_chain::balance::Balance"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Unpin for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Unpin for TxAncestors<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Unpin for ChainPosition<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Unpin for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Unpin for FullTxOut<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Unpin for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>
    where\n I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for ChangeSet<A, IA>
    where\n IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Unpin for SpkIterator<D>
    where\n D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Unpin for SpkTxOutIndex<I>
    where\n I: Unpin,
    ",1,["bdk_chain::indexer::spk_txout::SpkTxOutIndex"]],["impl<K> Unpin for InsertDescriptorError<K>
    where\n K: Unpin,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Unpin for ChangeSet<K>",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl<K> Unpin for KeychainTxOutIndex<K>
    where\n K: Unpin,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Unpin for NoSuchKeychain<K>
    where\n K: Unpin,
    ",1,["bdk_chain::indexer::keychain_txout::NoSuchKeychain"]],["impl<K> Unpin for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Unpin for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> Unpin for CombinedChangeSet<K, A>",1,["bdk_chain::changeset::CombinedChangeSet"]]], "bdk_coin_select":[["impl Unpin for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Unpin for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Unpin for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Unpin for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Unpin for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Unpin for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Unpin for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Unpin for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Unpin for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Unpin for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> Unpin for BnbIter<'c, 'f, S>
    where\n S: Unpin,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Unpin for Bnb<'c, S>
    where\n S: Unpin,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Unpin for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> Unpin for BdkElectrumClient<E>
    where\n E: Unpin,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Unpin for ElectrumFullScanResult<K>",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Unpin for FileError",1,["bdk_file_store::FileError"]],["impl Unpin for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Unpin for EntryIter<'t, T>
    where\n T: Unpin,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Unpin for AggregateChangesetsError<C>
    where\n C: Unpin,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Unpin for Store<C>
    where\n C: Unpin,
    ",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/ops/arith/trait.Add.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/ops/arith/trait.Add.js index 14e2ce5801..06b9441e23 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/ops/arith/trait.Add.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/ops/arith/trait.Add.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bdk_chain":[["impl Add for Balance"]] +"bdk_chain":[["impl Add for Balance"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 59d541951f..92421c02ce 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> RefUnwindSafe for Emitter<'c, C>
    where\n C: RefUnwindSafe,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> RefUnwindSafe for BlockEvent<B>
    where\n B: RefUnwindSafe,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl !RefUnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl RefUnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl RefUnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> RefUnwindSafe for TxAncestors<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> RefUnwindSafe for ChainPosition<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> RefUnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> RefUnwindSafe for FullTxOut<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> RefUnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> RefUnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>
    where\n I: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for ChangeSet<A, IA>
    where\n IA: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> RefUnwindSafe for SpkIterator<D>
    where\n D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> RefUnwindSafe for SpkTxOutIndex<I>
    where\n I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !RefUnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> RefUnwindSafe for InsertDescriptorError<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> RefUnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for NoSuchKeychain<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> RefUnwindSafe for CombinedChangeSet<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], +"bdk_chain":[["impl !RefUnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl RefUnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl RefUnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::balance::Balance"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl RefUnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> RefUnwindSafe for TxAncestors<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> RefUnwindSafe for ChainPosition<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> RefUnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> RefUnwindSafe for FullTxOut<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> RefUnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> RefUnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>
    where\n I: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for ChangeSet<A, IA>
    where\n IA: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> RefUnwindSafe for SpkIterator<D>
    where\n D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> RefUnwindSafe for SpkTxOutIndex<I>
    where\n I: RefUnwindSafe,
    ",1,["bdk_chain::indexer::spk_txout::SpkTxOutIndex"]],["impl<K> !RefUnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> RefUnwindSafe for InsertDescriptorError<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> RefUnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for NoSuchKeychain<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::NoSuchKeychain"]],["impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> RefUnwindSafe for CombinedChangeSet<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], "bdk_coin_select":[["impl RefUnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl RefUnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl RefUnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl RefUnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl RefUnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl RefUnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl RefUnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl RefUnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl RefUnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> RefUnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !RefUnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> RefUnwindSafe for Bnb<'c, S>
    where\n S: RefUnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl RefUnwindSafe for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> RefUnwindSafe for BdkElectrumClient<E>
    where\n E: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> RefUnwindSafe for ElectrumFullScanResult<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl !RefUnwindSafe for FileError",1,["bdk_file_store::FileError"]],["impl !RefUnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> RefUnwindSafe for EntryIter<'t, T>
    where\n T: RefUnwindSafe,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> !RefUnwindSafe for AggregateChangesetsError<C>",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> RefUnwindSafe for Store<C>
    where\n C: RefUnwindSafe,
    ",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index e96edf2a62..264add5d2b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> UnwindSafe for Emitter<'c, C>
    where\n C: RefUnwindSafe,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> UnwindSafe for BlockEvent<B>
    where\n B: UnwindSafe,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl !UnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl UnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl UnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> UnwindSafe for TxAncestors<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> UnwindSafe for ChainPosition<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> UnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> UnwindSafe for FullTxOut<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> UnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> UnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>
    where\n I: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for ChangeSet<A, IA>
    where\n IA: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> UnwindSafe for SpkIterator<D>
    where\n D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> UnwindSafe for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !UnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> UnwindSafe for InsertDescriptorError<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> UnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> UnwindSafe for NoSuchKeychain<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K, A> UnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> UnwindSafe for CombinedChangeSet<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], +"bdk_chain":[["impl !UnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl UnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl UnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl UnwindSafe for Balance",1,["bdk_chain::balance::Balance"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl UnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> UnwindSafe for TxAncestors<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> UnwindSafe for ChainPosition<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> UnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> UnwindSafe for FullTxOut<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> UnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> UnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>
    where\n I: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for ChangeSet<A, IA>
    where\n IA: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> UnwindSafe for SpkIterator<D>
    where\n D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> UnwindSafe for SpkTxOutIndex<I>",1,["bdk_chain::indexer::spk_txout::SpkTxOutIndex"]],["impl<K> !UnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> UnwindSafe for InsertDescriptorError<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> UnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> UnwindSafe for NoSuchKeychain<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::NoSuchKeychain"]],["impl<K, A> UnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<K, A> UnwindSafe for CombinedChangeSet<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::changeset::CombinedChangeSet"]]], "bdk_coin_select":[["impl UnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl UnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl UnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl UnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl UnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl UnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl UnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl UnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl UnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> UnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !UnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> UnwindSafe for Bnb<'c, S>
    where\n S: UnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl UnwindSafe for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> UnwindSafe for BdkElectrumClient<E>
    where\n E: UnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> UnwindSafe for ElectrumFullScanResult<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl !UnwindSafe for FileError",1,["bdk_file_store::FileError"]],["impl !UnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> !UnwindSafe for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> !UnwindSafe for AggregateChangesetsError<C>",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> UnwindSafe for Store<C>
    where\n C: UnwindSafe,
    ",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/de/trait.Deserialize.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/de/trait.Deserialize.js index 70c21a639a..f91c4a8883 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/de/trait.Deserialize.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/de/trait.Deserialize.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl<'de> Deserialize<'de> for ConfirmationTime"],["impl<'de> Deserialize<'de> for Balance"],["impl<'de> Deserialize<'de> for BlockId"],["impl<'de> Deserialize<'de> for ConfirmationHeightAnchor"],["impl<'de> Deserialize<'de> for ConfirmationTimeHeightAnchor"],["impl<'de> Deserialize<'de> for DescriptorId"],["impl<'de, A> Deserialize<'de> for ChangeSet<A>
    where\n A: Ord + Deserialize<'de>,
    "],["impl<'de, A, IA> Deserialize<'de> for ChangeSet<A, IA>
    where\n A: Ord + Deserialize<'de>,\n IA: Deserialize<'de>,
    "],["impl<'de, K> Deserialize<'de> for ChangeSet<K>
    where\n K: Ord + Deserialize<'de>,
    "],["impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where\n A: Ord + Deserialize<'de>,\n K: Ord + Deserialize<'de>,
    "]], +"bdk_chain":[["impl<'de> Deserialize<'de> for ConfirmationTime"],["impl<'de> Deserialize<'de> for Balance"],["impl<'de> Deserialize<'de> for BlockId"],["impl<'de> Deserialize<'de> for ConfirmationHeightAnchor"],["impl<'de> Deserialize<'de> for ConfirmationTimeHeightAnchor"],["impl<'de> Deserialize<'de> for DescriptorId"],["impl<'de, A> Deserialize<'de> for ChangeSet<A>
    where\n A: Ord + Deserialize<'de>,
    "],["impl<'de, A, IA> Deserialize<'de> for ChangeSet<A, IA>
    where\n A: Ord + Deserialize<'de>,\n IA: Deserialize<'de>,
    "],["impl<'de, K> Deserialize<'de> for ChangeSet<K>
    where\n K: Ord + Deserialize<'de>,
    "],["impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where\n A: Ord + Deserialize<'de>,\n K: Ord + Deserialize<'de>,
    "]], "bdk_wallet":[["impl<'de> Deserialize<'de> for KeychainKind"],["impl<'de> Deserialize<'de> for LocalOutput"],["impl<'de> Deserialize<'de> for FullyNodedExport"]], "example_cli":[["impl<'de> Deserialize<'de> for Keychain"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/ser/trait.Serialize.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/ser/trait.Serialize.js index 74fc76de17..920a0baa96 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/ser/trait.Serialize.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/serde/ser/trait.Serialize.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Serialize for ConfirmationTime"],["impl Serialize for Balance"],["impl Serialize for BlockId"],["impl Serialize for ConfirmationHeightAnchor"],["impl Serialize for ConfirmationTimeHeightAnchor"],["impl Serialize for DescriptorId"],["impl<A> Serialize for ChangeSet<A>
    where\n A: Ord + Serialize,
    "],["impl<A, IA> Serialize for ChangeSet<A, IA>
    where\n A: Ord + Serialize,\n IA: Serialize,
    "],["impl<K> Serialize for ChangeSet<K>
    where\n K: Ord + Serialize,
    "],["impl<K, A> Serialize for CombinedChangeSet<K, A>
    where\n A: Ord + Serialize,\n K: Ord + Serialize,
    "]], +"bdk_chain":[["impl Serialize for ConfirmationTime"],["impl Serialize for Balance"],["impl Serialize for BlockId"],["impl Serialize for ConfirmationHeightAnchor"],["impl Serialize for ConfirmationTimeHeightAnchor"],["impl Serialize for DescriptorId"],["impl<A> Serialize for ChangeSet<A>
    where\n A: Ord + Serialize,
    "],["impl<A, IA> Serialize for ChangeSet<A, IA>
    where\n A: Ord + Serialize,\n IA: Serialize,
    "],["impl<K> Serialize for ChangeSet<K>
    where\n K: Ord + Serialize,
    "],["impl<K, A> Serialize for CombinedChangeSet<K, A>
    where\n A: Ord + Serialize,\n K: Ord + Serialize,
    "]], "bdk_wallet":[["impl Serialize for PkOrF"],["impl Serialize for Satisfaction"],["impl Serialize for SatisfiableItem"],["impl Serialize for KeychainKind"],["impl Serialize for Condition"],["impl Serialize for Policy"],["impl Serialize for LocalOutput"],["impl Serialize for FullyNodedExport"]], "example_cli":[["impl Serialize for Keychain"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js index 344990e785..f0fdd99dbb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js @@ -1,4 +1,4 @@ (function() {var type_impls = { "bdk_chain":[["
    source§

    impl<K: Ord, V> Append for BTreeMap<K, V>

    source§

    fn append(&mut self, other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V> ⓘ

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V> ⓘ

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V> ⓘ

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V> ⓘ

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V> ⓘ

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V> ⓘ
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V> ⓘ
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A> ⓘ
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A> ⓘ

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A> ⓘ

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_chain::local_chain::ChangeSet"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_chain::local_chain::ChangeSet"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_chain::local_chain::ChangeSet"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A> ⓘ

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_chain::local_chain::ChangeSet"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_chain::local_chain::ChangeSet"]], -"bdk_wallet":[["
    source§

    impl<K, V> Append for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn append(&mut self, other: BTreeMap<K, V>)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl IntoAssets for BTreeMap<DescriptorPublicKey, DescriptorSecretKey>

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    ","IntoAssets","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"]] +"bdk_wallet":[["
    §

    impl<K, V> Append for BTreeMap<K, V>
    where\n K: Ord,

    §

    fn append(&mut self, other: BTreeMap<K, V>)

    Append another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl IntoAssets for BTreeMap<DescriptorPublicKey, DescriptorSecretKey>

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    ","IntoAssets","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/changeset/struct.CombinedChangeSet.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/changeset/struct.CombinedChangeSet.js index 2a22552ff1..0d3f1941eb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/changeset/struct.CombinedChangeSet.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/changeset/struct.CombinedChangeSet.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    source§

    impl<K, A> Append for CombinedChangeSet<K, A>
    where\n K: Ord,\n A: Anchor,

    source§

    fn append(&mut self, other: CombinedChangeSet<K, A>)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> Clone for CombinedChangeSet<K, A>
    where\n K: Clone,\n A: Clone,

    source§

    fn clone(&self) -> CombinedChangeSet<K, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> Debug for CombinedChangeSet<K, A>
    where\n K: Debug,\n A: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> Default for CombinedChangeSet<K, A>

    source§

    fn default() -> CombinedChangeSet<K, A>

    Returns the “default value” for a type. Read more
    ","Default","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where\n A: Ord + Deserialize<'de>,\n K: Ord + Deserialize<'de>,

    source§

    fn deserialize<__D>(\n __deserializer: __D\n) -> Result<CombinedChangeSet<K, A>, <__D as Deserializer<'de>>::Error>
    where\n __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

    source§

    fn from(chain: BTreeMap<u32, Option<BlockHash>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

    source§

    fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>

    source§

    fn from(indexer: ChangeSet<K>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> PartialEq for CombinedChangeSet<K, A>
    where\n K: PartialEq,\n A: PartialEq,

    source§

    fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> Serialize for CombinedChangeSet<K, A>
    where\n A: Ord + Serialize,\n K: Ord + Serialize,

    source§

    fn serialize<__S>(\n &self,\n __serializer: __S\n) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where\n __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::wallet::ChangeSet"],["
    source§

    impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>

    ","StructuralPartialEq","bdk_wallet::wallet::ChangeSet"]] +"bdk_wallet":[["
    §

    impl<K, A> Append for CombinedChangeSet<K, A>
    where\n K: Ord,\n A: Anchor,

    §

    fn append(&mut self, other: CombinedChangeSet<K, A>)

    Append another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Clone for CombinedChangeSet<K, A>
    where\n K: Clone,\n A: Clone,

    §

    fn clone(&self) -> CombinedChangeSet<K, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Debug for CombinedChangeSet<K, A>
    where\n K: Debug,\n A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Default for CombinedChangeSet<K, A>

    §

    fn default() -> CombinedChangeSet<K, A>

    Returns the “default value” for a type. Read more
    ","Default","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where\n A: Ord + Deserialize<'de>,\n K: Ord + Deserialize<'de>,

    §

    fn deserialize<__D>(\n __deserializer: __D\n) -> Result<CombinedChangeSet<K, A>, <__D as Deserializer<'de>>::Error>
    where\n __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

    §

    fn from(chain: BTreeMap<u32, Option<BlockHash>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

    §

    fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<ChangeSet<K>> for CombinedChangeSet<K, A>

    §

    fn from(indexer: ChangeSet<K>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> PartialEq for CombinedChangeSet<K, A>
    where\n K: PartialEq,\n A: PartialEq,

    §

    fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Serialize for CombinedChangeSet<K, A>
    where\n A: Ord + Serialize,\n K: Ord + Serialize,

    §

    fn serialize<__S>(\n &self,\n __serializer: __S\n) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where\n __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>

    ","StructuralPartialEq","bdk_wallet::wallet::ChangeSet"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js index 1f89605c1b..206b3dc046 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"example_cli":[["
    source§

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    ","AsRef>","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> Debug for IndexedTxGraph<A, I>
    where\n A: Debug,\n I: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> Default for IndexedTxGraph<A, I>
    where\n I: Default,

    source§

    fn default() -> IndexedTxGraph<A, I>

    Returns the “default value” for a type. Read more
    ","Default","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>

    Methods are available if the anchor (A) implements AnchorFromBlockPosition.

    \n
    source

    pub fn apply_block_relevant(\n &mut self,\n block: &Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height, filtering out those that are\nirrelevant.

    \n

    Each inserted transaction’s anchor will be constructed from\nAnchorFromBlockPosition::from_block_position.

    \n

    Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n
    source

    pub fn apply_block(\n &mut self,\n block: Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height.

    \n

    Each inserted transaction’s anchor will be constructed from\nAnchorFromBlockPosition::from_block_position.

    \n

    To only insert relevant transactions, use apply_block_relevant instead.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>

    source

    pub fn new(index: I) -> IndexedTxGraph<A, I>

    Construct a new IndexedTxGraph with a given index.

    \n
    source

    pub fn graph(&self) -> &TxGraph<A>

    Get a reference of the internal transaction graph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,

    source

    pub fn apply_changeset(\n &mut self,\n changeset: ChangeSet<A, <I as Indexer>::ChangeSet>\n)

    Applies the ChangeSet to the IndexedTxGraph.

    \n
    source

    pub fn initial_changeset(&self) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Determines the ChangeSet between self and an empty IndexedTxGraph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Append,

    source

    pub fn apply_update(\n &mut self,\n update: TxGraph<A>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply an update directly.

    \n

    update is a TxGraph<A> and the resultant changes is returned as ChangeSet.

    \n
    source

    pub fn insert_txout(\n &mut self,\n outpoint: OutPoint,\n txout: TxOut\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a floating txout of given outpoint.

    \n
    source

    pub fn insert_tx(\n &mut self,\n tx: Transaction\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert and index a transaction into the graph.

    \n
    source

    pub fn insert_anchor(\n &mut self,\n txid: Txid,\n anchor: A\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert an anchor for a given transaction.

    \n
    source

    pub fn insert_seen_at(\n &mut self,\n txid: Txid,\n seen_at: u64\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a unix timestamp of when a transaction is seen in the mempool.

    \n

    This is used for transaction conflict resolution in TxGraph where the transaction with\nthe later last-seen is prioritized.

    \n
    source

    pub fn batch_insert_relevant<'t>(\n &mut self,\n txs: impl IntoIterator<Item = (&'t Transaction, impl IntoIterator<Item = A>)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the Indexer::is_tx_relevant implementation of I. Irrelevant\ntransactions in txs will be ignored. txs do not need to be in topological order.

    \n
    source

    pub fn batch_insert_relevant_unconfirmed<'t>(\n &mut self,\n unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

    \n
    source

    pub fn batch_insert_unconfirmed(\n &mut self,\n txs: impl IntoIterator<Item = (Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

    \n

    To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

    \n
    ",0,"example_cli::KeychainTxGraph"]] +"example_cli":[["
    §

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    §

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    ","AsRef>","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> Debug for IndexedTxGraph<A, I>
    where\n A: Debug,\n I: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> Default for IndexedTxGraph<A, I>
    where\n I: Default,

    §

    fn default() -> IndexedTxGraph<A, I>

    Returns the “default value” for a type. Read more
    ","Default","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>

    pub fn new(index: I) -> IndexedTxGraph<A, I>

    Construct a new [IndexedTxGraph] with a given index.

    \n

    pub fn graph(&self) -> &TxGraph<A>

    Get a reference of the internal transaction graph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor + AnchorFromBlockPosition,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Append,

    Methods are available if the anchor (A) implements [AnchorFromBlockPosition].

    \n

    pub fn apply_block_relevant(\n &mut self,\n block: &Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height, filtering out those that are\nirrelevant.

    \n

    Each inserted transaction’s anchor will be constructed from\n[AnchorFromBlockPosition::from_block_position].

    \n

    Relevancy is determined by the internal [Indexer::is_tx_relevant] implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    pub fn apply_block(\n &mut self,\n block: Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height.

    \n

    Each inserted transaction’s anchor will be constructed from\n[AnchorFromBlockPosition::from_block_position].

    \n

    To only insert relevant transactions, use apply_block_relevant instead.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,

    pub fn apply_changeset(\n &mut self,\n changeset: ChangeSet<A, <I as Indexer>::ChangeSet>\n)

    Applies the [ChangeSet] to the [IndexedTxGraph].

    \n

    pub fn initial_changeset(&self) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Determines the [ChangeSet] between self and an empty [IndexedTxGraph].

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Append,

    pub fn apply_update(\n &mut self,\n update: TxGraph<A>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply an update directly.

    \n

    update is a [TxGraph<A>] and the resultant changes is returned as [ChangeSet].

    \n

    pub fn insert_txout(\n &mut self,\n outpoint: OutPoint,\n txout: TxOut\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a floating txout of given outpoint.

    \n

    pub fn insert_tx(\n &mut self,\n tx: Transaction\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert and index a transaction into the graph.

    \n

    pub fn insert_anchor(\n &mut self,\n txid: Txid,\n anchor: A\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert an anchor for a given transaction.

    \n

    pub fn insert_seen_at(\n &mut self,\n txid: Txid,\n seen_at: u64\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a unix timestamp of when a transaction is seen in the mempool.

    \n

    This is used for transaction conflict resolution in [TxGraph] where the transaction with\nthe later last-seen is prioritized.

    \n

    pub fn batch_insert_relevant<'t>(\n &mut self,\n txs: impl IntoIterator<Item = (&'t Transaction, impl IntoIterator<Item = A>)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the [Indexer::is_tx_relevant] implementation of I. Irrelevant\ntransactions in txs will be ignored. txs do not need to be in topological order.

    \n

    pub fn batch_insert_relevant_unconfirmed<'t>(\n &mut self,\n unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the internal [Indexer::is_tx_relevant] implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in [TxGraph] (refer to [TxGraph::insert_seen_at] for details).

    \n

    pub fn batch_insert_unconfirmed(\n &mut self,\n txs: impl IntoIterator<Item = (Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in [TxGraph] (refer to [TxGraph::insert_seen_at] for details).

    \n

    To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

    \n
    ",0,"example_cli::KeychainTxGraph"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js index 6a79f226e3..56184c4331 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    §

    impl<Pk> Clone for Descriptor<Pk>
    where\n Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Debug for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n
    §Examples
    \n
    use miniscript::descriptor::{Descriptor, DescriptorPublicKey};\nuse miniscript::bitcoin::secp256k1;\nuse std::str::FromStr;\n\n// test from bip 86\nlet secp = secp256k1::Secp256k1::verification_only();\nlet descriptor = Descriptor::<DescriptorPublicKey>::from_str(\"tr(xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\")\n    .expect(\"Valid ranged descriptor\");\nlet result = descriptor.at_derivation_index(0).unwrap().derived_descriptor(&secp).expect(\"Non-hardened derivation\");\nassert_eq!(result.to_string(), \"tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym\");
    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn plan<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a non-malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n

    pub fn plan_mall<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DescriptorPublicKey>

    pub fn is_deriveable(&self) -> bool

    👎Deprecated: use has_wildcards instead

    Whether or not the descriptor has any wildcards

    \n

    pub fn has_wildcard(&self) -> bool

    Whether or not the descriptor has any wildcards i.e. /*.

    \n

    pub fn at_derivation_index(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    Replaces all wildcards (i.e. /*) in the descriptor with a particular derivation index,\nturning it into a definite descriptor.

    \n
    §Errors
    \n
      \n
    • If index ≥ 2^31
    • \n
    \n

    pub fn derive(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    👎Deprecated: use at_derivation_index instead

    Deprecated name for Self::at_derivation_index.

    \n

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>,\n index: u32\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n

    This is a shorthand for:

    \n\n
        .expect(\"Valid ranged descriptor\");\nlet derived_descriptor = descriptor.at_derivation_index(index).unwrap().derived_descriptor(&secp).unwrap();
    \n

    and is only here really here for backwards compatbility.\nSee at_derivation_index and [derived_descriptor] for more documentation.

    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n

    pub fn parse_descriptor<C>(\n secp: &Secp256k1<C>,\n s: &str\n) -> Result<(Descriptor<DescriptorPublicKey>, BTreeMap<DescriptorPublicKey, DescriptorSecretKey>), Error>
    where\n C: Signing,

    Parse a descriptor that may contain secret keys

    \n

    Internally turns every secret key found into the corresponding public key and then returns a\na descriptor that only contains public keys and a map to lookup the secret key given a public key.

    \n

    pub fn to_string_with_secret(\n &self,\n key_map: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>\n) -> String

    Serialize a descriptor to string with its secret keys

    \n

    pub fn find_derivation_index_for_spk<C>(\n &self,\n secp: &Secp256k1<C>,\n script_pubkey: &Script,\n range: Range<u32>\n) -> Result<Option<(u32, Descriptor<PublicKey>)>, ConversionError>
    where\n C: Verification,

    Utility method for deriving the descriptor at each index in a range to find one matching\nscript_pubkey.

    \n

    If it finds a match then it returns the index it was derived at and the concrete\ndescriptor at that index. If the descriptor is non-derivable then it will simply check the\nscript pubkey against the descriptor and return it if it matches (in this case the index\nreturned will be meaningless).

    \n

    pub fn is_multipath(&self) -> bool

    Whether this descriptor contains a key that has multiple derivation paths.

    \n

    pub fn into_single_descriptors(\n self\n) -> Result<Vec<Descriptor<DescriptorPublicKey>>, Error>

    Get as many descriptors as different paths in this descriptor.

    \n

    For multipath descriptors it will return as many descriptors as there is\n“parallel” paths. For regular descriptors it will just return itself.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey + ToPublicKey,

    pub fn address(&self, network: Network) -> Result<Address, Error>

    Computes the Bitcoin address of the descriptor, if one exists

    \n

    Some descriptors like pk() don’t have an address.

    \n
    §Errors
    \n

    For raw/bare descriptors that don’t have an address.

    \n

    pub fn script_pubkey(&self) -> ScriptBuf

    Computes the scriptpubkey of the descriptor.

    \n

    pub fn unsigned_script_sig(&self) -> ScriptBuf

    Computes the scriptSig that will be in place for an unsigned input\nspending an output with this descriptor. For pre-segwit descriptors,\nwhich use the scriptSig for signatures, this returns the empty script.

    \n

    This is used in Segwit transactions to produce an unsigned transaction\nwhose txid will not change during signing (since only the witness data\nwill change).

    \n

    pub fn explicit_script(&self) -> Result<ScriptBuf, Error>

    Computes the the underlying script before any hashing is done. For\nBare, Pkh and Wpkh this is the scriptPubkey; for ShWpkh and Sh\nthis is the redeemScript; for the others it is the witness script.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn script_code(&self) -> Result<ScriptBuf, Error>

    Computes the scriptCode of a transaction output.

    \n

    The scriptCode is the Script of the previous transaction output being\nserialized in the sighash when evaluating a CHECKSIG & co. OP code.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn get_satisfaction<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn get_satisfaction_mall<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns a possilbly mallable satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn satisfy<S>(&self, txin: &mut TxIn, satisfier: S) -> Result<(), Error>
    where\n S: Satisfier<Pk>,

    Attempts to produce a non-malleable satisfying witness and scriptSig to spend an\noutput controlled by the given descriptor; add the data to a given\nTxIn output.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    pub fn new_pk(pk: Pk) -> Descriptor<Pk>

    Create a new pk descriptor

    \n

    pub fn new_pkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new PkH descriptor

    \n

    pub fn new_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new Wpkh descriptor\nWill return Err if uncompressed key is used

    \n

    pub fn new_sh_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wpkh from Pk.\nErrors when uncompressed keys are supplied

    \n

    pub fn new_sh(ms: Miniscript<Pk, Legacy>) -> Result<Descriptor<Pk>, Error>

    Create a new sh for a given redeem script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new wsh descriptor from witness script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_sh_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh descriptor with witness script\nErrors when miniscript exceeds resource limits under wsh context\nor does not type check at the top level

    \n

    pub fn new_bare(ms: Miniscript<Pk, BareCtx>) -> Result<Descriptor<Pk>, Error>

    Create a new bare descriptor from witness script\nErrors when miniscript exceeds resource limits under bare context\nor does not type check at the top level

    \n

    pub fn new_sh_with_wpkh(wpkh: Wpkh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wpkh descriptor

    \n

    pub fn new_sh_with_wsh(wsh: Wsh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wsh descriptor

    \n

    pub fn new_sh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh sortedmulti descriptor with threshold k\nand Vec of pks.\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_sh_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh sortedmulti descriptor from threshold\nk and Vec of pks\nErrors when miniscript exceeds resource limits under segwit context

    \n

    pub fn new_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new wsh sorted multi descriptor\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_tr(\n key: Pk,\n script: Option<TapTree<Pk>>\n) -> Result<Descriptor<Pk>, Error>

    Create new tr descriptor\nErrors when miniscript exceeds resource limits under Tap context

    \n

    pub fn desc_type(&self) -> DescriptorType

    Get the [DescriptorType] of Descriptor

    \n

    pub fn sanity_check(&self) -> Result<(), Error>

    Checks whether the descriptor is safe.

    \n

    Checks whether all the spend paths in the descriptor are possible on the\nbitcoin network under the current standardness and consensus rules. Also\nchecks whether the descriptor requires signatures on all spend paths and\nwhether the script is malleable.

    \n

    In general, all the guarantees of miniscript hold only for safe scripts.\nThe signer may not be able to find satisfactions even if one exists.

    \n

    pub fn max_weight_to_satisfy(&self) -> Result<Weight, Error>

    Computes an upper bound on the difference between a non-satisfied\nTxIn’s segwit_weight and a satisfied TxIn’s segwit_weight

    \n

    Since this method uses segwit_weight instead of legacy_weight,\nif you want to include only legacy inputs in your transaction,\nyou should remove 1WU from each input’s max_weight_to_satisfy\nfor a more accurate estimate.

    \n

    In other words, for segwit inputs or legacy inputs included in\nsegwit transactions, the following will hold for each input if\nthat input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].segwit_weight() - TxIn::default().segwit_weight()\n    );\n}
    \n

    Instead, for legacy transactions, the following will hold for each input\nif that input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].legacy_weight() - TxIn::default().legacy_weight()\n    );\n}
    \n

    Assumes all ECDSA signatures are 73 bytes, including push opcode and\nsighash suffix.\nAssumes all Schnorr signatures are 66 bytes, including push opcode and\nsighash suffix.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n

    pub fn max_satisfaction_weight(&self) -> Result<usize, Error>

    👎Deprecated since 10.0.0: Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476.

    Computes an upper bound on the weight of a satisfying witness to the\ntransaction.

    \n

    Assumes all ec-signatures are 73 bytes, including push opcode and\nsighash suffix. Includes the weight of the VarInts encoding the\nscriptSig and witness stack length.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    source§

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable.\nPanics if the descriptor wildcard is hardened.
    source§

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the\ndescriptor at index 0.
    ","DescriptorExt","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<Descriptor<Pk>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Display for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Display","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl ExtractPolicy for Descriptor<DescriptorPublicKey>

    source§

    fn extract_policy(\n &self,\n signers: &SignersContainer,\n build_sat: BuildSatisfaction<'_>,\n secp: &Secp256k1<All>\n) -> Result<Option<Policy>, Error>

    Extract the spending policy
    ","ExtractPolicy","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> ForEachKey<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn for_each_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for every key
    §

    fn for_any_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,\n Pk: 'a,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for any key
    ","ForEachKey","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    ","FromStr","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    \n
    ","FromTree","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Hash for Descriptor<Pk>
    where\n Pk: Hash + MiniscriptKey,

    §

    fn hash<__H>(&self, state: &mut __H)
    where\n __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Liftable<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn lift(&self) -> Result<Policy<Pk>, Error>

    Converts this object into an abstract policy.
    ","Liftable","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Ord for Descriptor<Pk>
    where\n Pk: Ord + MiniscriptKey,

    §

    fn cmp(&self, other: &Descriptor<Pk>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialEq for Descriptor<Pk>
    where\n Pk: PartialEq + MiniscriptKey,

    §

    fn eq(&self, other: &Descriptor<Pk>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialOrd for Descriptor<Pk>
    where\n Pk: PartialOrd + MiniscriptKey,

    §

    fn partial_cmp(&self, other: &Descriptor<Pk>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<'de, Pk> Serialize for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<P, Q> TranslatePk<P, Q> for Descriptor<P>
    where\n P: MiniscriptKey,\n Q: MiniscriptKey,

    §

    fn translate_pk<T, E>(\n &self,\n t: &mut T\n) -> Result<<Descriptor<P> as TranslatePk<P, Q>>::Output, TranslateErr<E>>
    where\n T: Translator<P, Q, E>,

    Converts a descriptor using abstract keys to one using specific keys.

    \n
    §

    type Output = Descriptor<Q>

    The associated output type. This must be Self<Q>.
    ","TranslatePk","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Eq for Descriptor<Pk>
    where\n Pk: Eq + MiniscriptKey,

    ","Eq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> StructuralPartialEq for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    ","StructuralPartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"]] +"bdk_wallet":[["
    §

    impl<Pk> Clone for Descriptor<Pk>
    where\n Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Debug for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n
    §Examples
    \n
    use miniscript::descriptor::{Descriptor, DescriptorPublicKey};\nuse miniscript::bitcoin::secp256k1;\nuse std::str::FromStr;\n\n// test from bip 86\nlet secp = secp256k1::Secp256k1::verification_only();\nlet descriptor = Descriptor::<DescriptorPublicKey>::from_str(\"tr(xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\")\n    .expect(\"Valid ranged descriptor\");\nlet result = descriptor.at_derivation_index(0).unwrap().derived_descriptor(&secp).expect(\"Non-hardened derivation\");\nassert_eq!(result.to_string(), \"tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym\");
    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn plan<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a non-malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n

    pub fn plan_mall<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DescriptorPublicKey>

    pub fn is_deriveable(&self) -> bool

    👎Deprecated: use has_wildcards instead

    Whether or not the descriptor has any wildcards

    \n

    pub fn has_wildcard(&self) -> bool

    Whether or not the descriptor has any wildcards i.e. /*.

    \n

    pub fn at_derivation_index(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    Replaces all wildcards (i.e. /*) in the descriptor with a particular derivation index,\nturning it into a definite descriptor.

    \n
    §Errors
    \n
      \n
    • If index ≥ 2^31
    • \n
    \n

    pub fn derive(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    👎Deprecated: use at_derivation_index instead

    Deprecated name for Self::at_derivation_index.

    \n

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>,\n index: u32\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n

    This is a shorthand for:

    \n\n
        .expect(\"Valid ranged descriptor\");\nlet derived_descriptor = descriptor.at_derivation_index(index).unwrap().derived_descriptor(&secp).unwrap();
    \n

    and is only here really here for backwards compatbility.\nSee at_derivation_index and [derived_descriptor] for more documentation.

    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n

    pub fn parse_descriptor<C>(\n secp: &Secp256k1<C>,\n s: &str\n) -> Result<(Descriptor<DescriptorPublicKey>, BTreeMap<DescriptorPublicKey, DescriptorSecretKey>), Error>
    where\n C: Signing,

    Parse a descriptor that may contain secret keys

    \n

    Internally turns every secret key found into the corresponding public key and then returns a\na descriptor that only contains public keys and a map to lookup the secret key given a public key.

    \n

    pub fn to_string_with_secret(\n &self,\n key_map: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>\n) -> String

    Serialize a descriptor to string with its secret keys

    \n

    pub fn find_derivation_index_for_spk<C>(\n &self,\n secp: &Secp256k1<C>,\n script_pubkey: &Script,\n range: Range<u32>\n) -> Result<Option<(u32, Descriptor<PublicKey>)>, ConversionError>
    where\n C: Verification,

    Utility method for deriving the descriptor at each index in a range to find one matching\nscript_pubkey.

    \n

    If it finds a match then it returns the index it was derived at and the concrete\ndescriptor at that index. If the descriptor is non-derivable then it will simply check the\nscript pubkey against the descriptor and return it if it matches (in this case the index\nreturned will be meaningless).

    \n

    pub fn is_multipath(&self) -> bool

    Whether this descriptor contains a key that has multiple derivation paths.

    \n

    pub fn into_single_descriptors(\n self\n) -> Result<Vec<Descriptor<DescriptorPublicKey>>, Error>

    Get as many descriptors as different paths in this descriptor.

    \n

    For multipath descriptors it will return as many descriptors as there is\n“parallel” paths. For regular descriptors it will just return itself.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey + ToPublicKey,

    pub fn address(&self, network: Network) -> Result<Address, Error>

    Computes the Bitcoin address of the descriptor, if one exists

    \n

    Some descriptors like pk() don’t have an address.

    \n
    §Errors
    \n

    For raw/bare descriptors that don’t have an address.

    \n

    pub fn script_pubkey(&self) -> ScriptBuf

    Computes the scriptpubkey of the descriptor.

    \n

    pub fn unsigned_script_sig(&self) -> ScriptBuf

    Computes the scriptSig that will be in place for an unsigned input\nspending an output with this descriptor. For pre-segwit descriptors,\nwhich use the scriptSig for signatures, this returns the empty script.

    \n

    This is used in Segwit transactions to produce an unsigned transaction\nwhose txid will not change during signing (since only the witness data\nwill change).

    \n

    pub fn explicit_script(&self) -> Result<ScriptBuf, Error>

    Computes the the underlying script before any hashing is done. For\nBare, Pkh and Wpkh this is the scriptPubkey; for ShWpkh and Sh\nthis is the redeemScript; for the others it is the witness script.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn script_code(&self) -> Result<ScriptBuf, Error>

    Computes the scriptCode of a transaction output.

    \n

    The scriptCode is the Script of the previous transaction output being\nserialized in the sighash when evaluating a CHECKSIG & co. OP code.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn get_satisfaction<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn get_satisfaction_mall<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns a possilbly mallable satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn satisfy<S>(&self, txin: &mut TxIn, satisfier: S) -> Result<(), Error>
    where\n S: Satisfier<Pk>,

    Attempts to produce a non-malleable satisfying witness and scriptSig to spend an\noutput controlled by the given descriptor; add the data to a given\nTxIn output.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    pub fn new_pk(pk: Pk) -> Descriptor<Pk>

    Create a new pk descriptor

    \n

    pub fn new_pkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new PkH descriptor

    \n

    pub fn new_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new Wpkh descriptor\nWill return Err if uncompressed key is used

    \n

    pub fn new_sh_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wpkh from Pk.\nErrors when uncompressed keys are supplied

    \n

    pub fn new_sh(ms: Miniscript<Pk, Legacy>) -> Result<Descriptor<Pk>, Error>

    Create a new sh for a given redeem script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new wsh descriptor from witness script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_sh_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh descriptor with witness script\nErrors when miniscript exceeds resource limits under wsh context\nor does not type check at the top level

    \n

    pub fn new_bare(ms: Miniscript<Pk, BareCtx>) -> Result<Descriptor<Pk>, Error>

    Create a new bare descriptor from witness script\nErrors when miniscript exceeds resource limits under bare context\nor does not type check at the top level

    \n

    pub fn new_sh_with_wpkh(wpkh: Wpkh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wpkh descriptor

    \n

    pub fn new_sh_with_wsh(wsh: Wsh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wsh descriptor

    \n

    pub fn new_sh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh sortedmulti descriptor with threshold k\nand Vec of pks.\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_sh_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh sortedmulti descriptor from threshold\nk and Vec of pks\nErrors when miniscript exceeds resource limits under segwit context

    \n

    pub fn new_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new wsh sorted multi descriptor\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_tr(\n key: Pk,\n script: Option<TapTree<Pk>>\n) -> Result<Descriptor<Pk>, Error>

    Create new tr descriptor\nErrors when miniscript exceeds resource limits under Tap context

    \n

    pub fn desc_type(&self) -> DescriptorType

    Get the [DescriptorType] of Descriptor

    \n

    pub fn sanity_check(&self) -> Result<(), Error>

    Checks whether the descriptor is safe.

    \n

    Checks whether all the spend paths in the descriptor are possible on the\nbitcoin network under the current standardness and consensus rules. Also\nchecks whether the descriptor requires signatures on all spend paths and\nwhether the script is malleable.

    \n

    In general, all the guarantees of miniscript hold only for safe scripts.\nThe signer may not be able to find satisfactions even if one exists.

    \n

    pub fn max_weight_to_satisfy(&self) -> Result<Weight, Error>

    Computes an upper bound on the difference between a non-satisfied\nTxIn’s segwit_weight and a satisfied TxIn’s segwit_weight

    \n

    Since this method uses segwit_weight instead of legacy_weight,\nif you want to include only legacy inputs in your transaction,\nyou should remove 1WU from each input’s max_weight_to_satisfy\nfor a more accurate estimate.

    \n

    In other words, for segwit inputs or legacy inputs included in\nsegwit transactions, the following will hold for each input if\nthat input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].segwit_weight() - TxIn::default().segwit_weight()\n    );\n}
    \n

    Instead, for legacy transactions, the following will hold for each input\nif that input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].legacy_weight() - TxIn::default().legacy_weight()\n    );\n}
    \n

    Assumes all ECDSA signatures are 73 bytes, including push opcode and\nsighash suffix.\nAssumes all Schnorr signatures are 66 bytes, including push opcode and\nsighash suffix.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n

    pub fn max_satisfaction_weight(&self) -> Result<usize, Error>

    👎Deprecated since 10.0.0: Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476.

    Computes an upper bound on the weight of a satisfying witness to the\ntransaction.

    \n

    Assumes all ec-signatures are 73 bytes, including push opcode and\nsighash suffix. Includes the weight of the VarInts encoding the\nscriptSig and witness stack length.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    §

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable.\nPanics if the descriptor wildcard is hardened.
    §

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the\ndescriptor at index 0.
    ","DescriptorExt","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<Descriptor<Pk>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Display for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Display","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl ExtractPolicy for Descriptor<DescriptorPublicKey>

    source§

    fn extract_policy(\n &self,\n signers: &SignersContainer,\n build_sat: BuildSatisfaction<'_>,\n secp: &Secp256k1<All>\n) -> Result<Option<Policy>, Error>

    Extract the spending policy
    ","ExtractPolicy","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> ForEachKey<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn for_each_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for every key
    §

    fn for_any_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,\n Pk: 'a,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for any key
    ","ForEachKey","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    ","FromStr","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    \n
    ","FromTree","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Hash for Descriptor<Pk>
    where\n Pk: Hash + MiniscriptKey,

    §

    fn hash<__H>(&self, state: &mut __H)
    where\n __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Liftable<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn lift(&self) -> Result<Policy<Pk>, Error>

    Converts this object into an abstract policy.
    ","Liftable","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Ord for Descriptor<Pk>
    where\n Pk: Ord + MiniscriptKey,

    §

    fn cmp(&self, other: &Descriptor<Pk>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialEq for Descriptor<Pk>
    where\n Pk: PartialEq + MiniscriptKey,

    §

    fn eq(&self, other: &Descriptor<Pk>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialOrd for Descriptor<Pk>
    where\n Pk: PartialOrd + MiniscriptKey,

    §

    fn partial_cmp(&self, other: &Descriptor<Pk>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<'de, Pk> Serialize for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<P, Q> TranslatePk<P, Q> for Descriptor<P>
    where\n P: MiniscriptKey,\n Q: MiniscriptKey,

    §

    fn translate_pk<T, E>(\n &self,\n t: &mut T\n) -> Result<<Descriptor<P> as TranslatePk<P, Q>>::Output, TranslateErr<E>>
    where\n T: Translator<P, Q, E>,

    Converts a descriptor using abstract keys to one using specific keys.

    \n
    §

    type Output = Descriptor<Q>

    The associated output type. This must be Self<Q>.
    ","TranslatePk","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Eq for Descriptor<Pk>
    where\n Pk: Eq + MiniscriptKey,

    ","Eq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> StructuralPartialEq for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    ","StructuralPartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js index 7413436bef..ac18cecad9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js @@ -1,5 +1,5 @@ (function() {var type_impls = { -"bdk_chain":[["
    source§

    impl<T0, T1> Append for (T0, T1)
    where\n T0: Append,\n T1: Append,

    source§

    fn append(&mut self, _other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_chain::keychain::Indexed","bdk_chain::keychain::KeychainIndexed"],["
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> Self

    Converts to this type from the input type.
    ","From","bdk_chain::keychain::Indexed"]], +"bdk_chain":[["
    source§

    impl<T0, T1> Append for (T0, T1)
    where\n T0: Append,\n T1: Append,

    source§

    fn append(&mut self, _other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Append","bdk_chain::Indexed","bdk_chain::KeychainIndexed"],["
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> Self

    Converts to this type from the input type.
    ","From","bdk_chain::Indexed"]], "bdk_wallet":[], "example_bitcoind_rpc_polling":[], "example_cli":[],