From: github-actions Date: Wed, 14 Aug 2024 15:28:25 +0000 (+0000) Subject: Publish autogenerated nightly docs X-Git-Url: http://internal-gitweb-vhost/?a=commitdiff_plain;h=5ce170fa32eae9019638b1aea23659ed3bb18991;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 91776617a4..669e5bb9da 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 149f551486..de6ba10c97 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 e7b306300d..5b7a05f1a3 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/indexer/keychain_txout/enum.InsertDescriptorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html index 0190fc6551..445d86790a 100644 --- 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 @@ -14,7 +14,7 @@
§

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 +

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 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.AlterCheckPointError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.AlterCheckPointError.html index 406a2ac570..8942e17049 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.AlterCheckPointError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.AlterCheckPointError.html @@ -6,7 +6,7 @@

Fields§

§height: u32

The checkpoint’s height.

§original_hash: BlockHash

The original checkpoint’s block hash which cannot be replaced/removed.

§update_hash: Option<BlockHash>

The attempted update to the original_block hash.

-

Trait Implementations§

source§

impl Clone for AlterCheckPointError

source§

fn clone(&self) -> AlterCheckPointError

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 AlterCheckPointError

source§

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

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

impl Display for AlterCheckPointError

source§

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

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

impl Error for AlterCheckPointError

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 AlterCheckPointError

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for AlterCheckPointError

source§

fn clone(&self) -> AlterCheckPointError

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 AlterCheckPointError

source§

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

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

impl Display for AlterCheckPointError

source§

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

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

impl Error for AlterCheckPointError

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 AlterCheckPointError

source§

fn eq(&self, other: &AlterCheckPointError) -> 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 StructuralPartialEq for AlterCheckPointError

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_chain/local_chain/struct.CannotConnectError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CannotConnectError.html index c71dc53548..cf49d315c5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CannotConnectError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CannotConnectError.html @@ -2,7 +2,7 @@ pub try_include_height: u32, }
Expand description

Occurs when an update does not have a common checkpoint with the original chain.

Fields§

§try_include_height: u32

The suggested checkpoint to include to connect the two chains.

-

Trait Implementations§

source§

impl Clone for CannotConnectError

source§

fn clone(&self) -> CannotConnectError

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 CannotConnectError

source§

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

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

impl Display for CannotConnectError

source§

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

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

impl Error for CannotConnectError

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 CannotConnectError

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for CannotConnectError

source§

fn clone(&self) -> CannotConnectError

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 CannotConnectError

source§

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

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

impl Display for CannotConnectError

source§

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

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

impl Error for CannotConnectError

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 CannotConnectError

source§

fn eq(&self, other: &CannotConnectError) -> 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 StructuralPartialEq for CannotConnectError

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_chain/local_chain/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html index 71ffe080fb..1587a1966d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html @@ -9,7 +9,7 @@

source

pub fn from_sqlite(db_tx: &Transaction<'_>) -> Result<Self>

Construct a LocalChain from sqlite database.

source

pub fn persist_to_sqlite(&self, db_tx: &Transaction<'_>) -> Result<()>

Persist changeset to the sqlite database.

Trait Implementations§

source§

impl Clone for ChangeSet

source§

fn clone(&self) -> ChangeSet

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 ChangeSet

source§

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

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

impl Default for ChangeSet

source§

fn default() -> ChangeSet

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

impl<'de> Deserialize<'de> for ChangeSet

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<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet

source§

fn from(blocks: B) -> Self

Converts to this type from the input type.
source§

impl FromIterator<(u32, BlockHash)> for ChangeSet

source§

fn from_iter<T: IntoIterator<Item = (u32, BlockHash)>>(iter: T) -> Self

Creates a value from an iterator. Read more
source§

impl FromIterator<(u32, Option<BlockHash>)> for ChangeSet

source§

fn from_iter<T: IntoIterator<Item = (u32, Option<BlockHash>)>>(iter: T) -> Self

Creates a value from an iterator. Read more
source§

impl Merge for ChangeSet

source§

fn merge(&mut self, other: Self)

Merge 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 PartialEq for ChangeSet

source§

fn eq(&self, other: &ChangeSet) -> 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<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet

source§

fn from(blocks: B) -> Self

Converts to this type from the input type.
source§

impl FromIterator<(u32, BlockHash)> for ChangeSet

source§

fn from_iter<T: IntoIterator<Item = (u32, BlockHash)>>(iter: T) -> Self

Creates a value from an iterator. Read more
source§

impl FromIterator<(u32, Option<BlockHash>)> for ChangeSet

source§

fn from_iter<T: IntoIterator<Item = (u32, Option<BlockHash>)>>(iter: T) -> Self

Creates a value from an iterator. Read more
source§

impl Merge for ChangeSet

source§

fn merge(&mut self, other: Self)

Merge 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 PartialEq for ChangeSet

source§

fn eq(&self, other: &ChangeSet) -> 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 ChangeSet

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 StructuralPartialEq for ChangeSet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html index a306d45ad1..dd69c04dd0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html @@ -1,5 +1,5 @@ MissingGenesisError in bdk_chain::local_chain - Rust

Struct bdk_chain::local_chain::MissingGenesisError

source ·
pub struct MissingGenesisError;
Expand description

An error which occurs when a LocalChain is constructed without a genesis checkpoint.

-

Trait Implementations§

source§

impl Clone for MissingGenesisError

source§

fn clone(&self) -> MissingGenesisError

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 MissingGenesisError

source§

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

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

impl Display for MissingGenesisError

source§

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

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

impl Error for MissingGenesisError

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 MissingGenesisError

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for MissingGenesisError

source§

fn clone(&self) -> MissingGenesisError

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 MissingGenesisError

source§

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

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

impl Display for MissingGenesisError

source§

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

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

impl Error for MissingGenesisError

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 MissingGenesisError

source§

fn eq(&self, other: &MissingGenesisError) -> 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 StructuralPartialEq for MissingGenesisError

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_chain/spk_client/enum.SyncItem.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/enum.SyncItem.html new file mode 100644 index 0000000000..cb77cd7e8a --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/enum.SyncItem.html @@ -0,0 +1,39 @@ +SyncItem in bdk_chain::spk_client - Rust

Enum bdk_chain::spk_client::SyncItem

source ·
pub enum SyncItem<'i, I> {
+    Spk(I, &'i Script),
+    Txid(Txid),
+    OutPoint(OutPoint),
+}
Expand description

An item reported to the inspect closure of SyncRequest.

+

Variants§

§

Spk(I, &'i Script)

Script pubkey sync item.

+
§

Txid(Txid)

Txid sync item.

+
§

OutPoint(OutPoint)

Outpoint sync item.

+

Trait Implementations§

source§

impl<'i, I: Clone> Clone for SyncItem<'i, I>

source§

fn clone(&self) -> SyncItem<'i, 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, I: Debug> Debug for SyncItem<'i, I>

source§

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

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

impl<'i, I: Debug + Any> Display for SyncItem<'i, I>

source§

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

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

impl<'i, I: Hash> Hash for SyncItem<'i, I>

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, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<'i, I: Ord> Ord for SyncItem<'i, I>

source§

fn cmp(&self, other: &SyncItem<'i, I>) -> 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<'i, I: PartialEq> PartialEq for SyncItem<'i, I>

source§

fn eq(&self, other: &SyncItem<'i, I>) -> 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<'i, I: PartialOrd> PartialOrd for SyncItem<'i, I>

source§

fn partial_cmp(&self, other: &SyncItem<'i, I>) -> 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<'i, I: Copy> Copy for SyncItem<'i, I>

source§

impl<'i, I: Eq> Eq for SyncItem<'i, I>

source§

impl<'i, I> StructuralPartialEq for SyncItem<'i, I>

Auto Trait Implementations§

§

impl<'i, I> Freeze for SyncItem<'i, I>
where + I: Freeze,

§

impl<'i, I> RefUnwindSafe for SyncItem<'i, I>
where + I: RefUnwindSafe,

§

impl<'i, I> Send for SyncItem<'i, I>
where + I: Send,

§

impl<'i, I> Sync for SyncItem<'i, I>
where + I: Sync,

§

impl<'i, I> Unpin for SyncItem<'i, I>
where + I: Unpin,

§

impl<'i, I> UnwindSafe for SyncItem<'i, I>
where + I: 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
§

impl<Q, K> Equivalent<K> for Q
where + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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/spk_client/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html index 0f6d859f71..9a90ff840e 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.

-

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 +bdk_chain::spk_client - Rust

Module bdk_chain::spk_client

source ·
Expand description

Helper types for spk-based blockchain clients.

+

Structs§

Enums§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/sidebar-items.js index 71829127fb..d2cf2241d2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["FullScanRequest","FullScanResult","SyncRequest","SyncResult"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["SyncItem"],"struct":["FullScanRequest","FullScanRequestBuilder","FullScanResult","SyncProgress","SyncRequest","SyncRequestBuilder","SyncResult"]}; \ 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 6bdb4a6633..038b05be43 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,55 +1,23 @@ -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>>,
-}
Expand description

Data required to perform a spk-based blockchain client full scan.

+FullScanRequest in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanRequest

source ·
pub struct FullScanRequest<K> { /* private fields */ }
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 generally only used when importing or restoring previously used keychains in which the list of -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( - chain_tip: CheckPoint, - 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 -FullScanRequest.

-
source

pub fn set_spks_for_keychain( - self, - keychain: K, - 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( - self, - keychain: K, - 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( - 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( - self, - keychain: K, - inspect: impl FnMut(u32, &Script) + Send + Sync + 'static -) -> Self
where - K: Send + 'static,

Add a closure that will be called for every [Script] previously added to a given -keychain in this request.

-

This consumes the SyncRequest and returns the updated one.

-

Auto Trait Implementations§

§

impl<K> Freeze for FullScanRequest<K>

§

impl<K> !RefUnwindSafe for FullScanRequest<K>

§

impl<K> Send for FullScanRequest<K>
where +used scripts is not known. The full scan process also updates the chain from the given +chain_tip (if provided).

+

Implementations§

source§

impl<K: Ord + Clone> FullScanRequest<K>

source

pub fn builder() -> FullScanRequestBuilder<K>

Start building a FullScanRequest.

+
source

pub fn chain_tip(&self) -> Option<CheckPoint>

Get the chain tip CheckPoint of this request (if any).

+
source

pub fn keychains(&self) -> Vec<K>

List all keychains contained in this request.

+
source

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

Advances the full scan request and returns the next indexed [ScriptBuf] of the given +keychain.

+
source

pub fn iter_spks( + &mut self, + keychain: K +) -> impl Iterator<Item = Indexed<ScriptBuf>> + '_

Iterate over indexed [ScriptBuf]s contained in this request of the given keychain.

+

Trait Implementations§

source§

impl<K> Default for FullScanRequest<K>

source§

fn default() -> Self

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

impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>

source§

fn from(builder: FullScanRequestBuilder<K>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<K> Freeze for FullScanRequest<K>

§

impl<K> !RefUnwindSafe for FullScanRequest<K>

§

impl<K> Send for FullScanRequest<K>
where K: Send,

§

impl<K> !Sync for FullScanRequest<K>

§

impl<K> Unpin for FullScanRequest<K>

§

impl<K> !UnwindSafe for FullScanRequest<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.

+ 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 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html new file mode 100644 index 0000000000..7c50aa2a39 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html @@ -0,0 +1,25 @@ +FullScanRequestBuilder in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanRequestBuilder

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

Builds a FullScanRequest.

+

Implementations§

source§

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

source

pub fn spks_from_indexer(self, indexer: &KeychainTxOutIndex<K>) -> Self

Add spk iterators for each keychain tracked in indexer.

+
source§

impl<K: Ord> FullScanRequestBuilder<K>

source

pub fn chain_tip(self, tip: CheckPoint) -> Self

Set the initial chain tip for the full scan request.

+

This is used to update LocalChain.

+
source

pub fn spks_for_keychain( + self, + keychain: K, + spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> +) -> Self

Set the spk iterator for a given keychain.

+
source

pub fn inspect<F>(self, inspect: F) -> Self
where + F: FnMut(K, u32, &Script) + Send + 'static,

Set the closure that will inspect every sync item visited.

+
source

pub fn build(self) -> FullScanRequest<K>

Build the FullScanRequest.

+

Trait Implementations§

source§

impl<K> Default for FullScanRequestBuilder<K>

source§

fn default() -> Self

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

impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>

source§

fn from(builder: FullScanRequestBuilder<K>) -> 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.

+
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, 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/spk_client/struct.FullScanResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html index beed7195f8..9dc0e0ac8e 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,13 +1,13 @@ -FullScanResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanResult

source ·
pub struct FullScanResult<K, A = ConfirmationBlockTime> {
+FullScanResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::FullScanResult

source ·
pub struct FullScanResult<K, A = ConfirmationBlockTime> {
     pub graph_update: TxGraph<A>,
-    pub chain_update: CheckPoint,
+    pub chain_update: Option<CheckPoint>,
     pub last_active_indices: BTreeMap<K, u32>,
 }
Expand description

Data returned from a spk-based blockchain client full scan.

See also FullScanRequest.

Fields§

§graph_update: TxGraph<A>

The update to apply to the receiving LocalChain.

-
§chain_update: CheckPoint

The update to apply to the receiving TxGraph.

+
§chain_update: Option<CheckPoint>

The update to apply to the receiving TxGraph.

§last_active_indices: BTreeMap<K, u32>

Last active indices for the corresponding keychains (K).

-

Auto Trait Implementations§

§

impl<K, A> Freeze for FullScanResult<K, A>

§

impl<K, A> RefUnwindSafe for FullScanResult<K, A>
where +

Trait Implementations§

source§

impl<K: Debug, A: Debug> Debug for FullScanResult<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 FullScanResult<K, A>

source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<K, A> Freeze for FullScanResult<K, A>

§

impl<K, A> RefUnwindSafe for FullScanResult<K, A>

§

impl<K, A> Send for FullScanResult<K, A>
where K: Send, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html new file mode 100644 index 0000000000..d1a2a4519e --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html @@ -0,0 +1,33 @@ +SyncProgress in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncProgress

source ·
pub struct SyncProgress {
+    pub spks_consumed: usize,
+    pub spks_remaining: usize,
+    pub txids_consumed: usize,
+    pub txids_remaining: usize,
+    pub outpoints_consumed: usize,
+    pub outpoints_remaining: usize,
+}
Expand description

The progress of SyncRequest.

+

Fields§

§spks_consumed: usize

Script pubkeys consumed by the request.

+
§spks_remaining: usize

Script pubkeys remaining in the request.

+
§txids_consumed: usize

Txids consumed by the request.

+
§txids_remaining: usize

Txids remaining in the request.

+
§outpoints_consumed: usize

Outpoints consumed by the request.

+
§outpoints_remaining: usize

Outpoints remaining in the request.

+

Implementations§

source§

impl SyncProgress

source

pub fn total(&self) -> usize

Total items, consumed and remaining, of the request.

+
source

pub fn total_spks(&self) -> usize

Total script pubkeys, consumed and remaining, of the request.

+
source

pub fn total_txids(&self) -> usize

Total txids, consumed and remaining, of the request.

+
source

pub fn total_outpoints(&self) -> usize

Total outpoints, consumed and remaining, of the request.

+
source

pub fn consumed(&self) -> usize

Total consumed items of the request.

+
source

pub fn remaining(&self) -> usize

Total remaining items of the request.

+

Trait Implementations§

source§

impl Clone for SyncProgress

source§

fn clone(&self) -> SyncProgress

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 SyncProgress

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.

+
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/spk_client/struct.SyncRequest.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html index cdf32faa5c..0870cdb56e 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,72 +1,36 @@ -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>,
-    pub outpoints: Box<dyn ExactSizeIterator<Item = OutPoint> + Send>,
-}
Expand description

Data required to perform a spk-based blockchain client sync.

+SyncRequest in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncRequest

source ·
pub struct SyncRequest<I = ()> { /* private fields */ }
Expand description

Data required to perform a spk-based blockchain client sync.

A client sync fetches relevant chain data for a known list of scripts, transaction ids and -outpoints. The sync process also updates the chain from the given CheckPoint.

-

Fields§

§chain_tip: CheckPoint

A checkpoint for the current chain LocalChain::tip. -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( - 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( - 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( - 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( - 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( - 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( - 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( - 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( - 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( - 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>( - self, - 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.

-

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +outpoints. The sync process also updates the chain from the given +chain_tip (if provided).

+ +
// Construct a sync request.
+let sync_request = SyncRequest::builder()
+    // Provide chain tip of the local wallet.
+    .chain_tip(local_chain.tip())
+    // Provide list of scripts to scan for transactions against.
+    .spks(scripts)
+    // This is called for every synced item.
+    .inspect(|item, progress| println!("{} (remaining: {})", item, progress.remaining()))
+    // Finish constructing the sync request.
+    .build();
+

Implementations§

source§

impl<I> SyncRequest<I>

source

pub fn builder() -> SyncRequestBuilder<I>

Start building a SyncRequest.

+
source

pub fn progress(&self) -> SyncProgress

Get the SyncProgress of this request.

+
source

pub fn chain_tip(&self) -> Option<CheckPoint>

Get the chain tip CheckPoint of this request (if any).

+
source

pub fn next_spk(&mut self) -> Option<ScriptBuf>

Advances the sync request and returns the next [ScriptBuf].

+

Returns None when there are no more scripts remaining in the request.

+
source

pub fn next_txid(&mut self) -> Option<Txid>

Advances the sync request and returns the next [Txid].

+

Returns None when there are no more txids remaining in the request.

+
source

pub fn next_outpoint(&mut self) -> Option<OutPoint>

Advances the sync request and returns the next [OutPoint].

+

Returns None when there are no more outpoints in the request.

+
source

pub fn iter_spks(&mut self) -> impl ExactSizeIterator<Item = ScriptBuf> + '_

Iterate over [ScriptBuf]s contained in this request.

+
source

pub fn iter_txids(&mut self) -> impl ExactSizeIterator<Item = Txid> + '_

Iterate over [Txid]s contained in this request.

+
source

pub fn iter_outpoints(&mut self) -> impl ExactSizeIterator<Item = OutPoint> + '_

Iterate over [OutPoint]s contained in this request.

+

Trait Implementations§

source§

impl<I> Default for SyncRequest<I>

source§

fn default() -> Self

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

impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>

source§

fn from(builder: SyncRequestBuilder<I>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<I> Freeze for SyncRequest<I>

§

impl<I = ()> !RefUnwindSafe for SyncRequest<I>

§

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

§

impl<I = ()> !Sync for SyncRequest<I>

§

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

§

impl<I = ()> !UnwindSafe for SyncRequest<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.

+ 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 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html new file mode 100644 index 0000000000..9f2a6c0293 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html @@ -0,0 +1,60 @@ +SyncRequestBuilder in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncRequestBuilder

source ·
pub struct SyncRequestBuilder<I = ()> { /* private fields */ }
Expand description

Builds a SyncRequest.

+

Implementations§

source§

impl<K: Clone + Ord + Debug + Send + Sync> SyncRequestBuilder<(K, u32)>

source

pub fn revealed_spks_from_indexer( + self, + indexer: &KeychainTxOutIndex<K>, + spk_range: impl RangeBounds<K> +) -> Self

Add [Script]s that are revealed by the indexer of the given spk_range that will be +synced against.

+
source

pub fn unused_spks_from_indexer(self, indexer: &KeychainTxOutIndex<K>) -> Self

Add [Script]s that are revealed by the indexer but currently unused.

+
source§

impl SyncRequestBuilder<()>

source

pub fn spks(self, spks: impl IntoIterator<Item = ScriptBuf>) -> Self

Add [Script]s that will be synced against.

+
source§

impl<I> SyncRequestBuilder<I>

source

pub fn chain_tip(self, cp: CheckPoint) -> Self

Set the initial chain tip for the sync request.

+

This is used to update LocalChain.

+
source

pub fn spks_with_indexes( + self, + spks: impl IntoIterator<Item = (I, ScriptBuf)> +) -> Self

Add [Script]s coupled with associated indexes that will be synced against.

+
§Example
+

Sync revealed script pubkeys obtained from a +KeychainTxOutIndex.

+ +
let mut indexer = KeychainTxOutIndex::<&'static str>::default();
+indexer.insert_descriptor("descriptor_a", descriptor_a)?;
+indexer.insert_descriptor("descriptor_b", descriptor_b)?;
+
+/* Assume that the caller does more mutations to the `indexer` here... */
+
+// Reveal spks for "descriptor_a", then build a sync request. Each spk will be indexed with
+// `u32`, which represents the derivation index of the associated spk from "descriptor_a".
+let (newly_revealed_spks, _changeset) = indexer
+    .reveal_to_target("descriptor_a", 21)
+    .expect("keychain must exist");
+let _request = SyncRequest::builder()
+    .spks_with_indexes(newly_revealed_spks)
+    .build();
+
+// Sync all revealed spks in the indexer. This time, spks may be derived from different
+// keychains. Each spk will be indexed with `(&'static str, u32)` where `&'static str` is
+// the keychain identifier and `u32` is the derivation index.
+let all_revealed_spks = indexer.revealed_spks(..);
+let _request = SyncRequest::builder()
+    .spks_with_indexes(all_revealed_spks)
+    .build();
+
source

pub fn txids(self, txids: impl IntoIterator<Item = Txid>) -> Self

Add [Txid]s that will be synced against.

+
source

pub fn outpoints(self, outpoints: impl IntoIterator<Item = OutPoint>) -> Self

Add [OutPoint]s that will be synced against.

+
source

pub fn inspect<F>(self, inspect: F) -> Self
where + F: FnMut(SyncItem<'_, I>, SyncProgress) + Send + 'static,

Set the closure that will inspect every sync item visited.

+
source

pub fn build(self) -> SyncRequest<I>

Build the SyncRequest.

+

Trait Implementations§

source§

impl<I> Default for SyncRequestBuilder<I>

source§

fn default() -> Self

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

impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>

source§

fn from(builder: SyncRequestBuilder<I>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<I> Freeze for SyncRequestBuilder<I>

§

impl<I = ()> !RefUnwindSafe for SyncRequestBuilder<I>

§

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

§

impl<I = ()> !Sync for SyncRequestBuilder<I>

§

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

§

impl<I = ()> !UnwindSafe for SyncRequestBuilder<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, 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/spk_client/struct.SyncResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html index 414c0db11a..9251ab0b43 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,11 +1,11 @@ -SyncResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncResult

source ·
pub struct SyncResult<A = ConfirmationBlockTime> {
+SyncResult in bdk_chain::spk_client - Rust

Struct bdk_chain::spk_client::SyncResult

source ·
pub struct SyncResult<A = ConfirmationBlockTime> {
     pub graph_update: TxGraph<A>,
-    pub chain_update: CheckPoint,
+    pub chain_update: Option<CheckPoint>,
 }
Expand description

Data returned from a spk-based blockchain client sync.

See also SyncRequest.

Fields§

§graph_update: TxGraph<A>

The update to apply to the receiving TxGraph.

-
§chain_update: CheckPoint

The update to apply to the receiving LocalChain.

-

Auto Trait Implementations§

§

impl<A> Freeze for SyncResult<A>

§

impl<A> RefUnwindSafe for SyncResult<A>
where +
§chain_update: Option<CheckPoint>

The update to apply to the receiving LocalChain.

+

Trait Implementations§

source§

impl<A: Debug> Debug for SyncResult<A>

source§

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

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

impl<A> Default for SyncResult<A>

source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<A> Freeze for SyncResult<A>

§

impl<A> RefUnwindSafe for SyncResult<A>
where A: RefUnwindSafe,

§

impl<A> Send for SyncResult<A>
where A: Send,

§

impl<A> Sync for SyncResult<A>
where A: Sync,

§

impl<A> Unpin for SyncResult<A>

§

impl<A> UnwindSafe for SyncResult<A>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html index 9f5f6740fe..ea05355dd3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html @@ -11,7 +11,7 @@ block and anchor block are the same block.

block_id: BlockId, _tx_pos: usize ) -> Self

Construct the anchor from a given block, block height and tx_pos within the block.
source§

impl Clone for BlockId

source§

fn clone(&self) -> BlockId

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 BlockId

source§

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

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

impl Default for BlockId

source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for BlockId

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 From<(&u32, &BlockHash)> for BlockId

source§

fn from((height, hash): (&u32, &BlockHash)) -> Self

Converts to this type from the input type.
source§

impl From<(u32, BlockHash)> for BlockId

source§

fn from((height, hash): (u32, BlockHash)) -> Self

Converts to this type from the input type.
source§

impl From<BlockId> for (u32, BlockHash)

source§

fn from(block_id: BlockId) -> Self

Converts to this type from the input type.
source§

impl Hash for BlockId

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 + __D: Deserializer<'de>,

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

impl From<(&u32, &BlockHash)> for BlockId

source§

fn from((height, hash): (&u32, &BlockHash)) -> Self

Converts to this type from the input type.
source§

impl From<(u32, BlockHash)> for BlockId

source§

fn from((height, hash): (u32, BlockHash)) -> Self

Converts to this type from the input type.
source§

impl From<BlockId> for (u32, BlockHash)

source§

fn from(block_id: BlockId) -> Self

Converts to this type from the input type.
source§

impl Hash for BlockId

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, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for BlockId

source§

fn cmp(&self, other: &BlockId) -> 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 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html index e77e474b7f..c265343bbe 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html @@ -5,15 +5,15 @@ descriptor without having to re-write the whole descriptor each time.

Tuple Fields§

§0: Hash

Implementations§

source§

impl DescriptorId

source

pub fn from_raw_hash(inner: Hash) -> DescriptorId

Creates this wrapper type from the inner hash type.

source

pub fn to_raw_hash(self) -> Hash

Returns the inner hash (sha256, sh256d etc.).

source

pub fn as_raw_hash(&self) -> &Hash

Returns a reference to the inner hash (sha256, sh256d etc.).

-

Trait Implementations§

source§

impl AsRef<[u8]> for DescriptorId

source§

fn as_ref(&self) -> &[u8] ⓘ

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

impl AsRef<[u8; 32]> for DescriptorId

source§

fn as_ref(&self) -> &[u8; 32]

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

impl Borrow<[u8]> for DescriptorId

source§

fn borrow(&self) -> &[u8] ⓘ

Immutably borrows from an owned value. Read more
source§

impl Clone for DescriptorId

source§

fn clone(&self) -> DescriptorId

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 DescriptorId

source§

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

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

impl<'de> Deserialize<'de> for DescriptorId

source§

fn deserialize<D: Deserializer<'de>>(d: D) -> Result<DescriptorId, D::Error>

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

impl Display for DescriptorId

source§

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

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

impl From<DescriptorId> for Hash

source§

fn from(hashtype: DescriptorId) -> Hash

Converts to this type from the input type.
source§

impl From<Hash> for DescriptorId

source§

fn from(inner: Hash) -> DescriptorId

Converts to this type from the input type.
source§

impl FromStr for DescriptorId

§

type Err = HexToArrayError

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<DescriptorId, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl Hash for DescriptorId

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, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Hash for DescriptorId

§

type Engine = <Hash as Hash>::Engine

A hashing engine which bytes can be serialized into. It is expected +

Trait Implementations§

source§

impl AsRef<[u8]> for DescriptorId

source§

fn as_ref(&self) -> &[u8] ⓘ

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

impl AsRef<[u8; 32]> for DescriptorId

source§

fn as_ref(&self) -> &[u8; 32]

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

impl Borrow<[u8]> for DescriptorId

source§

fn borrow(&self) -> &[u8] ⓘ

Immutably borrows from an owned value. Read more
source§

impl Clone for DescriptorId

source§

fn clone(&self) -> DescriptorId

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 DescriptorId

source§

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

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

impl<'de> Deserialize<'de> for DescriptorId

source§

fn deserialize<D: Deserializer<'de>>(d: D) -> Result<DescriptorId, D::Error>

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

impl Display for DescriptorId

source§

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

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

impl From<DescriptorId> for Hash

source§

fn from(hashtype: DescriptorId) -> Hash

Converts to this type from the input type.
source§

impl From<Hash> for DescriptorId

source§

fn from(inner: Hash) -> DescriptorId

Converts to this type from the input type.
source§

impl FromStr for DescriptorId

§

type Err = HexToArrayError

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<DescriptorId, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl Hash for DescriptorId

§

type Engine = <Hash as Hash>::Engine

A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
§

type Bytes = <Hash as Hash>::Bytes

The byte array that represents the hash internally.
source§

const LEN: usize = 32usize

Length of the hash, in bytes.
source§

const DISPLAY_BACKWARD: bool = false

Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
source§

fn engine() -> Self::Engine

Constructs a new engine.
source§

fn from_engine(e: Self::Engine) -> Self

Produces a hash from the current state of a given engine.
source§

fn from_slice(sl: &[u8]) -> Result<DescriptorId, FromSliceError>

Copies a byte slice into a hash object.
source§

fn from_byte_array(bytes: Self::Bytes) -> Self

Constructs a hash from the underlying byte array.
source§

fn to_byte_array(self) -> Self::Bytes

Returns the underlying byte array.
source§

fn as_byte_array(&self) -> &Self::Bytes

Returns a reference to the underlying byte array.
source§

fn all_zeros() -> Self

Returns an all zero hash. Read more
§

fn hash(data: &[u8]) -> Self

Hashes some bytes.
§

fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
where +true for Sha256dHash, so here we are.

source§

fn engine() -> Self::Engine

Constructs a new engine.
source§

fn from_engine(e: Self::Engine) -> Self

Produces a hash from the current state of a given engine.
source§

fn from_slice(sl: &[u8]) -> Result<DescriptorId, FromSliceError>

Copies a byte slice into a hash object.
source§

fn from_byte_array(bytes: Self::Bytes) -> Self

Constructs a hash from the underlying byte array.
source§

fn to_byte_array(self) -> Self::Bytes

Returns the underlying byte array.
source§

fn as_byte_array(&self) -> &Self::Bytes

Returns a reference to the underlying byte array.
source§

fn all_zeros() -> Self

Returns an all zero hash. Read more
§

fn hash(data: &[u8]) -> Self

Hashes some bytes.
§

fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

Hashes all the byte slices retrieved from the iterator together.
source§

impl<I: SliceIndex<[u8]>> Index<I> for DescriptorId

§

type Output = <I as SliceIndex<[u8]>>::Output

The returned type after indexing.
source§

fn index(&self, index: I) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl LowerHex for DescriptorId

source§

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

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

impl Ord for DescriptorId

source§

fn cmp(&self, other: &DescriptorId) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + I: IntoIterator<Item = B>,

Hashes all the byte slices retrieved from the iterator together.
source§

impl Hash for DescriptorId

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, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<I: SliceIndex<[u8]>> Index<I> for DescriptorId

§

type Output = <I as SliceIndex<[u8]>>::Output

The returned type after indexing.
source§

fn index(&self, index: I) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl LowerHex for DescriptorId

source§

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

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

impl Ord for DescriptorId

source§

fn cmp(&self, other: &DescriptorId) -> 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 PartialEq for DescriptorId

source§

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

This method tests for self and other values to be equal, and is used @@ -24,8 +24,8 @@ operator. Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where - S: Serializer,

Do serde serialization.
§

fn deserialize<'de, D>(d: D) -> Result<Self, <D as Deserializer<'de>>::Error>
where - D: Deserializer<'de>,

Do serde deserialization.
source§

impl Serialize for DescriptorId

source§

fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error>

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

impl UpperHex for DescriptorId

source§

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

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

impl Copy for DescriptorId

source§

impl Eq for DescriptorId

source§

impl StructuralPartialEq for DescriptorId

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + S: Serializer,

Do serde serialization.
§

fn deserialize<'de, D>(d: D) -> Result<Self, <D as Deserializer<'de>>::Error>
where + D: Deserializer<'de>,

Do serde deserialization.
source§

impl Serialize for DescriptorId

source§

fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error>

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

impl UpperHex for DescriptorId

source§

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

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

impl Copy for DescriptorId

source§

impl Eq for DescriptorId

source§

impl StructuralPartialEq for DescriptorId

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
§

impl<Q, K> Equivalent<K> for Q
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html index efa8841e77..15f8c9b673 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html @@ -1,6 +1,6 @@ Impl in bdk_chain - Rust

Struct bdk_chain::Impl

source ·
pub struct Impl<T>(pub T);
Expand description

A wrapper that we use to impl remote traits for types in our crate or dependency crates.

Tuple Fields§

§0: T

Implementations§

source§

impl<T> Impl<T>

source

pub fn into_inner(self) -> T

Returns the inner T.

-

Trait Implementations§

source§

impl<T> Deref for Impl<T>

§

type Target = T

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<T> From<T> for Impl<T>

source§

fn from(value: T) -> Self

Converts to this type from the input type.
source§

impl<A: Anchor + DeserializeOwned> FromSql for Impl<A>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Amount>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<BlockHash>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Descriptor<DescriptorPublicKey>>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<DescriptorId>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Network>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<ScriptBuf>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Transaction>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Txid>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl<A: Anchor + Serialize> ToSql for Impl<A>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Amount>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<BlockHash>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Descriptor<DescriptorPublicKey>>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<DescriptorId>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Network>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<ScriptBuf>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Transaction>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Txid>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value

Auto Trait Implementations§

§

impl<T> Freeze for Impl<T>
where +

Trait Implementations§

source§

impl<T> Deref for Impl<T>

§

type Target = T

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<T> From<T> for Impl<T>

source§

fn from(value: T) -> Self

Converts to this type from the input type.
source§

impl<A: Anchor + DeserializeOwned> FromSql for Impl<A>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Amount>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<BlockHash>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Descriptor<DescriptorPublicKey>>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<DescriptorId>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Network>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<ScriptBuf>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Transaction>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl FromSql for Impl<Txid>

source§

fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

Converts SQLite value into Rust value.
source§

impl<A: Anchor + Serialize> ToSql for Impl<A>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Amount>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<BlockHash>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Descriptor<DescriptorPublicKey>>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<DescriptorId>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Network>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<ScriptBuf>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Transaction>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value
source§

impl ToSql for Impl<Txid>

source§

fn to_sql(&self) -> Result<ToSqlOutput<'_>>

Converts Rust value to SQLite value

Auto Trait Implementations§

§

impl<T> Freeze for Impl<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Impl<T>
where T: RefUnwindSafe,

§

impl<T> Send for Impl<T>
where T: Send,

§

impl<T> Sync for Impl<T>
where 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 939a9dfaf5..c0f9ebfb32 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 @@ -4,16 +4,16 @@ }
Expand description

Wrapper around an [electrum_client::ElectrumApi] which includes an internal in-memory 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]

+

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 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.

source

pub fn transaction_broadcast(&self, tx: &Transaction) -> Result<Txid, Error>

Broadcasts a transaction to the network.

This is a re-export of [ElectrumApi::transaction_broadcast].

-
source

pub fn full_scan<K: Ord + Clone>( +

source

pub fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: impl Into<FullScanRequest<K>>, stop_gap: usize, batch_size: usize, fetch_prev_txouts: bool @@ -34,9 +34,9 @@ does not own the inputs. Methods like CalculateFeeError::MissingTxOut error if those TxOuts are not present in the transaction graph. -

source

pub fn sync( +

source

pub fn sync<I: 'static>( &self, - request: SyncRequest, + request: impl Into<SyncRequest<I>>, batch_size: usize, fetch_prev_txouts: bool ) -> Result<SyncResult, Error>

Sync a set of scripts with the blockchain (via an Electrum client) for the data specified 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 b89ba19f10..0f4f8aa463 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 @@ -1,8 +1,9 @@ -bdk_esplora - Rust

Crate bdk_esplora

source ·
Expand description

§BDK Esplora

-

BDK Esplora extends esplora-client to update bdk_chain structures -from an Esplora server.

+bdk_esplora - Rust

Crate bdk_esplora

source ·
Expand description

§BDK Esplora

+

BDK Esplora extends esplora-client (with extension traits: EsploraExt and +EsploraAsyncExt) to update bdk_chain structures from an Esplora server.

+

The extension traits are primarily intended to satisfy SyncRequests with sync and +FullScanRequests with full_scan.

§Usage

-

There are two versions of the extension trait (blocking and async).

For blocking-only:

bdk_esplora = { version = "0.3", features = ["blocking"] }
 
@@ -17,16 +18,20 @@ from an Esplora server.

// for blocking
 use bdk_esplora::EsploraExt;
 // for async
-// use bdk_esplora::EsploraAsyncExt;
+use bdk_esplora::EsploraAsyncExt;

For full examples, refer to example-crates/wallet_esplora_blocking and example-crates/wallet_esplora_async.

-

This crate is used for updating structures of bdk_chain with data from an Esplora server.

-

The two primary methods are EsploraExt::sync and EsploraExt::full_scan. In most cases -EsploraExt::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 -has shown a user. EsploraExt::full_scan is meant to be used when importing or restoring a -keychain where the range of possibly used scripts is not known. In this case it is necessary to -scan all keychain scripts until a number (the “stop gap”) of unused scripts is discovered. For a -sync or full scan the user receives relevant blockchain data and output updates for bdk_chain -via a new TxGraph to be appended to any existing TxGraph data.

-

Refer to example_esplora for a complete example.

+

§Stop Gap

+

EsploraExt::full_scan takes in a stop_gap input which is defined as the maximum number of +consecutive unused script pubkeys to scan transactions for before stopping.

+

For example, with a stop_gap of 3, full_scan will keep scanning until it encounters 3 +consecutive script pubkeys with no associated transactions.

+

This follows the same approach as other Bitcoin-related software, +such as Electrum, +BTCPay Server, +and Sparrow.

+

A stop_gap of 0 will be treated as a stop_gap of 1.

+

§Async

+

Just like how EsploraExt extends the functionality of an +[esplora_client::BlockingClient], EsploraAsyncExt is the async version which extends +[esplora_client::AsyncClient].

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 108ab63259..3d2976769e 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 @@ -1,75 +1,70 @@ -EsploraAsyncExt in bdk_esplora - Rust

Trait bdk_esplora::EsploraAsyncExt

source ·
pub trait EsploraAsyncExt {
+EsploraAsyncExt in bdk_esplora - Rust

Trait bdk_esplora::EsploraAsyncExt

source ·
pub trait EsploraAsyncExt {
     // Required methods
-    fn full_scan<'life0, 'async_trait, K>(
+    fn full_scan<'life0, 'async_trait, K, R>(
         &'life0 self,
-        request: FullScanRequest<K>,
+        request: R,
         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,
+             R: 'async_trait + Into<FullScanRequest<K>> + Send,
              Self: 'async_trait,
              'life0: 'async_trait;
-    fn sync<'life0, 'async_trait>(
+    fn sync<'life0, 'async_trait, I, R>(
         &'life0 self,
-        request: SyncRequest,
+        request: R,
         parallel_requests: usize
-    ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
-       where Self: 'async_trait,
+    ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
+       where I: 'async_trait + Send,
+             R: 'async_trait + Into<SyncRequest<I>> + Send,
+             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>( +

Required Methods§

source

fn full_scan<'life0, 'async_trait, K, R>( &'life0 self, - request: FullScanRequest<K>, + request: R, 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, + R: 'async_trait + Into<FullScanRequest<K>> + 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
  • -
-

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 -make in parallel.

-
§Note
-

stop_gap is defined as “the maximum number of consecutive unused addresses”. -For example, with a stop_gap of 3, full_scan will keep scanning -until it encounters 3 consecutive script pubkeys with no associated transactions.

-

This follows the same approach as other Bitcoin-related software, -such as Electrum, -BTCPay Server, -and Sparrow.

-

A stop_gap of 0 will be treated as a stop_gap of 1.

-
source

fn sync<'life0, 'async_trait>( +

request provides the data required to perform a script-pubkey-based full scan +(see [FullScanRequest]). The full scan for each keychain (K) stops after a gap of +stop_gap script pubkeys with no associated transactions. parallel_requests specifies +the maximum number of HTTP requests to make in parallel.

+

Refer to crate-level docs for more.

+

source

fn sync<'life0, 'async_trait, I, R>( &'life0 self, - request: SyncRequest, + request: R, 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 + I: 'async_trait + Send, + R: 'async_trait + Into<SyncRequest<I>> + Send, 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.

-
    -
  • request: struct with data required to perform a spk-based blockchain client sync, see -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: 'async_trait,

Sync a set of scripts, txids, and/or outpoints against Esplora.

+

request provides the data required to perform a script-pubkey-based sync (see +[SyncRequest]). parallel_requests specifies the maximum number of HTTP requests to make +in parallel.

+

Refer to crate-level docs for more.

+

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, R>( &'life0 self, - request: FullScanRequest<K>, + request: R, 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, + R: 'async_trait + Into<FullScanRequest<K>> + Send, Self: 'async_trait, - 'life0: 'async_trait,

source§

fn sync<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

fn sync<'life0, 'async_trait, I, R>( &'life0 self, - request: SyncRequest, + request: R, 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 + I: 'async_trait + Send, + R: 'async_trait + Into<SyncRequest<I>> + Send, 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 bc0b24cf98..d7f5540f5e 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 @@ -1,60 +1,46 @@ -EsploraExt in bdk_esplora - Rust

Trait bdk_esplora::EsploraExt

source ·
pub trait EsploraExt {
+EsploraExt in bdk_esplora - Rust

Trait bdk_esplora::EsploraExt

source ·
pub trait EsploraExt {
     // Required methods
-    fn full_scan<K: Ord + Clone>(
+    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>(
         &self,
-        request: FullScanRequest<K>,
+        request: R,
         stop_gap: usize,
         parallel_requests: usize
-    ) -> Result<FullScanResult<K>, Error>;
-    fn sync(
+    ) -> Result<FullScanResult<K>, Error>;
+    fn sync<I: 'static, R: Into<SyncRequest<I>>>(
         &self,
-        request: SyncRequest,
+        request: R,
         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§

Required Methods§

source

fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>( &self, - request: FullScanRequest<K>, + request: R, 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
  • -
-

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 -make in parallel.

-
§Note
-

stop_gap is defined as “the maximum number of consecutive unused addresses”. -For example, with a stop_gap of 3, full_scan will keep scanning -until it encounters 3 consecutive script pubkeys with no associated transactions.

-

This follows the same approach as other Bitcoin-related software, -such as Electrum, -BTCPay Server, -and Sparrow.

-

A stop_gap of 0 will be treated as a stop_gap of 1.

-
source

fn sync( +

request provides the data required to perform a script-pubkey-based full scan +(see [FullScanRequest]). The full scan for each keychain (K) stops after a gap of +stop_gap script pubkeys with no associated transactions. parallel_requests specifies +the maximum number of HTTP requests to make in parallel.

+

Refer to crate-level docs for more.

+

source

fn sync<I: 'static, R: Into<SyncRequest<I>>>( &self, - request: SyncRequest, + request: R, 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.

-
    -
  • request: struct with data required to perform a spk-based blockchain client sync, see -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>( +) -> Result<SyncResult, Error>

Sync a set of scripts, txids, and/or outpoints against Esplora.

+

request provides the data required to perform a script-pubkey-based sync (see +[SyncRequest]). parallel_requests specifies the maximum number of HTTP requests to make +in parallel.

+

Refer to crate-level docs for more.

+

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl EsploraExt for BlockingClient

source§

fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>( &self, - request: FullScanRequest<K>, + request: R, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

source§

fn sync( +) -> Result<FullScanResult<K>, Error>

source§

fn sync<I: 'static, R: Into<SyncRequest<I>>>( &self, - request: SyncRequest, + request: R, 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/enum.FileError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/enum.FileError.html index 3e29613e44..9f8e23de8d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/enum.FileError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/enum.FileError.html @@ -7,7 +7,7 @@ }
Expand description

Error that occurs due to problems encountered with the file.

Variants§

§

Io(Error)

IO error, this may mean that the file is too short.

§

InvalidMagicBytes

Magic bytes do not match what is expected.

-

Fields

§got: Vec<u8>
§expected: Vec<u8>

Trait Implementations§

source§

impl Debug for FileError

source§

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

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

impl Display for FileError

source§

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

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

impl Error for FileError

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 From<Error> for FileError

source§

fn from(value: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Fields

§got: Vec<u8>
§expected: Vec<u8>

Trait Implementations§

source§

impl Debug for FileError

source§

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

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

impl Display for FileError

source§

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

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

impl Error for FileError

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 From<Error> for FileError

source§

fn from(value: Error) -> 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_file_store/struct.AggregateChangesetsError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.AggregateChangesetsError.html index 1858225ad8..4c027b0c72 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.AggregateChangesetsError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.AggregateChangesetsError.html @@ -4,7 +4,7 @@ }
Expand description

Fields§

§changeset: Option<C>

The partially-aggregated changeset.

§iter_error: IterError

The error returned by EntryIter.

-

Trait Implementations§

source§

impl<C: Debug> Debug for AggregateChangesetsError<C>

source§

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

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

impl<C> Display for AggregateChangesetsError<C>

source§

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

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

impl<C: Debug> Error for AggregateChangesetsError<C>

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

Auto Trait Implementations§

§

impl<C> Freeze for AggregateChangesetsError<C>
where +

Trait Implementations§

source§

impl<C: Debug> Debug for AggregateChangesetsError<C>

source§

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

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

impl<C> Display for AggregateChangesetsError<C>

source§

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

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

impl<C: Debug> Error for AggregateChangesetsError<C>

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

Auto Trait Implementations§

§

impl<C> Freeze for AggregateChangesetsError<C>
where C: Freeze,

§

impl<C> !RefUnwindSafe for AggregateChangesetsError<C>

§

impl<C> Send for AggregateChangesetsError<C>
where C: Send,

§

impl<C> Sync for AggregateChangesetsError<C>
where C: Sync,

§

impl<C> Unpin for AggregateChangesetsError<C>
where 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 dcd4957839..5670758c97 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: Merge + 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_hwi/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/index.html index d056e8c1cc..838078e811 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/index.html @@ -1,5 +1,5 @@ bdk_hwi - Rust

Crate bdk_hwi

source ·
Expand description

HWI Signer

-

This crate contains HWISigner, an implementation of a TransactionSigner to be +

This crate contains HWISigner, an implementation of a TransactionSigner to be used with hardware wallets.

let mut devices = HWIClient::enumerate()?;
diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/struct.HWISigner.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/struct.HWISigner.html
index 534e6c6f5b..12c3b90ad1 100644
--- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/struct.HWISigner.html
+++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_hwi/struct.HWISigner.html
@@ -4,12 +4,12 @@
     device: &HWIDevice,
     chain: HWIChain
 ) -> Result<HWISigner, Error>

Create a instance from the specified device and chain

-

Trait Implementations§

source§

impl Debug for HWISigner

source§

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

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

impl SignerCommon for HWISigner

source§

fn id(&self, _secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more
source§

impl TransactionSigner for HWISigner

Trait Implementations§

source§

impl Debug for HWISigner

source§

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

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

impl SignerCommon for HWISigner

source§

fn id(&self, _secp: &Secp256k1<All>) -> SignerId

Return the [SignerId] for this signer Read more
§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more
source§

impl TransactionSigner for HWISigner

source§

fn sign_transaction( &self, psbt: &mut Psbt, - _sign_options: &SignOptions, + _sign_options: &SignOptions, _secp: &Secp256k1<All> -) -> Result<(), SignerError>

Sign all the inputs of the psbt

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +) -> Result<(), SignerError>

Sign all the inputs of the psbt

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/descriptor/enum.Descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html index 89fa4e84cf..63362b6f4c 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 @@ -255,11 +255,11 @@ the predicate returned true for every key

FnMut(&'a Pk) -> bool, Pk: 'a,
Run a predicate on every key in the descriptor, returning whether the predicate returned true for any key
§

impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
where - Pk: MiniscriptKey,

§

fn from(inner: Bare<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
where - Pk: MiniscriptKey,

§

fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
where - Pk: MiniscriptKey,

§

fn from(inner: Sh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
where - Pk: MiniscriptKey,

§

fn from(inner: Tr<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
where - Pk: MiniscriptKey,

§

fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
where + Pk: MiniscriptKey,

§

fn from(inner: Bare<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
where + Pk: MiniscriptKey,

§

fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
where + Pk: MiniscriptKey,

§

fn from(inner: Sh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
where + Pk: MiniscriptKey,

§

fn from(inner: Tr<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
where + Pk: MiniscriptKey,

§

fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
where Pk: MiniscriptKey,

§

fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

Converts to this type from the input type.
§

impl<Pk> FromStr for Descriptor<Pk>
where 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
§

impl<Pk> FromTree for Descriptor<Pk>
where Pk: FromStrKey,

§

fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

Parse an expression tree into a descriptor.

diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html index f638253ba4..ea8d51d9aa 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html @@ -26,7 +26,7 @@
§

Miniscript(Error)

Miniscript error

§

Hex(HexToBytesError)

Hex decoding error

§

ExternalAndInternalAreTheSame

The provided wallet descriptors are identical

-

Trait Implementations§

source§

impl Debug for Error

source§

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

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

impl Display for Error

source§

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

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

impl Error for Error

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 From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<HexToBytesError> for Error

source§

fn from(err: HexToBytesError) -> Self

Converts to this type from the input type.
source§

impl From<KeyError> for Error

source§

fn from(key_error: KeyError) -> Error

Converts to this type from the input type.
source§

impl From<ParsePublicKeyError> for Error

source§

fn from(err: ParsePublicKeyError) -> Self

Converts to this type from the input type.
source§

impl From<PolicyError> for Error

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Error

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for Error

source§

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

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

impl Display for Error

source§

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

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

impl Error for Error

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 From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<HexToBytesError> for Error

source§

fn from(err: HexToBytesError) -> Self

Converts to this type from the input type.
source§

impl From<KeyError> for Error

source§

fn from(key_error: KeyError) -> Error

Converts to this type from the input type.
source§

impl From<ParsePublicKeyError> for Error

source§

fn from(err: ParsePublicKeyError) -> Self

Converts to this type from the input type.
source§

impl From<PolicyError> for Error

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Error

source§

fn eq(&self, other: &Error) -> 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 StructuralPartialEq for Error

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_wallet/descriptor/policy/enum.PolicyError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html index 6b52dab374..fc4dcdf540 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html @@ -12,7 +12,7 @@
§

AddOnPartialComplete

Can not add to an item that is Satisfaction::PartialComplete

§

MixedTimelockUnits

Can not merge CSV or timelock values unless both are less than or both are equal or greater than 500_000_000

§

IncompatibleConditions

Incompatible conditions (not currently used)

-

Trait Implementations§

source§

impl Debug for PolicyError

source§

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

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

impl Display for PolicyError

source§

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

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

impl Error for PolicyError

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 From<PolicyError> for CreateTxError

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.
source§

impl From<PolicyError> for Error

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.
source§

impl PartialEq for PolicyError

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for PolicyError

source§

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

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

impl Display for PolicyError

source§

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

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

impl Error for PolicyError

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 From<PolicyError> for CreateTxError

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.
source§

impl From<PolicyError> for Error

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.
source§

impl PartialEq for PolicyError

source§

fn eq(&self, other: &PolicyError) -> 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 PolicyError

source§

impl StructuralPartialEq for PolicyError

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_wallet/enum.AddUtxoError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html index 3608ce7374..ee215a87f3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html @@ -2,7 +2,7 @@ UnknownUtxo(OutPoint), }
Expand description

Error returned from TxBuilder::add_utxo and TxBuilder::add_utxos

Variants§

§

UnknownUtxo(OutPoint)

Happens when trying to spend an UTXO that is not in the internal database

-

Trait Implementations§

source§

impl Debug for AddUtxoError

source§

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

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

impl Display for AddUtxoError

source§

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

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

impl Error for AddUtxoError

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

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Debug for AddUtxoError

source§

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

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

impl Display for AddUtxoError

source§

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

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

impl Error for AddUtxoError

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

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/enum.ApplyBlockError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html index a91425ad73..0c2a59ea42 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html @@ -1,15 +1,15 @@ -ApplyBlockError in bdk_wallet - Rust

Enum bdk_wallet::ApplyBlockError

source ·
pub enum ApplyBlockError {
-    CannotConnect(CannotConnectError),
+ApplyBlockError in bdk_wallet - Rust

Enum bdk_wallet::ApplyBlockError

source ·
pub enum ApplyBlockError {
+    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.

-

Trait Implementations§

source§

impl Debug for ApplyBlockError

source§

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

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

impl Display for ApplyBlockError

source§

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

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

impl Error for ApplyBlockError

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

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Debug for ApplyBlockError

source§

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

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

impl Display for ApplyBlockError

source§

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

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

impl Error for ApplyBlockError

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

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/enum.CreateWithPersistError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html index c66013932d..efe83c1d07 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html @@ -1,10 +1,10 @@ CreateWithPersistError in bdk_wallet - Rust

Enum bdk_wallet::CreateWithPersistError

source ·
pub enum CreateWithPersistError<E> {
     Persist(E),
     Descriptor(DescriptorError),
-}
Expand description

Error type for PersistedWallet::create.

+}
Expand description

Error type for [PersistedWallet::create].

Variants§

§

Persist(E)

Error from persistence.

§

Descriptor(DescriptorError)

Occurs when the loaded changeset cannot construct Wallet.

-

Trait Implementations§

source§

impl<E: Debug> Debug for CreateWithPersistError<E>

source§

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

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

impl<E: Display> Display for CreateWithPersistError<E>

source§

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

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

impl<E: Debug + Display> Error for CreateWithPersistError<E>

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

Auto Trait Implementations§

§

impl<E> Freeze for CreateWithPersistError<E>
where +

Trait Implementations§

source§

impl<E: Debug> Debug for CreateWithPersistError<E>

source§

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

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

impl<E: Display> Display for CreateWithPersistError<E>

source§

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

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

impl<E: Debug + Display> Error for CreateWithPersistError<E>

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

Auto Trait Implementations§

§

impl<E> Freeze for CreateWithPersistError<E>
where E: Freeze,

§

impl<E> RefUnwindSafe for CreateWithPersistError<E>
where E: RefUnwindSafe,

§

impl<E> Send for CreateWithPersistError<E>
where E: Send,

§

impl<E> Sync for CreateWithPersistError<E>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html index c72d83add7..944f22e424 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html @@ -1,4 +1,4 @@ -LoadError in bdk_wallet - Rust

Enum bdk_wallet::LoadError

source ·
pub enum LoadError {
+LoadError in bdk_wallet - Rust

Enum bdk_wallet::LoadError

source ·
pub enum LoadError {
     Descriptor(DescriptorError),
     MissingNetwork,
     MissingGenesis,
@@ -10,9 +10,9 @@
 
§

MissingGenesis

Data loaded from persistence is missing genesis hash.

§

MissingDescriptor(KeychainKind)

Data loaded from persistence is missing descriptor.

§

Mismatch(LoadMismatch)

Data loaded is unexpected.

-

Trait Implementations§

source§

impl Debug for LoadError

source§

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

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

impl Display for LoadError

source§

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

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

impl Error for LoadError

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 From<LoadMismatch> for LoadError

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl PartialEq for LoadError

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for LoadError

source§

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

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

impl Display for LoadError

source§

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

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

impl Error for LoadError

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 From<LoadMismatch> for LoadError

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl PartialEq for LoadError

source§

fn eq(&self, other: &LoadError) -> 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 StructuralPartialEq for LoadError

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl StructuralPartialEq for LoadError

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/enum.LoadMismatch.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html index 1cab7af73a..633dd9337d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html @@ -1,4 +1,4 @@ -LoadMismatch in bdk_wallet - Rust

Enum bdk_wallet::LoadMismatch

source ·
pub enum LoadMismatch {
+LoadMismatch in bdk_wallet - Rust

Enum bdk_wallet::LoadMismatch

source ·
pub enum LoadMismatch {
     Network {
         loaded: Network,
         expected: Network,
@@ -19,13 +19,13 @@
 
§

Genesis

Genesis hash does not match.

Fields

§loaded: BlockHash

The genesis hash that is loaded.

§expected: BlockHash

The expected genesis hash.

-
§

Descriptor

Descriptor’s DescriptorId does not match.

+
§

Descriptor

Descriptor’s DescriptorId does not match.

Fields

§keychain: KeychainKind

Keychain identifying the descriptor.

§loaded: Option<ExtendedDescriptor>

The loaded descriptor.

§expected: Option<ExtendedDescriptor>

The expected descriptor.

-

Trait Implementations§

source§

impl Debug for LoadMismatch

source§

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

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

impl From<LoadMismatch> for LoadError

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl<E> From<LoadMismatch> for LoadWithPersistError<E>

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl PartialEq for LoadMismatch

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for LoadMismatch

source§

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

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

impl From<LoadMismatch> for LoadError

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl<E> From<LoadMismatch> for LoadWithPersistError<E>

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl PartialEq for LoadMismatch

source§

fn eq(&self, other: &LoadMismatch) -> 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 StructuralPartialEq for LoadMismatch

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl StructuralPartialEq for LoadMismatch

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/enum.LoadWithPersistError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html index 13b92f69af..f23a20a6fc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html @@ -1,10 +1,10 @@ LoadWithPersistError in bdk_wallet - Rust

Enum bdk_wallet::LoadWithPersistError

source ·
pub enum LoadWithPersistError<E> {
     Persist(E),
     InvalidChangeSet(LoadError),
-}
Expand description

Error type for PersistedWallet::load.

+}
Expand description

Error type for [PersistedWallet::load].

Variants§

§

Persist(E)

Error from persistence.

§

InvalidChangeSet(LoadError)

Occurs when the loaded changeset cannot construct Wallet.

-

Trait Implementations§

source§

impl<E: Debug> Debug for LoadWithPersistError<E>

source§

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

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

impl<E: Display> Display for LoadWithPersistError<E>

source§

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

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

impl<E: Debug + Display> Error for LoadWithPersistError<E>

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<E> From<LoadMismatch> for LoadWithPersistError<E>

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl<E: PartialEq> PartialEq for LoadWithPersistError<E>

source§

fn eq(&self, other: &LoadWithPersistError<E>) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl<E: Debug> Debug for LoadWithPersistError<E>

source§

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

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

impl<E: Display> Display for LoadWithPersistError<E>

source§

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

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

impl<E: Debug + Display> Error for LoadWithPersistError<E>

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<E> From<LoadMismatch> for LoadWithPersistError<E>

source§

fn from(mismatch: LoadMismatch) -> Self

Converts to this type from the input type.
source§

impl<E: PartialEq> PartialEq for LoadWithPersistError<E>

source§

fn eq(&self, other: &LoadWithPersistError<E>) -> 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<E> StructuralPartialEq for LoadWithPersistError<E>

Auto Trait Implementations§

§

impl<E> !Freeze for LoadWithPersistError<E>

§

impl<E> RefUnwindSafe for LoadWithPersistError<E>
where E: RefUnwindSafe,

§

impl<E> Send for LoadWithPersistError<E>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html index 5b85139117..a53a2bb0d2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html @@ -10,7 +10,7 @@
§

TransactionConfirmed(Txid)

Happens when trying to bump a transaction that is already confirmed

§

IrreplaceableTransaction(Txid)

Trying to replace a tx that has a sequence >= 0xFFFFFFFE

§

FeeRateUnavailable

Node doesn’t have data to estimate a fee rate

-

Trait Implementations§

source§

impl Debug for BuildFeeBumpError

source§

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

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

impl Display for BuildFeeBumpError

source§

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

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

impl Error for BuildFeeBumpError

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

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Debug for BuildFeeBumpError

source§

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

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

impl Display for BuildFeeBumpError

source§

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

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

impl Error for BuildFeeBumpError

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

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/error/enum.CreateTxError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html index c15705ed5e..38e9a774cb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html @@ -56,7 +56,7 @@ explicit origin provided

§

UnknownUtxo

Happens when trying to spend an UTXO that is not in the internal database

§

MissingNonWitnessUtxo(OutPoint)

Missing non_witness_utxo on foreign utxo for given OutPoint

§

MiniscriptPsbt(MiniscriptPsbtError)

Miniscript PSBT error

-

Trait Implementations§

source§

impl Debug for CreateTxError

source§

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

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

impl Display for CreateTxError

source§

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

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

impl Error for CreateTxError

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 From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<MiniscriptPsbtError> for CreateTxError

source§

fn from(err: MiniscriptPsbtError) -> Self

Converts to this type from the input type.
source§

impl From<PolicyError> for CreateTxError

source§

fn from(err: PolicyError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Debug for CreateTxError

source§

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

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

impl Display for CreateTxError

source§

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

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

impl Error for CreateTxError

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 From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for CreateTxError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<MiniscriptPsbtError> for CreateTxError

source§

fn from(err: MiniscriptPsbtError) -> Self

Converts to this type from the input type.
source§

impl From<PolicyError> for CreateTxError

source§

fn from(err: PolicyError) -> 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/error/enum.MiniscriptPsbtError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html index 6492622fba..20a4122ee9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html @@ -6,7 +6,7 @@

Variants§

§

Conversion(ConversionError)

Descriptor key conversion error

§

UtxoUpdate(UtxoUpdateError)

Return error type for PsbtExt::update_input_with_descriptor

§

OutputUpdate(OutputUpdateError)

Return error type for PsbtExt::update_output_with_descriptor

-

Trait Implementations§

source§

impl Clone for MiniscriptPsbtError

source§

fn clone(&self) -> MiniscriptPsbtError

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 MiniscriptPsbtError

source§

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

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

impl Display for MiniscriptPsbtError

source§

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

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

impl Error for MiniscriptPsbtError

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 From<MiniscriptPsbtError> for CreateTxError

source§

fn from(err: MiniscriptPsbtError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Clone for MiniscriptPsbtError

source§

fn clone(&self) -> MiniscriptPsbtError

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 MiniscriptPsbtError

source§

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

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

impl Display for MiniscriptPsbtError

source§

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

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

impl Error for MiniscriptPsbtError

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 From<MiniscriptPsbtError> for CreateTxError

source§

fn from(err: MiniscriptPsbtError) -> 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/export/struct.FullyNodedExport.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/export/struct.FullyNodedExport.html index f7916b60fa..ef5b23595f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/export/struct.FullyNodedExport.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/export/struct.FullyNodedExport.html @@ -20,8 +20,8 @@ for the oldest transaction it knows and use that as the earliest block to rescan returned will be 0.

source

pub fn descriptor(&self) -> String

Return the external descriptor

source

pub fn change_descriptor(&self) -> Option<String>

Return the internal descriptor, if present

-

Trait Implementations§

source§

impl Debug for FullyNodedExport

source§

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

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

impl<'de> Deserialize<'de> for FullyNodedExport

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 FullyNodedExport

source§

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

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

impl FromStr for FullyNodedExport

§

type Err = Error

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl Serialize for FullyNodedExport

source§

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

Trait Implementations§

source§

impl Debug for FullyNodedExport

source§

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

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

impl<'de> Deserialize<'de> for FullyNodedExport

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 FullyNodedExport

source§

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

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

impl FromStr for FullyNodedExport

§

type Err = Error

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl Serialize for FullyNodedExport

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

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 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/fn.wallet_name_from_descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/fn.wallet_name_from_descriptor.html index fb072d064f..8e0b6ba7bc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/fn.wallet_name_from_descriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/fn.wallet_name_from_descriptor.html @@ -1,4 +1,4 @@ -wallet_name_from_descriptor in bdk_wallet - Rust

Function bdk_wallet::wallet_name_from_descriptor

source ·
pub fn wallet_name_from_descriptor<T>(
+wallet_name_from_descriptor in bdk_wallet - Rust

Function bdk_wallet::wallet_name_from_descriptor

source ·
pub fn wallet_name_from_descriptor<T>(
     descriptor: T,
     change_descriptor: Option<T>,
     network: Network,
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 642da7a820..c408abfd75 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
@@ -184,7 +184,7 @@ 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§

  • pub extern crate bitcoin;
  • pub extern crate bdk_chain as chain;
  • pub extern crate bdk_file_store as file_store;
  • pub extern crate miniscript;
  • pub extern crate serde;
  • pub extern crate serde_json;
  • pub use descriptor::template;
  • pub use descriptor::HdKeyPaths;
  • pub use signer;
  • pub use bdk_chain::rusqlite;

Modules§

Macros§

  • Macro to write full descriptors with code
  • Macro to write descriptor fragments with code

Structs§

Enums§

Traits§

  • Trait to check if a value is below the dust limit. +

Re-exports§

  • pub extern crate bitcoin;
  • pub extern crate bdk_chain as chain;
  • pub extern crate bdk_file_store as file_store;
  • pub extern crate miniscript;
  • pub extern crate serde;
  • pub extern crate serde_json;
  • pub use descriptor::template;
  • pub use descriptor::HdKeyPaths;
  • pub use signer;
  • pub use bdk_chain::rusqlite;

Modules§

Macros§

  • Macro to write full descriptors with code
  • Macro to write descriptor fragments with code

Structs§

Enums§

Traits§

  • Trait to check if a value is below the dust limit. We are performing dust value calculation for a given script public key using rust-bitcoin to keep it compatible with network dust rate

Functions§

Type Aliases§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html index 2339f307a8..688279ca2e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html @@ -22,7 +22,7 @@ given [Network]

origin: Option<KeySource>, derivation_path: DerivationPath ) -> Result<DescriptorKey<Ctx>, KeyError>

Consume self and turn it into a DescriptorKey by adding the extra metadata, such as -key origin and derivation path
source§

impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>

source§

fn from(xprv: Xpriv) -> Self

Converts to this type from the input type.
source§

impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>

source§

fn from(xpub: Xpub) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<Ctx> Freeze for ExtendedKey<Ctx>

§

impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx>
where +key origin and derivation path

source§

impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>

source§

fn from(xprv: Xpriv) -> Self

Converts to this type from the input type.
source§

impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>

source§

fn from(xpub: Xpub) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<Ctx> Freeze for ExtendedKey<Ctx>

§

impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx>
where Ctx: RefUnwindSafe,

§

impl<Ctx> Send for ExtendedKey<Ctx>
where Ctx: Send,

§

impl<Ctx> Sync for ExtendedKey<Ctx>
where Ctx: Sync,

§

impl<Ctx> Unpin for ExtendedKey<Ctx>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html index d6ee49d1c2..7e83310b68 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html @@ -12,7 +12,7 @@
§

Message(String)

Custom error message

§

Bip32(Error)

BIP32 error

§

Miniscript(Error)

Miniscript error

-

Trait Implementations§

source§

impl Debug for KeyError

source§

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

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

impl Display for KeyError

source§

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

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

impl Error for KeyError

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 From<Error> for KeyError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for KeyError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<KeyError> for Error

source§

fn from(key_error: KeyError) -> Error

Converts to this type from the input type.
source§

impl PartialEq for KeyError

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for KeyError

source§

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

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

impl Display for KeyError

source§

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

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

impl Error for KeyError

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 From<Error> for KeyError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for KeyError

source§

fn from(err: Error) -> Self

Converts to this type from the input type.
source§

impl From<KeyError> for Error

source§

fn from(key_error: KeyError) -> Error

Converts to this type from the input type.
source§

impl PartialEq for KeyError

source§

fn eq(&self, other: &KeyError) -> 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 StructuralPartialEq for KeyError

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_wallet/keys/struct.GeneratedKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html index e4beab3cef..0f9ce8791a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html @@ -2,14 +2,14 @@

Implementations§

source§

impl<K, Ctx: ScriptContext> GeneratedKey<K, Ctx>

source

pub fn into_key(self) -> K

Consumes self and returns the key

Trait Implementations§

source§

impl<K: Clone, Ctx: ScriptContext> Clone for GeneratedKey<K, Ctx>

source§

fn clone(&self) -> GeneratedKey<K, Ctx>

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, Ctx: ScriptContext> Deref for GeneratedKey<K, Ctx>

§

type Target = K

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<Ctx, K> DerivableKey<Ctx> for GeneratedKey<K, Ctx>
where Ctx: ScriptContext, - K: DerivableKey<Ctx>,

source§

fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>

Consume self and turn it into an ExtendedKey
source§

fn into_descriptor_key( + K: DerivableKey<Ctx>,

source§

fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>

Consume self and turn it into an ExtendedKey
source§

fn into_descriptor_key( self, origin: Option<KeySource>, derivation_path: DerivationPath ) -> Result<DescriptorKey<Ctx>, KeyError>

Consume self and turn it into a DescriptorKey by adding the extra metadata, such as key origin and derivation path
source§

impl<Ctx, K> IntoDescriptorKey<Ctx> for GeneratedKey<K, Ctx>
where Ctx: ScriptContext, - K: IntoDescriptorKey<Ctx>,

source§

fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>

Turn the key into a DescriptorKey within the requested ScriptContext

Auto Trait Implementations§

§

impl<K, Ctx> Freeze for GeneratedKey<K, Ctx>
where + K: IntoDescriptorKey<Ctx>,

source§

fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>

Turn the key into a DescriptorKey within the requested ScriptContext

Auto Trait Implementations§

§

impl<K, Ctx> Freeze for GeneratedKey<K, Ctx>
where K: Freeze,

§

impl<K, Ctx> RefUnwindSafe for GeneratedKey<K, Ctx>

§

impl<K, Ctx> Send for GeneratedKey<K, Ctx>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html index cf6bee8a31..3a1f702e43 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html @@ -107,4 +107,4 @@ makes the compiler (correctly) fail.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for &str

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PrivateKey

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PublicKey

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for XOnlyPublicKey

source§

impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx> for (T, DerivationPath)

source§

impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx> for (T, KeySource, DerivationPath)

Implementors§

source§

impl<Ctx, K> IntoDescriptorKey<Ctx> for GeneratedKey<K, Ctx>
where Ctx: ScriptContext, K: IntoDescriptorKey<Ctx>,

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorKey<Ctx>

The “identity” conversion is used internally by some bdk_wallet::fragments

-
source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorPublicKey

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorSecretKey

\ No newline at end of file +
source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorPublicKey

source§

impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorSecretKey

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html index b781c92b5c..103e80b1c3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html @@ -1,2 +1,2 @@ -SCHEMAS_TABLE_NAME in bdk_wallet::rusqlite_impl - Rust

Constant bdk_wallet::rusqlite_impl::SCHEMAS_TABLE_NAME

source ·
pub const SCHEMAS_TABLE_NAME: &'static str;
Expand description

Table name for schemas.

+SCHEMAS_TABLE_NAME in bdk_wallet::rusqlite_impl - Rust

Constant bdk_wallet::rusqlite_impl::SCHEMAS_TABLE_NAME

pub const SCHEMAS_TABLE_NAME: &'static str;
Expand description

Table name for schemas.

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html index 0778117907..59793b065e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html @@ -1,4 +1,4 @@ -migrate_schema in bdk_wallet::rusqlite_impl - Rust

Function bdk_wallet::rusqlite_impl::migrate_schema

source ·
pub fn migrate_schema(
+migrate_schema in bdk_wallet::rusqlite_impl - Rust

Function bdk_wallet::rusqlite_impl::migrate_schema

pub fn migrate_schema(
     db_tx: &Transaction<'_>,
     schema_name: &str,
     versioned_scripts: &[&[&str]]
diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html
index 0eb25f1016..8b9753b918 100644
--- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html
+++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html
@@ -1,2 +1,2 @@
-bdk_wallet::rusqlite_impl - Rust

Module bdk_wallet::rusqlite_impl

source ·
Expand description

Module for stuff

+bdk_wallet::rusqlite_impl - Rust

Module bdk_wallet::rusqlite_impl

Expand description

Module for stuff

Constants§

Functions§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html index ae86f600e0..ee2d6178bb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html @@ -1,24 +1,24 @@ SignerWrapper in bdk_wallet::signer - Rust

Struct bdk_wallet::signer::SignerWrapper

source ·
pub struct SignerWrapper<S: Sized + Debug + Clone> { /* private fields */ }
Expand description

Wrapper to pair a signer with its context

Implementations§

source§

impl<S: Sized + Debug + Clone> SignerWrapper<S>

source

pub fn new(signer: S, ctx: SignerContext) -> Self

Create a wrapped signer from a signer and a context

-

Trait Implementations§

source§

impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>

source§

fn clone(&self) -> SignerWrapper<S>

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<S: Debug + Sized + Debug + Clone> Debug for SignerWrapper<S>

source§

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

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

impl<S: Sized + Debug + Clone> Deref for SignerWrapper<S>

§

type Target = S

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl InputSigner for SignerWrapper<DescriptorMultiXKey<Xpriv>>

Trait Implementations§

source§

impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>

source§

fn clone(&self) -> SignerWrapper<S>

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<S: Debug + Sized + Debug + Clone> Debug for SignerWrapper<S>

source§

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

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

impl<S: Sized + Debug + Clone> Deref for SignerWrapper<S>

§

type Target = S

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl InputSigner for SignerWrapper<DescriptorMultiXKey<Xpriv>>

source§

fn sign_input( &self, psbt: &mut Psbt, input_index: usize, sign_options: &SignOptions, secp: &Secp256k1<All> -) -> Result<(), SignerError>

Sign a single psbt input
source§

impl InputSigner for SignerWrapper<DescriptorXKey<Xpriv>>

source§

fn sign_input( +) -> Result<(), SignerError>

Sign a single psbt input
source§

impl InputSigner for SignerWrapper<DescriptorXKey<Xpriv>>

source§

fn sign_input( &self, psbt: &mut Psbt, input_index: usize, sign_options: &SignOptions, secp: &Secp256k1<All> -) -> Result<(), SignerError>

Sign a single psbt input
source§

impl InputSigner for SignerWrapper<PrivateKey>

source§

fn sign_input( +) -> Result<(), SignerError>

Sign a single psbt input
source§

impl InputSigner for SignerWrapper<PrivateKey>

source§

fn sign_input( &self, psbt: &mut Psbt, input_index: usize, sign_options: &SignOptions, secp: &Secp256k1<All> -) -> Result<(), SignerError>

Sign a single psbt input
source§

impl SignerCommon for SignerWrapper<DescriptorMultiXKey<Xpriv>>

source§

fn id(&self, secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more
source§

impl SignerCommon for SignerWrapper<DescriptorXKey<Xpriv>>

source§

fn id(&self, secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more
source§

impl SignerCommon for SignerWrapper<PrivateKey>

source§

fn id(&self, secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more

Auto Trait Implementations§

§

impl<S> Freeze for SignerWrapper<S>
where +) -> Result<(), SignerError>

Sign a single psbt input
source§

impl SignerCommon for SignerWrapper<DescriptorMultiXKey<Xpriv>>

source§

fn id(&self, secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more
source§

impl SignerCommon for SignerWrapper<DescriptorXKey<Xpriv>>

source§

fn id(&self, secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more
source§

impl SignerCommon for SignerWrapper<PrivateKey>

source§

fn id(&self, secp: &Secp256k1<All>) -> SignerId

Return the SignerId for this signer Read more
source§

fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

Return the secret key for the signer Read more

Auto Trait Implementations§

§

impl<S> Freeze for SignerWrapper<S>
where S: Freeze,

§

impl<S> RefUnwindSafe for SignerWrapper<S>
where S: RefUnwindSafe,

§

impl<S> Send for SignerWrapper<S>
where S: Send,

§

impl<S> Sync for SignerWrapper<S>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html index d563f0cbcb..57c4562b3b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html @@ -1,4 +1,4 @@ -AddressInfo in bdk_wallet - Rust

Struct bdk_wallet::AddressInfo

source ·
pub struct AddressInfo {
+AddressInfo in bdk_wallet - Rust

Struct bdk_wallet::AddressInfo

source ·
pub struct AddressInfo {
     pub index: u32,
     pub address: Address,
     pub keychain: KeychainKind,
@@ -68,9 +68,9 @@ network a simple comparison is not enough anymore. Instead this function can be
 let address: Address<NetworkUnchecked> = "32iVBEu4dxkUQk9dJbZUiBiQdmypcEyJRf".parse().unwrap();
 assert!(address.is_valid_for_network(Network::Bitcoin));
 assert_eq!(address.is_valid_for_network(Network::Testnet), false);
-

Trait Implementations§

source§

impl Debug for AddressInfo

source§

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

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

impl Deref for AddressInfo

§

type Target = Address

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Display for AddressInfo

source§

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

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

impl PartialEq for AddressInfo

source§

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

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Debug for AddressInfo

source§

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

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

impl Deref for AddressInfo

§

type Target = Address

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Display for AddressInfo

source§

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

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

impl PartialEq for AddressInfo

source§

fn eq(&self, other: &AddressInfo) -> 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 AddressInfo

source§

impl StructuralPartialEq for AddressInfo

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 AddressInfo

source§

impl StructuralPartialEq for AddressInfo

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
§

impl<Q, K> Equivalent<K> for Q
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html index 8199822677..bed43ff49f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html @@ -1,4 +1,4 @@ -Balance in bdk_wallet - Rust

Struct bdk_wallet::Balance

source ·
pub struct Balance {
+Balance in bdk_wallet - Rust

Struct bdk_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
§

impl<Q, K> Equivalent<K> for Q
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html index 72163b3ec4..bf0227dc1e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html @@ -2,23 +2,23 @@ pub descriptor: Option<Descriptor<DescriptorPublicKey>>, pub change_descriptor: Option<Descriptor<DescriptorPublicKey>>, pub network: Option<Network>, - pub local_chain: ChangeSet, - pub tx_graph: ChangeSet<ConfirmationBlockTime>, - pub indexer: ChangeSet, + pub local_chain: ChangeSet, + pub tx_graph: ChangeSet<ConfirmationBlockTime>, + pub indexer: ChangeSet, }
Expand description

A changeset for Wallet.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§descriptor: Option<Descriptor<DescriptorPublicKey>>

Descriptor for recipient addresses.

§change_descriptor: Option<Descriptor<DescriptorPublicKey>>

Descriptor for change addresses.

§network: Option<Network>

Stores the network type of the transaction data.

-
§local_chain: ChangeSet

Changes to the LocalChain.

-
§tx_graph: ChangeSet<ConfirmationBlockTime>

Changes to TxGraph.

-
§indexer: ChangeSet

Changes to KeychainTxOutIndex.

+
§local_chain: ChangeSet

Changes to the LocalChain.

+
§tx_graph: ChangeSet<ConfirmationBlockTime>

Changes to TxGraph.

+
§indexer: ChangeSet

Changes to KeychainTxOutIndex.

Implementations§

source§

impl ChangeSet

source

pub const WALLET_SCHEMA_NAME: &'static str = "bdk_wallet"

Schema name for wallet.

source

pub const WALLET_TABLE_NAME: &'static str = "bdk_wallet"

Name of table to store wallet descriptors and network.

source

pub fn from_sqlite(db_tx: &Transaction<'_>) -> Result<Self>

Recover a ChangeSet from sqlite database.

source

pub fn persist_to_sqlite(&self, db_tx: &Transaction<'_>) -> Result<()>

Persist ChangeSet to sqlite database.

Trait Implementations§

source§

impl Clone for ChangeSet

source§

fn clone(&self) -> ChangeSet

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 ChangeSet

source§

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

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

impl Default for ChangeSet

source§

fn default() -> ChangeSet

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

impl<'de> Deserialize<'de> for ChangeSet

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 From<ChangeSet<ConfirmationBlockTime>> for ChangeSet

source§

fn from(tx_graph: ChangeSet<ConfirmationBlockTime>) -> Self

Converts to this type from the input type.
source§

impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet

source§

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

Converts to this type from the input type.
source§

impl From<ChangeSet> for ChangeSet

source§

fn from(chain: ChangeSet) -> Self

Converts to this type from the input type.
source§

impl From<ChangeSet> for ChangeSet

source§

fn from(indexer: ChangeSet) -> Self

Converts to this type from the input type.
source§

impl Merge for ChangeSet

source§

fn merge(&mut self, other: Self)

Merge another ChangeSet into itself.

-
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 PartialEq for ChangeSet

source§

fn eq(&self, other: &ChangeSet) -> 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 From<ChangeSet<ConfirmationBlockTime>> for ChangeSet

source§

fn from(tx_graph: ChangeSet<ConfirmationBlockTime>) -> Self

Converts to this type from the input type.
source§

impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet

source§

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

Converts to this type from the input type.
source§

impl From<ChangeSet> for ChangeSet

source§

fn from(indexer: ChangeSet) -> Self

Converts to this type from the input type.
source§

impl From<ChangeSet> for ChangeSet

source§

fn from(chain: ChangeSet) -> Self

Converts to this type from the input type.
source§

impl Merge for ChangeSet

source§

fn merge(&mut self, other: Self)

Merge another ChangeSet into itself.

+
source§

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.
source§

impl PartialEq for ChangeSet

source§

fn eq(&self, other: &ChangeSet) -> 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 ChangeSet

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 StructuralPartialEq for ChangeSet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html index 8f0274bee2..2a9bb4c961 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html @@ -1,11 +1,11 @@ -CreateParams in bdk_wallet - Rust

Struct bdk_wallet::CreateParams

source ·
pub struct CreateParams { /* private fields */ }
Expand description

Parameters for Wallet::create or PersistedWallet::create.

+CreateParams in bdk_wallet - Rust

Struct bdk_wallet::CreateParams

source ·
pub struct CreateParams { /* private fields */ }
Expand description

Parameters for Wallet::create or [PersistedWallet::create].

Implementations§

source§

impl CreateParams

source

pub fn new_single<D: IntoWalletDescriptor + 'static>(descriptor: D) -> Self

Construct parameters with provided descriptor.

Default values:

  • change_descriptor = None
  • network = [Network::Bitcoin]
  • genesis_hash = None
  • -
  • lookahead = DEFAULT_LOOKAHEAD
  • +
  • lookahead = [DEFAULT_LOOKAHEAD]

Use this method only when building a wallet with a single descriptor. See also Wallet::create_single.

@@ -17,7 +17,7 @@ also DEFAULT_LOOKAHEAD +
  • lookahead = [DEFAULT_LOOKAHEAD]
  • source

    pub fn keymap(self, keychain: KeychainKind, keymap: KeyMap) -> Self

    Extend the given keychain’s keymap.

    source

    pub fn network(self, network: Network) -> Self

    Set network.

    @@ -26,13 +26,13 @@ also
    source

    pub fn create_wallet<Db>( self, db: &mut Db -) -> Result<PersistedWallet, <Wallet as PersistWith<Db>>::CreateError>
    where - Wallet: PersistWith<Db, CreateParams = Self>,

    Create PersistedWallet with the given Db.

    +) -> Result<PersistedWallet, <Wallet as PersistWith<Db>>::CreateError>
    where + Wallet: PersistWith<Db, CreateParams = Self>,

    Create PersistedWallet with the given Db.

    source

    pub async fn create_wallet_async<Db>( self, db: &mut Db -) -> Result<PersistedWallet, <Wallet as PersistAsyncWith<Db>>::CreateError>
    where - Wallet: PersistAsyncWith<Db, CreateParams = Self>,

    Create PersistedWallet with the given async Db.

    +) -> Result<PersistedWallet, <Wallet as PersistAsyncWith<Db>>::CreateError>
    where + Wallet: PersistAsyncWith<Db, CreateParams = Self>,

    Create PersistedWallet with the given async Db.

    source

    pub fn create_wallet_no_persist(self) -> Result<Wallet, DescriptorError>

    Create Wallet without persistence.

    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_wallet/struct.LoadParams.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html index 3e6468a32e..e0fd21ef41 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html @@ -1,6 +1,6 @@ -LoadParams in bdk_wallet - Rust

    Struct bdk_wallet::LoadParams

    source ·
    pub struct LoadParams { /* private fields */ }
    Expand description

    Parameters for Wallet::load or PersistedWallet::load.

    +LoadParams in bdk_wallet - Rust

    Struct bdk_wallet::LoadParams

    source ·
    pub struct LoadParams { /* private fields */ }
    Expand description

    Parameters for Wallet::load or [PersistedWallet::load].

    Implementations§

    source§

    impl LoadParams

    source

    pub fn new() -> Self

    Construct parameters with default values.

    -

    Default values: lookahead = DEFAULT_LOOKAHEAD

    +

    Default values: lookahead = [DEFAULT_LOOKAHEAD]

    source

    pub fn keymap(self, keychain: KeychainKind, keymap: KeyMap) -> Self

    Extend the given keychain’s keymap.

    source

    pub fn descriptor<D>( self, @@ -19,13 +19,13 @@ See also
    source

    pub fn load_wallet<Db>( self, db: &mut Db -) -> Result<Option<PersistedWallet>, <Wallet as PersistWith<Db>>::LoadError>
    where - Wallet: PersistWith<Db, LoadParams = Self>,

    Load PersistedWallet with the given Db.

    +) -> Result<Option<PersistedWallet>, <Wallet as PersistWith<Db>>::LoadError>
    where + Wallet: PersistWith<Db, LoadParams = Self>,

    Load PersistedWallet with the given Db.

    source

    pub async fn load_wallet_async<Db>( self, db: &mut Db -) -> Result<Option<PersistedWallet>, <Wallet as PersistAsyncWith<Db>>::LoadError>
    where - Wallet: PersistAsyncWith<Db, LoadParams = Self>,

    Load PersistedWallet with the given async Db.

    +) -> Result<Option<PersistedWallet>, <Wallet as PersistAsyncWith<Db>>::LoadError>
    where + Wallet: PersistAsyncWith<Db, LoadParams = Self>,

    Load PersistedWallet with the given async Db.

    source

    pub fn load_wallet_no_persist( self, changeset: ChangeSet 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 23e7e3d4b3..d10c18b927 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/struct.Update.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html index 4f5ace21c7..1075f498c3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html @@ -1,14 +1,14 @@ -Update in bdk_wallet - Rust

    Struct bdk_wallet::Update

    source ·
    pub struct Update {
    +Update in bdk_wallet - Rust

    Struct bdk_wallet::Update

    source ·
    pub struct Update {
         pub last_active_indices: BTreeMap<KeychainKind, u32>,
    -    pub graph: TxGraph<ConfirmationBlockTime>,
    -    pub chain: Option<CheckPoint>,
    +    pub graph: TxGraph<ConfirmationBlockTime>,
    +    pub chain: Option<CheckPoint>,
     }
    Expand description

    An update to Wallet.

    -

    It updates 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<ConfirmationBlockTime>

    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<ConfirmationBlockTime>

    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/struct.Wallet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html index ee2e219151..cfb2a57614 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html @@ -1,4 +1,4 @@ -Wallet in bdk_wallet - Rust

    Struct bdk_wallet::Wallet

    source ·
    pub struct Wallet { /* private fields */ }
    Expand description

    A Bitcoin wallet

    +Wallet in bdk_wallet - Rust

    Struct bdk_wallet::Wallet

    source ·
    pub struct Wallet { /* private fields */ }
    Expand description

    A Bitcoin wallet

    The Wallet acts as a way of coherently interfacing with output descriptors and related transactions. Its main components are:

      @@ -9,8 +9,8 @@ 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.

      -

    Implementations§

    source§

    impl Wallet

    source

    pub fn create_single<D>(descriptor: D) -> CreateParams
    where +script pubkeys. See [KeychainTxOutIndex::insert_descriptor()] for more details.

    +

    Implementations§

    source§

    impl Wallet

    source

    pub fn create_single<D>(descriptor: D) -> CreateParams
    where D: IntoWalletDescriptor + Clone + 'static,

    Build a new single descriptor Wallet.

    If you have previously created a wallet, use load instead.

    §Note
    @@ -32,7 +32,7 @@ equivalent of let wallet = Wallet::create_single(EXTERNAL_DESC) .network(Network::Testnet) .create_wallet(&mut conn)?;
    -

    source

    pub fn create<D>(descriptor: D, change_descriptor: D) -> CreateParams
    where +

    source

    pub fn create<D>(descriptor: D, change_descriptor: D) -> CreateParams
    where D: IntoWalletDescriptor + Clone + 'static,

    Build a new Wallet.

    If you have previously created a wallet, use load instead.

    §Synopsis
    @@ -47,9 +47,9 @@ equivalent of let wallet = Wallet::create(EXTERNAL_DESC, INTERNAL_DESC) .network(Network::Testnet) .create_wallet(&mut conn)?;
    -
    source

    pub fn create_with_params(params: CreateParams) -> Result<Self, DescriptorError>

    Create a new Wallet with given params.

    +
    source

    pub fn create_with_params(params: CreateParams) -> Result<Self, DescriptorError>

    Create a new Wallet with given params.

    Refer to Wallet::create for more.

    -
    source

    pub fn load() -> LoadParams

    Build Wallet by loading from persistence or ChangeSet.

    +
    source

    pub fn load() -> LoadParams

    Build Wallet by loading from persistence or ChangeSet.

    Note that the descriptor secret keys are not persisted to the db. You can add signers after-the-fact with Wallet::add_signer or Wallet::set_keymap. You can also add keys when building the wallet by using LoadParams::keymap. Finally @@ -77,21 +77,21 @@ which will try to populate signers if 101) .load_wallet(&mut conn)? .expect("must have data to load wallet");

    -
    source

    pub fn load_with_params( +

    source

    pub fn load_with_params( changeset: ChangeSet, params: LoadParams ) -> Result<Option<Self>, LoadError>

    Load Wallet from the given previously persisted ChangeSet and params.

    Refer to Wallet::load for more.

    -
    source

    pub fn network(&self) -> Network

    Get the Bitcoin network the wallet is using.

    -
    source

    pub fn keychains( +

    source

    pub fn network(&self) -> Network

    Get the Bitcoin network the wallet is using.

    +
    source

    pub fn keychains( &self ) -> impl Iterator<Item = (KeychainKind, &ExtendedDescriptor)>

    Iterator over all keychains in this wallet

    -
    source

    pub fn peek_address(&self, keychain: KeychainKind, index: u32) -> AddressInfo

    Peek an address of the given keychain at index without revealing it.

    +
    source

    pub fn peek_address(&self, keychain: KeychainKind, index: u32) -> AddressInfo

    Peek an address of the given keychain at index without revealing it.

    For non-wildcard descriptors this returns the same address at every provided index.

    §Panics

    This panics when the caller requests for an address of derivation index greater than the BIP32 max index.

    -
    source

    pub fn reveal_next_address(&mut self, keychain: KeychainKind) -> AddressInfo

    Attempt to reveal the next address of the given keychain.

    +
    source

    pub fn reveal_next_address(&mut self, keychain: KeychainKind) -> AddressInfo

    Attempt to reveal the next address of the given keychain.

    This will increment the keychain’s derivation index. If the keychain’s descriptor doesn’t contain a wildcard or every address is already revealed up to the maximum derivation index defined in BIP32, @@ -110,7 +110,7 @@ wallet.persist(&mut conn).expect(// Now it's safe to show the user their next address! println!("Next address: {}", next_address.address);

    -
    source

    pub fn reveal_addresses_to( +

    source

    pub fn reveal_addresses_to( &mut self, keychain: KeychainKind, index: u32 @@ -121,50 +121,50 @@ possible index. If all addresses up to the given index are already no new addresses are returned.

    WARNING: To avoid address reuse you must persist the changes resulting from one or more calls to this method before closing the wallet. See Wallet::reveal_next_address.

    -

    source

    pub fn next_unused_address(&mut self, keychain: KeychainKind) -> AddressInfo

    Get the next unused address for the given keychain, i.e. the address with the lowest +

    source

    pub fn next_unused_address(&mut self, keychain: KeychainKind) -> AddressInfo

    Get the next unused address for the given keychain, i.e. the address with the lowest derivation index that hasn’t been used.

    This will attempt to derive and reveal a new address if no newly revealed addresses are available. See also reveal_next_address.

    WARNING: To avoid address reuse you must persist the changes resulting from one or more calls to this method before closing the wallet. See Wallet::reveal_next_address.

    -
    source

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

    Marks an address used of the given keychain at index.

    +
    source

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

    Marks an address used of the given keychain at index.

    Returns whether the given index was present and then removed from the unused set.

    -
    source

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

    Undoes the effect of mark_used and returns whether the index was inserted +

    source

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

    Undoes the effect of mark_used and returns whether the index was inserted back into the unused set.

    Since this is only a superficial marker, it will have no effect if the address at the given index was actually used, i.e. the wallet has previously indexed a tx output for the derived spk.

    -
    source

    pub fn list_unused_addresses( +

    source

    pub fn list_unused_addresses( &self, keychain: KeychainKind ) -> impl DoubleEndedIterator<Item = AddressInfo> + '_

    List addresses that are revealed but unused.

    Note if the returned iterator is empty you can reveal more addresses by using reveal_next_address or reveal_addresses_to.

    -
    source

    pub fn is_mine(&self, script: ScriptBuf) -> bool

    Return whether or not a script is part of this wallet (either internal or external)

    -
    source

    pub fn derivation_of_spk(&self, spk: ScriptBuf) -> Option<(KeychainKind, u32)>

    Finds how the wallet derived the script pubkey spk.

    +
    source

    pub fn is_mine(&self, script: ScriptBuf) -> bool

    Return whether or not a script is part of this wallet (either internal or external)

    +
    source

    pub fn derivation_of_spk(&self, spk: ScriptBuf) -> Option<(KeychainKind, u32)>

    Finds how the wallet derived the script pubkey spk.

    Will only return Some(_) if the wallet has given out the spk.

    -
    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).

    +
    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 all_unbounded_spk_iters( +

    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.

    Note carefully that iterators go over all script pubkeys on the keychains (not what script pubkeys the wallet is storing internally).

    -
    source

    pub fn unbounded_spk_iter( +

    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 +

    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.

    -
    source

    pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut)

    Inserts a [TxOut] at [OutPoint] into the wallet’s transaction graph.

    +
    source

    pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut)

    Inserts a [TxOut] at [OutPoint] into the wallet’s transaction graph.

    This is used for providing a previous output’s value so that we can use calculate_fee or calculate_fee_rate on a given transaction. Outputs inserted with this method will not be returned in list_unspent or list_output.

    @@ -173,10 +173,10 @@ insert TxOuts that you trust the values for!

    You must persist the changes resulting from one or more calls to this method if you need the inserted TxOut data to be reloaded after closing the wallet. See Wallet::reveal_next_address.

    -
    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.

    +) -> 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.

    @@ -186,10 +186,10 @@ manually insert the TxOut(s) into the tx graph using the
    let tx = &psbt.clone().extract_tx().expect("tx");
     let fee = wallet.calculate_fee(tx).expect("fee");
    -
    source

    pub fn calculate_fee_rate( +

    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.

    @@ -199,7 +199,7 @@ manually insert the TxOut(s) into the tx graph using the
    let tx = &psbt.clone().extract_tx().expect("tx");
     let fee_rate = wallet.calculate_fee_rate(tx).expect("fee rate");
    -
    source

    pub fn sent_and_received(&self, tx: &Transaction) -> (Amount, Amount)

    Compute the tx’s sent and received [Amount]s.

    +
    source

    pub fn sent_and_received(&self, tx: &Transaction) -> (Amount, Amount)

    Compute the tx’s sent and received [Amount]s.

    This method returns a tuple (sent, received). Sent is the sum of the txin amounts that spend from previous txouts tracked by this wallet. Received is the summation of this tx’s outputs that send to script pubkeys tracked by this wallet.

    @@ -209,15 +209,15 @@ of this tx’s outputs that send to script pubkeys tracked by this wallet.

    let tx = &psbt.clone().extract_tx().expect("tx");
     let (sent, received) = wallet.sent_and_received(tx);
    -
    source

    pub fn get_tx( +

    source

    pub fn get_tx( &self, txid: Txid -) -> Option<CanonicalTx<'_, Arc<Transaction>, ConfirmationBlockTime>>

    Get a single transaction from the wallet as a CanonicalTx (if the transaction exists).

    +) -> Option<CanonicalTx<'_, Arc<Transaction>, ConfirmationBlockTime>>

    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.
    • @@ -250,16 +250,16 @@ the transaction was last seen in the mempool is provided. last_seen, ), }
    -
    source

    pub fn insert_checkpoint( +

    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 if you need the inserted checkpoint data to be reloaded after closing the wallet. See Wallet::reveal_next_address.

    -
    source

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

    Add a transaction to the wallet’s internal view of the chain. This stages the change, +

    source

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

    Add a transaction to the wallet’s internal view of the chain. This stages the change, you must persist it later.

    This method inserts the given tx and returns whether anything changed after insertion, which will be false if the same transaction already exists in the wallet’s transaction @@ -268,26 +268,26 @@ graph. Any changes are staged but not committed.

    By default the inserted tx won’t be considered “canonical” because it’s not known whether the transaction exists in the best chain. To know whether it exists, the tx must be broadcast to the network and the wallet synced via a chain source.

    -
    source

    pub fn transactions( +

    source

    pub fn transactions( &self -) -> impl Iterator<Item = CanonicalTx<'_, Arc<Transaction>, ConfirmationBlockTime>> + '_

    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 +) -> impl Iterator<Item = CanonicalTx<'_, Arc<Transaction>, ConfirmationBlockTime>> + '_

    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( +

    source

    pub fn add_signer( &mut self, keychain: KeychainKind, ordering: SignerOrdering, signer: Arc<dyn TransactionSigner> )

    Add an external signer

    See the signer module for an example.

    -
    source

    pub fn set_keymap(&mut self, keychain: KeychainKind, keymap: KeyMap)

    Set the keymap for a given keychain.

    +
    source

    pub fn set_keymap(&mut self, keychain: KeychainKind, keymap: KeyMap)

    Set the keymap for a given keychain.

    Note this does nothing if the given keychain has no descriptor because we won’t know the context (segwit, taproot, etc) in which to create signatures.

    -
    source

    pub fn set_keymaps( +

    source

    pub fn set_keymaps( &mut self, keymaps: impl IntoIterator<Item = (KeychainKind, KeyMap)> )

    Set the keymap for each keychain.

    -
    source

    pub fn get_signers(&self, keychain: KeychainKind) -> Arc<SignersContainer>

    Get the signers

    +
    source

    pub fn get_signers(&self, keychain: KeychainKind) -> Arc<SignersContainer>

    Get the signers

    §Example
    let descriptor = "wpkh(tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/1'/0'/0/*)";
     let change_descriptor = "wpkh(tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/1'/0'/1/*)";
    @@ -300,7 +300,7 @@ know the context (segwit, taproot, etc) in which to create signatures.

    } Ok::<(), Box<dyn std::error::Error>>(())
    -
    source

    pub fn build_tx(&mut self) -> TxBuilder<'_, DefaultCoinSelectionAlgorithm>

    Start building a transaction.

    +
    source

    pub fn build_tx(&mut self) -> TxBuilder<'_, DefaultCoinSelectionAlgorithm>

    Start building a transaction.

    This returns a blank TxBuilder from which you can specify the parameters for the transaction.

    §Example
    let psbt = {
    @@ -311,7 +311,7 @@ know the context (segwit, taproot, etc) in which to create signatures.

    }; // sign and broadcast ...
    -
    source

    pub fn build_fee_bump( +

    source

    pub fn build_fee_bump( &mut self, txid: Txid ) -> Result<TxBuilder<'_, DefaultCoinSelectionAlgorithm>, BuildFeeBumpError>

    Bump the fee of a transaction previously created with this wallet.

    @@ -339,7 +339,7 @@ pre-populated with the inputs and outputs of the original transaction.

    let _ = wallet.sign(&mut psbt, SignOptions::default())?; let fee_bumped_tx = psbt.extract_tx(); // broadcast fee_bumped_tx to replace original
    -
    source

    pub fn sign( +

    source

    pub fn sign( &self, psbt: &mut Psbt, sign_options: SignOptions @@ -357,15 +357,15 @@ in this library will.

    }; let finalized = wallet.sign(&mut psbt, SignOptions::default())?; assert!(finalized, "we should have signed all the inputs"); -

    source

    pub fn policies( +

    source

    pub fn policies( &self, keychain: KeychainKind ) -> Result<Option<Policy>, DescriptorError>

    Return the spending policies for the wallet’s descriptor

    -
    source

    pub fn public_descriptor(&self, keychain: KeychainKind) -> &ExtendedDescriptor

    Returns the descriptor used to create addresses for a particular keychain.

    +
    source

    pub fn public_descriptor(&self, keychain: KeychainKind) -> &ExtendedDescriptor

    Returns the descriptor used to create addresses for a particular keychain.

    It’s the “public” version of the wallet’s descriptor, meaning a new descriptor that has the same structure but with the all secret keys replaced by their corresponding public key. This can be used to build a watch-only version of a wallet.

    -
    source

    pub fn finalize_psbt( +

    source

    pub fn finalize_psbt( &self, psbt: &mut Psbt, sign_options: SignOptions @@ -376,59 +376,59 @@ and BIP for further information.

    Returns true if the PSBT could be finalized, and false otherwise.

    The SignOptions can be used to tweak the behavior of the finalizer.

    -

    source

    pub fn secp_ctx(&self) -> &Secp256k1<All>

    Return the secp256k1 context used for all signing operations

    -
    source

    pub fn derivation_index(&self, keychain: KeychainKind) -> Option<u32>

    The derivation index of this wallet. It will return None if it has not derived any addresses. +

    source

    pub fn secp_ctx(&self) -> &Secp256k1<All>

    Return the secp256k1 context used for all signing operations

    +
    source

    pub fn derivation_index(&self, keychain: KeychainKind) -> Option<u32>

    The derivation index of this wallet. It will return None if it has not derived any addresses. Otherwise, it will return the index of the highest address it has derived.

    -
    source

    pub fn next_derivation_index(&self, keychain: KeychainKind) -> u32

    The index of the next address that you would get if you were to ask the wallet for a new address

    -
    source

    pub fn cancel_tx(&mut self, tx: &Transaction)

    Informs the wallet that you no longer intend to broadcast a tx that was built from it.

    +
    source

    pub fn next_derivation_index(&self, keychain: KeychainKind) -> u32

    The index of the next address that you would get if you were to ask the wallet for a new address

    +
    source

    pub fn cancel_tx(&mut self, tx: &Transaction)

    Informs the wallet that you no longer intend to broadcast a tx that was built from it.

    This frees up the change address used when creating the tx for use in future transactions.

    -
    source

    pub fn get_psbt_input( +

    source

    pub fn get_psbt_input( &self, utxo: LocalOutput, sighash_type: Option<PsbtSighashType>, only_witness_utxo: bool ) -> Result<Input, CreateTxError>

    get the corresponding PSBT Input for a LocalUtxo

    -
    source

    pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String

    Return the checksum of the public descriptor associated to keychain

    +
    source

    pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String

    Return the checksum of the public descriptor associated to keychain

    Internally calls Self::public_descriptor to fetch the right descriptor

    -
    source

    pub fn apply_update( +

    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<ConfirmationBlockTime>

    Get a reference to the inner TxGraph.

    -
    source

    pub fn unbroadcast_transactions( +

    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<ConfirmationBlockTime>

    Get a reference to the inner [TxGraph].

    +
    source

    pub fn unbroadcast_transactions( &self -) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationBlockTime>>

    Iterate over transactions in the wallet that are unseen and unanchored likely +) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationBlockTime>>

    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 apply_block( +

    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.

    -
    source

    pub fn apply_block_connected_to( +

    source

    pub fn apply_block_connected_to( &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.

    -
    source

    pub fn apply_unconfirmed_txs<'t>( +

    source

    pub fn apply_unconfirmed_txs<'t>( &mut self, unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)> )

    Apply relevant unconfirmed transactions to the wallet.

    @@ -440,45 +440,47 @@ when there is conflicting unconfirmed transactions. The transaction with the lat

    WARNING: You must persist the changes resulting from one or more calls to this method 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§

    impl Wallet

    Methods to construct sync/full-scan requests for spk-based chain sources.

    +
    source

    pub fn start_sync_with_revealed_spks( + &self +) -> SyncRequestBuilder<(KeychainKind, u32)>

    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) -> FullScanRequestBuilder<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<ConfirmationBlockTime>> for Wallet

    source§

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

    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
    source§

    impl PersistWith<Connection> for Wallet

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationBlockTime>> for Wallet

    source§

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

    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
    source§

    impl PersistWith<Connection> for Wallet

    §

    type CreateParams = CreateParams

    Parameters for [PersistWith::create].
    §

    type LoadParams = LoadParams

    Parameters for [PersistWith::load].
    §

    type CreateError = CreateWithPersistError<Error>

    Error type of [PersistWith::create].
    §

    type LoadError = LoadWithPersistError<Error>

    Error type of [PersistWith::load].
    §

    type PersistError = Error

    Error type of [PersistWith::persist].
    source§

    fn create( db: &mut Connection, - params: Self::CreateParams -) -> Result<Self, Self::CreateError>

    Initialize the Db and create Self.
    source§

    fn load( + params: Self::CreateParams +) -> Result<Self, Self::CreateError>

    Initialize the Db and create Self.
    source§

    fn load( db: &mut Connection, - params: Self::LoadParams -) -> Result<Option<Self>, Self::LoadError>

    Initialize the Db and load a previously-persisted Self.
    source§

    fn persist( + params: Self::LoadParams +) -> Result<Option<Self>, Self::LoadError>

    Initialize the Db and load a previously-persisted Self.
    source§

    fn persist( db: &mut Connection, - changeset: &<Self as Staged>::ChangeSet -) -> Result<(), Self::PersistError>

    Persist changes to the Db.
    source§

    impl PersistWith<Store<ChangeSet>> for Wallet

    §

    type CreateParams = CreateParams

    Parameters for PersistWith::create.
    §

    type LoadParams = LoadParams

    Parameters for PersistWith::load.
    §

    type CreateError = CreateWithPersistError<Error>

    Error type of PersistWith::create.
    §

    type LoadError = LoadWithPersistError<AggregateChangesetsError<ChangeSet>>

    Error type of PersistWith::load.
    §

    type PersistError = Error

    Error type of PersistWith::persist.
    source§

    fn create( - db: &mut Store<ChangeSet>, - params: Self::CreateParams -) -> Result<Self, Self::CreateError>

    Initialize the Db and create Self.
    source§

    fn load( - db: &mut Store<ChangeSet>, - params: Self::LoadParams -) -> Result<Option<Self>, Self::LoadError>

    Initialize the Db and load a previously-persisted Self.
    source§

    fn persist( - db: &mut Store<ChangeSet>, - changeset: &<Self as Staged>::ChangeSet -) -> Result<(), Self::PersistError>

    Persist changes to the Db.
    source§

    impl<'c> PersistWith<Transaction<'c>> for Wallet

    §

    type CreateParams = CreateParams

    Parameters for PersistWith::create.
    §

    type LoadParams = LoadParams

    Parameters for PersistWith::load.
    §

    type CreateError = CreateWithPersistError<Error>

    Error type of PersistWith::create.
    §

    type LoadError = LoadWithPersistError<Error>

    Error type of PersistWith::load.
    §

    type PersistError = Error

    Error type of PersistWith::persist.
    source§

    fn create( + changeset: &<Self as Staged>::ChangeSet +) -> Result<(), Self::PersistError>

    Persist changes to the Db.
    source§

    impl PersistWith<Store<ChangeSet>> for Wallet

    §

    type CreateParams = CreateParams

    Parameters for [PersistWith::create].
    §

    type LoadParams = LoadParams

    Parameters for [PersistWith::load].
    §

    type CreateError = CreateWithPersistError<Error>

    Error type of [PersistWith::create].
    §

    type LoadError = LoadWithPersistError<AggregateChangesetsError<ChangeSet>>

    Error type of [PersistWith::load].
    §

    type PersistError = Error

    Error type of [PersistWith::persist].
    source§

    fn create( + db: &mut Store<ChangeSet>, + params: Self::CreateParams +) -> Result<Self, Self::CreateError>

    Initialize the Db and create Self.
    source§

    fn load( + db: &mut Store<ChangeSet>, + params: Self::LoadParams +) -> Result<Option<Self>, Self::LoadError>

    Initialize the Db and load a previously-persisted Self.
    source§

    fn persist( + db: &mut Store<ChangeSet>, + changeset: &<Self as Staged>::ChangeSet +) -> Result<(), Self::PersistError>

    Persist changes to the Db.
    source§

    impl<'c> PersistWith<Transaction<'c>> for Wallet

    §

    type CreateParams = CreateParams

    Parameters for [PersistWith::create].
    §

    type LoadParams = LoadParams

    Parameters for [PersistWith::load].
    §

    type CreateError = CreateWithPersistError<Error>

    Error type of [PersistWith::create].
    §

    type LoadError = LoadWithPersistError<Error>

    Error type of [PersistWith::load].
    §

    type PersistError = Error

    Error type of [PersistWith::persist].
    source§

    fn create( db: &mut Transaction<'c>, - params: Self::CreateParams -) -> Result<Self, Self::CreateError>

    Initialize the Db and create Self.
    source§

    fn load( + params: Self::CreateParams +) -> Result<Self, Self::CreateError>

    Initialize the Db and create Self.
    source§

    fn load( conn: &mut Transaction<'c>, - params: Self::LoadParams -) -> Result<Option<Self>, Self::LoadError>

    Initialize the Db and load a previously-persisted Self.
    source§

    fn persist( + params: Self::LoadParams +) -> Result<Option<Self>, Self::LoadError>

    Initialize the Db and load a previously-persisted Self.
    source§

    fn persist( db: &mut Transaction<'c>, - changeset: &<Self as Staged>::ChangeSet -) -> Result<(), Self::PersistError>

    Persist changes to the Db.
    source§

    impl Staged for Wallet

    §

    type ChangeSet = ChangeSet

    Type for staged changes.
    source§

    fn staged(&mut self) -> &mut Self::ChangeSet

    Get mutable reference of staged changes.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + changeset: &<Self as Staged>::ChangeSet +) -> Result<(), Self::PersistError>

    Persist changes to the Db.
    source§

    impl Staged for Wallet

    §

    type ChangeSet = ChangeSet

    Type for staged changes.
    source§

    fn staged(&mut self) -> &mut Self::ChangeSet

    Get mutable reference of staged changes.

    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/tx_builder/enum.AddUtxoError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html index 02057add81..83b1845478 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html @@ -2,7 +2,7 @@ UnknownUtxo(OutPoint), }
    Expand description

    Error returned from TxBuilder::add_utxo and TxBuilder::add_utxos

    Variants§

    §

    UnknownUtxo(OutPoint)

    Happens when trying to spend an UTXO that is not in the internal database

    -

    Trait Implementations§

    source§

    impl Debug for AddUtxoError

    source§

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

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

    impl Display for AddUtxoError

    source§

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

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

    impl Error for AddUtxoError

    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

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for AddUtxoError

    source§

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

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

    impl Display for AddUtxoError

    source§

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

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

    impl Error for AddUtxoError

    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

    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/type.PersistedWallet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/type.PersistedWallet.html index f7c9aba424..b5ec9c3c3d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/type.PersistedWallet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/type.PersistedWallet.html @@ -1,2 +1,2 @@ -PersistedWallet in bdk_wallet - Rust

    Type Alias bdk_wallet::PersistedWallet

    source ·
    pub type PersistedWallet = Persisted<Wallet>;
    Expand description

    Represents a persisted wallet.

    +PersistedWallet in bdk_wallet - Rust

    Type Alias bdk_wallet::PersistedWallet

    source ·
    pub type PersistedWallet = Persisted<Wallet>;
    Expand description

    Represents a persisted wallet.

    Aliased Type§

    struct PersistedWallet { /* private fields */ }
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.CoinSelectionAlgo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.CoinSelectionAlgo.html index a0ba70ea8d..e4c727f217 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.CoinSelectionAlgo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.CoinSelectionAlgo.html @@ -4,7 +4,7 @@ OldestFirst, NewestFirst, BranchAndBound, -}

    Variants§

    §

    LargestFirst

    §

    SmallestFirst

    §

    OldestFirst

    §

    NewestFirst

    §

    BranchAndBound

    Trait Implementations§

    source§

    impl Clone for CoinSelectionAlgo

    source§

    fn clone(&self) -> CoinSelectionAlgo

    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 CoinSelectionAlgo

    source§

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

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

    impl Default for CoinSelectionAlgo

    source§

    fn default() -> CoinSelectionAlgo

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

    impl Display for CoinSelectionAlgo

    source§

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

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

    impl FromStr for CoinSelectionAlgo

    §

    type Err = Error

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, Self::Err>

    Parses a string s to return a value of this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +}

    Variants§

    §

    LargestFirst

    §

    SmallestFirst

    §

    OldestFirst

    §

    NewestFirst

    §

    BranchAndBound

    Trait Implementations§

    source§

    impl Clone for CoinSelectionAlgo

    source§

    fn clone(&self) -> CoinSelectionAlgo

    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 CoinSelectionAlgo

    source§

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

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

    impl Default for CoinSelectionAlgo

    source§

    fn default() -> CoinSelectionAlgo

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

    impl Display for CoinSelectionAlgo

    source§

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

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

    impl FromStr for CoinSelectionAlgo

    §

    type Err = Error

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, Self::Err>

    Parses a string s to return a value of this type. 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_cli/enum.Keychain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.Keychain.html index e4316a7cf2..da1d337243 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.Keychain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/enum.Keychain.html @@ -1,8 +1,8 @@ Keychain in example_cli - Rust

    Enum example_cli::Keychain

    source ·
    pub enum Keychain {
         External,
         Internal,
    -}

    Variants§

    §

    External

    §

    Internal

    Trait Implementations§

    source§

    impl Clone for Keychain

    source§

    fn clone(&self) -> Keychain

    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 Keychain

    source§

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

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

    impl<'de> Deserialize<'de> for Keychain

    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 Keychain

    source§

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

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

    impl Ord for Keychain

    source§

    fn cmp(&self, other: &Keychain) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +}

    Variants§

    §

    External

    §

    Internal

    Trait Implementations§

    source§

    impl Clone for Keychain

    source§

    fn clone(&self) -> Keychain

    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 Keychain

    source§

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

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

    impl<'de> Deserialize<'de> for Keychain

    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 Keychain

    source§

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

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

    impl Ord for Keychain

    source§

    fn cmp(&self, other: &Keychain) -> 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 PartialEq for Keychain

    source§

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

    This method tests for self and other values to be equal, and is used 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 376264b1de..82ba32e031 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<O: ChainOracle>(
    +create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<O: ChainOracle>(
         graph: &mut KeychainTxGraph,
         chain: &O,
         assets: &Assets,
    @@ -6,4 +6,4 @@
         address: Address,
         value: u64
     ) -> Result<(Psbt, Option<ChangeInfo>)>
    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 9c737b3b83..abda0c9fdf 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,6 +1,6 @@ handle_commands in example_cli - Rust

    Function example_cli::handle_commands

    source ·
    pub fn handle_commands<CS: Subcommand, S: Args>(
         graph: &Mutex<KeychainTxGraph>,
    -    chain: &Mutex<LocalChain>,
    +    chain: &Mutex<LocalChain>,
         db: &Mutex<Store<ChangeSet>>,
         network: Network,
         broadcast: impl FnOnce(S, &Transaction) -> Result<()>,
    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 4d00ba22bc..00edc61337 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<O: ChainOracle>(
    +planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<O: ChainOracle>(
         graph: &KeychainTxGraph,
         chain: &O,
         assets: &Assets
    -) -> Result<Vec<PlanUtxo>, O::Error>
    \ No newline at end of file +) -> Result<Vec<PlanUtxo>, O::Error>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html index 75e4a501b8..697f7f3e85 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html @@ -1,8 +1,8 @@ ChangeInfo in example_cli - Rust

    Struct example_cli::ChangeInfo

    source ·
    pub struct ChangeInfo {
         pub change_keychain: Keychain,
    -    pub indexer: ChangeSet,
    +    pub indexer: ChangeSet,
         pub index: u32,
    -}

    Fields§

    §change_keychain: Keychain§indexer: ChangeSet§index: u32

    Trait Implementations§

    source§

    impl Debug for ChangeInfo

    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 +}

    Fields§

    §change_keychain: Keychain§indexer: ChangeSet§index: u32

    Trait Implementations§

    source§

    impl Debug for ChangeInfo

    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_cli/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html index cd4676a4d9..f07b132ef1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html @@ -2,18 +2,18 @@ pub descriptor: Option<Descriptor<DescriptorPublicKey>>, pub change_descriptor: Option<Descriptor<DescriptorPublicKey>>, pub network: Option<Network>, - pub local_chain: ChangeSet, - pub tx_graph: ChangeSet<ConfirmationBlockTime>, - pub indexer: ChangeSet, + pub local_chain: ChangeSet, + pub tx_graph: ChangeSet<ConfirmationBlockTime>, + pub indexer: ChangeSet, }
    Expand description

    ChangeSet

    Fields§

    §descriptor: Option<Descriptor<DescriptorPublicKey>>

    Descriptor for recipient addresses.

    §change_descriptor: Option<Descriptor<DescriptorPublicKey>>

    Descriptor for change addresses.

    §network: Option<Network>

    Stores the network type of the transaction data.

    -
    §local_chain: ChangeSet

    Changes to the LocalChain.

    -
    §tx_graph: ChangeSet<ConfirmationBlockTime>

    Changes to TxGraph.

    -
    §indexer: ChangeSet

    Changes to KeychainTxOutIndex.

    +
    §local_chain: ChangeSet

    Changes to the [LocalChain].

    +
    §tx_graph: ChangeSet<ConfirmationBlockTime>

    Changes to TxGraph.

    +
    §indexer: ChangeSet

    Changes to [KeychainTxOutIndex].

    Trait Implementations§

    source§

    impl Clone for ChangeSet

    source§

    fn clone(&self) -> ChangeSet

    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 ChangeSet

    source§

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

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

    impl Default for ChangeSet

    source§

    fn default() -> ChangeSet

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

    impl<'de> Deserialize<'de> for ChangeSet

    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 Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge 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 PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> 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 Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

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

    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.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> 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 ChangeSet

    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 StructuralPartialEq for ChangeSet

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where 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 0f7b128436..776f100753 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,13 +1,13 @@ Init in example_cli - Rust

    Struct example_cli::Init

    source ·
    pub struct Init<CS: Subcommand, S: Args> {
         pub args: Args<CS, S>,
         pub graph: Mutex<KeychainTxGraph>,
    -    pub chain: Mutex<LocalChain>,
    +    pub chain: Mutex<LocalChain>,
         pub db: Mutex<Store<ChangeSet>>,
         pub network: Network,
     }
    Expand description

    The initial state returned by init_or_load.

    Fields§

    §args: Args<CS, S>

    CLI args

    §graph: Mutex<KeychainTxGraph>

    Indexed graph

    -
    §chain: Mutex<LocalChain>

    Local chain

    +
    §chain: Mutex<LocalChain>

    Local chain

    §db: Mutex<Store<ChangeSet>>

    Database

    §network: Network

    Network

    Auto Trait Implementations§

    §

    impl<CS, S> !Freeze for Init<CS, S>

    §

    impl<CS, S> RefUnwindSafe for Init<CS, S>
    where 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 c03df25442..5c47577fae 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,6 +1,6 @@ -KeychainTxGraph in example_cli - Rust

    Type Alias example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph = IndexedTxGraph<ConfirmationBlockTime, KeychainTxOutIndex<Keychain>>;
    Expand description

    Alias for a IndexedTxGraph with specific Anchor and Indexer.

    +KeychainTxGraph in example_cli - Rust

    Type Alias example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph = IndexedTxGraph<ConfirmationBlockTime, KeychainTxOutIndex<Keychain>>;
    Expand description

    Alias for a IndexedTxGraph with specific Anchor and Indexer.

    Aliased Type§

    struct KeychainTxGraph {
    -    pub index: KeychainTxOutIndex<Keychain>,
    +    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.PlanUtxo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html index badfea5866..920fd3240c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html @@ -1 +1 @@ -PlanUtxo in example_cli - Rust

    Type Alias example_cli::PlanUtxo

    source ·
    pub type PlanUtxo = (Plan, FullTxOut<ConfirmationBlockTime>);
    \ No newline at end of file +PlanUtxo in example_cli - Rust

    Type Alias example_cli::PlanUtxo

    source ·
    pub type PlanUtxo = (Plan, FullTxOut<ConfirmationBlockTime>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html index 552dfb367b..4c17f7bcc0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html @@ -1 +1 @@ -main in example_electrum - Rust

    Function example_electrum::main

    source ·
    pub(crate) fn main() -> Result<()>
    \ No newline at end of file +main in example_electrum - Rust

    Function example_electrum::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_electrum/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html index 3d92bd4073..4d5480792c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html @@ -1 +1 @@ -example_electrum - Rust

    Crate example_electrum

    source ·

    Structs§

    Enums§

    Constants§

    Functions§

    \ No newline at end of file +example_electrum - Rust

    Crate example_electrum

    source ·

    Structs§

    Enums§

    Constants§

    Functions§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_MAGIC.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_MAGIC.html index 3a4c31492d..6c8ebdc0c0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_MAGIC.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_MAGIC.html @@ -1 +1 @@ -DB_MAGIC in example_esplora - Rust

    Constant example_esplora::DB_MAGIC

    source ·
    pub(crate) const DB_MAGIC: &[u8] = b"bdk_example_esplora";
    \ No newline at end of file +DB_MAGIC in example_esplora - Rust

    Constant example_esplora::DB_MAGIC

    source ·
    pub(crate) const DB_MAGIC: &[u8] = b"bdk_example_esplora";
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_PATH.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_PATH.html index ac1d363093..10f74ddaad 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_PATH.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/constant.DB_PATH.html @@ -1 +1 @@ -DB_PATH in example_esplora - Rust

    Constant example_esplora::DB_PATH

    source ·
    pub(crate) const DB_PATH: &str = ".bdk_example_esplora.db";
    \ No newline at end of file +DB_PATH in example_esplora - Rust

    Constant example_esplora::DB_PATH

    source ·
    pub(crate) const DB_PATH: &str = ".bdk_example_esplora.db";
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/enum.EsploraCommands.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/enum.EsploraCommands.html index bd1d82fde0..70d8367c3e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/enum.EsploraCommands.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/enum.EsploraCommands.html @@ -1,4 +1,4 @@ -EsploraCommands in example_esplora - Rust

    Enum example_esplora::EsploraCommands

    source ·
    pub(crate) enum EsploraCommands {
    +EsploraCommands in example_esplora - Rust

    Enum example_esplora::EsploraCommands

    source ·
    pub(crate) enum EsploraCommands {
         Scan {
             stop_gap: usize,
             scan_options: ScanOptions,
    @@ -19,15 +19,15 @@
     
    §all_spks: bool

    Scan every address that you have derived.

    §utxos: bool

    Scan unspent outpoints for spends or changes to confirmation status of residing tx.

    §unconfirmed: bool

    Scan unconfirmed transactions for updates.

    -
    §scan_options: ScanOptions
    §esplora_args: EsploraArgs

    Implementations§

    Trait Implementations§

    source§

    impl Clone for EsploraCommands

    source§

    fn clone(&self) -> EsploraCommands

    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 EsploraCommands

    source§

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

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

    impl FromArgMatches for EsploraCommands

    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( +

    §scan_options: ScanOptions
    §esplora_args: EsploraArgs

    Implementations§

    Trait Implementations§

    source§

    impl Clone for EsploraCommands

    source§

    fn clone(&self) -> EsploraCommands

    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 EsploraCommands

    source§

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

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

    impl FromArgMatches for EsploraCommands

    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 EsploraCommands

    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 EsploraCommands

    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_esplora/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html index 6a03d90734..adbe4d767b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html @@ -1 +1 @@ -main in example_esplora - Rust

    Function example_esplora::main

    source ·
    pub(crate) fn main() -> Result<()>
    \ No newline at end of file +main in example_esplora - Rust

    Function example_esplora::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_esplora/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html index 1e1614e0a2..b826ee095c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html @@ -1 +1 @@ -example_esplora - Rust

    Crate example_esplora

    source ·

    Structs§

    Enums§

    Constants§

    Functions§

    \ No newline at end of file +example_esplora - Rust

    Crate example_esplora

    source ·

    Structs§

    Enums§

    Constants§

    Functions§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.EsploraArgs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.EsploraArgs.html index 164bb3ba04..f28cb89a26 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.EsploraArgs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.EsploraArgs.html @@ -1,12 +1,12 @@ -EsploraArgs in example_esplora - Rust

    Struct example_esplora::EsploraArgs

    source ·
    pub struct EsploraArgs {
    +EsploraArgs in example_esplora - Rust

    Struct example_esplora::EsploraArgs

    source ·
    pub struct EsploraArgs {
         pub(crate) esplora_url: Option<String>,
     }

    Fields§

    §esplora_url: Option<String>

    The esplora url endpoint to connect to.

    -

    Implementations§

    source§

    impl EsploraArgs

    source

    pub fn client(&self, network: Network) -> Result<BlockingClient>

    Trait Implementations§

    source§

    impl Args for EsploraArgs

    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 EsploraArgs

    source§

    fn clone(&self) -> EsploraArgs

    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 EsploraArgs

    source§

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

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

    impl FromArgMatches for EsploraArgs

    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 EsploraArgs

    source

    pub fn client(&self, network: Network) -> Result<BlockingClient>

    Trait Implementations§

    source§

    impl Args for EsploraArgs

    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 EsploraArgs

    source§

    fn clone(&self) -> EsploraArgs

    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 EsploraArgs

    source§

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

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

    impl FromArgMatches for EsploraArgs

    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_esplora/struct.ScanOptions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.ScanOptions.html index 5a29bc6828..63622f2868 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.ScanOptions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/struct.ScanOptions.html @@ -1,15 +1,15 @@ -ScanOptions in example_esplora - Rust

    Struct example_esplora::ScanOptions

    source ·
    pub struct ScanOptions {
    +ScanOptions in example_esplora - Rust

    Struct example_esplora::ScanOptions

    source ·
    pub struct ScanOptions {
         pub parallel_requests: usize,
     }

    Fields§

    §parallel_requests: usize

    Max number of concurrent esplora server requests.

    -

    Trait Implementations§

    source§

    impl Args for ScanOptions

    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 ScanOptions

    source§

    fn clone(&self) -> ScanOptions

    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 CommandFactory for ScanOptions

    source§

    fn into_app<'b>() -> Command<'b>

    Deprecated, replaced with CommandFactory::command
    source§

    fn into_app_for_update<'b>() -> Command<'b>

    Deprecated, replaced with CommandFactory::command_for_update
    §

    fn command<'help>() -> App<'help>

    Build a [Command] that can instantiate Self. Read more
    §

    fn command_for_update<'help>() -> App<'help>

    Build a [Command] that can update self. Read more
    source§

    impl Debug for ScanOptions

    source§

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

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

    impl FromArgMatches for ScanOptions

    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( +

    Trait Implementations§

    source§

    impl Args for ScanOptions

    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 ScanOptions

    source§

    fn clone(&self) -> ScanOptions

    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 CommandFactory for ScanOptions

    source§

    fn into_app<'b>() -> Command<'b>

    Deprecated, replaced with CommandFactory::command
    source§

    fn into_app_for_update<'b>() -> Command<'b>

    Deprecated, replaced with CommandFactory::command_for_update
    §

    fn command<'help>() -> App<'help>

    Build a [Command] that can instantiate Self. Read more
    §

    fn command_for_update<'help>() -> App<'help>

    Build a [Command] that can update self. Read more
    source§

    impl Debug for ScanOptions

    source§

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

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

    impl FromArgMatches for ScanOptions

    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.
    source§

    impl Parser for ScanOptions

    §

    fn parse() -> Self

    Parse from std::env::args_os(), exit on error
    §

    fn try_parse() -> Result<Self, Error>

    Parse from std::env::args_os(), return Err on error.
    §

    fn parse_from<I, T>(itr: I) -> Self
    where +) -> Result<(), Error>

    Assign values from ArgMatches to self.
    source§

    impl Parser for ScanOptions

    §

    fn parse() -> Self

    Parse from std::env::args_os(), exit on error
    §

    fn try_parse() -> Result<Self, Error>

    Parse from std::env::args_os(), return Err on error.
    §

    fn parse_from<I, T>(itr: I) -> Self
    where I: IntoIterator<Item = T>, T: Into<OsString> + Clone,

    Parse from iterator, exit on error
    §

    fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>
    where I: IntoIterator<Item = T>, @@ -17,9 +17,9 @@ I: IntoIterator<Item = T>, T: Into<OsString> + Clone,

    Update from iterator, exit on error
    §

    fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error>
    where I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

    Update from iterator, return Err on error.
    source§

    impl PartialEq for ScanOptions

    source§

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

    This method tests for self and other values to be equal, and is used + T: Into<OsString> + Clone,

    Update from iterator, return Err on error.
    source§

    impl PartialEq for ScanOptions

    source§

    fn eq(&self, other: &ScanOptions) -> 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 StructuralPartialEq for ScanOptions

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +sufficient, and should not be overridden without very good reason.

    source§

    impl StructuralPartialEq for ScanOptions

    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/help.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/help.html index 58a14000bb..76bac1c1e6 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 e39b8d468b..95b22b4f19 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,14 +1,14 @@ 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":"KKSFFSKGRFGPPRRRRKFRFFIEEIRRRRKKRRKFFKEPPNNMNNNNNNEONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOMMNNNNNNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNMNNNNNOOONCCNNNNNNNNNNNNNMNNNMNOEMMNNCMENNNNONNNNNNNMMNNDCDNNNNNOCEMNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNCONNNNNNNNNNNONNNNNNNNNNOOOFFNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNONNNNRKMMMMMCCFSPGPFTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGTPFFFFPFFTNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNONNNNNNNNSHFFFFNNNNNNNNNNNOONOONNNNNNNOONNNNNNNNNOONNNNNOONNNNNNNNONNNNNNNNTGFFPPTTTFFFFNNNOONNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOONNNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorFromBlockPosition","BIP32_MAX_INDEX","Balance","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ChangeSet","ConfirmationBlockTime","ConfirmationTime","Confirmed","Confirmed","CreateError","CreateError","CreateParams","CreateParams","DescriptorExt","DescriptorId","Error","FullTxOut","Impl","Indexed","IndexedTxGraph","Indexer","KeychainIndexed","LoadError","LoadError","LoadParams","LoadParams","Merge","PersistAsyncWith","PersistError","PersistError","PersistWith","Persisted","SpkIterator","Staged","TxGraph","Unconfirmed","Unconfirmed","add","all_zeros","anchor_block","anchor_block","anchor_block","as_byte_array","as_raw_hash","as_ref","as_ref","bitcoin","block_id","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_position","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","cmp","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","confirmed","create","create","create","create_async","default","default","default","deref","deref","deref_mut","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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_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","height","immature","index","indexed_tx_graph","indexer","into","into","into","into","into","into","into","into","into","into","into_fallible","into_inner","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","keychain_txout","load","load","load","load_async","local_chain","merge","miniscript","new","new_with_range","next","nth","outpoint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","persist","persist","persist","persist_async","rusqlite","rusqlite_impl","serde","serialize","serialize","serialize","serialize","serialize","spent_by","spk_client","spk_txout","staged","take","take","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_string","to_string","total","transpose_into_fallible","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","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","index","indexer","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","merge","new","serialize","to_owned","try_from","try_from","try_into","try_into","tx_graph","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","LAST_REVEALED_TABLE_NAME","SCHEMA_NAME","all_unbounded_spk_iters","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","default","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from_sqlite","get_descriptor","index_of_spk","index_tx","index_txout","initial_changeset","inner","insert_descriptor","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","merge","net_value","new","next_index","next_unused_spk","outpoints","persist_to_sqlite","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_string","try_from","try_from","try_from","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","unused_keychain_spks","unused_spks","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","BLOCKS_TABLE_NAME","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","SCHEMA_NAME","apply_changeset","apply_header","apply_header_connected_to","apply_update","block_id","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","deserialize","disconnect_from","eq","eq","eq","eq","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_block_ids","from_blocks","from_changeset","from_genesis_hash","from_header","from_iter","from_iter","from_sqlite","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","into_fallible","into_iter","into_iter","is_block_in_chain","is_empty","iter","iter_checkpoints","merge","new","next","original_hash","persist_to_sqlite","prev","push","range","range","serialize","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","transpose_into_fallible","try_from","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","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","SCHEMAS_TABLE_NAME","migrate_schema","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","ANCHORS_TABLE_NAME","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","SCHEMA_NAME","TXOUTS_TABLE_NAME","TXS_TABLE_NAME","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","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","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_sqlite","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_fallible","into_fallible","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_canonical_txs","map_anchors","map_anchors","merge","new","next","next","outspends","partial_cmp","partial_cmp","persist_to_sqlite","serialize","to_owned","to_owned","to_owned","to_owned","to_string","transpose_into_fallible","transpose_into_fallible","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"],[332,"bdk_chain::ConfirmationTime"],[335,"bdk_chain::indexed_tx_graph"],[385,"bdk_chain::indexer"],[394,"bdk_chain::indexer::keychain_txout"],[492,"bdk_chain::indexer::keychain_txout::InsertDescriptorError"],[496,"bdk_chain::indexer::spk_txout"],[533,"bdk_chain::local_chain"],[703,"bdk_chain::rusqlite_impl"],[705,"bdk_chain::spk_client"],[769,"bdk_chain::tx_graph"],[947,"bdk_chain::balance"],[948,"bdk_chain::descriptor_ext"],[949,"bdk_chain::tx_data_traits"],[950,"bdk_chain::chain_data"],[951,"bitcoin_hashes::sha256"],[952,"core::clone"],[953,"bdk_chain::spk_iter"],[954,"core::cmp"],[955,"bdk_chain::persist"],[956,"rusqlite::types::value_ref"],[957,"rusqlite::types::from_sql"],[958,"serde::de"],[959,"bitcoin::blockdata::block"],[960,"bitcoin::blockdata::transaction"],[961,"bitcoin_units::amount"],[962,"miniscript::descriptor::key"],[963,"miniscript::descriptor"],[964,"bitcoin::network"],[965,"bitcoin::blockdata::script::owned"],[966,"core::option"],[967,"core::result"],[968,"core::future::future"],[969,"alloc::boxed"],[970,"core::pin"],[971,"core::borrow"],[972,"core::fmt"],[973,"bitcoin_hashes"],[974,"bdk_chain::chain_oracle"],[975,"core::hash"],[976,"core::slice::index"],[977,"fallible_iterator"],[978,"core::iter::traits::iterator"],[979,"core::ops::range"],[980,"serde::ser"],[981,"rusqlite::types::to_sql"],[982,"rusqlite"],[983,"alloc::string"],[984,"core::any"],[985,"core::iter::traits::collect"],[986,"core::default"],[987,"alloc::collections::btree::map"],[988,"rusqlite::transaction"],[989,"core::iter::traits::double_ended"],[990,"core::iter::traits::exact_size"],[991,"alloc::collections::btree::set"],[992,"alloc::vec"],[993,"core::marker"],[994,"core::ops::function"],[995,"bitcoin::blockdata::script::borrowed"],[996,"core::convert"],[997,"alloc::sync"],[998,"std::collections::hash::set"]],"i":[0,0,0,0,0,0,0,0,75,0,0,12,14,40,45,40,45,0,0,63,0,0,0,0,0,0,40,45,40,45,0,0,40,45,0,0,0,0,0,12,14,1,2,3,5,6,2,2,2,2,0,6,22,1,12,14,5,6,15,20,2,2,16,22,1,12,14,5,6,15,20,2,16,15,1,12,14,5,6,15,2,16,1,12,14,5,6,15,2,16,12,12,14,5,6,15,20,2,22,22,22,22,22,22,22,22,22,3,3,12,6,6,1,40,45,20,20,1,5,6,22,20,20,16,47,1,14,5,6,2,47,2,1,12,14,5,6,15,20,2,1,1,12,12,14,14,5,5,6,6,15,15,20,20,2,2,1,1,12,14,5,6,15,20,2,2,2,2,22,22,22,1,12,14,14,5,5,5,6,15,20,2,2,16,59,5,6,2,2,2,2,2,2,63,12,14,5,6,2,5,5,1,2,0,0,22,1,12,14,5,6,15,20,2,16,16,22,16,63,12,14,15,70,15,15,0,40,45,20,20,0,70,0,16,16,16,16,15,12,14,5,6,15,20,2,40,45,20,20,0,0,0,1,14,5,6,2,15,0,0,75,70,70,2,1,12,14,5,6,15,2,16,2,22,22,22,22,22,22,22,22,22,1,2,1,16,1,1,22,1,12,14,5,6,15,20,2,16,22,1,12,14,5,6,15,20,2,16,0,15,22,1,12,14,5,6,15,20,2,16,14,1,22,1,12,14,5,6,15,20,2,16,131,132,131,0,0,82,82,82,82,82,82,82,82,82,83,82,83,83,83,82,83,83,83,82,83,82,83,83,83,82,82,83,82,82,82,82,82,82,83,83,83,82,83,83,82,83,82,83,83,82,83,82,83,84,0,84,84,84,84,84,0,0,0,0,95,0,95,0,90,90,93,93,93,93,95,90,93,95,90,93,95,90,93,95,90,93,90,90,95,90,93,95,95,90,93,95,90,90,93,93,93,93,93,93,93,93,95,90,90,93,93,93,93,93,90,93,93,93,93,93,93,93,90,93,93,93,93,93,90,93,93,93,93,93,93,90,93,93,95,90,95,93,95,90,93,95,90,93,93,93,93,95,90,93,93,93,93,93,95,90,133,133,134,134,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,106,110,0,0,0,0,110,0,0,106,105,105,105,105,111,106,113,111,105,106,107,112,109,110,113,111,105,106,107,112,109,110,111,105,106,107,112,109,110,111,105,106,107,112,109,110,106,106,105,111,105,106,107,112,109,110,111,111,105,106,107,107,112,112,109,109,110,110,113,111,105,106,106,107,112,109,110,111,105,105,105,111,106,106,106,105,105,111,105,105,111,111,112,105,111,105,113,111,105,106,107,112,109,110,113,113,111,105,106,111,105,106,111,113,112,106,111,111,111,105,106,105,111,105,106,107,112,109,110,107,112,109,110,113,113,111,105,106,107,112,109,110,109,113,111,105,106,107,112,109,110,113,111,105,106,107,112,109,110,112,113,111,105,106,107,112,109,110,0,0,0,0,0,0,114,135,117,136,114,135,117,136,114,114,117,114,117,114,135,136,114,135,117,136,114,117,117,135,136,114,114,117,117,114,114,135,117,136,136,114,114,114,114,117,114,114,117,114,135,117,136,114,135,117,136,114,114,135,117,136,114,135,117,136,89,0,0,0,123,123,89,89,89,0,0,0,0,85,85,89,124,89,85,85,85,85,85,128,129,85,124,125,123,89,128,129,85,124,125,123,89,85,125,128,128,129,129,85,124,125,89,85,124,125,89,124,125,85,89,124,89,85,85,124,125,123,89,124,124,125,125,123,123,85,85,85,85,124,125,123,123,89,128,129,85,124,125,123,89,89,85,85,85,85,85,85,85,85,85,85,85,128,129,85,124,125,123,89,128,129,128,129,85,89,89,124,85,85,89,89,85,128,129,85,124,125,89,89,85,124,125,89,123,128,129,85,85,85,128,129,85,124,125,123,89,85,85,128,129,85,124,125,123,89,85,124,125,85,85,124,89,89,89,85,128,129,85,124,125,123,89,85,128,129,85,124,125,123,89,85,85,85],"f":"`````````````````````````````````````````{{bb}b}{{}d}{{{h{f}}}j}{{{h{j}}}j}{{{h{l}}}j}{{{h{d}}}{{h{c}}}{}}{{{h{d}}}{{h{n}}}}{{{h{d}}}{{h{{Ab{A`}}}}}}{{{h{d}}}{{h{{Ad{A`}}}}}}``{{{h{c}}}{{h{e}}}{}{}}0000000200{{{h{Afc}}}{{h{Afe}}}{}{}}000000000`{{{h{b}}}b}{{{h{{Ah{c}}}}}{{Ah{c}}}Aj}{{{h{Al}}}Al}:{{{h{l}}}l}{{{h{{An{c}}}}}{{An{c}}}Aj}{{{h{d}}}d}{{{h{{B`{c}}}}}{{B`{c}}}Aj}{{{h{c}}{h{Afe}}}Bb{}{}}0000000{{{Ah{{h{c}}}}}{{Ah{c}}}Aj}{{{h{{Ah{c}}}}{h{{Ah{c}}}}}BdBf}{{{h{Al}}{h{Al}}}Bd}{{{h{j}}{h{j}}}Bd}{{{h{l}}{h{l}}}Bd}{{{h{{An{c}}}}{h{{An{c}}}}}BdBf}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}BdBf}{{{h{d}}{h{d}}}Bd}{Bj{{Bn{{Bl{c}}}}}{fC`}}{Bj{{Bn{{Bl{Cb}}}}}}{Bj{{Bn{{Bl{Cd}}}}}}{Bj{{Bn{{Bl{Cf}}}}}}{Bj{{Bn{{Bl{{Cj{Ch}}}}}}}}{Bj{{Bn{{Bl{Cl}}}}}}{Bj{{Bn{{Bl{Cn}}}}}}{Bj{{Bn{{Bl{D`}}}}}}{Bj{{Bn{{Bl{d}}}}}}{{{h{f}}}Db}0{{{h{{Ah{c}}}}}{{Dd{Db}}}f}{{{h{l}}}Db}``{{{h{Afc}}e}{{Eb{{E`{}{{Df{e}}{Dh{g}}{Dj{i}}{Dl{k}}{Dn{m}}}}i}}}{}{}{}{}{}{}}{{{h{Afc}}e}{{Eh{{Ef{Ed}}}}}{}{}}{{{h{Afc}}}{{Eb{{Bh{e}}}}}{}{{E`{c}}}}{{{h{Afc}}}{{Eb{{Bh{e}}}}}{}{{Ej{c}}}}{{}b}{{}j}{{}l}{{{h{{Bl{c}}}}}{{h{e}}}{}{}}{{{h{{Bh{c}}}}}{{h{e}}}{}{}}{{{h{Af{Bh{c}}}}}{{h{Afe}}}{}{}}{{{h{{B`{c}}}}}{{h{c}}}{{El{{Cj{Ch}}}}}}{{{h{En}}}d}{c{{Eb{b}}}F`}{c{{Eb{Al}}}F`}{c{{Eb{j}}}F`}{c{{Eb{l}}}F`}{c{{Eb{d}}}F`}{{{h{En}}}Fb}{{}c{}}{{{h{b}}{h{b}}}Fd}{{{h{{Ah{c}}}}{h{{Ah{c}}}}}FdFf}{{{h{Al}}{h{Al}}}Fd}{{{h{j}}{h{j}}}Fd}{{{h{l}}{h{l}}}Fd}{{{h{{An{c}}}}{h{{An{c}}}}}FdFf}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}FdFf}{{{h{d}}{h{d}}}Fd}{{{h{c}}{h{e}}}Fd{}{}}000000000000000{{{h{b}}{h{AfFh}}}Fj}0{{{h{{Ah{c}}}}{h{AfFh}}}FjFl}{{{h{Al}}{h{AfFh}}}Fj}{{{h{j}}{h{AfFh}}}Fj}{{{h{l}}{h{AfFh}}}Fj}{{{h{{An{c}}}}{h{AfFh}}}FjFl}{{{h{{Bh{c}}}}{h{AfFh}}}FjFl}{{{h{d}}{h{AfFh}}}Fj}000{cc{}}{c{{Bl{c}}}{}}{Fnc{}}222{{{Ah{l}}}Al}{{{G`{{h{Db}}{h{Cb}}}}}j}4{{{G`{DbCb}}}j}5555{nd}6{{{h{Gb}}jGd}Gf}{{{h{Gb}}jGd}j}{{{h{Gb}}jGd}l}{cd{}}04{{{h{{Ab{A`}}}}}{{Eb{dGh}}}}0{{{h{Gj}}}{{Eb{dc}}}{}}{{{h{{Gn{}{{Gl{c}}}}}}}{{Eb{jc}}}Fl}{{{h{{Ah{c}}}}{h{Afe}}}BbH`Hb}{{{h{Al}}{h{Afc}}}BbHb}{{{h{j}}{h{Afc}}}BbHb}{{{h{l}}{h{Afc}}}BbHb}{{{h{d}}{h{Afc}}}BbHb}```{{{h{d}}c}{{h{e}}}{{Hd{{Ab{A`}}}}}{}}``{ce{}{}}000000000{c{{Hf{g}}}{}{}{{Hj{}{{Hh{e}}}}}}{{{Bl{c}}}c{}}2{{{h{{Gn{}{{Gl{c}}}}}}jj}{{Eb{{Dd{Fd}}c}}}Fl}{{{h{{Ah{c}}}}}Fd{}}{{{h{Al}}}Fd}{{{h{{An{c}}}}Db}Fdf}{{{h{Hl}}}Fd}1``{{{h{Afc}}e}{{Eb{{Dd{{E`{}{{Df{g}}{Dh{e}}{Dj{i}}{Dl{k}}{Dn{m}}}}}}k}}}{}{}{}{}{}{}}{{{h{Afc}}e}{{Eh{{Ef{Ed}}}}}{}{}}{{{h{Afc}}}{{Eb{{Dd{{Bh{e}}}}}}}{}{{E`{c}}}}{{{h{Afc}}}{{Eb{{Dd{{Bh{e}}}}}}}{}{{Ej{c}}}}`{{{h{AfHl}}Hl}Bb}`{c{{B`{c}}}{{El{{Cj{Ch}}}}}}{{ce}{{B`{c}}}{{El{{Cj{Ch}}}}}{{Hn{Db}}}}{{{h{Af{B`{c}}}}}{{Dd{e}}}{{El{{Cj{Ch}}}}}{}}{{{h{Af{B`{c}}}}Gd}{{Dd{e}}}{{El{{Cj{Ch}}}}}{}}`{{{h{{Ah{c}}}}{h{{Ah{c}}}}}{{Dd{Bd}}}I`}{{{h{Al}}{h{Al}}}{{Dd{Bd}}}}{{{h{j}}{h{j}}}{{Dd{Bd}}}}{{{h{l}}{h{l}}}{{Dd{Bd}}}}{{{h{{An{c}}}}{h{{An{c}}}}}{{Dd{Bd}}}I`}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}{{Dd{Bd}}}I`}{{{h{d}}{h{d}}}{{Dd{Bd}}}}{{{h{Afc}}{h{e}}}{{Eb{Bbg}}}{}{}{}}{{{h{Afc}}{h{e}}}{{Eh{{Ef{Ed}}}}}{}{}}{{{h{Af{Bh{e}}}}{h{Afc}}}{{Eb{Fd}}}{}{{E`{c}}}}{{{h{Af{Bh{e}}}}{h{Afc}}}{{Eb{Fd}}}{}{{Ej{c}}}}```{{{h{b}}c}EbIb}{{{h{Al}}c}EbIb}{{{h{j}}c}EbIb}{{{h{l}}c}EbIb}{{{h{d}}c}EbIb}```{{{h{Af{If{}{{Id{c}}}}}}}{{h{Afc}}}Hl}{{{h{AfHl}}}{{Dd{Hl}}}}0{dc{}}{{{h{c}}}e{}{}}0000000{dn}{{{h{{Bl{d}}}}}{{Ij{Ih}}}}{{{h{{Bl{c}}}}}{{Ij{Ih}}}{fIl}}{{{h{{Bl{Cl}}}}}{{Ij{Ih}}}}{{{h{{Bl{Cf}}}}}{{Ij{Ih}}}}{{{h{{Bl{{Cj{Ch}}}}}}}{{Ij{Ih}}}}{{{h{{Bl{D`}}}}}{{Ij{Ih}}}}{{{h{{Bl{Cd}}}}}{{Ij{Ih}}}}{{{h{{Bl{Cn}}}}}{{Ij{Ih}}}}{{{h{{Bl{Cb}}}}}{{Ij{Ih}}}}{{{h{c}}}In{}}0{{{h{b}}}Cf}{c{{J`{i}}}{}{}{}{{Hj{}{{Hh{{Eb{eg}}}}}}}}`1{c{{Eb{e}}}{}{}}0000000000000000000``{{{h{c}}}Jb{}}000000000{FbAl}`{ce{}{}}000000000`````{{{h{Af{Jd{ce}}}}GbDb}{{Jf{c}}}{Gff}Jh}{{{h{Af{Jd{ce}}}}{h{Gb}}Db}{{Jf{c}}}{Gff}Jh}{{{h{Af{Jd{ce}}}}{Jf{c}}}BbfJh}{{{h{Af{Jd{ce}}}}{Jj{c}}}{{Jf{c}}}fJh}{{{h{{Jd{ce}}}}}{{h{{Jj{c}}}}}{}{}}{{{h{Af{Jd{ce}}}}i}{{Jf{c}}}fJh{{Jl{}{{Hh{c}}}}}{{Jl{}{{Hh{{G`{{h{Cn}}g}}}}}}}}{{{h{Af{Jd{ce}}}}g}{{Jf{c}}}fJh{{Jl{}{{Hh{{G`{{h{Cn}}Fb}}}}}}}}{{{h{Af{Jd{ce}}}}g}{{Jf{c}}}fJh{{Jl{}{{Hh{{G`{CnFb}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{Afc}}}{{h{Afe}}}{}{}}0{{{h{{Jf{ce}}}}}{{Jf{ce}}}AjAj}{{{h{c}}{h{Afe}}}Bb{}{}}{{}{{Jd{ce}}}{}Jn}{{}{{Jf{ce}}}{}Jn}{c{{Eb{{Jf{eg}}}}}F`{BfK`}K`}{{{h{{Jf{ce}}}}{h{{Jf{ce}}}}}FdFfFf}{{{h{{Jd{ce}}}}{h{AfFh}}}FjFlFl}{{{h{{Jf{ce}}}}{h{AfFh}}}FjFlFl}{cc{}}{{{Kb{c}}}{{Jf{ce}}}{}Jn}1{Kd{{Jf{cKd}}}{}}{{{h{{Jd{ce}}}}}{{h{{Jj{c}}}}}{}{}}``{{{h{{Jd{ce}}}}}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}Cdc}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}CdFb}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}Cn}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}KfKh}{{Jf{c}}}fJh}{ce{}{}}0{{{h{{Jf{ce}}}}}FdfHl}{{{h{Af{Jf{ce}}}}{Jf{ce}}}BbfHl}{c{{Jd{ec}}}{}{}}{{{h{{Jf{ce}}}}g}Eb{BfIl}IlIb}{{{h{c}}}e{}{}}{c{{Eb{e}}}{}{}}000`{{{h{c}}}Jb{}}077``{{{h{Af{Jh{}{{Id{c}}}}}}c}Bb{}}{{{h{Af{Jh{}{{Id{c}}}}}}{h{Cn}}}c{}}{{{h{Af{Jh{}{{Id{c}}}}}}Kf{h{Kh}}}c{}}{{{h{{Jh{}{{Id{c}}}}}}}c{}}{{{h{{Jh{}{{Id{c}}}}}}{h{Cn}}}Fd{}}``````````{{{h{{Kj{c}}}}}{{Kl{c{B`{{Cj{Ch}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}Kd}Bb{AjBfFl}}{{{h{Af{Kj{c}}}}e}Bb{AjBfFl}{}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Afc}}}{{h{Afe}}}{}{}}00{{{h{{Kj{c}}}}}{{Kj{c}}}Aj}{{{h{{Kn{c}}}}}{{Kn{c}}}Aj}{{{h{Kd}}}Kd}{{{h{c}}{h{Afe}}}Bb{}{}}00{{}{{Kj{c}}}{}}{{}Kd}{c{{Eb{Kd}}}F`}{{{h{{Kn{c}}}}{h{{Kn{c}}}}}FdFf}{{{h{Kd}}{h{Kd}}}Fd}{{{h{{Kj{c}}}}{h{AfFh}}}FjFl}{{{h{{Kn{c}}}}{h{AfFh}}}FjFl}0{{{h{Kd}}{h{AfFh}}}Fj}{cc{}}00{{{h{L`}}}{{Ij{Kd}}}}{{{h{{Kj{c}}}}c}{{Dd{{h{{Cj{Ch}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}D`}{{Dd{{h{{G`{cDb}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}{h{Cn}}}e{AjBfFl}{}}{{{h{Af{Kj{c}}}}Kf{h{Kh}}}e{AjBfFl}{}}{{{h{{Kj{c}}}}}e{AjBfFl}{}}{{{h{{Kj{c}}}}}{{h{{Lb{{G`{cDb}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}c{Cj{Ch}}}{{Eb{Fd{Kn{c}}}}}{AjBfFl}}{ce{}{}}00{{{h{Kd}}}Fd}{{{h{{Kj{c}}}}{h{Cn}}}Fd{AjBfFl}}{{{h{{Kj{c}}}}cDb}Fd{AjBfFl}}{{{h{{Kj{c}}}}c}{{`{{Lf{}{{Hh{{Ld{Kf}}}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}e}{{`{{Lf{}{{Hh{{Lh{cKf}}}}}}}}}{AjBfFl}{{Hn{c}}}}{{{h{{Kj{c}}}}}{{`{{Lf{}{{Hh{{G`{c{h{{Cj{Ch}}}}}}}}}}Lj}}}{AjBfFl}}`{{{h{{Kj{c}}}}c}{{Dd{Db}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{Kl{cDb}}}{AjBfFl}}10{{{h{{Kj{c}}}}}Db{AjBfFl}}{{{h{Af{Kj{c}}}}cDb}Bb{AjBfFl}}{{{h{Af{Kj{c}}}}cDb}Fd{AjBfFl}}{{{h{AfKd}}Kd}Bb}{{{h{{Kj{c}}}}{h{Cn}}e}Ll{AjBfFl}{{Hn{c}}}}{Db{{Kj{c}}}{}}{{{h{{Kj{c}}}}c}{{Dd{{G`{DbFd}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}c}{{Dd{{G`{{Ld{D`}}Kd}}}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{h{{Ln{{Lh{cKf}}}}}}}{AjBfFl}}{{{h{Kd}}{h{L`}}}{{Ij{Bb}}}}2{{{h{Af{Kj{c}}}}cDb}{{Dd{{G`{{M`{{Ld{D`}}}}Kd}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}{h{{Kl{cDb}}}}}Kd{AjBfFl}}{{{h{{Kj{c}}}}c}{{`{{Lf{}{{Hh{{Ld{D`}}}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}e}{{`{{Hj{}{{Hh{{Lh{cD`}}}}}}}}}{AjBfFl}{{Hn{c}}}}{{{h{{Kj{c}}}}{h{Cn}}e}{{G`{CfCf}}}{AjBfFl}{{Hn{c}}}}{{{h{Kd}}c}EbIb}{{{h{{Kj{c}}}}cDb}{{Dd{D`}}}{AjBfFl}}{{{h{c}}}e{}{}}00{{{h{c}}}In{}}{c{{Eb{e}}}{}{}}00000{{{h{{Kj{c}}}}Kf}{{Dd{{Lh{c{h{Kh}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{`{{Lf{}{{Hh{{Lh{c{G`{Kf{h{Kh}}}}}}}}}}Lj}}}{AjBfFl}}{{{h{{Kj{c}}}}Cd}{{`{{Lf{}{{Hh{{Lh{c{G`{Kf{h{Kh}}}}}}}}}}}}}{AjBfFl}}{{{h{c}}}Jb{}}00{{{h{{Kj{c}}}}c}{{Dd{{B`{{Cj{Ch}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}cDb}Fd{AjBfFl}}{{{h{{Kj{c}}}}c}{{`{{Lf{}{{Hh{{Ld{D`}}}}}}Aj}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{`{{Lf{}{{Hh{{Lh{cD`}}}}}}Aj}}}{AjBfFl}}{ce{}{}}00`````{{{h{{Lb{c}}}}}{{h{{Kl{cD`}}}}}{AjBfFl}}{{{h{Af{Lb{c}}}}e}Bb{AjBfFl}{}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Afc}}}{{h{Afe}}}{}{}}{{{h{{Lb{c}}}}}{{Lb{c}}}Aj}{{{h{c}}{h{Afe}}}Bb{}{}}{{}{{Lb{c}}}{}}{{{h{{Lb{c}}}}{h{AfFh}}}FjFl}{cc{}}{{{h{{Lb{c}}}}D`}{{Dd{{h{c}}}}}{AjBfFl}}{{{h{Af{Lb{c}}}}{h{Cn}}}e{AjBfFl}{}}{{{h{Af{Lb{c}}}}Kf{h{Kh}}}e{AjBfFl}{}}{{{h{{Lb{c}}}}}e{AjBfFl}{}}{{{h{Af{Lb{c}}}}cD`}Fd{AjBfFl}}>{{{h{{Lb{c}}}}{h{Cn}}}Fd{AjBfFl}}0{{{h{{Lb{c}}}}{h{c}}}Fd{AjBfFl}}{{{h{Af{Lb{c}}}}{h{c}}}Fd{AjBfFl}}{{{h{{Lb{c}}}}{h{Cn}}e}Ll{AjBfFl}{{Hn{c}}}}{{{h{{Lb{c}}}}}{{h{{Ln{{G`{cKf}}}}}}}{AjBfFl}}{{{h{{Lb{c}}}}e}{{`{{Lf{}{{Hh{{G`{{h{c}}Kf}}}}}}}}}{AjBfFl}{{Hn{c}}}}{{{h{Af{Lb{c}}}}{h{Cn}}}{{Ln{c}}}{AjBfFl}}{{{h{Af{Lb{c}}}}Kf{h{Kh}}}{{Dd{{h{c}}}}}{AjBfFl}}{{{h{{Lb{c}}}}{h{Cn}}e}{{G`{CfCf}}}{AjBfFl}{{Hn{c}}}}{{{h{{Lb{c}}}}{h{c}}}{{Dd{D`}}}{AjBfFl}}{{{h{c}}}e{}{}}{c{{Eb{e}}}{}{}}0{{{h{{Lb{c}}}}Kf}{{Dd{{G`{{h{c}}{h{Kh}}}}}}}{AjBfFl}}{{{h{{Lb{c}}}}}{{`{{Lf{}{{Hh{{G`{{h{c}}Kf{h{Kh}}}}}}}}Lj}}}{AjBfFl}}{{{h{{Lb{c}}}}Cd}{{`{{Lf{}{{Hh{{G`{{h{c}}Kf{h{Kh}}}}}}}}}}}{AjBfFl}}{{{h{c}}}Jb{}}={{{h{{Lb{c}}}}e}{{`{{Lf{}{{Hh{{G`{{h{c}}D`}}}}}}Aj}}}{AjBfFl}{{Hn{c}}}}{ce{}{}}````````````{{{h{AfMb}}{h{Md}}}{{Eb{BbMf}}}}{{{h{AfMb}}{h{Mh}}Db}{{Eb{MdMj}}}}{{{h{AfMb}}{h{Mh}}Dbj}{{Eb{MdMl}}}}{{{h{AfMb}}Mn}{{Eb{MdMj}}}}{{{h{Mn}}}j}`{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Afc}}}{{h{Afe}}}{}{}}0000000{{{h{Mn}}}Mn}{{{h{Mb}}}Mb}{{{h{Md}}}Md}{{{h{Mf}}}Mf}{{{h{N`}}}N`}{{{h{Mj}}}Mj}{{{h{Ml}}}Ml}{{{h{c}}{h{Afe}}}Bb{}{}}000000{{}Md}{c{{Eb{Md}}}F`}{{{h{AfMb}}j}{{Eb{MdMf}}}}{{{h{Mn}}{h{Mn}}}Fd}{{{h{Mb}}{h{Mb}}}Fd}{{{h{Md}}{h{Md}}}Fd}{{{h{Mf}}{h{Mf}}}Fd}{{{h{N`}}{h{N`}}}Fd}{{{h{Mj}}{h{Mj}}}Fd}{{{h{Ml}}{h{Ml}}}Fd}{{Mnc}{{Eb{MnMn}}}{{Jl{}{{Hh{j}}}}}}{{{h{Mn}}{h{AfFh}}}Fj}{{{h{Mb}}{h{AfFh}}}Fj}{{{h{Md}}{h{AfFh}}}Fj}{{{h{Mf}}{h{AfFh}}}Fj}0{{{h{N`}}{h{AfFh}}}Fj}0{{{h{Mj}}{h{AfFh}}}Fj}0{{{h{Ml}}{h{AfFh}}}Fj}0{cc{}}000{cMd{{Jl{}{{Hh{{G`{Db{Dd{Cb}}}}}}}}}}1111{c{{Eb{Mn{Dd{Mn}}}}}{{Jl{}{{Hh{j}}}}}}{{{Kl{DbCb}}}{{Eb{MbMf}}}}{Md{{Eb{MbMf}}}}{Cb{{G`{MbMd}}}}{{{h{Mh}}Db}Mn}5{cMd{{Jl{}{{Hh{{G`{DbCb}}}}}}}}{{{h{L`}}}{{Ij{Md}}}}{Mn{{Eb{MbMf}}}}{{{h{Mb}}}Cb}{{{h{Mn}}Db}{{Dd{Mn}}}}{{{h{Mb}}Db}{{Dd{Mn}}}}{{{h{Mb}}}{{Eb{jc}}}{}}{{{h{Mn}}}Cb}{{{h{Mn}}}Db}`{{{h{Mb}}}Md}{{Mnj}Mn}{{{h{AfMb}}j}{{Eb{MdN`}}}}{ce{}{}}0000000{c{{Hf{g}}}{}{}{{Hj{}{{Hh{e}}}}}}1{Mnc{}}{{{h{Mb}}jj}{{Eb{{Dd{Fd}}c}}}{}}{{{h{Md}}}Fd}{{{h{Mn}}}Nb}{{{h{Mb}}}Nb}{{{h{AfMd}}Md}Bb}{jMn}{{{h{AfNb}}}{{Dd{c}}}{}}`{{{h{Md}}{h{L`}}}{{Ij{Bb}}}}{{{h{Mn}}}{{Dd{Mn}}}}{{Mnj}{{Eb{MnMn}}}}{{{h{Mn}}c}{{`{{Hj{}{{Hh{Mn}}}}}}}{{Hn{Db}}}}{{{h{Mb}}c}{{`{{Hj{}{{Hh{Mn}}}}}}}{{Hn{Db}}}}{{{h{Md}}c}EbIb}{{{h{Mb}}}Mn}{{{h{c}}}e{}{}}000000{{{h{c}}}In{}}000{c{{J`{i}}}{}{}{}{{Hj{}{{Hh{{Eb{eg}}}}}}}}{c{{Eb{e}}}{}{}}0000000`00000000{{{h{c}}}Jb{}}0000000`{ce{}{}}0000000`{{{h{L`}}{h{Gj}}{h{{Ab{{h{{Ab{{h{Gj}}}}}}}}}}}{{Ij{Bb}}}}````{{{h{c}}}{{h{e}}}{}{}}000{{{h{Afc}}}{{h{Afe}}}{}{}}000{{Nde}Nd{{Lj{}{{Hh{Kf}}}}Nf}{{Jl{}{{Nh{c}}{Hh{Kf}}}}}}{{Nde}Nd{{Lj{}{{Hh{D`}}}}Nf}{{Jl{}{{Nh{c}}{Hh{D`}}}}}}{{{Nj{c}}cg}{{Nj{c}}}{BfAj}{{Hj{}{{Hh{{Ld{D`}}}}}}Nf}{{Jl{}{{Nh{e}}}}}}``{{Nde}Nd{{Lj{}{{Hh{Cd}}}}Nf}{{Jl{}{{Nh{c}}{Hh{Cd}}}}}}``{cc{}}000{MnNd}{Mn{{Nj{c}}}{BfAj}}{{Mn{h{{Kj{c}}}}}{{Nj{c}}}{FlBfAj}}``{{Ndc}Nd{{Nl{{h{Kf}}}}NfNn}}{{Ndc}Nd{{Nl{{h{O`}}}}NfNn}}{{{Nj{c}}e}{{Nj{c}}}{NfBfAj}{{Nl{cDb{h{O`}}}}NfNnAj}}{{{Nj{c}}ce}{{Nj{c}}}{NfBfAj}{{Nl{Db{h{O`}}}}NfNn}}{{Ndc}Nd{{Nl{{h{Cd}}}}NfNn}}{ce{}{}}000``{{Nd{h{{Kj{c}}}}e}Nd{AjBfFlNfNn}{{Hn{c}}}}{{Nde}Nd{{Lj{}{{Hh{Kf}}}}Nf}{{Jl{}{{Nh{c}}}}}}{{Nde}Nd{{Lj{}{{Hh{D`}}}}Nf}{{Jl{}{{Nh{c}}}}}}>{{Nde}Nd{{Lj{}{{Hh{Cd}}}}Nf}{{Jl{}{{Nh{c}}}}}}``{c{{Eb{e}}}{}{}}0000000`{{{h{c}}}Jb{}}0006666`````````````{{{h{{Jj{c}}}}}{{h{{Ln{{G`{cCd}}}}}}}{}}{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{G`{Kf{h{Kh}}}}}}}}}}}{}}{{{h{{Kb{c}}}}}{{`{{Hj{}{{Hh{Db}}}}}}}f}``{{{h{Af{Jj{c}}}}{Kb{c}}}Bb{AjBf}}{{{h{Af{Jj{c}}}}{Jj{c}}}{{Kb{c}}}{AjBf}}{{{h{{Jj{c}}}}}{{h{{Jj{c}}}}}{}}{{{h{{Jj{c}}}}{h{e}}jik}bf{{Gn{}{{Gl{Ob}}}}}Aj{{Jl{}{{Hh{{G`{gKf}}}}}}}{{Nl{{h{g}}D`}{{Od{Fd}}}}}}{{{h{Af{Jj{c}}}}e}{{Kb{c}}}{AjBf}{{Jl{}{{Hh{{G`{CnFb}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Afc}}}{{h{Afe}}}{}{}}000000{{{h{{Jj{c}}}}{h{Cn}}}{{Eb{CfOf}}}{}}`{c{{Dd{Cf}}}{}}{c{{Dd{Ll}}}{}}01{{{h{{Jj{c}}}}}{{Jj{c}}}Aj}{{{h{{Oh{ce}}}}}{{Oh{ce}}}AjAj}{{{h{{Oj{ce}}}}}{{Oj{ce}}}AjAj}{{{h{{Kb{c}}}}}{{Kb{c}}}Aj}{{{h{c}}{h{Afe}}}Bb{}{}}000{{{h{{Oh{ce}}}}{h{{Oh{ce}}}}}BdBfBf}{{{h{{Oj{ce}}}}{h{{Oj{ce}}}}}BdBfBf}{{}{{Jj{c}}}{}}{{}{{Kb{c}}}{}}{{{h{{Oh{ce}}}}}{{h{g}}}{}{}{}}{c{{Eb{{Kb{e}}}}}F`{BfK`}}{{{h{{Jj{c}}}}{h{Cn}}}{{`{{Hj{}{{Hh{{G`{GdCd}}}}}}}}}{}}{{{h{{Jj{c}}}}{h{{Jj{c}}}}}FdFf}{{{h{{Oh{ce}}}}{h{{Oh{ce}}}}}FdFfFf}{{{h{{Oj{ce}}}}{h{{Oj{ce}}}}}FdFfFf}{{{h{Of}}{h{Of}}}Fd}{{{h{{Kb{c}}}}{h{{Kb{c}}}}}FdFf}{{{h{c}}{h{e}}}Fd{}{}}00000{{{h{{Jj{c}}}}{h{e}}ji}{{`{{Hj{}{{Hh{{G`{g{An{c}}}}}}}}}}}f{{Gn{}{{Gl{Ob}}}}}Aj{{Jl{}{{Hh{{G`{gKf}}}}}}}}0{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{G`{Kf{h{Kh}}}}}}}}}}}{}}{{{h{{Jj{c}}}}{h{AfFh}}}FjFl}{{{h{{Oh{ce}}}}{h{AfFh}}}FjFlFl}{{{h{{Oj{ce}}}}{h{AfFh}}}FjFlFl}{{{h{Of}}{h{AfFh}}}Fj}0{{{h{{Kb{c}}}}{h{AfFh}}}FjFl}{cc{}}000000{{{h{L`}}}{{Ij{{Kb{c}}}}}{fAjBfIlC`}}{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{Oh{{Ol{Cn}}c}}}}}}}}}{}}{{{h{{Jj{c}}}}{h{e}}jCd}{{Dd{{Ah{{h{c}}}}}}}f{{Gn{}{{Gl{Ob}}}}}}{{{h{{Jj{c}}}}{h{e}}jKf}{{Dd{{G`{{Ah{{h{c}}}}Cd}}}}}f{{Gn{}{{Gl{Ob}}}}}}{{{h{{Jj{c}}}}Cd}{{Dd{{Ol{Cn}}}}}{}}{{{h{{Jj{c}}}}Cd}{{Dd{{Oh{{Ol{Cn}}c}}}}}{}}{{{h{{Jj{c}}}}Kf}{{Dd{{h{Kh}}}}}{}}{{{h{{Jj{c}}}}}{{Kb{c}}}{AjBf}}{{{h{Af{Jj{c}}}}Cdc}{{Kb{c}}}{AjBf}}{{{h{Af{Jj{c}}}}CdFb}{{Kb{c}}}{AjBf}}{{{h{Af{Jj{c}}}}e}{{Kb{c}}}{AjBf}{{On{{Ol{Cn}}}}}}{{{h{Af{Jj{c}}}}KfKh}{{Kb{c}}}{AjBf}}{ce{}{}}000000{c{{Hf{g}}}{}{}{{Hj{}{{Hh{e}}}}}}011{{{h{{Jj{c}}}}}Fd{}}{{{h{{Kb{c}}}}}FdBf}``{{{h{{Jj{c}}}}{h{e}}j}{{`{{Hj{}{{Hh{{Oj{{Ol{Cn}}c}}}}}}}}}fGn}{{{Jj{c}}g}{{Jj{e}}}{AjBf}{AjBf}{{Nl{c}{{Od{e}}}}}}{{{Kb{c}}g}{{Kb{e}}}BfBf{{Nl{c}{{Od{e}}}}}}{{{h{Af{Kb{c}}}}{Kb{c}}}BbBf}{c{{Jj{e}}}{{Jl{}{{Hh{Cn}}}}}{AjBf}}{{{h{Af{A@`{cg}}}}}{{Dd{i}}}{}{}{{Nl{Gd{Ol{Cn}}}{{Od{{Dd{e}}}}}}}{}}{{{h{Af{A@b{cg}}}}}{{Dd{i}}}{}{}{{Nl{GdCd}{{Od{{Dd{e}}}}}}}{}}{{{h{{Jj{c}}}}Kf}{{h{{A@d{Cd}}}}}{}}{{{h{{Oh{ce}}}}{h{{Oh{ce}}}}}{{Dd{Bd}}}I`I`}{{{h{{Oj{ce}}}}{h{{Oj{ce}}}}}{{Dd{Bd}}}I`I`}{{{h{{Kb{c}}}}{h{L`}}}{{Ij{Bb}}}{fAjBfIlC`}}{{{h{{Kb{c}}}}e}Eb{BfIl}Ib}{{{h{c}}}e{}{}}000{{{h{c}}}In{}}{c{{J`{i}}}{}{}{}{{Hj{}{{Hh{{Eb{eg}}}}}}}}0{{{h{{Jj{c}}}}{h{e}}jik}{{Eb{b}}}fGnAj{{Jl{}{{Hh{{G`{gKf}}}}}}}{{Nl{{h{g}}D`}{{Od{Fd}}}}}}{{{h{{Jj{c}}}}{h{e}}ji}{{`{{Hj{}{{Hh{{Eb{{G`{g{An{c}}}}}}}}}}}}}fGnAj{{Jl{}{{Hh{{G`{gKf}}}}}}}}0{c{{Eb{e}}}{}{}}000000{{{h{{Jj{c}}}}{h{e}}jCd}{{Eb{{Dd{{Ah{{h{c}}}}}}}}}fGn}{{{h{{Jj{c}}}}{h{e}}jKf}{{Eb{{Dd{{G`{{Ah{{h{c}}}}Cd}}}}}}}fGn}2222222{{{h{{Jj{c}}}}{h{e}}j}{{`{{Hj{}{{Hh{{Eb{{Oj{{Ol{Cn}}c}}}}}}}}}}}fGn}``{{{h{{Jj{c}}}}Cd}{{Dd{{Kl{Db{h{Kh}}}}}}}{}}{{{h{{Jj{c}}}}Cd}{{`{{Lf{}{{Hh{{G`{Db{h{{A@d{Cd}}}}}}}}}}}}}{}}`{{{h{{Kb{c}}}}}{{`{{Hj{}{{Hh{{G`{Kf{h{Kh}}}}}}}}}}}{}}``{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{Oh{{Ol{Cn}}c}}}}}}}}}{}}{{{h{c}}}Jb{}}000000{{{h{Af{Jj{c}}}}Fb}{{Kb{c}}}{AjBf}}{ce{}{}}000000{{{h{{Jj{c}}}}ei}{{A@`{ci}}}{AjBf}{{On{{Ol{Cn}}}}}{}{{Nl{Gd{Ol{Cn}}}{{Od{{Dd{g}}}}}}}}{{{h{{Jj{c}}}}{h{Cn}}g}{{A@b{cg}}}{}{}{{Nl{GdCd}{{Od{{Dd{e}}}}}}}}{{{h{{Jj{c}}}}Cdg}{{A@b{cg}}}{AjBf}{}{{Nl{GdCd}{{Od{{Dd{e}}}}}}}}","D":"CEl","p":[[5,"Balance",0,947],[5,"DescriptorId",0,948],[10,"Anchor",0,949],[1,"reference"],[5,"BlockId",0,950],[5,"ConfirmationBlockTime",0,950],[5,"Hash",951],[1,"u8"],[1,"slice"],[1,"array"],[0,"mut"],[6,"ChainPosition",0,950],[10,"Clone",952],[6,"ConfirmationTime",0,950],[5,"FullTxOut",0,950],[5,"SpkIterator",0,953],[1,"unit"],[6,"Ordering",954],[10,"Ord",954],[5,"Persisted",0,955],[6,"ValueRef",956],[5,"Impl",0],[8,"FromSqlResult",957],[10,"DeserializeOwned",958],[5,"BlockHash",959],[5,"Txid",960],[5,"Amount",961],[6,"DescriptorPublicKey",962],[6,"Descriptor",963],[6,"Network",964],[5,"Transaction",960],[5,"ScriptBuf",965],[1,"u32"],[6,"Option",966],[17,"CreateParams"],[17,"LoadParams"],[17,"CreateError"],[17,"LoadError"],[17,"PersistError"],[10,"PersistWith",0,955],[6,"Result",967],[10,"Future",968],[5,"Box",969],[5,"Pin",970],[10,"PersistAsyncWith",0,955],[10,"Borrow",971],[10,"DescriptorExt",0,948],[10,"Deserializer",958],[1,"u64"],[1,"bool"],[10,"PartialEq",954],[5,"Formatter",972],[8,"Result",972],[10,"Debug",972],[1,"never"],[1,"tuple"],[5,"Block",959],[1,"usize"],[10,"AnchorFromBlockPosition",0,949],[5,"FromSliceError",973],[1,"str"],[17,"Error"],[10,"ChainOracle",0,974],[10,"Hash",975],[10,"Hasher",975],[10,"SliceIndex",976],[5,"IntoFallible",977],[17,"Item"],[10,"Iterator",978],[10,"Merge",0,949],[10,"RangeBounds",979],[10,"PartialOrd",954],[10,"Serializer",980],[17,"ChangeSet"],[10,"Staged",0,955],[6,"ToSqlOutput",981],[8,"Result",982],[10,"Serialize",980],[5,"String",983],[5,"Convert",977],[5,"TypeId",984],[5,"IndexedTxGraph",335],[5,"ChangeSet",335],[10,"Indexer",385],[5,"TxGraph",769],[10,"IntoIterator",985],[10,"Default",986],[10,"Deserialize",958],[5,"ChangeSet",769],[5,"ChangeSet",394],[5,"OutPoint",960],[5,"TxOut",960],[5,"KeychainTxOutIndex",394],[5,"BTreeMap",987],[6,"InsertDescriptorError",394],[5,"Transaction",988],[5,"SpkTxOutIndex",496],[8,"Indexed",0],[10,"DoubleEndedIterator",989],[8,"KeychainIndexed",0],[10,"ExactSizeIterator",990],[5,"SignedAmount",961],[5,"BTreeSet",991],[5,"Vec",992],[5,"LocalChain",533],[5,"ChangeSet",533],[5,"MissingGenesisError",533],[5,"Header",959],[5,"CannotConnectError",533],[6,"ApplyHeaderError",533],[5,"CheckPoint",533],[5,"AlterCheckPointError",533],[5,"CheckPointIter",533],[5,"SyncRequest",705],[10,"Send",993],[17,"IntoIter"],[5,"FullScanRequest",705],[10,"FnMut",994],[10,"Sync",993],[5,"Script",995],[6,"Infallible",996],[17,"Output"],[6,"CalculateFeeError",769],[5,"TxNode",769],[5,"CanonicalTx",769],[5,"Arc",997],[10,"Into",996],[5,"TxAncestors",769],[5,"TxDescendants",769],[5,"HashSet",998],[15,"Confirmed",332],[15,"Unconfirmed",332],[15,"DescriptorAlreadyAssigned",492],[15,"KeychainAlreadyAssigned",492],[5,"SyncResult",705],[5,"FullScanResult",705]],"r":[[0,949],[1,949],[2,953],[3,947],[4,950],[6,974],[7,950],[9,950],[10,950],[17,948],[18,948],[20,950],[23,335],[24,385],[30,949],[31,955],[34,955],[35,955],[36,953],[37,955],[38,769],[225,385],[259,385]],"b":[[48,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[49,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[98,"impl-FromSql-for-Impl%3CA%3E"],[99,"impl-FromSql-for-Impl%3CBlockHash%3E"],[100,"impl-FromSql-for-Impl%3CTxid%3E"],[101,"impl-FromSql-for-Impl%3CAmount%3E"],[102,"impl-FromSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[103,"impl-FromSql-for-Impl%3CNetwork%3E"],[104,"impl-FromSql-for-Impl%3CTransaction%3E"],[105,"impl-FromSql-for-Impl%3CScriptBuf%3E"],[106,"impl-FromSql-for-Impl%3CDescriptorId%3E"],[156,"impl-Debug-for-Balance"],[157,"impl-Display-for-Balance"],[164,"impl-Display-for-DescriptorId"],[165,"impl-UpperHex-for-DescriptorId"],[166,"impl-LowerHex-for-DescriptorId"],[167,"impl-Debug-for-DescriptorId"],[175,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[177,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[273,"impl-ToSql-for-Impl%3CDescriptorId%3E"],[274,"impl-ToSql-for-Impl%3CA%3E"],[275,"impl-ToSql-for-Impl%3CNetwork%3E"],[276,"impl-ToSql-for-Impl%3CAmount%3E"],[277,"impl-ToSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[278,"impl-ToSql-for-Impl%3CScriptBuf%3E"],[279,"impl-ToSql-for-Impl%3CTxid%3E"],[280,"impl-ToSql-for-Impl%3CTransaction%3E"],[281,"impl-ToSql-for-Impl%3CBlockHash%3E"],[358,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[360,"impl-From%3CChangeSet%3E-for-ChangeSet%3CA,+ChangeSet%3E"],[403,"impl-KeychainTxOutIndex%3CK%3E"],[404,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[423,"impl-Display-for-InsertDescriptorError%3CK%3E"],[424,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[595,"impl-Debug-for-MissingGenesisError"],[596,"impl-Display-for-MissingGenesisError"],[597,"impl-Display-for-AlterCheckPointError"],[598,"impl-Debug-for-AlterCheckPointError"],[599,"impl-Display-for-CannotConnectError"],[600,"impl-Debug-for-CannotConnectError"],[601,"impl-Display-for-ApplyHeaderError"],[602,"impl-Debug-for-ApplyHeaderError"],[617,"impl-FromIterator%3C(u32,+Option%3CBlockHash%3E)%3E-for-ChangeSet"],[618,"impl-FromIterator%3C(u32,+BlockHash)%3E-for-ChangeSet"],[844,"impl-Debug-for-CalculateFeeError"],[845,"impl-Display-for-CalculateFeeError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAUCVQAYAAEAJwAAACoAAQAtAAIAMQACADUAFABLAA8AXAAPAG8AAAB2AAUAfgAEAIQAJACqAAEArwABALIAAAC3AAAAugADAL8AAgDDAAQAywAAANoAAADiAAAA6QAAAOwAAQDvAAYA+gAAAPwABQAEAQAACAEIABIBCgAhARMANwEJAEMBCQBWAQAAWgELAGcBAABpAQAAdAEBAHcBBQB+AQMAlQEVALEBAgC6AQAA1AEAANYBCQDjAQIA6gECAPMBBgD8AQIAAgIAAAwCAgASAgAAFQIAACgCHwBJAgYAUQIKAGACAABqAgEAcQIAAIECAwCHAgAAiQIAAJACAACSAgoAngIHAKcCDwC4AgcAxgIHAPECBwD6AgcAFgMAABkDDQApAxEAPAMKAEoDBQBsAwEAbwMAAHUDAAB3AwEAegMBAH0DBQCIAwYAkQMGAKIDBgCqAwYA"}],\ -["bdk_electrum",{"t":"FENNENNNNONNNNNNNNN","n":["BdkElectrumClient","bdk_chain","borrow","borrow_mut","electrum_client","fetch_tx","fmt","from","full_scan","inner","into","new","populate_tx_cache","sync","transaction_broadcast","try_from","try_into","type_id","vzip"],"q":[[0,"bdk_electrum"],[19,"bdk_electrum::bdk_electrum_client"],[20,"bitcoin::blockdata::transaction"],[21,"alloc::sync"],[22,"electrum_client::types"],[23,"core::result"],[24,"electrum_client::api"],[25,"core::fmt"],[26,"bdk_chain::spk_client"],[27,"core::cmp"],[28,"core::clone"],[29,"bdk_chain::tx_graph"],[30,"core::convert"],[31,"core::any"]],"i":[0,0,3,3,0,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{c}}}}h}{{A`{{l{j}}n}}}Ab}{{{b{{f{c}}}}{b{dAd}}}AfAh}{cc{}}{{{b{{f{c}}}}{Aj{e}}AlAlAn}{{A`{{B`{e}}n}}}Ab{BbBd}}`{ce{}{}}{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}}}{}{}}0{{{b{c}}}C`{}}6","D":"Af","p":[[1,"reference"],[0,"mut"],[5,"BdkElectrumClient",0,19],[5,"Txid",20],[5,"Transaction",20],[5,"Arc",21],[6,"Error",22],[6,"Result",23],[10,"ElectrumApi",24],[5,"Formatter",25],[8,"Result",25],[10,"Debug",25],[5,"FullScanRequest",26],[1,"usize"],[1,"bool"],[5,"FullScanResult",26],[10,"Ord",27],[10,"Clone",28],[1,"unit"],[5,"TxGraph",29],[10,"AsRef",30],[5,"SyncRequest",26],[5,"SyncResult",26],[5,"TypeId",31]],"r":[[0,19]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAgAAwACAAMABwAAABAAAwA="}],\ -["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"}],\ -["bdk_file_store",{"t":"FPFGPPPGFNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNOO","n":["AggregateChangesetsError","Bincode","EntryIter","FileError","InvalidMagicBytes","Io","Io","IterError","Store","aggregate_changesets","append_changeset","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","changeset","create_new","drop","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into_fallible","into_iter","iter_changesets","iter_error","new","next","open","open_or_create_new","to_string","to_string","to_string","transpose_into_fallible","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","vzip","vzip","vzip","vzip","vzip","expected","got"],"q":[[0,"bdk_file_store"],[75,"bdk_file_store::FileError"],[77,"bdk_file_store::store"],[78,"core::option"],[79,"core::result"],[80,"bdk_chain::tx_data_traits"],[81,"serde::ser"],[82,"serde::de"],[83,"core::marker"],[84,"std::io::error"],[85,"std::path"],[86,"core::convert"],[87,"bdk_file_store::entry_iter"],[88,"core::fmt"],[89,"fallible_iterator"],[90,"core::iter::traits::iterator"],[91,"std::fs"],[92,"alloc::string"],[93,"core::any"]],"i":[0,20,0,0,16,20,16,0,0,2,2,19,20,2,5,16,19,20,2,5,16,5,2,19,20,20,2,5,5,16,16,19,20,20,2,5,16,16,19,20,2,5,16,19,19,2,5,19,19,2,2,20,5,16,19,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,32,32],"f":"`````````{{{f{b{d{c}}}}}{{l{{h{c}}{j{c}}}}}{nA`AbAdAf}}{{{f{b{d{c}}}}{f{c}}}{{l{AhAj}}}{nA`AbAdAf}}{{{f{c}}}{{f{e}}}{}{}}0000{{{f{bc}}}{{f{be}}}{}{}}0000`{{{f{{An{Al}}}}c}{{l{{d{e}}B`}}}{{Bd{Bb}}}{nA`AbAdAf}}{{{f{b{Bf{c}}}}}Ah{}}{{{f{Bh}}{f{bBj}}}Bl}0{{{f{{d{c}}}}{f{bBj}}}Bl{AfAdBn}}{{{f{{j{c}}}}{f{bBj}}}Bl{}}{{{f{{j{c}}}}{f{bBj}}}BlBn}{{{f{B`}}{f{bBj}}}Bl}0{cc{}}0{AjBh}11{AjB`}2{ce{}{}}0000{c{{C`{g}}}{}{}{{Cd{}{{Cb{e}}}}}}1{{{f{b{d{c}}}}}{{Bf{c}}}{nA`AbAdAf}}`{{Cf{f{bCh}}}{{Bf{c}}}{}}{{{f{b{Bf{c}}}}}{{h{e}}}Ab{}}>>{{{f{c}}}Cj{}}00{c{{Cl{i}}}{}{}{}{{Cd{}{{Cb{{l{eg}}}}}}}}{c{{l{e}}}{}{}}000000000{{{f{c}}}Cn{}}000088888``","D":"Cl","p":[[0,"mut"],[5,"Store",0,77],[1,"reference"],[6,"Option",78],[5,"AggregateChangesetsError",0,77],[6,"Result",79],[10,"Merge",80],[10,"Serialize",81],[10,"DeserializeOwned",82],[10,"Send",83],[10,"Sync",83],[1,"unit"],[5,"Error",84],[1,"u8"],[1,"slice"],[6,"FileError",0],[5,"Path",85],[10,"AsRef",86],[5,"EntryIter",0,87],[6,"IterError",0,87],[5,"Formatter",88],[8,"Result",88],[10,"Debug",88],[5,"IntoFallible",89],[17,"Item"],[10,"Iterator",90],[1,"u64"],[5,"File",91],[5,"String",92],[5,"Convert",89],[5,"TypeId",93],[15,"InvalidMagicBytes",75]],"r":[[0,77],[2,87],[7,87],[8,77]],"b":[[24,"impl-Display-for-IterError"],[25,"impl-Debug-for-IterError"],[27,"impl-Display-for-AggregateChangesetsError%3CC%3E"],[28,"impl-Debug-for-AggregateChangesetsError%3CC%3E"],[29,"impl-Debug-for-FileError"],[30,"impl-Display-for-FileError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAC8ACAAMAAkAGAAHACIAAAAlAAAALQAAADAAAQA0AAIAOAAVAA=="}],\ +["bdk_chain",{"t":"KKSFFSKGRFGPPRRRRKFRFFIEEIRRRRKKRRKFFKEPPNNMNNNNNNEONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOMMNNNNNNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNMNNNNNOOONCCNNNNNNNNNNNNNMNNNMNOEMMNNCMENNNNONNNNNNNMMNNDCDNNNNNOCEMNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNCONNNNNNNNNNNONNNNNNNNNNOOOFFNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNONNNNRKMMMMMCCFSPGPFTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGTPFFFFPFFTNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNONNNNNNNNSHFFFPPGFFFFPNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNONNNNNOONNNNNONNONNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNTGFFPPTTTFFFFNNNOONNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOONNNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorFromBlockPosition","BIP32_MAX_INDEX","Balance","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ChangeSet","ConfirmationBlockTime","ConfirmationTime","Confirmed","Confirmed","CreateError","CreateError","CreateParams","CreateParams","DescriptorExt","DescriptorId","Error","FullTxOut","Impl","Indexed","IndexedTxGraph","Indexer","KeychainIndexed","LoadError","LoadError","LoadParams","LoadParams","Merge","PersistAsyncWith","PersistError","PersistError","PersistWith","Persisted","SpkIterator","Staged","TxGraph","Unconfirmed","Unconfirmed","add","all_zeros","anchor_block","anchor_block","anchor_block","as_byte_array","as_raw_hash","as_ref","as_ref","bitcoin","block_id","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_position","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","cmp","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","confirmed","create","create","create","create_async","default","default","default","deref","deref","deref_mut","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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_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","height","immature","index","indexed_tx_graph","indexer","into","into","into","into","into","into","into","into","into","into","into_fallible","into_inner","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","keychain_txout","load","load","load","load_async","local_chain","merge","miniscript","new","new_with_range","next","nth","outpoint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","persist","persist","persist","persist_async","rusqlite","rusqlite_impl","serde","serialize","serialize","serialize","serialize","serialize","spent_by","spk_client","spk_txout","staged","take","take","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_string","to_string","total","transpose_into_fallible","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","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","index","indexer","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","merge","new","serialize","to_owned","try_from","try_from","try_into","try_into","tx_graph","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","LAST_REVEALED_TABLE_NAME","SCHEMA_NAME","all_unbounded_spk_iters","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","default","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from_sqlite","get_descriptor","index_of_spk","index_tx","index_txout","initial_changeset","inner","insert_descriptor","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","merge","net_value","new","next_index","next_unused_spk","outpoints","persist_to_sqlite","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_string","try_from","try_from","try_from","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","unused_keychain_spks","unused_spks","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","BLOCKS_TABLE_NAME","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","SCHEMA_NAME","apply_changeset","apply_header","apply_header_connected_to","apply_update","block_id","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","deserialize","disconnect_from","eq","eq","eq","eq","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_block_ids","from_blocks","from_changeset","from_genesis_hash","from_header","from_iter","from_iter","from_sqlite","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","into_fallible","into_iter","into_iter","is_block_in_chain","is_empty","iter","iter_checkpoints","merge","new","next","original_hash","persist_to_sqlite","prev","push","range","range","serialize","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","transpose_into_fallible","try_from","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","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","SCHEMAS_TABLE_NAME","migrate_schema","FullScanRequest","FullScanRequestBuilder","FullScanResult","OutPoint","Spk","SyncItem","SyncProgress","SyncRequest","SyncRequestBuilder","SyncResult","Txid","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","build","builder","builder","chain_tip","chain_tip","chain_tip","chain_tip","chain_update","chain_update","clone","clone","clone_into","clone_into","cmp","consumed","default","default","default","default","default","default","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","graph_update","graph_update","hash","inspect","inspect","into","into","into","into","into","into","into","into","iter_outpoints","iter_spks","iter_spks","iter_txids","keychains","last_active_indices","next_outpoint","next_spk","next_spk","next_txid","outpoints","outpoints_consumed","outpoints_remaining","partial_cmp","progress","remaining","revealed_spks_from_indexer","spks","spks_consumed","spks_for_keychain","spks_from_indexer","spks_remaining","spks_with_indexes","to_owned","to_owned","to_string","total","total_outpoints","total_spks","total_txids","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","txids","txids_consumed","txids_remaining","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unused_spks_from_indexer","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","ANCHORS_TABLE_NAME","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","SCHEMA_NAME","TXOUTS_TABLE_NAME","TXS_TABLE_NAME","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","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","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_sqlite","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_fallible","into_fallible","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_canonical_txs","map_anchors","map_anchors","merge","new","next","next","outspends","partial_cmp","partial_cmp","persist_to_sqlite","serialize","to_owned","to_owned","to_owned","to_owned","to_string","transpose_into_fallible","transpose_into_fallible","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"],[332,"bdk_chain::ConfirmationTime"],[335,"bdk_chain::indexed_tx_graph"],[385,"bdk_chain::indexer"],[394,"bdk_chain::indexer::keychain_txout"],[492,"bdk_chain::indexer::keychain_txout::InsertDescriptorError"],[496,"bdk_chain::indexer::spk_txout"],[533,"bdk_chain::local_chain"],[703,"bdk_chain::rusqlite_impl"],[705,"bdk_chain::spk_client"],[851,"bdk_chain::tx_graph"],[1029,"bdk_chain::balance"],[1030,"bdk_chain::descriptor_ext"],[1031,"bdk_chain::tx_data_traits"],[1032,"bdk_chain::chain_data"],[1033,"bitcoin_hashes::sha256"],[1034,"core::clone"],[1035,"bdk_chain::spk_iter"],[1036,"core::cmp"],[1037,"bdk_chain::persist"],[1038,"rusqlite::types::value_ref"],[1039,"bitcoin::blockdata::block"],[1040,"rusqlite::types::from_sql"],[1041,"bitcoin::blockdata::transaction"],[1042,"bitcoin::network"],[1043,"bitcoin::blockdata::script::owned"],[1044,"miniscript::descriptor::key"],[1045,"miniscript::descriptor"],[1046,"serde::de"],[1047,"bitcoin_units::amount"],[1048,"core::option"],[1049,"core::result"],[1050,"core::future::future"],[1051,"alloc::boxed"],[1052,"core::pin"],[1053,"core::borrow"],[1054,"core::fmt"],[1055,"bitcoin_hashes"],[1056,"bdk_chain::chain_oracle"],[1057,"core::hash"],[1058,"core::slice::index"],[1059,"fallible_iterator"],[1060,"core::iter::traits::iterator"],[1061,"core::ops::range"],[1062,"serde::ser"],[1063,"rusqlite::types::to_sql"],[1064,"rusqlite"],[1065,"alloc::string"],[1066,"core::any"],[1067,"core::iter::traits::collect"],[1068,"core::default"],[1069,"alloc::collections::btree::map"],[1070,"rusqlite::transaction"],[1071,"core::iter::traits::double_ended"],[1072,"core::iter::traits::exact_size"],[1073,"alloc::collections::btree::set"],[1074,"alloc::vec"],[1075,"core::ops::function"],[1076,"core::marker"],[1077,"bitcoin::blockdata::script::borrowed"],[1078,"core::convert"],[1079,"alloc::sync"],[1080,"std::collections::hash::set"]],"i":[0,0,0,0,0,0,0,0,75,0,0,12,14,40,45,40,45,0,0,63,0,0,0,0,0,0,40,45,40,45,0,0,40,45,0,0,0,0,0,12,14,1,2,3,5,6,2,2,2,2,0,6,23,1,12,14,5,6,15,20,2,2,16,23,1,12,14,5,6,15,20,2,16,15,1,12,14,5,6,15,2,16,1,12,14,5,6,15,2,16,12,12,14,5,6,15,20,2,23,23,23,23,23,23,23,23,23,3,3,12,6,6,1,40,45,20,20,1,5,6,23,20,20,16,47,1,14,5,6,2,47,2,1,12,14,5,6,15,20,2,1,1,12,12,14,14,5,5,6,6,15,15,20,20,2,2,1,1,12,14,5,6,15,20,2,2,2,2,23,23,23,1,12,14,14,5,5,5,6,15,20,2,2,16,59,5,6,2,2,2,2,2,2,63,12,14,5,6,2,5,5,1,2,0,0,23,1,12,14,5,6,15,20,2,16,16,23,16,63,12,14,15,70,15,15,0,40,45,20,20,0,70,0,16,16,16,16,15,12,14,5,6,15,20,2,40,45,20,20,0,0,0,1,14,5,6,2,15,0,0,75,70,70,2,1,12,14,5,6,15,2,16,2,23,23,23,23,23,23,23,23,23,1,2,1,16,1,1,23,1,12,14,5,6,15,20,2,16,23,1,12,14,5,6,15,20,2,16,0,15,23,1,12,14,5,6,15,20,2,16,14,1,23,1,12,14,5,6,15,20,2,16,138,139,138,0,0,82,82,82,82,82,82,82,82,82,83,82,83,83,83,82,83,83,83,82,83,82,83,83,83,82,82,83,82,82,82,82,82,82,83,83,83,82,83,83,82,83,82,83,83,82,83,82,83,84,0,84,84,84,84,84,0,0,0,0,95,0,95,0,89,89,93,93,93,93,95,89,93,95,89,93,95,89,93,95,89,93,89,89,95,89,93,95,95,89,93,95,89,89,93,93,93,93,93,93,93,93,95,89,89,93,93,93,93,93,89,93,93,93,93,93,93,93,89,93,93,93,93,93,89,93,93,93,93,93,93,89,93,93,95,89,95,93,95,89,93,95,89,93,93,93,93,95,89,93,93,93,93,93,95,89,140,140,141,141,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,106,110,0,0,0,0,110,0,0,106,105,105,105,105,111,106,113,111,105,106,107,112,109,110,113,111,105,106,107,112,109,110,111,105,106,107,112,109,110,111,105,106,107,112,109,110,106,106,105,111,105,106,107,112,109,110,111,111,105,106,107,107,112,112,109,109,110,110,113,111,105,106,106,107,112,109,110,111,105,105,105,111,106,106,106,105,105,111,105,105,111,111,112,105,111,105,113,111,105,106,107,112,109,110,113,113,111,105,106,111,105,106,111,113,112,106,111,111,111,105,106,105,111,105,106,107,112,109,110,107,112,109,110,113,113,111,105,106,107,112,109,110,109,113,111,105,106,107,112,109,110,113,111,105,106,107,112,109,110,112,113,111,105,106,107,112,109,110,0,0,0,0,0,118,118,0,0,0,0,0,118,114,115,116,117,118,119,120,121,114,115,116,117,118,119,120,121,114,116,115,117,114,115,116,117,120,121,118,119,118,119,118,119,114,115,116,117,120,121,118,118,118,118,118,119,120,121,114,115,115,116,117,117,118,119,120,121,120,121,118,114,116,114,115,116,117,118,119,120,121,115,115,117,115,117,121,115,115,117,115,114,119,119,118,115,119,114,114,119,116,116,119,114,118,119,118,119,119,119,119,114,115,116,117,118,119,120,121,114,115,116,117,118,119,120,121,114,119,119,114,115,116,117,118,119,120,121,114,114,115,116,117,118,119,120,121,90,0,0,0,130,130,90,90,90,0,0,0,0,85,85,90,131,90,85,85,85,85,85,135,136,85,131,132,130,90,135,136,85,131,132,130,90,85,132,135,135,136,136,85,131,132,90,85,131,132,90,131,132,85,90,131,90,85,85,131,132,130,90,131,131,132,132,130,130,85,85,85,85,131,132,130,130,90,135,136,85,131,132,130,90,90,85,85,85,85,85,85,85,85,85,85,85,135,136,85,131,132,130,90,135,136,135,136,85,90,90,131,85,85,90,90,85,135,136,85,131,132,90,90,85,131,132,90,130,135,136,85,85,85,135,136,85,131,132,130,90,85,85,135,136,85,131,132,130,90,85,131,132,85,85,131,90,90,90,85,135,136,85,131,132,130,90,85,135,136,85,131,132,130,90,85,85,85],"f":"`````````````````````````````````````````{{bb}b}{{}d}{{{h{f}}}j}{{{h{j}}}j}{{{h{l}}}j}{{{h{d}}}{{h{c}}}{}}{{{h{d}}}{{h{n}}}}{{{h{d}}}{{h{{Ab{A`}}}}}}{{{h{d}}}{{h{{Ad{A`}}}}}}``{{{h{c}}}{{h{e}}}{}{}}0000000200{{{h{Afc}}}{{h{Afe}}}{}{}}000000000`{{{h{b}}}b}{{{h{{Ah{c}}}}}{{Ah{c}}}Aj}{{{h{Al}}}Al}:{{{h{l}}}l}{{{h{{An{c}}}}}{{An{c}}}Aj}{{{h{d}}}d}{{{h{{B`{c}}}}}{{B`{c}}}Aj}{{{h{c}}{h{Afe}}}Bb{}{}}0000000{{{Ah{{h{c}}}}}{{Ah{c}}}Aj}{{{h{{Ah{c}}}}{h{{Ah{c}}}}}BdBf}{{{h{Al}}{h{Al}}}Bd}{{{h{j}}{h{j}}}Bd}{{{h{l}}{h{l}}}Bd}{{{h{{An{c}}}}{h{{An{c}}}}}BdBf}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}BdBf}{{{h{d}}{h{d}}}Bd}{Bj{{C`{{Bn{Bl}}}}}}{Bj{{C`{{Bn{Cb}}}}}}{Bj{{C`{{Bn{Cd}}}}}}{Bj{{C`{{Bn{d}}}}}}{Bj{{C`{{Bn{Cf}}}}}}{Bj{{C`{{Bn{Ch}}}}}}{Bj{{C`{{Bn{{Cl{Cj}}}}}}}}{Bj{{C`{{Bn{c}}}}}{fCn}}{Bj{{C`{{Bn{D`}}}}}}{{{h{f}}}Db}0{{{h{{Ah{c}}}}}{{Dd{Db}}}f}{{{h{l}}}Db}``{{{h{Afc}}e}{{Eb{{E`{}{{Df{e}}{Dh{g}}{Dj{i}}{Dl{k}}{Dn{m}}}}i}}}{}{}{}{}{}{}}{{{h{Afc}}e}{{Eh{{Ef{Ed}}}}}{}{}}{{{h{Afc}}}{{Eb{{Bh{e}}}}}{}{{E`{c}}}}{{{h{Afc}}}{{Eb{{Bh{e}}}}}{}{{Ej{c}}}}{{}b}{{}j}{{}l}{{{h{{Bn{c}}}}}{{h{e}}}{}{}}{{{h{{Bh{c}}}}}{{h{e}}}{}{}}{{{h{Af{Bh{c}}}}}{{h{Afe}}}{}{}}{{{h{{B`{c}}}}}{{h{c}}}{{El{{Cl{Cj}}}}}}{{{h{En}}}d}{c{{Eb{b}}}F`}{c{{Eb{Al}}}F`}{c{{Eb{j}}}F`}{c{{Eb{l}}}F`}{c{{Eb{d}}}F`}{{{h{En}}}Fb}{{}c{}}{{{h{b}}{h{b}}}Fd}{{{h{{Ah{c}}}}{h{{Ah{c}}}}}FdFf}{{{h{Al}}{h{Al}}}Fd}{{{h{j}}{h{j}}}Fd}{{{h{l}}{h{l}}}Fd}{{{h{{An{c}}}}{h{{An{c}}}}}FdFf}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}FdFf}{{{h{d}}{h{d}}}Fd}{{{h{c}}{h{e}}}Fd{}{}}000000000000000{{{h{b}}{h{AfFh}}}Fj}0{{{h{{Ah{c}}}}{h{AfFh}}}FjFl}{{{h{Al}}{h{AfFh}}}Fj}{{{h{j}}{h{AfFh}}}Fj}{{{h{l}}{h{AfFh}}}Fj}{{{h{{An{c}}}}{h{AfFh}}}FjFl}{{{h{{Bh{c}}}}{h{AfFh}}}FjFl}{{{h{d}}{h{AfFh}}}Fj}000{c{{Bn{c}}}{}}{Fnc{}}{cc{}}000{{{Ah{l}}}Al}1{{{G`{DbBl}}}j}{{{G`{{h{Db}}{h{Bl}}}}}j}3333{nd}4{{{h{Gb}}jGd}Gf}{{{h{Gb}}jGd}j}{{{h{Gb}}jGd}l}{cd{}}04{{{h{{Ab{A`}}}}}{{Eb{dGh}}}}0{{{h{Gj}}}{{Eb{dc}}}{}}{{{h{{Gn{}{{Gl{c}}}}}}}{{Eb{jc}}}Fl}{{{h{{Ah{c}}}}{h{Afe}}}BbH`Hb}{{{h{Al}}{h{Afc}}}BbHb}{{{h{j}}{h{Afc}}}BbHb}{{{h{l}}{h{Afc}}}BbHb}{{{h{d}}{h{Afc}}}BbHb}```{{{h{d}}c}{{h{e}}}{{Hd{{Ab{A`}}}}}{}}``{ce{}{}}000000000{c{{Hf{g}}}{}{}{{Hj{}{{Hh{e}}}}}}{{{Bn{c}}}c{}}2{{{h{{Gn{}{{Gl{c}}}}}}jj}{{Eb{{Dd{Fd}}c}}}Fl}{{{h{{Ah{c}}}}}Fd{}}{{{h{Al}}}Fd}{{{h{{An{c}}}}Db}Fdf}{{{h{Hl}}}Fd}1``{{{h{Afc}}e}{{Eb{{Dd{{E`{}{{Df{g}}{Dh{e}}{Dj{i}}{Dl{k}}{Dn{m}}}}}}k}}}{}{}{}{}{}{}}{{{h{Afc}}e}{{Eh{{Ef{Ed}}}}}{}{}}{{{h{Afc}}}{{Eb{{Dd{{Bh{e}}}}}}}{}{{E`{c}}}}{{{h{Afc}}}{{Eb{{Dd{{Bh{e}}}}}}}{}{{Ej{c}}}}`{{{h{AfHl}}Hl}Bb}`{c{{B`{c}}}{{El{{Cl{Cj}}}}}}{{ce}{{B`{c}}}{{El{{Cl{Cj}}}}}{{Hn{Db}}}}{{{h{Af{B`{c}}}}}{{Dd{e}}}{{El{{Cl{Cj}}}}}{}}{{{h{Af{B`{c}}}}Gd}{{Dd{e}}}{{El{{Cl{Cj}}}}}{}}`{{{h{{Ah{c}}}}{h{{Ah{c}}}}}{{Dd{Bd}}}I`}{{{h{Al}}{h{Al}}}{{Dd{Bd}}}}{{{h{j}}{h{j}}}{{Dd{Bd}}}}{{{h{l}}{h{l}}}{{Dd{Bd}}}}{{{h{{An{c}}}}{h{{An{c}}}}}{{Dd{Bd}}}I`}{{{h{{Bh{c}}}}{h{{Bh{c}}}}}{{Dd{Bd}}}I`}{{{h{d}}{h{d}}}{{Dd{Bd}}}}{{{h{Afc}}{h{e}}}{{Eb{Bbg}}}{}{}{}}{{{h{Afc}}{h{e}}}{{Eh{{Ef{Ed}}}}}{}{}}{{{h{Af{Bh{e}}}}{h{Afc}}}{{Eb{Fd}}}{}{{E`{c}}}}{{{h{Af{Bh{e}}}}{h{Afc}}}{{Eb{Fd}}}{}{{Ej{c}}}}```{{{h{b}}c}EbIb}{{{h{Al}}c}EbIb}{{{h{j}}c}EbIb}{{{h{l}}c}EbIb}{{{h{d}}c}EbIb}```{{{h{Af{If{}{{Id{c}}}}}}}{{h{Afc}}}Hl}{{{h{AfHl}}}{{Dd{Hl}}}}0{dc{}}{{{h{c}}}e{}{}}0000000{dn}{{{h{{Bn{d}}}}}{{Ij{Ih}}}}{{{h{{Bn{Bl}}}}}{{Ij{Ih}}}}{{{h{{Bn{Cf}}}}}{{Ij{Ih}}}}{{{h{{Bn{{Cl{Cj}}}}}}}{{Ij{Ih}}}}{{{h{{Bn{Cd}}}}}{{Ij{Ih}}}}{{{h{{Bn{Ch}}}}}{{Ij{Ih}}}}{{{h{{Bn{c}}}}}{{Ij{Ih}}}{fIl}}{{{h{{Bn{Cb}}}}}{{Ij{Ih}}}}{{{h{{Bn{D`}}}}}{{Ij{Ih}}}}{{{h{c}}}In{}}0{{{h{b}}}D`}{c{{J`{i}}}{}{}{}{{Hj{}{{Hh{{Eb{eg}}}}}}}}`1{c{{Eb{e}}}{}{}}0000000000000000000``{{{h{c}}}Jb{}}000000000{FbAl}`{ce{}{}}000000000`````{{{h{Af{Jd{ce}}}}GbDb}{{Jf{c}}}{Gff}Jh}{{{h{Af{Jd{ce}}}}{h{Gb}}Db}{{Jf{c}}}{Gff}Jh}{{{h{Af{Jd{ce}}}}{Jf{c}}}BbfJh}{{{h{Af{Jd{ce}}}}{Jj{c}}}{{Jf{c}}}fJh}{{{h{{Jd{ce}}}}}{{h{{Jj{c}}}}}{}{}}{{{h{Af{Jd{ce}}}}i}{{Jf{c}}}fJh{{Jl{}{{Hh{c}}}}}{{Jl{}{{Hh{{G`{{h{Ch}}g}}}}}}}}{{{h{Af{Jd{ce}}}}g}{{Jf{c}}}fJh{{Jl{}{{Hh{{G`{{h{Ch}}Fb}}}}}}}}{{{h{Af{Jd{ce}}}}g}{{Jf{c}}}fJh{{Jl{}{{Hh{{G`{ChFb}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{Afc}}}{{h{Afe}}}{}{}}0{{{h{{Jf{ce}}}}}{{Jf{ce}}}AjAj}{{{h{c}}{h{Afe}}}Bb{}{}}{{}{{Jd{ce}}}{}Jn}{{}{{Jf{ce}}}{}Jn}{c{{Eb{{Jf{eg}}}}}F`{BfK`}K`}{{{h{{Jf{ce}}}}{h{{Jf{ce}}}}}FdFfFf}{{{h{{Jd{ce}}}}{h{AfFh}}}FjFlFl}{{{h{{Jf{ce}}}}{h{AfFh}}}FjFlFl}{cc{}}0{Kb{{Jf{cKb}}}{}}{{{Kd{c}}}{{Jf{ce}}}{}Jn}{{{h{{Jd{ce}}}}}{{h{{Jj{c}}}}}{}{}}``{{{h{{Jd{ce}}}}}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}Cbc}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}CbFb}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}Ch}{{Jf{c}}}fJh}{{{h{Af{Jd{ce}}}}KfKh}{{Jf{c}}}fJh}{ce{}{}}0{{{h{{Jf{ce}}}}}FdfHl}{{{h{Af{Jf{ce}}}}{Jf{ce}}}BbfHl}{c{{Jd{ec}}}{}{}}{{{h{{Jf{ce}}}}g}Eb{BfIl}IlIb}{{{h{c}}}e{}{}}{c{{Eb{e}}}{}{}}000`{{{h{c}}}Jb{}}077``{{{h{Af{Jh{}{{Id{c}}}}}}c}Bb{}}{{{h{Af{Jh{}{{Id{c}}}}}}{h{Ch}}}c{}}{{{h{Af{Jh{}{{Id{c}}}}}}Kf{h{Kh}}}c{}}{{{h{{Jh{}{{Id{c}}}}}}}c{}}{{{h{{Jh{}{{Id{c}}}}}}{h{Ch}}}Fd{}}``````````{{{h{{Kj{c}}}}}{{Kl{c{B`{{Cl{Cj}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}Kb}Bb{AjBfFl}}{{{h{Af{Kj{c}}}}e}Bb{AjBfFl}{}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Afc}}}{{h{Afe}}}{}{}}00{{{h{{Kj{c}}}}}{{Kj{c}}}Aj}{{{h{{Kn{c}}}}}{{Kn{c}}}Aj}{{{h{Kb}}}Kb}{{{h{c}}{h{Afe}}}Bb{}{}}00{{}{{Kj{c}}}{}}{{}Kb}{c{{Eb{Kb}}}F`}{{{h{{Kn{c}}}}{h{{Kn{c}}}}}FdFf}{{{h{Kb}}{h{Kb}}}Fd}{{{h{{Kj{c}}}}{h{AfFh}}}FjFl}{{{h{{Kn{c}}}}{h{AfFh}}}FjFl}0{{{h{Kb}}{h{AfFh}}}Fj}{cc{}}00{{{h{L`}}}{{Ij{Kb}}}}{{{h{{Kj{c}}}}c}{{Dd{{h{{Cl{Cj}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}Cf}{{Dd{{h{{G`{cDb}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}{h{Ch}}}e{AjBfFl}{}}{{{h{Af{Kj{c}}}}Kf{h{Kh}}}e{AjBfFl}{}}{{{h{{Kj{c}}}}}e{AjBfFl}{}}{{{h{{Kj{c}}}}}{{h{{Lb{{G`{cDb}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}c{Cl{Cj}}}{{Eb{Fd{Kn{c}}}}}{AjBfFl}}{ce{}{}}00{{{h{Kb}}}Fd}{{{h{{Kj{c}}}}{h{Ch}}}Fd{AjBfFl}}{{{h{{Kj{c}}}}cDb}Fd{AjBfFl}}{{{h{{Kj{c}}}}c}{{`{{Lf{}{{Hh{{Ld{Kf}}}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}e}{{`{{Lf{}{{Hh{{Lh{cKf}}}}}}}}}{AjBfFl}{{Hn{c}}}}{{{h{{Kj{c}}}}}{{`{{Lf{}{{Hh{{G`{c{h{{Cl{Cj}}}}}}}}}}Lj}}}{AjBfFl}}`{{{h{{Kj{c}}}}c}{{Dd{Db}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{Kl{cDb}}}{AjBfFl}}10{{{h{{Kj{c}}}}}Db{AjBfFl}}{{{h{Af{Kj{c}}}}cDb}Bb{AjBfFl}}{{{h{Af{Kj{c}}}}cDb}Fd{AjBfFl}}{{{h{AfKb}}Kb}Bb}{{{h{{Kj{c}}}}{h{Ch}}e}Ll{AjBfFl}{{Hn{c}}}}{Db{{Kj{c}}}{}}{{{h{{Kj{c}}}}c}{{Dd{{G`{DbFd}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}c}{{Dd{{G`{{Ld{Cf}}Kb}}}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{h{{Ln{{Lh{cKf}}}}}}}{AjBfFl}}{{{h{Kb}}{h{L`}}}{{Ij{Bb}}}}2{{{h{Af{Kj{c}}}}cDb}{{Dd{{G`{{M`{{Ld{Cf}}}}Kb}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}{h{{Kl{cDb}}}}}Kb{AjBfFl}}{{{h{{Kj{c}}}}c}{{`{{Lf{}{{Hh{{Ld{Cf}}}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}e}{{`{{Hj{}{{Hh{{Lh{cCf}}}}}}}}}{AjBfFl}{{Hn{c}}}}{{{h{{Kj{c}}}}{h{Ch}}e}{{G`{D`D`}}}{AjBfFl}{{Hn{c}}}}{{{h{Kb}}c}EbIb}{{{h{{Kj{c}}}}cDb}{{Dd{Cf}}}{AjBfFl}}{{{h{c}}}e{}{}}00{{{h{c}}}In{}}{c{{Eb{e}}}{}{}}00000{{{h{{Kj{c}}}}Kf}{{Dd{{Lh{c{h{Kh}}}}}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{`{{Lf{}{{Hh{{Lh{c{G`{Kf{h{Kh}}}}}}}}}}Lj}}}{AjBfFl}}{{{h{{Kj{c}}}}Cb}{{`{{Lf{}{{Hh{{Lh{c{G`{Kf{h{Kh}}}}}}}}}}}}}{AjBfFl}}{{{h{c}}}Jb{}}00{{{h{{Kj{c}}}}c}{{Dd{{B`{{Cl{Cj}}}}}}}{AjBfFl}}{{{h{Af{Kj{c}}}}cDb}Fd{AjBfFl}}{{{h{{Kj{c}}}}c}{{`{{Lf{}{{Hh{{Ld{Cf}}}}}}Aj}}}{AjBfFl}}{{{h{{Kj{c}}}}}{{`{{Lf{}{{Hh{{Lh{cCf}}}}}}Aj}}}{AjBfFl}}{ce{}{}}00`````{{{h{{Lb{c}}}}}{{h{{Kl{cCf}}}}}{AjBfFl}}{{{h{Af{Lb{c}}}}e}Bb{AjBfFl}{}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Afc}}}{{h{Afe}}}{}{}}{{{h{{Lb{c}}}}}{{Lb{c}}}Aj}{{{h{c}}{h{Afe}}}Bb{}{}}{{}{{Lb{c}}}{}}{{{h{{Lb{c}}}}{h{AfFh}}}FjFl}{cc{}}{{{h{{Lb{c}}}}Cf}{{Dd{{h{c}}}}}{AjBfFl}}{{{h{Af{Lb{c}}}}{h{Ch}}}e{AjBfFl}{}}{{{h{Af{Lb{c}}}}Kf{h{Kh}}}e{AjBfFl}{}}{{{h{{Lb{c}}}}}e{AjBfFl}{}}{{{h{Af{Lb{c}}}}cCf}Fd{AjBfFl}}>{{{h{{Lb{c}}}}{h{Ch}}}Fd{AjBfFl}}0{{{h{{Lb{c}}}}{h{c}}}Fd{AjBfFl}}{{{h{Af{Lb{c}}}}{h{c}}}Fd{AjBfFl}}{{{h{{Lb{c}}}}{h{Ch}}e}Ll{AjBfFl}{{Hn{c}}}}{{{h{{Lb{c}}}}}{{h{{Ln{{G`{cKf}}}}}}}{AjBfFl}}{{{h{{Lb{c}}}}e}{{`{{Lf{}{{Hh{{G`{{h{c}}Kf}}}}}}}}}{AjBfFl}{{Hn{c}}}}{{{h{Af{Lb{c}}}}{h{Ch}}}{{Ln{c}}}{AjBfFl}}{{{h{Af{Lb{c}}}}Kf{h{Kh}}}{{Dd{{h{c}}}}}{AjBfFl}}{{{h{{Lb{c}}}}{h{Ch}}e}{{G`{D`D`}}}{AjBfFl}{{Hn{c}}}}{{{h{{Lb{c}}}}{h{c}}}{{Dd{Cf}}}{AjBfFl}}{{{h{c}}}e{}{}}{c{{Eb{e}}}{}{}}0{{{h{{Lb{c}}}}Kf}{{Dd{{G`{{h{c}}{h{Kh}}}}}}}{AjBfFl}}{{{h{{Lb{c}}}}}{{`{{Lf{}{{Hh{{G`{{h{c}}Kf{h{Kh}}}}}}}}Lj}}}{AjBfFl}}{{{h{{Lb{c}}}}Cb}{{`{{Lf{}{{Hh{{G`{{h{c}}Kf{h{Kh}}}}}}}}}}}{AjBfFl}}{{{h{c}}}Jb{}}={{{h{{Lb{c}}}}e}{{`{{Lf{}{{Hh{{G`{{h{c}}Cf}}}}}}Aj}}}{AjBfFl}{{Hn{c}}}}{ce{}{}}````````````{{{h{AfMb}}{h{Md}}}{{Eb{BbMf}}}}{{{h{AfMb}}{h{Mh}}Db}{{Eb{MdMj}}}}{{{h{AfMb}}{h{Mh}}Dbj}{{Eb{MdMl}}}}{{{h{AfMb}}Mn}{{Eb{MdMj}}}}{{{h{Mn}}}j}`{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Afc}}}{{h{Afe}}}{}{}}0000000{{{h{Mn}}}Mn}{{{h{Mb}}}Mb}{{{h{Md}}}Md}{{{h{Mf}}}Mf}{{{h{N`}}}N`}{{{h{Mj}}}Mj}{{{h{Ml}}}Ml}{{{h{c}}{h{Afe}}}Bb{}{}}000000{{}Md}{c{{Eb{Md}}}F`}{{{h{AfMb}}j}{{Eb{MdMf}}}}{{{h{Mn}}{h{Mn}}}Fd}{{{h{Mb}}{h{Mb}}}Fd}{{{h{Md}}{h{Md}}}Fd}{{{h{Mf}}{h{Mf}}}Fd}{{{h{N`}}{h{N`}}}Fd}{{{h{Mj}}{h{Mj}}}Fd}{{{h{Ml}}{h{Ml}}}Fd}{{Mnc}{{Eb{MnMn}}}{{Jl{}{{Hh{j}}}}}}{{{h{Mn}}{h{AfFh}}}Fj}{{{h{Mb}}{h{AfFh}}}Fj}{{{h{Md}}{h{AfFh}}}Fj}{{{h{Mf}}{h{AfFh}}}Fj}0{{{h{N`}}{h{AfFh}}}Fj}0{{{h{Mj}}{h{AfFh}}}Fj}0{{{h{Ml}}{h{AfFh}}}Fj}0{cc{}}00{cMd{{Jl{}{{Hh{{G`{Db{Dd{Bl}}}}}}}}}}11111{c{{Eb{Mn{Dd{Mn}}}}}{{Jl{}{{Hh{j}}}}}}{{{Kl{DbBl}}}{{Eb{MbMf}}}}{Md{{Eb{MbMf}}}}{Bl{{G`{MbMd}}}}{{{h{Mh}}Db}Mn}{cMd{{Jl{}{{Hh{{G`{DbBl}}}}}}}}6{{{h{L`}}}{{Ij{Md}}}}{Mn{{Eb{MbMf}}}}{{{h{Mb}}}Bl}{{{h{Mn}}Db}{{Dd{Mn}}}}{{{h{Mb}}Db}{{Dd{Mn}}}}{{{h{Mb}}}{{Eb{jc}}}{}}{{{h{Mn}}}Bl}{{{h{Mn}}}Db}`{{{h{Mb}}}Md}{{Mnj}Mn}{{{h{AfMb}}j}{{Eb{MdN`}}}}{ce{}{}}0000000{c{{Hf{g}}}{}{}{{Hj{}{{Hh{e}}}}}}1{Mnc{}}{{{h{Mb}}jj}{{Eb{{Dd{Fd}}c}}}{}}{{{h{Md}}}Fd}{{{h{Mn}}}Nb}{{{h{Mb}}}Nb}{{{h{AfMd}}Md}Bb}{jMn}{{{h{AfNb}}}{{Dd{c}}}{}}`{{{h{Md}}{h{L`}}}{{Ij{Bb}}}}{{{h{Mn}}}{{Dd{Mn}}}}{{Mnj}{{Eb{MnMn}}}}{{{h{Mn}}c}{{`{{Hj{}{{Hh{Mn}}}}}}}{{Hn{Db}}}}{{{h{Mb}}c}{{`{{Hj{}{{Hh{Mn}}}}}}}{{Hn{Db}}}}{{{h{Md}}c}EbIb}{{{h{Mb}}}Mn}{{{h{c}}}e{}{}}000000{{{h{c}}}In{}}000{c{{J`{i}}}{}{}{}{{Hj{}{{Hh{{Eb{eg}}}}}}}}{c{{Eb{e}}}{}{}}0000000`00000000{{{h{c}}}Jb{}}0000000`{ce{}{}}0000000`{{{h{L`}}{h{Gj}}{h{{Ab{{h{{Ab{{h{Gj}}}}}}}}}}}{{Ij{Bb}}}}```````````{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Afc}}}{{h{Afe}}}{}{}}0000000{{{Nd{c}}}{{Nf{c}}}{}}{{{Nh{c}}}{{Nj{c}}}Bf}{{}{{Nd{c}}}{}}{{}{{Nh{c}}}{BfAj}}{{{Nd{c}}Mn}{{Nd{c}}}{}}{{{h{{Nf{c}}}}}{{Dd{Mn}}}{}}{{{Nh{c}}Mn}{{Nh{c}}}Bf}{{{h{{Nj{c}}}}}{{Dd{Mn}}}{BfAj}}``{{{h{{Nl{c}}}}}{{Nl{c}}}Aj}{{{h{Nn}}}Nn}{{{h{c}}{h{Afe}}}Bb{}{}}0{{{h{{Nl{c}}}}{h{{Nl{c}}}}}BdBf}{{{h{Nn}}}Gd}:{{}{{Nf{c}}}{}}{{}{{Nh{c}}}{}}{{}{{Nj{c}}}{}}{{}{{O`{c}}}{}}{{}{{Ob{ce}}}{}{}}{{{h{{Nl{c}}}}{h{{Nl{c}}}}}FdFf}{{{h{c}}{h{e}}}Fd{}{}}0{{{h{{Nl{c}}}}{h{AfFh}}}FjFl}{{{h{{Nl{c}}}}{h{AfFh}}}Fj{FlOd}}{{{h{Nn}}{h{AfFh}}}Fj}{{{h{{O`{c}}}}{h{AfFh}}}FjFl}{{{h{{Ob{ce}}}}{h{AfFh}}}FjFlFl}{cc{}}0{{{Nd{c}}}{{Nf{c}}}{}}1{{{Nh{c}}}{{Nj{c}}}{}}22222``{{{h{{Nl{c}}}}{h{Afe}}}BbH`Hb}{{{Nd{c}}e}{{Nd{c}}}{}{{Of{{Nl{c}}Nn}}Oh}}{{{Nh{c}}e}{{Nh{c}}}Bf{{Of{cDb{h{Oj}}}}Oh}}{ce{}{}}0000000{{{h{Af{Nf{c}}}}}{{`{{Lj{}{{Hh{Kf}}}}}}}{}}{{{h{Af{Nf{c}}}}}{{`{{Lj{}{{Hh{Cf}}}}}}}{}}{{{h{Af{Nj{c}}}}c}{{`{{Hj{}{{Hh{{Ld{Cf}}}}}}}}}{BfAj}}{{{h{Af{Nf{c}}}}}{{`{{Lj{}{{Hh{Cb}}}}}}}{}}{{{h{{Nj{c}}}}}{{M`{c}}}{BfAj}}`{{{h{Af{Nf{c}}}}}{{Dd{Kf}}}{}}{{{h{Af{Nf{c}}}}}{{Dd{Cf}}}{}}{{{h{Af{Nj{c}}}}c}{{Dd{{Ld{Cf}}}}}{BfAj}}{{{h{Af{Nf{c}}}}}{{Dd{Cb}}}{}}{{{Nd{c}}e}{{Nd{c}}}{}{{Jl{}{{Hh{Kf}}}}}}``{{{h{{Nl{c}}}}{h{{Nl{c}}}}}{{Dd{Bd}}}I`}{{{h{{Nf{c}}}}}Nn{}}{{{h{Nn}}}Gd}{{{Nd{{G`{cDb}}}}{h{{Kj{c}}}}e}{{Nd{{G`{cDb}}}}}{AjBfFlOhOl}{{Hn{c}}}}{{{Nd{Bb}}c}{{Nd{Bb}}}{{Jl{}{{Hh{Cf}}}}}}`{{{Nh{c}}cg}{{Nh{c}}}Bf{{Hj{}{{Hh{{Ld{Cf}}}}}}Oh}{{Jl{}{{On{e}}}}}}{{{Nh{c}}{h{{Kj{c}}}}}{{Nh{c}}}{BfAjFl}}`{{{Nd{c}}e}{{Nd{c}}}{}{{Jl{}{{Hh{{G`{cCf}}}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}In{}}7777{c{{Eb{e}}}{}{}}000000000000000{{{Nd{c}}e}{{Nd{c}}}{}{{Jl{}{{Hh{Cb}}}}}}``{{{h{c}}}Jb{}}0000000{{{Nd{{G`{cDb}}}}{h{{Kj{c}}}}}{{Nd{{G`{cDb}}}}}{AjBfFlOhOl}}{ce{}{}}0000000`````````````{{{h{{Jj{c}}}}}{{h{{Ln{{G`{cCb}}}}}}}{}}{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{G`{Kf{h{Kh}}}}}}}}}}}{}}{{{h{{Kd{c}}}}}{{`{{Hj{}{{Hh{Db}}}}}}}f}``{{{h{Af{Jj{c}}}}{Kd{c}}}Bb{AjBf}}{{{h{Af{Jj{c}}}}{Jj{c}}}{{Kd{c}}}{AjBf}}{{{h{{Jj{c}}}}}{{h{{Jj{c}}}}}{}}{{{h{{Jj{c}}}}{h{e}}jik}bf{{Gn{}{{Gl{A@`}}}}}Aj{{Jl{}{{Hh{{G`{gKf}}}}}}}{{Of{{h{g}}Cf}{{A@b{Fd}}}}}}{{{h{Af{Jj{c}}}}e}{{Kd{c}}}{AjBf}{{Jl{}{{Hh{{G`{ChFb}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Afc}}}{{h{Afe}}}{}{}}000000{{{h{{Jj{c}}}}{h{Ch}}}{{Eb{D`A@d}}}{}}`{c{{Dd{D`}}}{}}{c{{Dd{Ll}}}{}}10{{{h{{Jj{c}}}}}{{Jj{c}}}Aj}{{{h{{A@f{ce}}}}}{{A@f{ce}}}AjAj}{{{h{{A@h{ce}}}}}{{A@h{ce}}}AjAj}{{{h{{Kd{c}}}}}{{Kd{c}}}Aj}{{{h{c}}{h{Afe}}}Bb{}{}}000{{{h{{A@f{ce}}}}{h{{A@f{ce}}}}}BdBfBf}{{{h{{A@h{ce}}}}{h{{A@h{ce}}}}}BdBfBf}{{}{{Jj{c}}}{}}{{}{{Kd{c}}}{}}{{{h{{A@f{ce}}}}}{{h{g}}}{}{}{}}{c{{Eb{{Kd{e}}}}}F`{BfK`}}{{{h{{Jj{c}}}}{h{Ch}}}{{`{{Hj{}{{Hh{{G`{GdCb}}}}}}}}}{}}{{{h{{Jj{c}}}}{h{{Jj{c}}}}}FdFf}{{{h{{A@f{ce}}}}{h{{A@f{ce}}}}}FdFfFf}{{{h{{A@h{ce}}}}{h{{A@h{ce}}}}}FdFfFf}{{{h{A@d}}{h{A@d}}}Fd}{{{h{{Kd{c}}}}{h{{Kd{c}}}}}FdFf}{{{h{c}}{h{e}}}Fd{}{}}00000{{{h{{Jj{c}}}}{h{e}}ji}{{`{{Hj{}{{Hh{{G`{g{An{c}}}}}}}}}}}f{{Gn{}{{Gl{A@`}}}}}Aj{{Jl{}{{Hh{{G`{gKf}}}}}}}}0{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{G`{Kf{h{Kh}}}}}}}}}}}{}}{{{h{{Jj{c}}}}{h{AfFh}}}FjFl}{{{h{{A@f{ce}}}}{h{AfFh}}}FjFlFl}{{{h{{A@h{ce}}}}{h{AfFh}}}FjFlFl}{{{h{A@d}}{h{AfFh}}}Fj}0{{{h{{Kd{c}}}}{h{AfFh}}}FjFl}{cc{}}000000{{{h{L`}}}{{Ij{{Kd{c}}}}}{fAjBfIlCn}}{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{A@f{{A@j{Ch}}c}}}}}}}}}{}}{{{h{{Jj{c}}}}{h{e}}jCb}{{Dd{{Ah{{h{c}}}}}}}f{{Gn{}{{Gl{A@`}}}}}}{{{h{{Jj{c}}}}{h{e}}jKf}{{Dd{{G`{{Ah{{h{c}}}}Cb}}}}}f{{Gn{}{{Gl{A@`}}}}}}{{{h{{Jj{c}}}}Cb}{{Dd{{A@j{Ch}}}}}{}}{{{h{{Jj{c}}}}Cb}{{Dd{{A@f{{A@j{Ch}}c}}}}}{}}{{{h{{Jj{c}}}}Kf}{{Dd{{h{Kh}}}}}{}}{{{h{{Jj{c}}}}}{{Kd{c}}}{AjBf}}{{{h{Af{Jj{c}}}}Cbc}{{Kd{c}}}{AjBf}}{{{h{Af{Jj{c}}}}CbFb}{{Kd{c}}}{AjBf}}{{{h{Af{Jj{c}}}}e}{{Kd{c}}}{AjBf}{{A@l{{A@j{Ch}}}}}}{{{h{Af{Jj{c}}}}KfKh}{{Kd{c}}}{AjBf}}{ce{}{}}000000{c{{Hf{g}}}{}{}{{Hj{}{{Hh{e}}}}}}011{{{h{{Jj{c}}}}}Fd{}}{{{h{{Kd{c}}}}}FdBf}``{{{h{{Jj{c}}}}{h{e}}j}{{`{{Hj{}{{Hh{{A@h{{A@j{Ch}}c}}}}}}}}}fGn}{{{Jj{c}}g}{{Jj{e}}}{AjBf}{AjBf}{{Of{c}{{A@b{e}}}}}}{{{Kd{c}}g}{{Kd{e}}}BfBf{{Of{c}{{A@b{e}}}}}}{{{h{Af{Kd{c}}}}{Kd{c}}}BbBf}{c{{Jj{e}}}{{Jl{}{{Hh{Ch}}}}}{AjBf}}{{{h{Af{A@n{cg}}}}}{{Dd{i}}}{}{}{{Of{Gd{A@j{Ch}}}{{A@b{{Dd{e}}}}}}}{}}{{{h{Af{AA`{cg}}}}}{{Dd{i}}}{}{}{{Of{GdCb}{{A@b{{Dd{e}}}}}}}{}}{{{h{{Jj{c}}}}Kf}{{h{{AAb{Cb}}}}}{}}{{{h{{A@f{ce}}}}{h{{A@f{ce}}}}}{{Dd{Bd}}}I`I`}{{{h{{A@h{ce}}}}{h{{A@h{ce}}}}}{{Dd{Bd}}}I`I`}{{{h{{Kd{c}}}}{h{L`}}}{{Ij{Bb}}}{fAjBfIlCn}}{{{h{{Kd{c}}}}e}Eb{BfIl}Ib}{{{h{c}}}e{}{}}000{{{h{c}}}In{}}{c{{J`{i}}}{}{}{}{{Hj{}{{Hh{{Eb{eg}}}}}}}}0{{{h{{Jj{c}}}}{h{e}}jik}{{Eb{b}}}fGnAj{{Jl{}{{Hh{{G`{gKf}}}}}}}{{Of{{h{g}}Cf}{{A@b{Fd}}}}}}{{{h{{Jj{c}}}}{h{e}}ji}{{`{{Hj{}{{Hh{{Eb{{G`{g{An{c}}}}}}}}}}}}}fGnAj{{Jl{}{{Hh{{G`{gKf}}}}}}}}0{c{{Eb{e}}}{}{}}000000{{{h{{Jj{c}}}}{h{e}}jCb}{{Eb{{Dd{{Ah{{h{c}}}}}}}}}fGn}{{{h{{Jj{c}}}}{h{e}}jKf}{{Eb{{Dd{{G`{{Ah{{h{c}}}}Cb}}}}}}}fGn}2222222{{{h{{Jj{c}}}}{h{e}}j}{{`{{Hj{}{{Hh{{Eb{{A@h{{A@j{Ch}}c}}}}}}}}}}}fGn}``{{{h{{Jj{c}}}}Cb}{{Dd{{Kl{Db{h{Kh}}}}}}}{}}{{{h{{Jj{c}}}}Cb}{{`{{Lf{}{{Hh{{G`{Db{h{{AAb{Cb}}}}}}}}}}}}}{}}`{{{h{{Kd{c}}}}}{{`{{Hj{}{{Hh{{G`{Kf{h{Kh}}}}}}}}}}}{}}``{{{h{{Jj{c}}}}}{{`{{Hj{}{{Hh{{A@f{{A@j{Ch}}c}}}}}}}}}{}}{{{h{c}}}Jb{}}000000{{{h{Af{Jj{c}}}}Fb}{{Kd{c}}}{AjBf}}{ce{}{}}000000{{{h{{Jj{c}}}}ei}{{A@n{ci}}}{AjBf}{{A@l{{A@j{Ch}}}}}{}{{Of{Gd{A@j{Ch}}}{{A@b{{Dd{g}}}}}}}}{{{h{{Jj{c}}}}{h{Ch}}g}{{AA`{cg}}}{}{}{{Of{GdCb}{{A@b{{Dd{e}}}}}}}}{{{h{{Jj{c}}}}Cbg}{{AA`{cg}}}{AjBf}{}{{Of{GdCb}{{A@b{{Dd{e}}}}}}}}","D":"CIl","p":[[5,"Balance",0,1029],[5,"DescriptorId",0,1030],[10,"Anchor",0,1031],[1,"reference"],[5,"BlockId",0,1032],[5,"ConfirmationBlockTime",0,1032],[5,"Hash",1033],[1,"u8"],[1,"slice"],[1,"array"],[0,"mut"],[6,"ChainPosition",0,1032],[10,"Clone",1034],[6,"ConfirmationTime",0,1032],[5,"FullTxOut",0,1032],[5,"SpkIterator",0,1035],[1,"unit"],[6,"Ordering",1036],[10,"Ord",1036],[5,"Persisted",0,1037],[6,"ValueRef",1038],[5,"BlockHash",1039],[5,"Impl",0],[8,"FromSqlResult",1040],[5,"Txid",1041],[6,"Network",1042],[5,"ScriptBuf",1043],[5,"Transaction",1041],[6,"DescriptorPublicKey",1044],[6,"Descriptor",1045],[10,"DeserializeOwned",1046],[5,"Amount",1047],[1,"u32"],[6,"Option",1048],[17,"CreateParams"],[17,"LoadParams"],[17,"CreateError"],[17,"LoadError"],[17,"PersistError"],[10,"PersistWith",0,1037],[6,"Result",1049],[10,"Future",1050],[5,"Box",1051],[5,"Pin",1052],[10,"PersistAsyncWith",0,1037],[10,"Borrow",1053],[10,"DescriptorExt",0,1030],[10,"Deserializer",1046],[1,"u64"],[1,"bool"],[10,"PartialEq",1036],[5,"Formatter",1054],[8,"Result",1054],[10,"Debug",1054],[1,"never"],[1,"tuple"],[5,"Block",1039],[1,"usize"],[10,"AnchorFromBlockPosition",0,1031],[5,"FromSliceError",1055],[1,"str"],[17,"Error"],[10,"ChainOracle",0,1056],[10,"Hash",1057],[10,"Hasher",1057],[10,"SliceIndex",1058],[5,"IntoFallible",1059],[17,"Item"],[10,"Iterator",1060],[10,"Merge",0,1031],[10,"RangeBounds",1061],[10,"PartialOrd",1036],[10,"Serializer",1062],[17,"ChangeSet"],[10,"Staged",0,1037],[6,"ToSqlOutput",1063],[8,"Result",1064],[10,"Serialize",1062],[5,"String",1065],[5,"Convert",1059],[5,"TypeId",1066],[5,"IndexedTxGraph",335],[5,"ChangeSet",335],[10,"Indexer",385],[5,"TxGraph",851],[10,"IntoIterator",1067],[10,"Default",1068],[10,"Deserialize",1046],[5,"ChangeSet",394],[5,"ChangeSet",851],[5,"OutPoint",1041],[5,"TxOut",1041],[5,"KeychainTxOutIndex",394],[5,"BTreeMap",1069],[6,"InsertDescriptorError",394],[5,"Transaction",1070],[5,"SpkTxOutIndex",496],[8,"Indexed",0],[10,"DoubleEndedIterator",1071],[8,"KeychainIndexed",0],[10,"ExactSizeIterator",1072],[5,"SignedAmount",1047],[5,"BTreeSet",1073],[5,"Vec",1074],[5,"LocalChain",533],[5,"ChangeSet",533],[5,"MissingGenesisError",533],[5,"Header",1039],[5,"CannotConnectError",533],[6,"ApplyHeaderError",533],[5,"CheckPoint",533],[5,"AlterCheckPointError",533],[5,"CheckPointIter",533],[5,"SyncRequestBuilder",705],[5,"SyncRequest",705],[5,"FullScanRequestBuilder",705],[5,"FullScanRequest",705],[6,"SyncItem",705],[5,"SyncProgress",705],[5,"SyncResult",705],[5,"FullScanResult",705],[10,"Any",1066],[10,"FnMut",1075],[10,"Send",1076],[5,"Script",1077],[10,"Sync",1076],[17,"IntoIter"],[6,"Infallible",1078],[17,"Output"],[6,"CalculateFeeError",851],[5,"TxNode",851],[5,"CanonicalTx",851],[5,"Arc",1079],[10,"Into",1078],[5,"TxAncestors",851],[5,"TxDescendants",851],[5,"HashSet",1080],[15,"Confirmed",332],[15,"Unconfirmed",332],[15,"DescriptorAlreadyAssigned",492],[15,"KeychainAlreadyAssigned",492]],"r":[[0,1031],[1,1031],[2,1035],[3,1029],[4,1032],[6,1056],[7,1032],[9,1032],[10,1032],[17,1030],[18,1030],[20,1032],[23,335],[24,385],[30,1031],[31,1037],[34,1037],[35,1037],[36,1035],[37,1037],[38,851],[225,385],[259,385]],"b":[[48,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[49,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[98,"impl-FromSql-for-Impl%3CBlockHash%3E"],[99,"impl-FromSql-for-Impl%3CTxid%3E"],[100,"impl-FromSql-for-Impl%3CNetwork%3E"],[101,"impl-FromSql-for-Impl%3CDescriptorId%3E"],[102,"impl-FromSql-for-Impl%3CScriptBuf%3E"],[103,"impl-FromSql-for-Impl%3CTransaction%3E"],[104,"impl-FromSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[105,"impl-FromSql-for-Impl%3CA%3E"],[106,"impl-FromSql-for-Impl%3CAmount%3E"],[156,"impl-Debug-for-Balance"],[157,"impl-Display-for-Balance"],[164,"impl-UpperHex-for-DescriptorId"],[165,"impl-LowerHex-for-DescriptorId"],[166,"impl-Debug-for-DescriptorId"],[167,"impl-Display-for-DescriptorId"],[176,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[177,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[273,"impl-ToSql-for-Impl%3CDescriptorId%3E"],[274,"impl-ToSql-for-Impl%3CBlockHash%3E"],[275,"impl-ToSql-for-Impl%3CScriptBuf%3E"],[276,"impl-ToSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[277,"impl-ToSql-for-Impl%3CNetwork%3E"],[278,"impl-ToSql-for-Impl%3CTransaction%3E"],[279,"impl-ToSql-for-Impl%3CA%3E"],[280,"impl-ToSql-for-Impl%3CTxid%3E"],[281,"impl-ToSql-for-Impl%3CAmount%3E"],[359,"impl-From%3CChangeSet%3E-for-ChangeSet%3CA,+ChangeSet%3E"],[360,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[403,"impl-KeychainTxOutIndex%3CK%3E"],[404,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[423,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[424,"impl-Display-for-InsertDescriptorError%3CK%3E"],[595,"impl-Debug-for-MissingGenesisError"],[596,"impl-Display-for-MissingGenesisError"],[597,"impl-Display-for-AlterCheckPointError"],[598,"impl-Debug-for-AlterCheckPointError"],[599,"impl-Display-for-CannotConnectError"],[600,"impl-Debug-for-CannotConnectError"],[601,"impl-Display-for-ApplyHeaderError"],[602,"impl-Debug-for-ApplyHeaderError"],[617,"impl-FromIterator%3C(u32,+BlockHash)%3E-for-ChangeSet"],[618,"impl-FromIterator%3C(u32,+Option%3CBlockHash%3E)%3E-for-ChangeSet"],[757,"impl-Debug-for-SyncItem%3C\'i,+I%3E"],[758,"impl-Display-for-SyncItem%3C\'i,+I%3E"],[926,"impl-Display-for-CalculateFeeError"],[927,"impl-Debug-for-CalculateFeeError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADcCWwAYAAEAJwAAACoAAQAtAAIAMQACADUAFABLAA8AXAAPAG8AAAB2AAUAfgAEAIQAJgCvAAAAsQABALcAAAC6AAMAvwACAMMABADLAAAA2gAAAOIAAADpAAAA7AABAO8ABgD6AAAA/AAFAAQBAAAIAQgAEgEKACEBEwA3AQkAQwEJAFYBAABaAQsAaAEBAHQBAQB3AQUAfgEDAJUBFQCxAQIAugEAANQBAADWAQkA4wECAOoBAgDzAQYA/AECAAICAAAMAgIAEgIAABUCAAAoAh8ASQIGAFECCgBfAgAAagIBAHECAACBAgMAhwIAAIkCAACQAgAAkgIKAJ4CBwCnAg8AuAIHAM0CDwDnAgQA7QINAP0CAAD/AgAABwMAAB8DAAApAwIAMAMPAEMDBwBMAwcAaAMAAGsDDQB7AxEAjgMKAJwDBQC+AwEAwQMAAMcDAADJAwEAzAMBAM8DBQDaAwYA4wMGAPQDBgD8AwYA"}],\ +["bdk_electrum",{"t":"FENNENNNNONNNNNNNNN","n":["BdkElectrumClient","bdk_chain","borrow","borrow_mut","electrum_client","fetch_tx","fmt","from","full_scan","inner","into","new","populate_tx_cache","sync","transaction_broadcast","try_from","try_into","type_id","vzip"],"q":[[0,"bdk_electrum"],[19,"bdk_electrum::bdk_electrum_client"],[20,"bitcoin::blockdata::transaction"],[21,"alloc::sync"],[22,"electrum_client::types"],[23,"core::result"],[24,"electrum_client::api"],[25,"core::fmt"],[26,"bdk_chain::spk_client"],[27,"core::cmp"],[28,"core::clone"],[29,"core::convert"],[30,"bdk_chain::tx_graph"],[31,"core::any"]],"i":[0,0,3,3,0,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{c}}}}h}{{A`{{l{j}}n}}}Ab}{{{b{{f{c}}}}{b{dAd}}}AfAh}{cc{}}{{{b{{f{c}}}}gAjAjAl}{{A`{{An{e}}n}}}Ab{B`Bb}{{Bf{{Bd{e}}}}}}`{ce{}{}}{c{{f{c}}}Ab}{{{b{{f{c}}}}g}BhAb{}{{Bl{{Bj{e}}}}}}{{{b{{f{c}}}}gAjAl}{{A`{Bnn}}}Ab{}{{Bf{{C`{e}}}}}}{{{b{{f{c}}}}{b{j}}}{{A`{hn}}}Ab}{c{{A`{e}}}{}{}}0{{{b{c}}}Cb{}}6","D":"Af","p":[[1,"reference"],[0,"mut"],[5,"BdkElectrumClient",0,19],[5,"Txid",20],[5,"Transaction",20],[5,"Arc",21],[6,"Error",22],[6,"Result",23],[10,"ElectrumApi",24],[5,"Formatter",25],[8,"Result",25],[10,"Debug",25],[1,"usize"],[1,"bool"],[5,"FullScanResult",26],[10,"Ord",27],[10,"Clone",28],[5,"FullScanRequest",26],[10,"Into",29],[1,"unit"],[5,"TxGraph",30],[10,"AsRef",29],[5,"SyncResult",26],[5,"SyncRequest",26],[5,"TypeId",31]],"r":[[0,19]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAgAAwACAAMABwAAABAAAwA="}],\ +["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,"core::convert"],[14,"bdk_esplora::async_ext"],[15,"core::future::future"],[16,"alloc::boxed"],[17,"core::pin"],[18,"core::marker"]],"i":[0,0,0,0,1,11,1,11],"f":"````{{{d{b}}eff}{{l{{h{c}}j}}}{nA`}{{Ad{{Ab{c}}}}}}{{{d{Af}}eff}{{Al{{Aj{Ah}}}}}{nA`An}{{Ad{{Ab{c}}}}An}}{{{d{b}}ef}{{l{B`j}}}{}{{Ad{{Bb{c}}}}}}{{{d{Af}}ef}{{Al{{Aj{Ah}}}}}An{{Ad{{Bb{c}}}}An}}","D":"A`","p":[[10,"EsploraExt",0,8],[1,"reference"],[1,"usize"],[5,"FullScanResult",9],[8,"Error",0,8],[6,"Result",10],[10,"Ord",11],[10,"Clone",12],[5,"FullScanRequest",9],[10,"Into",13],[10,"EsploraAsyncExt",0,14],[10,"Future",15],[5,"Box",16],[5,"Pin",17],[10,"Send",18],[5,"SyncResult",9],[5,"SyncRequest",9]],"r":[[0,8],[1,14],[2,8]],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAQA"}],\ +["bdk_file_store",{"t":"FPFGPPPGFNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNOO","n":["AggregateChangesetsError","Bincode","EntryIter","FileError","InvalidMagicBytes","Io","Io","IterError","Store","aggregate_changesets","append_changeset","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","changeset","create_new","drop","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into_fallible","into_iter","iter_changesets","iter_error","new","next","open","open_or_create_new","to_string","to_string","to_string","transpose_into_fallible","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","vzip","vzip","vzip","vzip","vzip","expected","got"],"q":[[0,"bdk_file_store"],[75,"bdk_file_store::FileError"],[77,"bdk_file_store::store"],[78,"core::option"],[79,"core::result"],[80,"bdk_chain::tx_data_traits"],[81,"serde::ser"],[82,"serde::de"],[83,"core::marker"],[84,"std::io::error"],[85,"std::path"],[86,"core::convert"],[87,"bdk_file_store::entry_iter"],[88,"core::fmt"],[89,"fallible_iterator"],[90,"core::iter::traits::iterator"],[91,"std::fs"],[92,"alloc::string"],[93,"core::any"]],"i":[0,20,0,0,16,20,16,0,0,2,2,19,20,2,5,16,19,20,2,5,16,5,2,19,20,20,2,5,5,16,16,19,20,20,2,5,16,16,19,20,2,5,16,19,19,2,5,19,19,2,2,20,5,16,19,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,32,32],"f":"`````````{{{f{b{d{c}}}}}{{l{{h{c}}{j{c}}}}}{nA`AbAdAf}}{{{f{b{d{c}}}}{f{c}}}{{l{AhAj}}}{nA`AbAdAf}}{{{f{c}}}{{f{e}}}{}{}}0000{{{f{bc}}}{{f{be}}}{}{}}0000`{{{f{{An{Al}}}}c}{{l{{d{e}}B`}}}{{Bd{Bb}}}{nA`AbAdAf}}{{{f{b{Bf{c}}}}}Ah{}}{{{f{Bh}}{f{bBj}}}Bl}0{{{f{{d{c}}}}{f{bBj}}}Bl{AfAdBn}}{{{f{{j{c}}}}{f{bBj}}}Bl{}}{{{f{{j{c}}}}{f{bBj}}}BlBn}{{{f{B`}}{f{bBj}}}Bl}0{cc{}}0{AjBh}11{AjB`}2{ce{}{}}0000{c{{C`{g}}}{}{}{{Cd{}{{Cb{e}}}}}}1{{{f{b{d{c}}}}}{{Bf{c}}}{nA`AbAdAf}}`{{Cf{f{bCh}}}{{Bf{c}}}{}}{{{f{b{Bf{c}}}}}{{h{e}}}Ab{}}>>{{{f{c}}}Cj{}}00{c{{Cl{i}}}{}{}{}{{Cd{}{{Cb{{l{eg}}}}}}}}{c{{l{e}}}{}{}}000000000{{{f{c}}}Cn{}}000088888``","D":"Cl","p":[[0,"mut"],[5,"Store",0,77],[1,"reference"],[6,"Option",78],[5,"AggregateChangesetsError",0,77],[6,"Result",79],[10,"Merge",80],[10,"Serialize",81],[10,"DeserializeOwned",82],[10,"Send",83],[10,"Sync",83],[1,"unit"],[5,"Error",84],[1,"u8"],[1,"slice"],[6,"FileError",0],[5,"Path",85],[10,"AsRef",86],[5,"EntryIter",0,87],[6,"IterError",0,87],[5,"Formatter",88],[8,"Result",88],[10,"Debug",88],[5,"IntoFallible",89],[17,"Item"],[10,"Iterator",90],[1,"u64"],[5,"File",91],[5,"String",92],[5,"Convert",89],[5,"TypeId",93],[15,"InvalidMagicBytes",75]],"r":[[0,77],[2,87],[7,87],[8,77]],"b":[[24,"impl-Debug-for-IterError"],[25,"impl-Display-for-IterError"],[27,"impl-Display-for-AggregateChangesetsError%3CC%3E"],[28,"impl-Debug-for-AggregateChangesetsError%3CC%3E"],[29,"impl-Display-for-FileError"],[30,"impl-Debug-for-FileError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAC8ACAAMAAkAGAAHACIAAAAlAAAALQAAADAAAQA0AAIAOAAVAA=="}],\ ["bdk_hwi",{"t":"FNNNNNNNNNNNN","n":["HWISigner","borrow","borrow_mut","fmt","from","from_device","id","into","sign_transaction","try_from","try_into","type_id","vzip"],"q":[[0,"bdk_hwi"],[13,"bdk_hwi::signer"],[14,"core::fmt"],[15,"hwi::types"],[16,"hwi::error"],[17,"core::result"],[18,"secp256k1::context::alloc_only"],[19,"secp256k1"],[20,"bdk_wallet::wallet::signer"],[21,"bitcoin::psbt"],[22,"core::any"]],"i":[0,3,3,3,3,3,3,3,3,3,3,3,3],"f":"`{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}{{{b{f}}{b{dh}}}j}{cc{}}{{{b{l}}n}{{Ab{fA`}}}}{{{b{f}}{b{{Af{Ad}}}}}Ah}{ce{}{}}{{{b{f}}{b{dAj}}{b{Al}}{b{{Af{Ad}}}}}{{Ab{AnB`}}}}{c{{Ab{e}}}{}{}}0{{{b{c}}}Bb{}}3","D":"j","p":[[1,"reference"],[0,"mut"],[5,"HWISigner",0,13],[5,"Formatter",14],[8,"Result",14],[5,"HWIDevice",15],[5,"HWIChain",15],[6,"Error",16],[6,"Result",17],[6,"All",18],[5,"Secp256k1",19],[6,"SignerId",20],[5,"Psbt",21],[5,"SignOptions",20],[1,"unit"],[6,"SignerError",20],[5,"TypeId",22]],"r":[[0,13]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAgAAwACAAIABwAAAAkABAA="}],\ ["bdk_testenv",{"t":"FFEEEOONNNNNEOOENNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Config","TestEnv","anyhow","bitcoincore_rpc","bitcoind","bitcoind","bitcoind","borrow","borrow","borrow_mut","borrow_mut","default","electrsd","electrsd","electrsd","electrum_client","electrum_client","fmt","from","from","genesis_hash","into","into","invalidate_blocks","make_checkpoint_tip","mine_blocks","mine_empty_block","new","new_with_config","reorg","reorg_empty_blocks","reset_electrsd","rpc_client","send","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","wait_until_electrum_sees_block","wait_until_electrum_sees_txid"],"q":[[0,"bdk_testenv"],[44,"electrum_client::api"],[45,"core::fmt"],[46,"bitcoin::blockdata::block"],[47,"anyhow"],[48,"bdk_chain::local_chain"],[49,"bitcoin::address"],[50,"core::option"],[51,"alloc::vec"],[52,"bitcoincore_rpc::client"],[53,"bitcoin_units::amount"],[54,"bitcoin::blockdata::transaction"],[55,"core::result"],[56,"core::any"],[57,"core::time"]],"i":[0,0,0,0,0,4,3,4,3,4,3,3,0,4,3,0,4,3,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,4,3,4,4],"f":"```````{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0{{}f}````{{{b{h}}}{{b{{`{j}}}}}}{{{b{f}}{b{dl}}}n}{cc{}}0{{{b{h}}}{{Ab{A`}}}}{ce{}{}}0{{{b{h}}Ad}{{Ab{Af}}}}{{{b{h}}}Ah}{{{b{h}}Ad{Al{Aj}}}{{Ab{{An{A`}}}}}}{{{b{h}}}{{Ab{{B`{AdA`}}}}}}{{}{{Ab{h}}}}{f{{Ab{h}}}}{{{b{h}}Ad}{{Ab{{An{A`}}}}}}{{{b{h}}Ad}{{Ab{{An{{B`{AdA`}}}}}}}}{h{{Ab{h}}}}{{{b{h}}}{{b{{`{Bb}}}}}}{{{b{h}}{b{{Aj{Bd}}}}Bf}{{Ab{Bh}}}}{c{{Bj{e}}}{}{}}000{{{b{c}}}Bl{}}0=={{{b{h}}Bn}{{Ab{Af}}}}{{{b{h}}BhBn}{{Ab{Af}}}}","D":"Bn","p":[[1,"reference"],[0,"mut"],[5,"Config",0],[5,"TestEnv",0],[10,"ElectrumApi",44],[5,"Formatter",45],[8,"Result",45],[5,"BlockHash",46],[8,"Result",47],[1,"usize"],[1,"unit"],[5,"CheckPoint",48],[5,"Address",49],[6,"Option",50],[5,"Vec",51],[1,"tuple"],[10,"RpcApi",52],[6,"NetworkChecked",49],[5,"Amount",53],[5,"Txid",54],[6,"Result",55],[5,"TypeId",56],[5,"Duration",57]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABUACAAAAAAAAwADAAgAAwANAAEAEAAAABIAAAAgAAAAIwAHAA=="}],\ -["bdk_wallet",{"t":"GGFGFPPPFGFGPPPPPPPEPPPPKGGGFGPFPPPPPPPPPIPFFGPPPFGTTFFNNONOONNNNNNNONDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDOONNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNONCNOQNNNNNNNNNNNNNNNNNNNNNNNNNNNCCNDNNNNNNNNNNNNNNNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNOOONNNNNNNNNNNNNNNNNNNMNNOOONNNCONNNNNNNNNNNNNONNNNDNNNONNNNNNONNNNNNNCNNNECONNNDDNNNNNNNOCENNNNNNOENNNNNNNNNNNNNNNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONONNNNNNNNNNNNNNNNNNNOOHNNNNNNNNNNNNNNNNHOOOOOOOOOOOOOOOOPPFPKFIGGPFPFNNNNNNNNNNNNNNNNNNMNNNHNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGPPGPPPPPPPGPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMSHPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPGPPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["AddForeignUtxoError","AddUtxoError","AddressInfo","ApplyBlockError","Balance","CannotConnect","ChangeAllowed","ChangeForbidden","ChangeSet","ChangeSpendPolicy","CreateParams","CreateWithPersistError","Custom","Descriptor","Descriptor","Descriptor","External","Foreign","Genesis","HdKeyPaths","Internal","InvalidChangeSet","InvalidOutpoint","InvalidTxid","IsDust","KeychainKind","LoadError","LoadMismatch","LoadParams","LoadWithPersistError","Local","LocalOutput","Mismatch","MissingDescriptor","MissingGenesis","MissingNetwork","MissingUtxo","Network","OnlyChange","Persist","Persist","PersistedWallet","Shuffle","SignOptions","TxBuilder","TxOrdering","UnexpectedConnectedToHash","UnknownUtxo","Untouched","Update","Utxo","WALLET_SCHEMA_NAME","WALLET_TABLE_NAME","Wallet","WeightedUtxo","add","add_signer","address","all_unbounded_spk_iters","allow_all_sighashes","allow_grinding","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","as_byte","as_ref","as_ref","assume_height","balance","bitcoin","borrow","borrow","borrow","borrow","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","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","change_descriptor","checkpoints","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_selection","confirmation_time","confirmed","create","create","create","create","create_single","create_wallet","create_wallet_async","create_wallet_no_persist","create_with_params","default","default","default","default","deref","derivation_index","derivation_index","derivation_of_spk","descriptor","descriptor","descriptor","descriptor","descriptor_checksum","deserialize","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","export","extract_keys","file_store","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_sqlite","genesis_hash","genesis_hash","get_psbt_input","get_signers","get_tx","get_utxo","graph","hash","hash","immature","index","indexer","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_dust","is_empty","is_mine","is_spent","keychain","keychain","keychains","keymap","keymap","keys","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load","load","load","load","load_wallet","load_wallet_async","load_wallet_no_persist","load_with_params","local_chain","local_chain","lookahead","lookahead","mark_used","merge","miniscript","network","network","network","network","new","new","new_single","next_derivation_index","next_unused_address","outpoint","outpoint","partial_cmp","peek_address","persist","persist","persist","persist_to_sqlite","policies","psbt","public_descriptor","reveal_addresses_to","reveal_next_address","rusqlite","rusqlite_impl","satisfaction_weight","secp_ctx","sent_and_received","sequence","serde","serde_json","serialize","serialize","serialize","serialize","set_keymap","set_keymaps","sign","sign_with_tap_internal_key","signer","signer","spk_index","staged","staged","start_full_scan","start_sync_with_revealed_spks","take_staged","tap_leaves_options","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","trust_witness_utxo","trusted_pending","trusted_spendable","try_finalize","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_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","try_into","try_into","try_into","try_into","tx_builder","tx_graph","tx_graph","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","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","utxo","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","foreign_utxo","input_txid","connected_to_hash","expected_hash","expected","expected","expected","keychain","loaded","loaded","loaded","input_sort","output_sort","outpoint","psbt_input","sequence","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","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","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","eq","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","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","clone","clone","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","clone_into","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","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","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","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","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","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","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","SCHEMAS_TABLE_NAME","migrate_schema","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","descriptor_secret_key","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","equivalent","equivalent","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"],[433,"bdk_wallet::AddForeignUtxoError"],[435,"bdk_wallet::ApplyBlockError"],[437,"bdk_wallet::LoadMismatch"],[444,"bdk_wallet::TxOrdering"],[446,"bdk_wallet::Utxo"],[449,"bdk_wallet::coin_selection"],[541,"bdk_wallet::coin_selection::Error"],[543,"bdk_wallet::coin_selection::Excess"],[548,"bdk_wallet::descriptor"],[808,"bdk_wallet::descriptor::checksum"],[809,"bdk_wallet::descriptor::error"],[842,"bdk_wallet::descriptor::policy"],[1001,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[1004,"bdk_wallet::descriptor::policy::Satisfaction"],[1015,"bdk_wallet::descriptor::policy::SatisfiableItem"],[1025,"bdk_wallet::descriptor::template"],[1209,"bdk_wallet::error"],[1280,"bdk_wallet::error::CreateTxError"],[1286,"bdk_wallet::export"],[1309,"bdk_wallet::keys"],[1625,"bdk_wallet::psbt"],[1629,"bdk_wallet::rusqlite_impl"],[1631,"bdk_wallet::signer"],[1817,"bdk_wallet::signer::SignerContext"],[1818,"bdk_wallet::tx_builder"],[1933,"bdk_wallet::tx_builder::AddForeignUtxoError"],[1935,"bdk_wallet::tx_builder::TxOrdering"],[1937,"bdk_chain::balance"],[1938,"bdk_wallet::wallet"],[1939,"bdk_wallet::types"],[1940,"bdk_wallet::wallet::signer"],[1941,"alloc::sync"],[1942,"bitcoin::blockdata::script::owned"],[1943,"bdk_chain"],[1944,"core::iter::traits::iterator"],[1945,"core::clone"],[1946,"alloc::collections::btree::map"],[1947,"bitcoin::blockdata::block"],[1948,"bdk_chain::local_chain"],[1949,"core::result"],[1950,"bdk_chain::chain_data"],[1951,"bitcoin::blockdata::transaction"],[1952,"core::iter::traits::collect"],[1953,"core::convert"],[1954,"bdk_chain::tx_graph"],[1955,"bdk_wallet::wallet::coin_selection"],[1956,"bdk_wallet::wallet::tx_builder"],[1957,"bdk_wallet::wallet::error"],[1958,"bitcoin_units::amount"],[1959,"bitcoin_units::fee_rate"],[1960,"bdk_wallet::wallet::changeset"],[1961,"core::cmp"],[1962,"bdk_wallet::wallet::params"],[1963,"rusqlite::transaction"],[1964,"bdk_file_store::store"],[1965,"rusqlite"],[1966,"bdk_wallet::wallet::persisted"],[1967,"core::option"],[1968,"alloc::string"],[1969,"serde::de"],[1970,"bitcoin::psbt"],[1971,"core::fmt"],[1972,"bdk_chain::indexer::keychain_txout"],[1973,"bdk_chain::indexed_tx_graph"],[1974,"bdk_chain::spk_client"],[1975,"bitcoin::psbt::map::input"],[1976,"core::hash"],[1977,"bdk_wallet::wallet::utils"],[1978,"bitcoin::blockdata::script::borrowed"],[1979,"miniscript::descriptor"],[1980,"core::iter::traits::double_ended"],[1981,"bitcoin::network"],[1982,"secp256k1::context::alloc_only"],[1983,"secp256k1"],[1984,"serde::ser"],[1985,"core::any"],[1986,"alloc::vec"],[1987,"bitcoin::address"],[1988,"miniscript"],[1989,"miniscript::miniscript::private"],[1990,"miniscript::miniscript::decode"],[1991,"miniscript::miniscript::context"],[1992,"miniscript::iter::tree"],[1993,"miniscript::descriptor::key"],[1994,"miniscript::miniscript::satisfy"],[1995,"miniscript::plan"],[1996,"bitcoin_hashes::sha256"],[1997,"miniscript::miniscript::hash256"],[1998,"bitcoin_hashes::ripemd160"],[1999,"bitcoin_hashes::hash160"],[2000,"bitcoin::crypto::key"],[2001,"secp256k1::context"],[2002,"bdk_chain::descriptor_ext"],[2003,"miniscript::blanket_traits"],[2004,"miniscript::miniscript::analyzable"],[2005,"core::ops::range"],[2006,"core::ops::function"],[2007,"miniscript::descriptor::bare"],[2008,"miniscript::descriptor::sh"],[2009,"miniscript::descriptor::segwitv0"],[2010,"miniscript::descriptor::tr"],[2011,"miniscript::miniscript::types"],[2012,"miniscript::miniscript::types::extra_props"],[2013,"miniscript::expression"],[2014,"miniscript::miniscript::iter"],[2015,"miniscript::policy::semantic"],[2016,"miniscript::policy"],[2017,"bitcoin_units::weight"],[2018,"bitcoin::bip32"],[2019,"base58ck::error"],[2020,"hex_conservative::error"],[2021,"bitcoin::psbt::error"],[2022,"bdk_wallet::wallet::export"],[2023,"miniscript::descriptor::sortedmulti"],[2024,"core::str::traits"],[2025,"core::default"],[2026,"rand_core"],[2027,"rusqlite::error"],[2028,"core::marker"],[2029,"bitcoin::blockdata::script::push_bytes::primitive"],[2030,"bitcoin::blockdata::locktime::absolute"],[2031,"bdk_chain::rusqlite_impl"]],"i":[0,0,0,0,0,71,257,257,0,0,0,0,258,70,60,61,5,42,61,0,5,58,255,255,0,0,0,0,0,0,42,0,60,60,60,60,255,61,257,58,70,0,258,0,0,0,71,256,258,0,0,43,43,0,0,1,3,53,3,63,63,3,3,3,3,5,5,3,63,3,0,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,3,3,3,3,3,0,26,43,3,1,5,40,41,42,43,26,1,5,40,41,42,43,26,5,0,40,1,3,3,3,3,3,45,45,45,3,52,1,43,26,53,3,40,3,0,52,43,0,3,1,5,40,43,1,5,40,41,42,43,58,53,60,61,1,1,5,5,40,40,41,41,42,42,53,53,0,0,52,0,3,1,1,5,40,41,42,43,58,58,70,70,3,26,53,53,60,60,61,71,71,0,45,52,1,5,40,41,42,43,43,43,43,43,58,58,70,3,26,26,26,53,60,60,61,71,43,45,52,3,3,3,3,26,5,40,1,53,43,3,3,3,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,89,43,3,40,40,53,3,45,52,0,26,3,3,3,3,3,3,3,3,52,52,52,3,3,43,45,52,3,43,0,45,52,3,43,45,52,45,3,3,42,40,5,3,3,3,3,43,3,0,3,3,3,0,0,41,3,3,42,0,0,1,5,40,43,3,3,3,63,0,0,3,3,3,3,3,3,63,0,1,5,40,41,42,43,26,1,58,70,53,60,71,1,3,63,1,1,63,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,0,3,43,42,40,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,3,3,3,1,41,0,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,0,261,261,262,262,263,264,265,265,263,264,265,266,266,267,267,267,114,114,0,115,0,0,0,0,0,114,0,115,0,114,115,113,108,109,110,114,115,113,108,109,110,108,109,110,108,109,110,111,108,109,110,0,108,109,110,113,113,114,114,115,113,108,109,110,114,115,113,108,109,110,114,115,113,108,109,110,113,110,113,113,108,109,110,114,114,115,113,108,109,110,114,115,113,108,109,110,114,115,113,108,109,110,114,115,113,108,109,110,268,268,269,270,270,269,270,91,271,116,0,0,0,0,0,0,122,0,0,124,0,0,126,91,271,116,0,0,0,91,271,116,126,122,0,91,271,116,91,271,116,91,271,116,126,116,143,144,122,122,116,116,143,144,122,116,143,144,122,122,122,122,0,124,143,144,124,144,124,124,143,144,124,143,144,124,124,143,144,124,143,144,124,143,144,0,116,143,144,122,116,143,144,122,116,143,144,122,122,116,116,116,116,116,116,122,116,122,116,143,144,122,116,116,143,143,144,144,122,122,0,116,122,122,153,116,122,116,116,116,143,144,122,122,116,122,116,116,116,116,116,116,116,143,144,122,122,122,116,122,122,122,116,122,122,122,116,116,122,122,116,116,143,144,122,116,143,144,122,122,116,46,91,116,116,122,122,122,116,122,122,124,143,144,122,116,122,116,124,143,144,116,116,116,116,116,116,116,116,116,116,116,116,116,116,122,124,122,116,122,122,116,143,144,122,124,143,144,116,116,0,122,116,122,116,122,122,116,116,122,116,122,124,143,144,122,0,116,143,144,122,116,122,116,124,124,116,122,116,143,144,122,116,143,144,122,122,116,143,144,122,116,116,143,144,122,122,0,51,51,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,192,185,185,0,193,0,0,192,191,0,192,192,185,185,185,192,193,154,185,193,193,0,0,0,154,154,191,192,192,0,0,192,192,192,191,191,192,193,97,194,185,154,191,192,193,97,194,185,154,191,192,193,97,194,154,191,192,193,97,194,154,97,194,194,191,192,193,97,194,185,191,191,192,192,193,193,97,97,194,194,185,185,191,192,193,97,194,185,185,154,191,192,193,193,97,97,194,185,154,97,191,194,192,97,191,192,193,97,194,185,154,192,193,194,97,194,97,97,191,192,193,97,194,194,191,192,193,97,194,154,185,191,192,193,97,194,185,154,191,192,193,97,194,185,154,191,192,193,97,194,185,154,191,192,193,97,194,185,154,272,272,272,273,274,275,274,275,274,275,274,275,274,275,276,277,278,279,280,281,281,280,282,283,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,195,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,196,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,0,82,212,0,82,82,35,82,35,82,82,0,82,82,82,82,82,212,82,82,82,82,82,35,35,82,35,212,82,82,212,82,35,212,82,35,212,212,212,212,82,82,35,35,212,82,82,82,82,82,82,35,212,82,35,212,212,82,35,212,82,35,212,82,35,212,82,35,212,82,35,284,284,285,285,286,287,0,0,288,214,214,214,214,214,214,214,214,214,214,214,214,288,214,214,214,214,214,214,214,187,0,0,0,0,231,231,0,0,221,0,0,0,0,187,187,187,124,0,0,121,187,187,177,126,231,224,0,224,0,0,121,126,177,0,0,0,0,121,0,221,177,126,0,289,126,224,217,222,121,218,187,216,126,177,219,220,221,224,217,222,121,218,187,216,126,177,219,220,221,216,124,124,124,124,124,124,124,124,124,217,121,218,216,126,177,219,220,221,217,121,218,216,126,177,219,220,221,216,126,219,221,218,218,217,126,126,216,121,187,216,126,177,219,220,221,121,121,216,216,126,126,177,177,219,219,220,220,221,221,222,121,218,187,187,216,216,126,126,177,177,219,220,221,216,224,224,224,217,222,121,218,187,187,187,216,126,126,177,219,220,221,222,222,126,177,216,126,126,231,234,234,231,231,234,224,126,216,126,219,221,224,217,222,121,218,187,216,126,177,219,220,221,126,198,204,217,217,222,126,177,204,224,217,217,126,177,224,224,126,289,121,126,177,289,121,289,121,126,126,216,219,220,216,0,126,124,216,216,0,216,124,216,126,219,220,124,222,216,126,219,221,124,216,216,216,216,126,124,216,0,217,121,218,216,126,177,219,220,221,177,187,216,126,177,124,124,216,224,217,222,121,218,187,216,126,177,219,220,221,224,217,222,121,218,187,216,126,177,219,220,221,224,217,222,121,218,187,216,126,177,219,220,221,224,217,222,121,218,187,216,126,177,219,220,221,0,241,241,241,0,0,247,243,247,64,243,247,64,0,64,64,64,244,64,64,64,64,64,64,64,247,243,64,244,64,0,0,0,0,0,0,0,0,244,0,0,64,83,63,63,83,63,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,83,243,244,245,6,83,63,247,243,244,245,6,83,63,247,243,6,6,83,63,247,245,248,248,245,245,245,243,244,6,247,243,243,244,244,6,6,247,247,83,243,64,64,244,245,6,83,63,247,243,243,243,64,244,245,6,83,63,247,243,248,245,245,245,83,243,64,244,245,6,83,63,247,245,83,243,6,83,252,245,245,245,7,245,63,83,63,243,244,245,6,83,63,247,64,63,63,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,290,0,0,257,257,0,258,255,255,255,257,258,0,0,256,258,34,34,34,34,34,34,34,34,34,34,256,255,258,257,34,256,255,258,257,34,34,258,257,34,258,257,257,34,34,258,257,34,34,34,34,34,257,257,257,34,34,34,34,34,256,256,255,255,258,257,34,256,255,258,257,257,34,34,256,255,258,257,34,34,34,34,34,257,34,34,34,258,258,34,258,257,256,255,34,256,255,258,257,34,256,255,258,257,34,256,255,258,257,34,34,34,256,255,258,257,261,261,266,266],"f":"```````````````````````````````````````````````````````{{bb}b}{{{h{df}}jl{A`{n}}}Ab}`{{{h{f}}}{{An{j{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}}}``{{{h{df}}{h{B`}}Bb}{{Bf{AbBd}}}}{{{h{df}}{h{B`}}BbBh}{{Bf{AbBj}}}}{{{h{df}}c}Ab{{Cb{}{{Ad{{C`{{h{Bl}}Bn}}}}}}}}{{{h{df}}c}{{Bf{AbBd}}}{{Cf{Cd}}}}{{{h{j}}}Ch}{{{h{j}}}{{h{{Cj{Ch}}}}}}{{{h{f}}}{{h{{Cn{Cl}}}}}}`{{{h{f}}}b}`{{{h{c}}}{{h{e}}}{}{}}000000000000000{{{h{dc}}}{{h{de}}}{}{}}000000000000000{{{h{df}}D`}{{Bf{{Dd{Db}}Df}}}}{{{h{df}}}{{Dd{Db}}}}{{{h{f}}{h{Bl}}}{{Bf{DhDj}}}}{{{h{f}}{h{Bl}}}{{Bf{DlDj}}}}{{{h{df}}{h{Bl}}}Ab}```{{{h{f}}}Dn}{{{h{b}}}b}{{{h{j}}}j}{{{h{E`}}}E`}{{{h{Eb}}}Eb}{{{h{Ed}}}Ed}{{{h{Ef}}}Ef}{{{h{Cd}}}Cd}{{{h{c}}{h{de}}}Ab{}{}}000000{{{h{j}}{h{j}}}Eh}```{{cc}Ej{ElAl}}{{{h{dEn}}c}{{Bf{fe}}}{}{}}{{{h{d{F`{Ef}}}}c}{{Bf{fe}}}{}{}}{{{h{dFb}}c}{{Bf{fe}}}{}{}}{cEj{ElAl}}{{Ej{h{dc}}}{{Bf{Fd}}}{}}0{Ej{{Bf{fFf}}}}0{{}Fh}{{}b}{{}Ef}{{}Cd}{{{h{Fj}}}{{h{c}}}{}}{{{h{f}}j}{{Fl{Bb}}}}`{{{h{f}}Af}{{Fl{{C`{jBb}}}}}}`{{Fhj{Fl{c}}}FhEl}``{{{h{f}}j}Fn}{c{{Bf{b}}}G`}{c{{Bf{j}}}G`}{c{{Bf{E`}}}G`}{c{{Bf{Ef}}}G`}{{{h{b}}{h{b}}}Gb}{{{h{j}}{h{j}}}Gb}{{{h{E`}}{h{E`}}}Gb}{{{h{Eb}}{h{Eb}}}Gb}{{{h{Ed}}{h{Ed}}}Gb}{{{h{Ef}}{h{Ef}}}Gb}{{{h{{Gd{c}}}}{h{{Gd{c}}}}}GbGf}{{{h{Fj}}{h{Fj}}}Gb}{{{h{Gh}}{h{Gh}}}Gb}{{{h{Gj}}{h{Gj}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}00000000000``{FhFh}`{{{h{f}}{h{dGl}}Gn}{{Bf{GbH`}}}}{{{h{b}}{h{dHb}}}{{Bf{AbHd}}}}0{{{h{j}}{h{dHb}}}Hf}{{{h{E`}}{h{dHb}}}Hf}{{{h{Eb}}{h{dHb}}}Hf}{{{h{Ed}}{h{dHb}}}Hf}{{{h{Ef}}{h{dHb}}}Hf}{{{h{{Gd{c}}}}{h{dHb}}}HfHh}{{{h{{Gd{c}}}}{h{dHb}}}HfHj}{{{h{{Hl{c}}}}{h{dHb}}}HfHj}{{{h{{Hl{c}}}}{h{dHb}}}HfHh}{{{h{f}}{h{dHb}}}Hf}{{{h{Cd}}{h{dHb}}}Hf}{{{h{Fj}}{h{dHb}}}Hf}0{{{h{Gh}}{h{dHb}}}Hf}0{{{h{Gj}}{h{dHb}}}Hf}{{{h{Hn}}{h{dHb}}}Hf}0`{cc{}}000000{{{Ib{ClI`}}}Ef}{IdEf}{I`Ef}3{{{If{Cl}}}Ef}{Gj{{Gd{c}}}{}}555{{{Ih{j}}}Cd}{IjCd}77{GjGh}888{{{h{En}}}{{Il{Ef}}}}{{EjIn}Ej}{{FhIn}Fh}{{{h{f}}E`{Fl{J`}}Gb}{{Bf{JbJd}}}}{{{h{f}}j}{{A`{Jf}}}}{{{h{f}}D`}{{Fl{{Jh{{A`{Bl}}Cl}}}}}}{{{h{f}}Jj}{{Fl{E`}}}}`{{{h{j}}{h{dc}}}AbJl}{{{h{E`}}{h{dc}}}AbJl}```{{{h{df}}Bh}{{Bf{GbJn}}}}{{{h{df}}Bl}Gb}{{{h{df}}JjK`}Ab}{ce{}{}}000000000000000{{{h{Kb}}{h{Kd}}}Gb}{{{h{Ef}}}Gb}{{{h{f}}Af}Gb}```{{{h{f}}}{{`{{Aj{}{{Ad{{C`{j{h{Kf}}}}}}}}}}}}{{EjjKh}Ej}{{FhjKh}Fh}``{{{h{f}}}Kj}{{{h{f}}}{{`{{Aj{}{{Ad{E`}}}}}}}}0{{{h{f}}j}{{`{{Kl{}{{Ad{Fj}}}}}}}}{{{h{dFb}}c}{{Bf{{Fl{f}}e}}}{}{}}{{}Fh}{{{h{dEn}}c}{{Bf{{Fl{f}}e}}}{}{}}{{{h{d{F`{Ef}}}}c}{{Bf{{Fl{f}}e}}}{}{}}{{Fh{h{dc}}}{{Bf{{Fl{Fd}}}}}{}}0{{FhEf}{{Bf{{Fl{f}}Gh}}}}{{EfFh}{{Bf{{Fl{f}}Gh}}}}{{{h{f}}}{{h{Kn}}}}`{{EjBb}Ej}{{FhBb}Fh}{{{h{df}}jBb}Gb}{{{h{dEf}}Ef}Ab}`{{EjL`}Ej}{{FhL`}Fh}{{{h{f}}}L`}`{{cc}EjEl}>{cEjEl}{{{h{f}}j}Bb}{{{h{df}}j}Fj}{{{h{Ed}}}Jj}`{{{h{j}}{h{j}}}{{Fl{Eh}}}}{{{h{f}}jBb}Fj}{{{h{dEn}}{h{c}}}{{Bf{Abe}}}{}{}}{{{h{d{F`{Ef}}}}{h{c}}}{{Bf{Abe}}}{}{}}{{{h{dFb}}{h{c}}}{{Bf{Abe}}}{}{}}{{{h{Ef}}{h{En}}}{{Il{Ab}}}}{{{h{f}}j}{{Bf{{Fl{Lb}}Ff}}}}`{{{h{f}}j}{{h{Kf}}}}{{{h{df}}jBb}{{`{{Aj{}{{Ad{Fj}}}}}}}}:```{{{h{f}}}{{h{{Lf{Ld}}}}}}{{{h{f}}{h{Bl}}}{{C`{DhDh}}}}{{{h{Ed}}}{{Fl{Lh}}}}``{{{h{b}}c}BfLj}{{{h{j}}c}BfLj}{{{h{E`}}c}BfLj}{{{h{Ef}}c}BfLj}{{{h{df}}jKh}Ab}{{{h{df}}c}Ab{{Cb{}{{Ad{{C`{jKh}}}}}}}}{{{h{f}}{h{dGl}}Gn}{{Bf{GbH`}}}}```{{{h{f}}}{{h{{Ll{j}}}}}}{{{h{df}}}{{h{dc}}}{}}{{{h{f}}}{{Fl{{h{Ef}}}}}}{{{h{f}}}{{Ln{j}}}}{{{h{f}}}M`}{{{h{df}}}{{Fl{Ef}}}}``{{{h{c}}}e{}{}}000000{{{h{c}}}Fn{}}00000{{{h{b}}}Dh}{{{h{f}}}{{`{{Aj{}{{Ad{{Jh{{A`{Bl}}Cl}}}}}}}}}}``1`{c{{Bf{e}}}{}{}}0000000000000000000000000000000`{{{h{f}}}{{h{{Cn{Cl}}}}}}`{{{h{Ed}}}{{h{K`}}}}`{{{h{c}}}Mb{}}000000000000000{{{h{f}}j}{{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}{{{h{f}}}{{`{{Aj{}{{Ad{{Md{{A`{Bl}}Cl}}}}}}}}}}{{{h{df}}jBb}Gb}``{{}{{h{Mf}}}}{ce{}{}}000000000000000{{c{Fl{c}}L`{h{{Lf{Ld}}}}}{{Bf{FnFf}}}El}`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{dc}}}{{h{de}}}{}{}}00000{{{h{Mh}}}Mh}{{{h{Mj}}}Mj}{{{h{Ml}}}Ml}{{{h{c}}{h{de}}}Ab{}{}}00{{{h{Mn}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{{h{Mh}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{{h{Mj}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{{h{Ml}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{BnDl{h{Kd}}}Nf}{{}Mh}{{}Mj}{{}Ml}``{{{h{Nd}}{h{dHb}}}Hf}0{{{h{Nf}}{h{dHb}}}Hf}{{{h{Nb}}{h{dHb}}}Hf}{{{h{Mh}}{h{dHb}}}Hf}{{{h{Mj}}{h{dHb}}}Hf}{{{h{Ml}}{h{dHb}}}Hf}{cc{}}00000{ce{}{}}00000{{{h{Nb}}}Bn}{BnMl}`1{{{h{c}}}e{}{}}00{{{h{c}}}Fn{}}{c{{Bf{e}}}{}{}}00000000000{{{h{c}}}Mb{}}00000666666`````````````````````````````````````````````{{{h{{Nh{c}}}}L`}{{Bf{NjNl}}}{NnO`}}{{}Ob}0{{{h{{Od{ce}}}}}{{h{{Of{ce}}}}}NnOh}{{{h{{h{{Od{ce}}}}}}}{{Oj{{h{{Od{ce}}}}}}}NnOh}{{{h{{Nh{Ol}}}}Bb}{{Bf{{Nh{On}}A@`}}}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{dc}}}{{h{de}}}{}{}}000{{{h{{Od{ce}}}}}{{N`{{h{{Od{ce}}}}}}}NnOh}{{{h{{Od{ce}}}}{h{g}}}{{A@d{{A@b{c}}}}}{O`Nn}Oh{{A@f{c}}}}0`{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Od{cAAn}}}}}{{Bf{AbA@j}}}Nn}{{{h{{Od{cAB`}}}}}{{Bf{AbA@j}}}Nn}2022102102{{{h{c}}}{{Bf{AbA@j}}}Nn}00{{{h{{Of{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Of{cAAn}}}}}{{Bf{AbA@j}}}Nn}{{{h{{Of{cAB`}}}}}{{Bf{AbA@j}}}Nn}{{{h{{Cj{{N`{Ch}}}}}}}{{Bf{AbA@j}}}}00`{{{h{{Nh{c}}}}}{{Nh{c}}}{AlNn}}{{{h{AAn}}}AAn}{{{h{AB`}}}AB`}{{{h{{Od{ce}}}}}{{Od{ce}}}{AlNn}{AlOh}}{{{h{c}}{h{de}}}Ab{}{}}000{{{h{{Nh{c}}}}{h{{Nh{c}}}}}Eh{ABbNn}}{{{h{AAn}}{h{AAn}}}Eh}{{{h{AB`}}{h{AB`}}}Eh}{{{h{{Od{ce}}}}{h{{Od{ce}}}}}EhNnOh}{{{h{{Od{ce}}}}}GbNnOh}{{{h{{Nh{Ol}}}}Bb}{{Bf{{Nh{On}}A@`}}}}{{{h{{Nh{On}}}}{h{{Lf{c}}}}}{{Bf{{Nh{ABd}}A@`}}}ABf}{{{h{{Nh{Ol}}}}{h{{Lf{c}}}}Bb}{{Bf{{Nh{ABd}}A@`}}}ABf}{{{h{{Nh{c}}}}}ABhNn}{{{h{{Nh{Ol}}}}}ABj}{c{{Bf{{Nh{e}}}}}G`ABl}{c{{Bf{{Od{eg}}}}}G`ABlOh}{{{h{{Nh{Ol}}}}}Bn}{{{h{{Od{ce}}}}}Af{O`Nn}Oh}{{{h{{Nh{c}}}}{h{{Nh{c}}}}}Gb{GfNn}}{{{h{AAn}}{h{AAn}}}Gb}{{{h{AB`}}{h{AB`}}}Gb}{{{h{{Od{ce}}}}{h{{Od{ce}}}}}GbNnOh}{{{h{c}}{h{e}}}Gb{}{}}0000000`{{{h{{Nh{c}}}}}{{Bf{AfNl}}}{NnO`}}`{{{h{{Od{ce}}}}{h{ABn}}}{{Bf{AbAC`}}}NnOh}{{{h{ACb}}{h{Jf}}ACd{h{{Lf{Ld}}}}}{{Bf{{Fl{Lb}}Ff}}}}{{{h{{Nh{Ol}}}}{h{Jf}}ACd{h{{Lf{Ld}}}}}{{Bf{{Fl{Lb}}Ff}}}}{{{h{{Od{Olc}}}}{h{Jf}}ACd{h{{Lf{Ld}}}}}{{Bf{{Fl{Lb}}Ff}}}Oh}{{{h{{Nh{Ol}}}}{h{{Lf{c}}}}{h{Kd}}{ACf{Bb}}}{{Bf{{Fl{{C`{Bb{Nh{ABd}}}}}}A@`}}}ABf}{{{h{{Nh{c}}}}{h{dHb}}}{{Bf{AbHd}}}Nn}0{{{h{AAn}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{AB`}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{{Od{ce}}}}{h{dHb}}}{{Bf{AbHd}}}NnOh}0{{{h{{Nh{c}}}}e}GbNn{{ACj{{h{c}}}{{ACh{Gb}}}}}}{{{h{{Od{ce}}}}g}GbNnOh{{ACj{{h{c}}}{{ACh{Gb}}}}}}{{{ACl{c}}}{{Nh{c}}}Nn}{cc{}}{{{ACn{c}}}{{Nh{c}}}Nn}{{{AD`{c}}}{{Nh{c}}}Nn}{{{ADb{c}}}{{Nh{c}}}Nn}{{{ADd{c}}}{{Nh{c}}}Nn}{{{ADf{c}}}{{Nh{c}}}Nn}555{{{Of{ce}}}{{Bf{{Od{ce}}Nl}}}NnOh}{{{Of{ce}}ADhADj}{{Od{ce}}}NnOh}{{{h{Mf}}}{{Bf{{Nh{c}}Nl}}}ABl}{{{h{Mf}}}{{Bf{{Od{ce}}Nl}}}ABlOh}{{{h{Mf}}{h{ABn}}}{{Bf{{Od{ce}}Nl}}}ABlOh}1{{{h{ADl}}}{{Bf{{Nh{c}}Nl}}}ABl}{{{h{ADl}}}{{Bf{{Od{ce}}Nl}}}ABlOh}{{{h{{Od{ce}}}}ADn}{{Fl{{h{{Od{ce}}}}}}}NnOh}{{{h{{Od{ce}}}}ADn}{{Fl{c}}}NnOh}{{{h{{Nh{c}}}}e}{{Bf{{C`{{N`{{N`{Ch}}}}Af}}Nl}}}{NnO`}{{AE`{c}}}}0{{{h{{Od{ce}}}}}GbNnOh}0{{{h{{Nh{Ol}}}}}Gb}{{{h{{Nh{c}}}}{h{de}}}Ab{AEbNn}Jl}{{{h{AAn}}{h{dc}}}AbJl}{{{h{AB`}}{h{dc}}}AbJl}{{{h{{Od{ce}}}}{h{dg}}}AbNnOhJl}{ce{}{}}000{{{Od{ce}}}{{Of{ce}}}NnOh}{{{Nh{Ol}}}{{Bf{{N`{{Nh{Ol}}}}Nl}}}}{{El{h{{Lf{Ld}}}}L`}{{Bf{{C`{KfKh}}Ff}}}}{{Kf{h{{Lf{Ld}}}}L`}{{Bf{{C`{KfKh}}Ff}}}}99:{{{h{{Od{ce}}}}}{{AEd{ce}}}NnOh}{{{h{{Od{ce}}}}}{{AEf{ce}}}NnOh}{{{h{{Nh{c}}}}}{{Bf{{AEh{c}}Nl}}}Nn}{{{h{{Od{ce}}}}}{{Bf{{AEh{c}}Nl}}}NnOh}{{{h{{Od{ce}}}}}{{Bf{AbAEj}}}NnOh}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Fl{ADn}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Od{cAAn}}}}}{{Fl{ADn}}}Nn}{{{h{{Od{cAB`}}}}}{{Fl{ADn}}}Nn}{{{h{{Od{ce}}}}}{{Bf{ADnNl}}}NnOh}{{{h{{Nh{c}}}}}{{Bf{ADnNl}}}Nn}1{{{h{{Nh{c}}}}}{{Bf{AElNl}}}Nn}{{}{{h{Mf}}}}00{{{Od{cAEn}}}{{Bf{{Nh{c}}Nl}}}Nn}{c{{Nh{c}}}Nn}{c{{Bf{{Nh{c}}Nl}}}Nn}{{{Od{cAAn}}}{{Bf{{Nh{c}}Nl}}}Nn}{{ADn{N`{c}}}{{Bf{{Nh{c}}Nl}}}Nn}{{{ADd{c}}}{{Nh{c}}}Nn}{{{AD`{c}}}{{Nh{c}}}Nn}4{{{Od{cAB`}}}{{Bf{{Nh{c}}Nl}}}Nn}3{{c{Fl{{AF`{c}}}}}{{Bf{{Nh{c}}Nl}}}Nn}614`{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{Kd}}}{{Bf{{Od{c}}Nl}}}Oh}{{{h{{Lf{c}}}}{h{Mf}}}{{Bf{{C`{{Nh{Ol}}{An{OlAFb}}}}Nl}}}AFd}1{{{h{Kd}}{h{ABn}}}{{Bf{{Od{c}}Nl}}}Oh}{{{h{{Nh{c}}}}{h{{Nh{c}}}}}{{Fl{Eh}}}{AFfNn}}{{{h{AAn}}{h{AAn}}}{{Fl{Eh}}}}{{{h{AB`}}{h{AB`}}}{{Fl{Eh}}}}{{{h{{Od{ce}}}}{h{{Od{ce}}}}}{{Fl{Eh}}}NnOh}{{{h{c}}}ADnNn}00{{{Nh{On}}{h{c}}}{{Bf{AFh{Nh{On}}}}}{{A@f{On}}}}0`{{{h{{Od{ce}}}}}GbNnOh}{{{h{{Nh{c}}}}}{{Bf{AbNl}}}Nn}{{{h{{Od{ce}}}}}{{Bf{AbAC`}}}NnOh}{{{h{{Nh{c}}}}{h{dAFj}}e}{{Bf{AbNl}}}{NnO`}{{AE`{c}}}}{{{h{{Od{ce}}}}g}{{Bf{{N`{{N`{Ch}}}}Nl}}}{O`Nn}Oh{{AE`{c}}}}0{{{h{{Nh{c}}}}}{{Bf{AfNl}}}{NnO`}}{{{h{{Nh{c}}}}}Af{NnO`}}{{{h{{Od{ce}}}}}ADnNnOh}{{{h{{Nh{c}}}}e}BfNnLj}{{{h{{Od{ce}}}}g}BfNnOhLj}{{}AFl}00{{{h{{Od{ce}}}}{h{{An{AAjc}}}}}{{Od{ce}}}NnOh}`{{{h{c}}}e{}{}}000{{{h{c}}}Fn{}}0{{{h{{Nh{Ol}}}}{h{{An{OlAFb}}}}}Fn}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}0{{{h{{Nh{c}}}}{h{di}}}{{Bf{{AFn{g}}}}}NnNn{}{{AG`{ceg}}}}{{{h{{Od{ce}}}}{h{dk}}}{{Bf{{AFn{i}}}}}NnOhNn{}{{AG`{cgi}}}}{c{{Bf{e}}}{}{}}0000000`{{{h{c}}}Mb{}}000={ce{}{}}000{{{h{{Od{ce}}}}}GbNnOh}{{{h{Mf}}}{{Bf{FnFf}}}}``````````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{Ff}}{h{Ff}}}Gb}{{{h{Ff}}{h{dHb}}}Hf}0{AGbFf}{AGdFf}{AGfFf}{AGhFf}{cc{}}{AGjFf}{AGlFf}{NlFf}>{{{h{c}}}Fn{}}{c{{Bf{e}}}{}{}}0{{{h{c}}}Mb{}}{ce{}{}}```````````````````````````````````???????>>>>>>>{{{h{AGn}}}AGn}{{{h{AH`}}}AH`}{{{h{AHb}}}AHb}{{{h{Lb}}}Lb}{{{h{AHd}}}AHd}{{{h{ACd}}}ACd}{{{h{c}}{h{de}}}Ab{}{}}00000``{{}AHd}{{{h{AGn}}{h{AGn}}}Gb}{{{h{AH`}}{h{AH`}}}Gb}{{{h{AHb}}{h{AHb}}}Gb}{{{h{Lb}}{h{Lb}}}Gb}{{{h{AHd}}{h{AHd}}}Gb}{{{h{AGb}}{h{AGb}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}00000000000{{{h{AGn}}{h{dHb}}}Hf}{{{h{AH`}}{h{dHb}}}Hf}{{{h{AHb}}{h{dHb}}}Hf}{{{h{Lb}}{h{dHb}}}Hf}{{{h{AHd}}{h{dHb}}}Hf}{{{h{AGb}}{h{dHb}}}Hf}0{{{h{ACd}}{h{dHb}}}Hf}{cc{}}0{GbAHb}11{AH`Lb}222{{{h{Lb}}{h{{An{Fn{N`{ADn}}}}}}}{{Bf{AHdAGb}}}}{{{h{AGn}}{h{dc}}}AbJl}{{{h{AHd}}{h{dc}}}AbJl}{{{h{AH`}}}Fn}`{ce{}{}}000000{{{h{AH`}}}Gb}{{{h{AHb}}}Gb}{{{h{AHd}}}Gb}`{{{h{AHd}}{h{AHd}}}{{Fl{Eh}}}}{{{h{Lb}}}Gb}`{{{h{AGn}}c}BfLj}{{{h{AH`}}c}BfLj}{{{h{AHb}}c}BfLj}{{{h{Lb}}c}BfLj}{{{h{AHd}}c}BfLj}`{{{h{c}}}e{}{}}00000{{{h{c}}}Fn{}}{c{{Bf{e}}}{}{}}0000000000000{{{h{c}}}Mb{}}000000>>>>>>>``````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{dc}}}{{h{de}}}{}{}}00000000000{{AHfL`}{{Bf{AHhFf}}}}{{{AHj{c}}L`}{{Bf{AHhFf}}}{{AHl{AAn}}}}{{{AHn{c}}L`}{{Bf{AHhFf}}}{{AHl{AB`}}}}{{{AI`{c}}L`}{{Bf{AHhFf}}}{{AHl{AB`}}}}{{{AIb{c}}L`}{{Bf{AHhFf}}}{{AHl{AId}}}}{{{AIf{c}}L`}{{Bf{AHhFf}}}{{AIh{AAn}}}}{{{AIj{c}}L`}{{Bf{AHhFf}}}{{AIh{AAn}}}}{{{AIl{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AIn{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AJ`{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AJb{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AJd{c}}L`}{{Bf{AHhFf}}}{{AIh{AId}}}}{{{AJf{c}}L`}{{Bf{AHhFf}}}{{AIh{AId}}}}{{{h{{AHj{c}}}}}{{AHj{c}}}{Al{AHl{AAn}}}}{{{h{{AHn{c}}}}}{{AHn{c}}}{Al{AHl{AB`}}}}{{{h{{AI`{c}}}}}{{AI`{c}}}{Al{AHl{AB`}}}}{{{h{{AIb{c}}}}}{{AIb{c}}}{Al{AHl{AId}}}}{{{h{{AIf{c}}}}}{{AIf{c}}}{Al{AIh{AAn}}}}{{{h{{AIj{c}}}}}{{AIj{c}}}{Al{AIh{AAn}}}}{{{h{{AIl{c}}}}}{{AIl{c}}}{Al{AIh{AB`}}}}{{{h{{AIn{c}}}}}{{AIn{c}}}{Al{AIh{AB`}}}}{{{h{{AJ`{c}}}}}{{AJ`{c}}}{Al{AIh{AB`}}}}{{{h{{AJb{c}}}}}{{AJb{c}}}{Al{AIh{AB`}}}}{{{h{{AJd{c}}}}}{{AJd{c}}}{Al{AIh{AId}}}}{{{h{{AJf{c}}}}}{{AJf{c}}}{Al{AIh{AId}}}}{{{h{c}}{h{de}}}Ab{}{}}00000000000{{{h{{AHj{c}}}}{h{dHb}}}Hf{Hh{AHl{AAn}}}}{{{h{{AHn{c}}}}{h{dHb}}}Hf{Hh{AHl{AB`}}}}{{{h{{AI`{c}}}}{h{dHb}}}Hf{Hh{AHl{AB`}}}}{{{h{{AIb{c}}}}{h{dHb}}}Hf{Hh{AHl{AId}}}}{{{h{{AIf{c}}}}{h{dHb}}}Hf{Hh{AIh{AAn}}}}{{{h{{AIj{c}}}}{h{dHb}}}Hf{Hh{AIh{AAn}}}}{{{h{{AIl{c}}}}{h{dHb}}}Hf{Hh{AIh{AB`}}}}{{{h{{AIn{c}}}}{h{dHb}}}Hf{Hh{AIh{AB`}}}}{{{h{{AJ`{c}}}}{h{dHb}}}Hf{Hh{AIh{AB`}}}}{{{h{{AJb{c}}}}{h{dHb}}}Hf{Hh{AIh{AB`}}}}{{{h{{AJd{c}}}}{h{dHb}}}Hf{Hh{AIh{AId}}}}{{{h{{AJf{c}}}}{h{dHb}}}Hf{Hh{AIh{AId}}}}{cc{}}00000000000{ce{}{}}00000000000{{AHh{h{{Lf{Ld}}}}L`}{{Bf{{C`{KfKh}}Ff}}}}{{c{h{{Lf{Ld}}}}L`}{{Bf{{C`{{Nh{Ol}}{An{OlAFb}}}}Ff}}}{}}00000000000{{{h{c}}}e{}{}}00000000000{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Mb{}}00000000000555555555555``````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{dc}}}{{h{de}}}{}{}}00{{{h{AJh}}}AJh}{{{h{c}}{h{de}}}Ab{}{}}{{{h{AJh}}{h{dHb}}}Hf}0{{{h{Jd}}{h{dHb}}}Hf}0{{{h{Df}}{h{dHb}}}Hf}0={AJjJd}{FfJd}{AGbJd}{NdJd}{AJhJd}{cc{}}0{ce{}{}}00{{{h{c}}}e{}{}}{{{h{c}}}Fn{}}00{c{{Bf{e}}}{}{}}00000{{{h{c}}}Mb{}}00444``````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{AJl}}}{{Fl{Fn}}}}{{{h{AJl}}}Fn}{c{{Bf{AJl}}}G`}{{{h{f}}{h{Mf}}Gb}{{Bf{AJl{h{Mf}}}}}}{{{h{AJl}}{h{dHb}}}Hf}0<{{{h{Mf}}}{{Bf{AJlc}}}{}}<``{{{h{AJl}}c}BfLj};::9=```````````````````````````````````````````{{}AJn}{{}Ob}{{OlBb}{{Bf{OnA@`}}}};;;;;;;;;;;;::::::::::::{{{h{{AK`{ce}}}}{h{g}}}{{A@d{{A@b{c}}}}}{O`Nn}Oh{{A@f{c}}}}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}00000{{{h{c}}}{{Bf{AbA@j}}}Nn}{{{h{{Of{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Cj{{N`{Ch}}}}}}}{{Bf{AbA@j}}}}{{{h{{AKb{ce}}}}}{{AKb{ce}}}AlOh}{{{h{Ob}}}Ob}{{{h{AKd}}}AKd}{{{h{{AK`{ce}}}}}{{AK`{ce}}}{AlNn}{AlOh}}{{{h{Ol}}}Ol}{{{h{AFb}}}AFb}{{{h{AKf}}}AKf}{{{h{AKh}}}AKh}{{{h{AKj}}}AKj}{{{h{c}}{h{de}}}Ab{}{}}00000000{{{h{{AK`{ce}}}}{h{{AK`{ce}}}}}Eh{ABbNn}{ABbOh}}{{{h{Ol}}{h{Ol}}}Eh}{{{h{AKf}}{h{AKf}}}Eh}{{{h{AKj}}{h{AKj}}}Eh}`{{}AKd}{{{h{{AKb{ce}}}}}{{h{g}}}{}Oh{}}{{OlBb}{{Bf{OnA@`}}}}{c{{Bf{Ol}}}G`}{{{h{{AK`{ce}}}}}Af{O`Nn}Oh}{{{h{Ob}}{h{Ob}}}Gb}{{{h{AGf}}{h{AGf}}}Gb}{{{h{{AK`{ce}}}}{h{{AK`{ce}}}}}Gb{GfNn}{GfOh}}{{{h{Ol}}{h{Ol}}}Gb}{{{h{AFb}}{h{AFb}}}Gb}{{{h{AKf}}{h{AKf}}}Gb}{{{h{AKh}}{h{AKh}}}Gb}{{{h{AKj}}{h{AKj}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}0000000000000{{{h{{AKl{c}}}}{h{dHb}}}Hf{HhOh}}{{{h{Ob}}{h{dHb}}}Hf}{{{h{AKd}}{h{dHb}}}Hf}{{{h{AGf}}{h{dHb}}}Hf}0{{{h{{AK`{ce}}}}{h{dHb}}}{{Bf{AbHd}}}NnOh}0{{{h{Ol}}{h{dHb}}}{{Bf{AbHd}}}}0{{{h{AFb}}{h{dHb}}}{{Bf{AbHd}}}}0{{{h{AKf}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{AKh}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{AKj}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{{AK`{ce}}}}g}GbNnOh{{ACj{{h{c}}}{{ACh{Gb}}}}}}{cc{}}{AKn{{AL`{c}}}Oh}{ALb{{AL`{c}}}Oh}2222{AGhAGf}3{NlAGf}4{OnOl}55555{{OlAJn}{{AKl{c}}}Oh}{{AFbAJn}{{AKl{c}}}Oh}{{{h{Mf}}}{{Bf{Ol}}}}{{{h{Mf}}}{{Bf{AFb}}}}{{{h{ADl}}}{{Bf{{AK`{ce}}Nl}}}{ALdNn}Oh}{{{h{Ol}}}{{Fl{ALf}}}}{{{h{Ol}}}{{N`{ALf}}}}{c{{Bf{{AKb{{ALn{}{{ALh{e}}{ALj{c}}{ALl{g}}}}i}}g}}}{}{{AM`{{Cj{Ch}}}}AMb}HhOh}{{}{{Bf{{AKb{AMdc}}e}}}Oh{}}{{{h{dc}}}{{Bf{{AKb{AMde}}g}}}{AMfAMh}Oh{}}{{c{h{de}}}{{Bf{{AKb{{ALn{}{{ALh{g}}{ALj{c}}{ALl{i}}}}k}}i}}}{}{AMfAMh}{{AM`{{Cj{Ch}}}}AMb}HhOh}{{ce}{{Bf{{AKb{{ALn{}{{ALh{e}}{ALj{c}}{ALl{g}}}}i}}g}}}{}{{AM`{{Cj{Ch}}}}AMb}HhOh}{c{{Bf{{AKb{AMde}}g}}}{}Oh{}}{{{h{{AL`{c}}}}}GbOh}{{{h{Ol}}}Gb}{{{h{{AK`{ce}}}}{h{dg}}}Ab{AEbNn}{AEbOh}Jl}{{{h{Ol}}{h{dc}}}AbJl}{{{h{AKf}}{h{dc}}}AbJl}{{{h{AKj}}{h{dc}}}AbJl}{ce{}{}}00000000000{OlAMj}{AHl{{Bf{{AKl{c}}AGf}}}Oh}{{AIh{Fl{AMl}}ALf}{{Bf{{AKl{c}}AGf}}}Oh}{{{AKb{ec}}{Fl{AMl}}ALf}{{Bf{{AKl{c}}AGf}}}Oh{{AIh{c}}}}{{{AKb{ec}}}{{Bf{{AKl{c}}AGf}}}Oh{{AHl{c}}}}{{{AKl{c}}}{{Bf{{AKl{c}}AGf}}}Oh}{Ol{{Bf{{AKl{c}}AGf}}}Oh}{AFb{{Bf{{AKl{c}}AGf}}}Oh}{AIh{{Bf{{AL`{c}}AGf}}}Oh}{{{AL`{c}}}{{Bf{{AL`{c}}AGf}}}Oh}{{{AKb{ec}}}{{Bf{{AL`{c}}AGf}}}Oh{{AIh{c}}}}{{{AKb{ce}}}c{}Oh}{Ol{{N`{Ol}}}}{AFb{{N`{AFb}}}}{{{AL`{c}}L`}{{Fl{AKn}}}Oh}{{{AL`{c}}L`{h{{Lf{e}}}}}ALbOhAFd}{{{h{Ol}}}Gb}{{}Gb}{{{h{Ob}}}Gb}2{{{h{AFb}}}Gb}212133{{{h{{AK`{ce}}}}}ADnNnOh}``{{{h{{AK`{ce}}}}}{{Bf{{AEh{c}}Nl}}}NnOh}{{}AJn}{{{h{Ol}}}AMn}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Fl{ADn}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}44{{{h{AJn}}{h{AJn}}}AJn}5{{}{{h{Mf}}}}{{ADn{N`{c}}}{{Bf{{AK`{ce}}Nl}}}NnOh}{{{h{Ol}}}ADn}``{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{AKl{c}}AJn}{{AKl{c}}}Oh}{{{h{{AK`{ce}}}}{h{{AK`{ce}}}}}{{Fl{Eh}}}{AFfNn}{AFfOh}}{{{h{Ol}}{h{Ol}}}{{Fl{Eh}}}}{{{h{AKf}}{h{AKf}}}{{Fl{Eh}}}}{{{h{AKj}}{h{AKj}}}{{Fl{Eh}}}}{{{h{c}}}ADnNn}{{{h{{AK`{ce}}}}}{{h{{Cj{c}}}}}NnOh}{{{h{{AK`{ce}}}}}{{Bf{AbNl}}}NnOh}{{{h{{AK`{ce}}}}g}{{Bf{{N`{{N`{Ch}}}}Nl}}}{O`Nn}Oh{{AE`{c}}}}{{{h{{AK`{ce}}}}}ADnNnOh}{{{h{Ol}}c}BfLj}{{}AFl}{{{h{{AK`{ce}}}}}{{Of{ce}}}{O`Nn}Oh}{{}AJn}{{{h{c}}}e{}{}}00000000{{{h{AFb}}{h{{Lf{c}}}}}{{Bf{OlAN`}}}AFd}{{{h{c}}}Fn{}}000{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}0{{{h{{AK`{ce}}}}{h{dk}}}{{Bf{{AK`{ge}}{AFn{i}}}}}NnOhNn{}{{AG`{cgi}}}}{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Mb{}}00000000000{ce{}{}}00000000000`{{{h{ANb}}}{{Fl{Dh}}}}{{{h{ANb}}}{{Fl{Dl}}}}{{{h{ANb}}ADn}{{Fl{K`}}}}`{{{h{En}}{h{Mf}}{h{{Cj{{h{{Cj{{h{Mf}}}}}}}}}}}{{Bf{AbANd}}}}````````````````````````````````````{{{h{dJf}}ANfl{A`{n}}}{{Fl{{A`{n}}}}}}``{{{h{Jf}}{h{{Lf{Ld}}}}}Kh}`{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{dc}}}{{h{de}}}{}{}}0000000{{Kh{h{{Nh{Ol}}}}{h{{Lf{Ld}}}}}Jf}{{{h{ANf}}}ANf}{{{h{ANh}}}ANh}{{{h{{ANj{c}}}}}{{ANj{c}}}{AlANlHhAl}}{{{h{l}}}l}{{{h{Jf}}}Jf}{{{h{Gn}}}Gn}{{{h{ANn}}}ANn}{{{h{c}}{h{de}}}Ab{}{}}000000{{{h{ANf}}{h{ANf}}}Eh}{{{h{l}}{h{l}}}Eh}{{}l}{{}Jf}{{}Gn}{{}ANn}{{{h{{ANj{c}}}}}{{h{e}}}{ANlHhAl}{}}{{{h{AO`}}}{{Fl{AFb}}}}0{{{h{{ANj{AOb}}}}}{{Fl{AFb}}}}{{{h{{ANj{{AOd{AKn}}}}}}}{{Fl{AFb}}}}{{{h{{ANj{{AOf{AKn}}}}}}}{{Fl{AFb}}}}{{{h{ANf}}{h{ANf}}}Gb}{{{h{ANh}}{h{ANh}}}Gb}{{{h{l}}{h{l}}}Gb}{{{h{ANn}}{h{ANn}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}0000000{{{h{Jf}}ANf}{{Fl{{h{{A`{n}}}}}}}}{{{h{ANf}}{h{dHb}}}Hf}{{{h{H`}}{h{dHb}}}Hf}0{{{h{ANh}}{h{dHb}}}Hf}{{{h{{ANj{c}}}}{h{dHb}}}Hf{HhANlHhAl}}{{{h{l}}{h{dHb}}}Hf}{{{h{Jf}}{h{dHb}}}Hf}{{{h{Gn}}{h{dHb}}}Hf}{{{h{ANn}}{h{dHb}}}Hf}{AMnANf}{AAjANf}{cc{}}0000000{{{h{ANf}}{h{dc}}}AbJl}{{{h{AO`}}{h{{Lf{Ld}}}}}ANf}{{{h{{ANj{{AOd{AKn}}}}}}{h{{Lf{Ld}}}}}ANf}{{{h{{ANj{AOb}}}}{h{{Lf{Ld}}}}}ANf}{{{h{{ANj{{AOf{AKn}}}}}}{h{{Lf{Ld}}}}}ANf}{{{h{Jf}}}{{N`{{h{ANf}}}}}}{ce{}{}}0000000{{cANh}{{ANj{c}}}{ANlHhAl}}{{}Jf}{{{h{ANf}}{h{ANf}}}{{Fl{Eh}}}}{{{h{l}}{h{l}}}{{Fl{Eh}}}}{{{h{dJf}}ANfl}{{Fl{{A`{n}}}}}}{{{h{AOh}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{{ANj{{AOf{AKn}}}}}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{{ANj{AOb}}}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{{ANj{{AOd{AKn}}}}}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{n}}{h{dGl}}{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{c}}{h{dGl}}{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}{}}`{{{h{Jf}}}{{N`{{h{{A`{n}}}}}}}}`{{{h{c}}}e{}{}}000000{{{h{c}}}Fn{}}``{c{{Bf{e}}}{}{}}000000000000000{{{h{c}}}Mb{}}0000000{ce{}{}}0000000````````````````{{{h{d{Dd{c}}}}{h{e}}}{{h{d{Dd{c}}}}}{}{{AOl{AOj}}}}{{{h{d{Dd{c}}}}JjJbAEl}{{Bf{{h{d{Dd{c}}}}AOn}}}{}}{{{h{d{Dd{c}}}}JjJbAElLh}{{Bf{{h{d{Dd{c}}}}AOn}}}{}}{{{h{d{Dd{c}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}AfDh}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Jj}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Jj}{{Bf{{h{d{Dd{c}}}}B@`}}}{}}{{{h{d{Dd{c}}}}{h{{Cj{Jj}}}}}{{Bf{{h{d{Dd{c}}}}B@`}}}{}}{{{h{d{Dd{c}}}}Gb}{{h{d{Dd{c}}}}}{}}{{{h{c}}}{{h{e}}}{}{}}0000{{{h{dc}}}{{h{de}}}{}{}}0000{{{h{d{Dd{c}}}}B@b}{{h{d{Dd{c}}}}}{}}{{{h{{Dd{c}}}}}{{Dd{c}}}Al}{{{h{B@d}}}B@d}{{{h{B@b}}}B@b}{{{h{c}}{h{de}}}Ab{}{}}00{{{h{B@b}}{h{B@b}}}Eh}{{{Dd{c}}e}{{Dd{e}}}{}Mn}{{{h{d{Dd{c}}}}Bb}{{h{d{Dd{c}}}}}{}}{{}B@d}{{}B@b}{{{h{d{Dd{c}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Af}{{h{d{Dd{c}}}}}{}}11{{{h{d{Dd{c}}}}Lh}{{h{d{Dd{c}}}}}{}}{{{h{B@b}}{h{B@b}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}0{{{h{d{Dd{c}}}}Dh}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Dl}{{h{d{Dd{c}}}}}{}}{{{Dd{c}}}{{Bf{GlJd}}}Mn}{{{Dd{c}}{h{de}}}{{Bf{GlJd}}}MnAMh}{{{h{{Dd{c}}}}{h{dHb}}}HfHh}{{{h{B@`}}{h{dHb}}}Hf}0{{{h{AOn}}{h{dHb}}}Hf}0{{{h{B@d}}{h{dHb}}}Hf}{{{h{B@b}}{h{dHb}}}Hf}{cc{}}0000{{{h{B@b}}{h{dc}}}AbJl}?{ce{}{}}0000{{{h{d{Dd{c}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}B@f}{{h{d{Dd{c}}}}}{}}11{{{h{d{Dd{c}}}}B@d}{{h{d{Dd{c}}}}}{}}{{{h{B@b}}{h{B@b}}}{{Fl{Eh}}}}{{{h{d{Dd{c}}}}{An{Fn{N`{ADn}}}}j}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}{N`{{C`{AfDh}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}J`}{{h{d{Dd{c}}}}}{}}{{{h{B@d}}{h{dBl}}}Ab}{{{h{B@d}}{h{dBl}}{h{dc}}}AbAMh}{{{h{c}}}e{}{}}00{{{h{c}}}Fn{}}0{c{{Bf{e}}}{}{}}000000000{{{h{c}}}Mb{}}0000{{{h{d{Dd{c}}}}{N`{Jj}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}B@h}{{h{d{Dd{c}}}}}{}}?????````","D":"G@f","p":[[5,"Balance",0,1937],[0,"mut"],[5,"Wallet",0,1938],[1,"reference"],[6,"KeychainKind",0,1939],[5,"SignerOrdering",1631,1940],[10,"TransactionSigner",1631,1940],[5,"Arc",1941],[1,"unit"],[17,"Item"],[5,"ScriptBuf",1942],[8,"Indexed",1943],[10,"Iterator",1944],[10,"Clone",1945],[5,"BTreeMap",1946],[5,"Block",1947],[1,"u32"],[5,"CannotConnectError",1948],[6,"Result",1949],[5,"BlockId",1950],[6,"ApplyHeaderError",1948],[5,"Transaction",1951],[1,"u64"],[1,"tuple"],[10,"IntoIterator",1952],[5,"Update",0,1938],[10,"Into",1953],[1,"u8"],[1,"slice"],[5,"ConfirmationBlockTime",1950],[5,"TxGraph",1954],[5,"Txid",1951],[8,"DefaultCoinSelectionAlgorithm",449,1955],[5,"TxBuilder",1818,1956],[6,"BuildFeeBumpError",1209,1957],[5,"Amount",1958],[6,"CalculateFeeError",1954],[5,"FeeRate",1959],[5,"CheckPointIter",1948],[5,"LocalOutput",0,1939],[5,"WeightedUtxo",0,1939],[6,"Utxo",0,1939],[5,"ChangeSet",0,1960],[6,"Ordering",1961],[5,"CreateParams",0,1962],[10,"IntoWalletDescriptor",548],[5,"Transaction",1963],[5,"Store",1964],[5,"Connection",1965],[8,"PersistedWallet",0,1966],[6,"Error",809],[5,"LoadParams",0,1962],[5,"AddressInfo",0,1938],[6,"Option",1967],[5,"String",1968],[10,"Deserializer",1969],[1,"bool"],[6,"LoadWithPersistError",0,1966],[10,"PartialEq",1961],[6,"LoadError",0,1938],[6,"LoadMismatch",0,1938],[5,"Psbt",1970],[5,"SignOptions",1631,1940],[6,"SignerError",1631,1940],[5,"Formatter",1971],[5,"Error",1971],[8,"Result",1971],[10,"Debug",1971],[10,"Display",1971],[6,"CreateWithPersistError",0,1966],[6,"ApplyBlockError",0,1938],[5,"ChangeSet",1972],[5,"ChangeSet",1973],[5,"ChangeSet",1948],[5,"ChangeSet",1954],[5,"FullScanResult",1974],[5,"SyncResult",1974],[8,"Result",1965],[5,"BlockHash",1947],[5,"PsbtSighashType",1975],[5,"Input",1975],[6,"CreateTxError",1209,1957],[5,"SignersContainer",1631,1940],[5,"CanonicalTx",1954],[5,"OutPoint",1951],[10,"Hasher",1976],[5,"AlterCheckPointError",1948],[5,"TxOut",1951],[10,"IsDust",0,1977],[5,"Script",1978],[8,"ExtendedDescriptor",548],[8,"KeyMap",1309,1979],[5,"CheckPoint",1948],[10,"DoubleEndedIterator",1980],[5,"LocalChain",1948],[6,"Network",1981],[5,"Policy",842],[6,"All",1982],[5,"Secp256k1",1983],[5,"Sequence",1951],[10,"Serializer",1984],[5,"KeychainTxOutIndex",1972],[5,"FullScanRequest",1974],[5,"SyncRequest",1974],[5,"TypeId",1985],[5,"TxNode",1954],[1,"str"],[5,"LargestFirstCoinSelection",449,1955],[5,"OldestFirstCoinSelection",449,1955],[5,"BranchAndBoundCoinSelection",449,1955],[10,"CoinSelectionAlgorithm",449,1955],[5,"Vec",1986],[5,"CoinSelectionResult",449,1955],[6,"Error",449,1955],[6,"Excess",449,1955],[6,"Descriptor",548,1979],[5,"Address",1987],[6,"Error",1988],[10,"MiniscriptKey",1988],[10,"ToPublicKey",1988],[6,"ScriptContextEnum",1309],[5,"Miniscript",548,1989],[6,"Terminal",1990],[10,"ScriptContext",1309,1991],[6,"Tree",1992],[6,"DescriptorPublicKey",1309,1993],[5,"DefiniteDescriptorKey",1993],[6,"ConversionError",1993],[6,"Placeholder",1994],[5,"Satisfaction",1994],[10,"AssetProvider",1995],[17,"Key"],[6,"ScriptContextError",1991],[17,"Sha256"],[5,"Hash",1996],[17,"Hash256"],[5,"Hash",1997],[17,"Ripemd160"],[5,"Hash",1998],[17,"Hash160"],[5,"Hash",1999],[10,"ParseableKey",1990],[6,"Legacy",548,1991],[6,"Segwitv0",548,1991],[10,"Ord",1961],[5,"PublicKey",2000],[10,"Verification",2001],[6,"DescriptorType",1979],[5,"DescriptorId",2002],[10,"FromStrKey",2003],[5,"ExtParams",2004],[6,"AnalysisError",2004],[10,"ExtractPolicy",548],[6,"BuildSatisfaction",842],[5,"Range",2005],[17,"Output"],[10,"FnMut",2006],[5,"Pkh",2007],[5,"Sh",2008],[5,"Wsh",2009],[5,"Tr",2010],[5,"Wpkh",2009],[5,"Bare",2007],[5,"Type",2011],[5,"ExtData",2012],[5,"Tree",2013],[1,"usize"],[10,"Satisfier",1994],[10,"Hash",1976],[5,"Iter",2014],[5,"PkIter",2014],[6,"Policy",2015],[6,"LiftError",2016],[5,"Weight",2017],[6,"BareCtx",1991],[6,"TapTree",2010],[6,"DescriptorSecretKey",1309,1993],[10,"Signing",2001],[10,"PartialOrd",1961],[5,"Plan",1995],[5,"TxIn",1951],[6,"SigType",1991],[6,"TranslateErr",1988],[10,"Translator",1988],[6,"PolicyError",842],[6,"ParsePublicKeyError",2000],[6,"KeyError",1309],[6,"Error",2018],[6,"Error",2019],[6,"HexToBytesError",2020],[6,"PkOrF",842],[6,"SatisfiableItem",842],[6,"Satisfaction",842],[5,"Condition",842],[10,"DescriptorTemplate",1025],[8,"DescriptorTemplateOut",1025],[5,"P2Pkh",1025],[10,"IntoDescriptorKey",1309],[5,"P2Wpkh_P2Sh",1025],[5,"P2Wpkh",1025],[5,"P2TR",1025],[6,"Tap",1991],[5,"Bip44",1025],[10,"DerivableKey",1309],[5,"Bip44Public",1025],[5,"Bip49",1025],[5,"Bip49Public",1025],[5,"Bip84",1025],[5,"Bip84Public",1025],[5,"Bip86",1025],[5,"Bip86Public",1025],[6,"MiniscriptPsbtError",1209,1957],[6,"Error",2021],[5,"FullyNodedExport",1286,2022],[8,"ValidNetworks",1309],[5,"SortedMultiVec",1309,2023],[5,"GeneratedKey",1309],[5,"PrivateKeyGenerateOptions",1309],[5,"SinglePub",1309,1993],[5,"SinglePriv",1309,1993],[6,"SinglePubKey",1309,1993],[6,"DescriptorKey",1309],[5,"Xpriv",2018],[6,"ExtendedKey",1309],[5,"Xpub",2018],[10,"FromStr",2024],[5,"DerivationPath",2018],[17,"Entropy"],[17,"Options"],[17,"Error"],[10,"GeneratableKey",1309],[10,"AsMut",1953],[10,"Default",2025],[10,"GeneratableDefaultOptions",1309],[10,"CryptoRng",2026],[10,"RngCore",2026],[5,"Assets",1995],[8,"KeySource",2018],[5,"Fingerprint",2018],[5,"DescriptorKeyParseError",1993],[10,"PsbtUtils",1625],[6,"Error",2027],[6,"SignerId",1631,1940],[6,"SignerContext",1631,1940],[5,"SignerWrapper",1631,1940],[10,"Sized",2028],[6,"TapLeavesOptions",1631,1940],[10,"SignerCommon",1631,1940],[5,"PrivateKey",2000],[5,"DescriptorXKey",1993],[5,"DescriptorMultiXKey",1993],[10,"InputSigner",1631,1940],[5,"PushBytes",2029],[10,"AsRef",1953],[6,"AddForeignUtxoError",1818,1956],[6,"AddUtxoError",1818,1956],[6,"ChangeSpendPolicy",1818,1956],[6,"TxOrdering",1818,1956],[6,"LockTime",2030],[1,"i32"],[15,"InvalidTxid",1933],[15,"UnexpectedConnectedToHash",435],[15,"Network",437],[15,"Genesis",437],[15,"Descriptor",437],[15,"Custom",1935],[15,"Foreign",446],[15,"InsufficientFunds",541],[15,"Change",543],[15,"NoChange",543],[8,"DerivedDescriptor",548],[15,"PsbtTimelocks",1001],[15,"Complete",1004],[15,"Partial",1004],[15,"PartialComplete",1004],[15,"Sha256Preimage",1015],[15,"Hash256Preimage",1015],[15,"Ripemd160Preimage",1015],[15,"Hash160Preimage",1015],[15,"Thresh",1015],[15,"Multisig",1015],[15,"AbsoluteTimelock",1015],[15,"RelativeTimelock",1015],[15,"RbfSequenceCsv",1280],[15,"LockTime",1280],[15,"FeeTooLow",1280],[15,"FeeRateTooLow",1280],[8,"WalletExport",1286],[10,"ExtScriptContext",1309],[15,"Tap",1817]],"r":[[0,1956],[1,1956],[2,1938],[3,1938],[4,1937],[8,1960],[9,1956],[10,1962],[11,1966],[19,548],[24,1977],[25,1939],[26,1938],[27,1938],[28,1962],[29,1966],[31,1939],[41,1966],[43,1940],[44,1956],[45,1956],[49,1938],[50,1939],[53,1938],[54,1939],[127,1938],[178,1938],[179,1938],[313,1943],[328,1938],[329,1938],[337,548],[389,1938],[432,1938],[451,1955],[453,1955],[454,1955],[455,1955],[456,1955],[457,1955],[459,1955],[461,1955],[484,1955],[552,1979],[554,1993],[561,1991],[562,1989],[567,842],[568,1991],[569,1991],[603,808],[1209,1957],[1212,1957],[1220,1957],[1286,2022],[1287,2022],[1312,1993],[1313,1993],[1328,1979],[1338,1991],[1343,1993],[1344,1993],[1345,1993],[1346,2023],[1629,2031],[1630,2031],[1638,1940],[1655,1940],[1656,1940],[1657,1940],[1658,1940],[1659,1940],[1660,1940],[1661,1940],[1662,1940],[1664,1940],[1665,1940],[1818,1956],[1819,1956],[1822,1956],[1829,1956],[1830,1956]],"b":[[130,"impl-Wallet"],[131,"impl-PersistWith%3CTransaction%3C\'c%3E%3E-for-Wallet"],[132,"impl-PersistWith%3CStore%3CChangeSet%3E%3E-for-Wallet"],[133,"impl-PersistWith%3CConnection%3E-for-Wallet"],[183,"impl-Display-for-Balance"],[184,"impl-Debug-for-Balance"],[190,"impl-Debug-for-LoadWithPersistError%3CE%3E"],[191,"impl-Display-for-LoadWithPersistError%3CE%3E"],[192,"impl-Display-for-CreateWithPersistError%3CE%3E"],[193,"impl-Debug-for-CreateWithPersistError%3CE%3E"],[196,"impl-Debug-for-AddressInfo"],[197,"impl-Display-for-AddressInfo"],[198,"impl-Display-for-LoadError"],[199,"impl-Debug-for-LoadError"],[201,"impl-Debug-for-ApplyBlockError"],[202,"impl-Display-for-ApplyBlockError"],[211,"impl-From%3CChangeSet%3CConfirmationBlockTime,+ChangeSet%3E%3E-for-ChangeSet"],[212,"impl-From%3CChangeSet%3E-for-ChangeSet"],[213,"impl-From%3CChangeSet%3E-for-ChangeSet"],[215,"impl-From%3CChangeSet%3CConfirmationBlockTime%3E%3E-for-ChangeSet"],[220,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[221,"impl-From%3CSyncResult%3E-for-Update"],[275,"impl-PersistWith%3CConnection%3E-for-Wallet"],[276,"impl-Wallet"],[277,"impl-PersistWith%3CTransaction%3C\'c%3E%3E-for-Wallet"],[278,"impl-PersistWith%3CStore%3CChangeSet%3E%3E-for-Wallet"],[303,"impl-PersistWith%3CTransaction%3C\'c%3E%3E-for-Wallet"],[304,"impl-PersistWith%3CStore%3CChangeSet%3E%3E-for-Wallet"],[305,"impl-PersistWith%3CConnection%3E-for-Wallet"],[331,"impl-Staged-for-Wallet"],[332,"impl-Wallet"],[490,"impl-Display-for-Error"],[491,"impl-Debug-for-Error"],[641,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[642,"impl-Descriptor%3CDescriptorPublicKey%3E"],[669,"impl-Debug-for-Descriptor%3CPk%3E"],[670,"impl-Display-for-Descriptor%3CPk%3E"],[673,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[674,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[677,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[679,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[680,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[681,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[682,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[683,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[826,"impl-Debug-for-Error"],[827,"impl-Display-for-Error"],[828,"impl-From%3CPolicyError%3E-for-Error"],[829,"impl-From%3CParsePublicKeyError%3E-for-Error"],[830,"impl-From%3CKeyError%3E-for-Error"],[831,"impl-From%3CError%3E-for-Error"],[833,"impl-From%3CError%3E-for-Error"],[834,"impl-From%3CHexToBytesError%3E-for-Error"],[835,"impl-From%3CError%3E-for-Error"],[929,"impl-Display-for-PolicyError"],[930,"impl-Debug-for-PolicyError"],[1247,"impl-Display-for-MiniscriptPsbtError"],[1248,"impl-Debug-for-MiniscriptPsbtError"],[1249,"impl-Debug-for-CreateTxError"],[1250,"impl-Display-for-CreateTxError"],[1251,"impl-Debug-for-BuildFeeBumpError"],[1252,"impl-Display-for-BuildFeeBumpError"],[1254,"impl-From%3CError%3E-for-CreateTxError"],[1255,"impl-From%3CError%3E-for-CreateTxError"],[1256,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1257,"impl-From%3CError%3E-for-CreateTxError"],[1258,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1296,"impl-Display-for-FullyNodedExport"],[1297,"impl-Debug-for-FullyNodedExport"],[1442,"impl-Display-for-KeyError"],[1443,"impl-Debug-for-KeyError"],[1444,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[1445,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[1446,"impl-Display-for-DescriptorPublicKey"],[1447,"impl-Debug-for-DescriptorPublicKey"],[1448,"impl-Debug-for-DescriptorSecretKey"],[1449,"impl-Display-for-DescriptorSecretKey"],[1455,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[1456,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[1461,"impl-From%3CError%3E-for-KeyError"],[1463,"impl-From%3CError%3E-for-KeyError"],[1505,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1506,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1712,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1713,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1714,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1729,"impl-Debug-for-SignerError"],[1730,"impl-Display-for-SignerError"],[1737,"impl-From%3CFingerprint%3E-for-SignerId"],[1738,"impl-From%3CHash%3E-for-SignerId"],[1749,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1750,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1751,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1767,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1768,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1769,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1877,"impl-Debug-for-AddUtxoError"],[1878,"impl-Display-for-AddUtxoError"],[1879,"impl-Debug-for-AddForeignUtxoError"],[1880,"impl-Display-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAAIECywLXAggFhwXvBQ==","e":"OzAAAAEAAA4EhAAUAAAAOAAAAEMAAQBHACAAbQAAAHEADgCEAAIAjAAEAJkAGQC2AAAAuAATANQAAgDYAAEA3QABAOEAAADtAAEABgEAABQBAAAWAQEAIgEAAC4BAAAwAQIAOQEAAD8BBQBKAQAATAEAAFIBDQBmAR8AiwEPAKEBDwDPAREA4gECAOYBAgDrAQYAAgIbACoCAAA4AgAATAIBAE8CAABRAgcAXAIAAF4CAQBhAgAAZAIBAGcCAQBrAgEAbgIBAHECAQB0AgsAhQIDAIoCCwCbAgEAngIIAKgCBACyAgAAvwIDAMoCAADQAgEA1AIBANsCAQDxAgMA9gIBAAQDAQAHAwEACwMFABYDBwAfAwMAJAMDADgDCABCAwIARgMEAG4DGQCKAxoApwMAAKoDAACvAwEAvgMAAMEDBADHAyIAEAQXACkELwBxBEgA2AQNAOcEBADxBA8ACwUBAA8FAAARBQEAFAUAABgFBQBMBRcAbgUVAIUFAQCIBQAAigUkALAFAQC2BQAAuAUAALoFAADCBQEAzwUDAN8FAADiBQQA6AUBAPgFAQD9BQAABwYAAAwGAwAVBgAAGQYIACMGAwAqBi8AiQYPAJoGFACxBg4AwQYKANQGAADWBgIA5AYBAOgGAgDsBgAA8AYHAPoGHwAzBwkAPgcGAEcHAQBOBwIAVQcGAGEHAABtBwAAcwcTAIkHBAA="}],\ +["bdk_wallet",{"t":"GGFGFPPPFGFGPPPPPPPEPPPPKGGGFGPFPPPPPPPPPIPFFGPPPFGTTFFNNONOONNNNNNNONDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDOONNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNONCNOQNNNNNNNNNNNNNNNNNNNNNNNNNNNCCNDNNNNNNNNNNNNNNNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNOOONNNNNNNNNNNNNNNNNNNMNNOOONNNCONNNNNNNNNNNNNONNNNDNNNONNNNNNONNNNNNNCNNNECONNNDDNNNNNNNOCENNNNNNOENNNNNNNNNNNNNNNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONONNNNNNNNNNNNNNNNNNNOOHNNNNNNNNNNNNNNNNHOOOOOOOOOOOOOOOOPPFPKFIGGPFPFNNNNNNNNNNNNNNNNNNMNNNHNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGPPGPPPPPPPGPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMSHPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPGPPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["AddForeignUtxoError","AddUtxoError","AddressInfo","ApplyBlockError","Balance","CannotConnect","ChangeAllowed","ChangeForbidden","ChangeSet","ChangeSpendPolicy","CreateParams","CreateWithPersistError","Custom","Descriptor","Descriptor","Descriptor","External","Foreign","Genesis","HdKeyPaths","Internal","InvalidChangeSet","InvalidOutpoint","InvalidTxid","IsDust","KeychainKind","LoadError","LoadMismatch","LoadParams","LoadWithPersistError","Local","LocalOutput","Mismatch","MissingDescriptor","MissingGenesis","MissingNetwork","MissingUtxo","Network","OnlyChange","Persist","Persist","PersistedWallet","Shuffle","SignOptions","TxBuilder","TxOrdering","UnexpectedConnectedToHash","UnknownUtxo","Untouched","Update","Utxo","WALLET_SCHEMA_NAME","WALLET_TABLE_NAME","Wallet","WeightedUtxo","add","add_signer","address","all_unbounded_spk_iters","allow_all_sighashes","allow_grinding","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","as_byte","as_ref","as_ref","assume_height","balance","bitcoin","borrow","borrow","borrow","borrow","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","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","change_descriptor","checkpoints","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_selection","confirmation_time","confirmed","create","create","create","create","create_single","create_wallet","create_wallet_async","create_wallet_no_persist","create_with_params","default","default","default","default","deref","derivation_index","derivation_index","derivation_of_spk","descriptor","descriptor","descriptor","descriptor","descriptor_checksum","deserialize","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","export","extract_keys","file_store","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_sqlite","genesis_hash","genesis_hash","get_psbt_input","get_signers","get_tx","get_utxo","graph","hash","hash","immature","index","indexer","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_dust","is_empty","is_mine","is_spent","keychain","keychain","keychains","keymap","keymap","keys","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load","load","load","load","load_wallet","load_wallet_async","load_wallet_no_persist","load_with_params","local_chain","local_chain","lookahead","lookahead","mark_used","merge","miniscript","network","network","network","network","new","new","new_single","next_derivation_index","next_unused_address","outpoint","outpoint","partial_cmp","peek_address","persist","persist","persist","persist_to_sqlite","policies","psbt","public_descriptor","reveal_addresses_to","reveal_next_address","rusqlite","rusqlite_impl","satisfaction_weight","secp_ctx","sent_and_received","sequence","serde","serde_json","serialize","serialize","serialize","serialize","set_keymap","set_keymaps","sign","sign_with_tap_internal_key","signer","signer","spk_index","staged","staged","start_full_scan","start_sync_with_revealed_spks","take_staged","tap_leaves_options","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","trust_witness_utxo","trusted_pending","trusted_spendable","try_finalize","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_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","try_into","try_into","try_into","try_into","tx_builder","tx_graph","tx_graph","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","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","utxo","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","foreign_utxo","input_txid","connected_to_hash","expected_hash","expected","expected","expected","keychain","loaded","loaded","loaded","input_sort","output_sort","outpoint","psbt_input","sequence","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","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","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","eq","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","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","clone","clone","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","clone_into","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","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","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","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","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","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","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","SCHEMAS_TABLE_NAME","migrate_schema","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","descriptor_secret_key","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","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","equivalent","equivalent","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"],[433,"bdk_wallet::AddForeignUtxoError"],[435,"bdk_wallet::ApplyBlockError"],[437,"bdk_wallet::LoadMismatch"],[444,"bdk_wallet::TxOrdering"],[446,"bdk_wallet::Utxo"],[449,"bdk_wallet::coin_selection"],[541,"bdk_wallet::coin_selection::Error"],[543,"bdk_wallet::coin_selection::Excess"],[548,"bdk_wallet::descriptor"],[808,"bdk_wallet::descriptor::checksum"],[809,"bdk_wallet::descriptor::error"],[842,"bdk_wallet::descriptor::policy"],[1001,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[1004,"bdk_wallet::descriptor::policy::Satisfaction"],[1015,"bdk_wallet::descriptor::policy::SatisfiableItem"],[1025,"bdk_wallet::descriptor::template"],[1209,"bdk_wallet::error"],[1280,"bdk_wallet::error::CreateTxError"],[1286,"bdk_wallet::export"],[1309,"bdk_wallet::keys"],[1625,"bdk_wallet::psbt"],[1629,"bdk_wallet::rusqlite_impl"],[1631,"bdk_wallet::signer"],[1817,"bdk_wallet::signer::SignerContext"],[1818,"bdk_wallet::tx_builder"],[1933,"bdk_wallet::tx_builder::AddForeignUtxoError"],[1935,"bdk_wallet::tx_builder::TxOrdering"],[1937,"bdk_chain::balance"],[1938,"bdk_wallet::wallet"],[1939,"bdk_wallet::types"],[1940,"bdk_wallet::wallet::signer"],[1941,"alloc::sync"],[1942,"bitcoin::blockdata::script::owned"],[1943,"bdk_chain"],[1944,"core::iter::traits::iterator"],[1945,"core::clone"],[1946,"alloc::collections::btree::map"],[1947,"bitcoin::blockdata::block"],[1948,"bdk_chain::local_chain"],[1949,"core::result"],[1950,"bdk_chain::chain_data"],[1951,"bitcoin::blockdata::transaction"],[1952,"core::iter::traits::collect"],[1953,"core::convert"],[1954,"bdk_chain::tx_graph"],[1955,"bdk_wallet::wallet::coin_selection"],[1956,"bdk_wallet::wallet::tx_builder"],[1957,"bdk_wallet::wallet::error"],[1958,"bitcoin_units::amount"],[1959,"bitcoin_units::fee_rate"],[1960,"bdk_wallet::wallet::changeset"],[1961,"core::cmp"],[1962,"bdk_wallet::wallet::params"],[1963,"rusqlite"],[1964,"rusqlite::transaction"],[1965,"bdk_file_store::store"],[1966,"bdk_wallet::wallet::persisted"],[1967,"core::option"],[1968,"alloc::string"],[1969,"serde::de"],[1970,"bitcoin::psbt"],[1971,"core::fmt"],[1972,"bdk_chain::indexer::keychain_txout"],[1973,"bdk_chain::indexed_tx_graph"],[1974,"bdk_chain::spk_client"],[1975,"bitcoin::psbt::map::input"],[1976,"core::hash"],[1977,"bdk_wallet::wallet::utils"],[1978,"bitcoin::blockdata::script::borrowed"],[1979,"miniscript::descriptor"],[1980,"core::iter::traits::double_ended"],[1981,"bitcoin::network"],[1982,"secp256k1::context::alloc_only"],[1983,"secp256k1"],[1984,"serde::ser"],[1985,"core::any"],[1986,"alloc::vec"],[1987,"bitcoin::address"],[1988,"miniscript"],[1989,"miniscript::miniscript::private"],[1990,"miniscript::miniscript::decode"],[1991,"miniscript::miniscript::context"],[1992,"miniscript::iter::tree"],[1993,"miniscript::descriptor::key"],[1994,"miniscript::miniscript::satisfy"],[1995,"miniscript::plan"],[1996,"bitcoin_hashes::sha256"],[1997,"miniscript::miniscript::hash256"],[1998,"bitcoin_hashes::ripemd160"],[1999,"bitcoin_hashes::hash160"],[2000,"bitcoin::crypto::key"],[2001,"secp256k1::context"],[2002,"bdk_chain::descriptor_ext"],[2003,"miniscript::blanket_traits"],[2004,"miniscript::miniscript::analyzable"],[2005,"core::ops::range"],[2006,"core::ops::function"],[2007,"miniscript::descriptor::segwitv0"],[2008,"miniscript::descriptor::tr"],[2009,"miniscript::descriptor::sh"],[2010,"miniscript::descriptor::bare"],[2011,"miniscript::miniscript::types"],[2012,"miniscript::miniscript::types::extra_props"],[2013,"miniscript::expression"],[2014,"miniscript::miniscript::iter"],[2015,"miniscript::policy::semantic"],[2016,"miniscript::policy"],[2017,"bitcoin_units::weight"],[2018,"base58ck::error"],[2019,"bitcoin::bip32"],[2020,"hex_conservative::error"],[2021,"bitcoin::psbt::error"],[2022,"bdk_wallet::wallet::export"],[2023,"miniscript::descriptor::sortedmulti"],[2024,"core::str::traits"],[2025,"core::default"],[2026,"rand_core"],[2027,"rusqlite::error"],[2028,"core::marker"],[2029,"bitcoin::blockdata::script::push_bytes::primitive"],[2030,"bitcoin::blockdata::locktime::absolute"],[2031,"bdk_chain::rusqlite_impl"]],"i":[0,0,0,0,0,71,257,257,0,0,0,0,258,70,60,61,5,42,61,0,5,58,255,255,0,0,0,0,0,0,42,0,60,60,60,60,255,61,257,58,70,0,258,0,0,0,71,256,258,0,0,43,43,0,0,1,3,53,3,63,63,3,3,3,3,5,5,3,63,3,0,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,3,3,3,3,3,0,26,43,3,1,5,40,41,42,43,26,1,5,40,41,42,43,26,5,0,40,1,3,3,3,3,3,45,45,45,3,52,1,43,26,53,3,40,3,0,52,43,0,3,1,5,40,43,1,5,40,41,42,43,58,53,60,61,1,1,5,5,40,40,41,41,42,42,53,53,0,0,52,0,3,1,1,5,40,41,42,43,58,58,70,70,3,26,53,53,60,60,61,71,71,0,45,52,1,5,40,41,42,43,43,43,43,43,58,58,70,3,26,26,26,53,60,60,61,71,43,45,52,3,3,3,3,26,5,40,1,53,43,3,3,3,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,89,43,3,40,40,53,3,45,52,0,26,3,3,3,3,3,3,3,3,52,52,52,3,3,43,45,52,3,43,0,45,52,3,43,45,52,45,3,3,42,40,5,3,3,3,3,43,3,0,3,3,3,0,0,41,3,3,42,0,0,1,5,40,43,3,3,3,63,0,0,3,3,3,3,3,3,63,0,1,5,40,41,42,43,26,1,58,70,53,60,71,1,3,63,1,1,63,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,0,3,43,42,40,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,3,3,3,1,41,0,45,52,1,5,40,41,42,43,58,70,3,26,53,60,61,71,0,261,261,262,262,263,264,265,265,263,264,265,266,266,267,267,267,114,114,0,115,0,0,0,0,0,114,0,115,0,114,115,113,108,109,110,114,115,113,108,109,110,108,109,110,108,109,110,111,108,109,110,0,108,109,110,113,113,114,114,115,113,108,109,110,114,115,113,108,109,110,114,115,113,108,109,110,113,110,113,113,108,109,110,114,114,115,113,108,109,110,114,115,113,108,109,110,114,115,113,108,109,110,114,115,113,108,109,110,268,268,269,270,270,269,270,91,271,116,0,0,0,0,0,0,122,0,0,124,0,0,126,91,271,116,0,0,0,91,271,116,126,122,0,91,271,116,91,271,116,91,271,116,126,116,143,144,122,122,116,116,143,144,122,116,143,144,122,122,122,122,0,124,143,144,124,144,124,124,143,144,124,143,144,124,124,143,144,124,143,144,124,143,144,0,116,143,144,122,116,143,144,122,116,143,144,122,122,116,116,116,116,116,116,122,116,122,116,143,144,122,116,116,143,143,144,144,122,122,0,116,122,122,153,116,122,116,116,116,143,144,122,122,116,122,116,116,116,116,116,116,116,143,144,122,122,122,116,122,122,122,116,122,122,122,116,116,122,122,116,116,143,144,122,116,143,144,122,122,116,46,91,116,116,122,122,122,116,122,122,124,143,144,122,116,122,116,124,143,144,116,116,116,116,116,116,116,116,116,116,116,116,116,116,122,124,122,116,122,122,116,143,144,122,124,143,144,116,116,0,122,116,122,116,122,122,116,116,122,116,122,124,143,144,122,0,116,143,144,122,116,122,116,124,124,116,122,116,143,144,122,116,143,144,122,122,116,143,144,122,116,116,143,144,122,122,0,51,51,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,192,185,185,0,193,0,0,192,191,0,192,192,185,185,185,192,193,154,185,193,193,0,0,0,154,154,191,192,192,0,0,192,192,192,191,191,192,193,97,194,185,154,191,192,193,97,194,185,154,191,192,193,97,194,154,191,192,193,97,194,154,97,194,194,191,192,193,97,194,185,191,191,192,192,193,193,97,97,194,194,185,185,191,192,193,97,194,185,185,154,191,192,193,193,97,97,194,185,154,97,191,194,192,97,191,192,193,97,194,185,154,192,193,194,97,194,97,97,191,192,193,97,194,194,191,192,193,97,194,154,185,191,192,193,97,194,185,154,191,192,193,97,194,185,154,191,192,193,97,194,185,154,191,192,193,97,194,185,154,272,272,272,273,274,275,274,275,274,275,274,275,274,275,276,277,278,279,280,281,281,280,282,283,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,195,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,196,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,197,199,200,201,203,205,206,207,208,209,210,211,0,82,212,0,82,82,35,82,35,82,82,0,82,82,82,82,82,212,82,82,82,82,82,35,35,82,35,212,82,82,212,82,35,212,82,35,212,212,212,212,82,82,35,35,212,82,82,82,82,82,82,35,212,82,35,212,212,82,35,212,82,35,212,82,35,212,82,35,212,82,35,284,284,285,285,286,287,0,0,288,214,214,214,214,214,214,214,214,214,214,214,214,288,214,214,214,214,214,214,214,190,0,0,0,0,231,231,0,0,221,0,0,0,0,190,190,190,124,0,0,121,190,190,177,126,231,224,0,224,0,0,121,126,177,0,0,0,0,121,0,221,177,126,0,289,126,224,217,222,121,218,190,216,126,177,219,220,221,224,217,222,121,218,190,216,126,177,219,220,221,216,124,124,124,124,124,124,124,124,124,217,121,218,216,126,177,219,220,221,217,121,218,216,126,177,219,220,221,216,126,219,221,218,218,217,126,126,216,121,190,216,126,177,219,220,221,121,121,216,216,126,126,177,177,219,219,220,220,221,221,222,121,218,190,190,216,216,126,126,177,177,219,220,221,216,224,224,224,217,222,121,218,190,190,190,216,126,126,177,219,220,221,222,222,126,177,216,126,126,231,234,234,231,231,234,224,126,216,126,219,221,224,217,222,121,218,190,216,126,177,219,220,221,126,198,204,217,217,222,126,177,204,224,217,217,126,177,224,224,126,289,121,126,177,289,121,289,121,126,126,216,219,220,216,0,126,124,216,216,0,216,124,216,126,219,220,124,222,216,126,219,221,124,216,216,216,216,126,124,216,0,217,121,218,216,126,177,219,220,221,177,190,216,126,177,124,124,216,224,217,222,121,218,190,216,126,177,219,220,221,224,217,222,121,218,190,216,126,177,219,220,221,224,217,222,121,218,190,216,126,177,219,220,221,224,217,222,121,218,190,216,126,177,219,220,221,0,241,241,241,0,0,247,243,247,64,243,247,64,0,64,64,64,244,64,64,64,64,64,64,64,247,243,64,244,64,0,0,0,0,0,0,0,0,244,0,0,64,83,63,63,83,63,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,83,243,244,245,6,83,63,247,243,244,245,6,83,63,247,243,6,6,83,63,247,245,248,248,245,245,245,243,244,6,247,243,243,244,244,6,6,247,247,83,243,64,64,244,245,6,83,63,247,243,243,243,64,244,245,6,83,63,247,243,248,245,245,245,83,243,64,244,245,6,83,63,247,245,83,243,6,83,252,245,245,245,7,245,63,83,63,243,244,245,6,83,63,247,64,63,63,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,243,64,244,245,6,83,63,247,290,0,0,257,257,0,258,255,255,255,257,258,0,0,256,258,34,34,34,34,34,34,34,34,34,34,256,255,258,257,34,256,255,258,257,34,34,258,257,34,258,257,257,34,34,258,257,34,34,34,34,34,257,257,257,34,34,34,34,34,256,256,255,255,258,257,34,256,255,258,257,257,34,34,256,255,258,257,34,34,34,34,34,257,34,34,34,258,258,34,258,257,256,255,34,256,255,258,257,34,256,255,258,257,34,256,255,258,257,34,34,34,256,255,258,257,261,261,266,266],"f":"```````````````````````````````````````````````````````{{bb}b}{{{h{df}}jl{A`{n}}}Ab}`{{{h{f}}}{{An{j{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}}}``{{{h{df}}{h{B`}}Bb}{{Bf{AbBd}}}}{{{h{df}}{h{B`}}BbBh}{{Bf{AbBj}}}}{{{h{df}}c}Ab{{Cb{}{{Ad{{C`{{h{Bl}}Bn}}}}}}}}{{{h{df}}c}{{Bf{AbBd}}}{{Cf{Cd}}}}{{{h{j}}}Ch}{{{h{j}}}{{h{{Cj{Ch}}}}}}{{{h{f}}}{{h{{Cn{Cl}}}}}}`{{{h{f}}}b}`{{{h{c}}}{{h{e}}}{}{}}000000000000000{{{h{dc}}}{{h{de}}}{}{}}000000000000000{{{h{df}}D`}{{Bf{{Dd{Db}}Df}}}}{{{h{df}}}{{Dd{Db}}}}{{{h{f}}{h{Bl}}}{{Bf{DhDj}}}}{{{h{f}}{h{Bl}}}{{Bf{DlDj}}}}{{{h{df}}{h{Bl}}}Ab}```{{{h{f}}}Dn}{{{h{b}}}b}{{{h{j}}}j}{{{h{E`}}}E`}{{{h{Eb}}}Eb}{{{h{Ed}}}Ed}{{{h{Ef}}}Ef}{{{h{Cd}}}Cd}{{{h{c}}{h{de}}}Ab{}{}}000000{{{h{j}}{h{j}}}Eh}```{{cc}Ej{ElAl}}{{{h{dEn}}c}{{Bf{fe}}}{}{}}{{{h{dF`}}c}{{Bf{fe}}}{}{}}{{{h{d{Fb{Ef}}}}c}{{Bf{fe}}}{}{}}{cEj{ElAl}}{{Ej{h{dc}}}{{Bf{Fd}}}{}}0{Ej{{Bf{fFf}}}}0{{}Fh}{{}b}{{}Ef}{{}Cd}{{{h{Fj}}}{{h{c}}}{}}{{{h{f}}j}{{Fl{Bb}}}}`{{{h{f}}Af}{{Fl{{C`{jBb}}}}}}`{{Fhj{Fl{c}}}FhEl}``{{{h{f}}j}Fn}{c{{Bf{b}}}G`}{c{{Bf{j}}}G`}{c{{Bf{E`}}}G`}{c{{Bf{Ef}}}G`}{{{h{b}}{h{b}}}Gb}{{{h{j}}{h{j}}}Gb}{{{h{E`}}{h{E`}}}Gb}{{{h{Eb}}{h{Eb}}}Gb}{{{h{Ed}}{h{Ed}}}Gb}{{{h{Ef}}{h{Ef}}}Gb}{{{h{{Gd{c}}}}{h{{Gd{c}}}}}GbGf}{{{h{Fj}}{h{Fj}}}Gb}{{{h{Gh}}{h{Gh}}}Gb}{{{h{Gj}}{h{Gj}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}00000000000``{FhFh}`{{{h{f}}{h{dGl}}Gn}{{Bf{GbH`}}}}{{{h{b}}{h{dHb}}}{{Bf{AbHd}}}}0{{{h{j}}{h{dHb}}}Hf}{{{h{E`}}{h{dHb}}}Hf}{{{h{Eb}}{h{dHb}}}Hf}{{{h{Ed}}{h{dHb}}}Hf}{{{h{Ef}}{h{dHb}}}Hf}{{{h{{Gd{c}}}}{h{dHb}}}HfHh}{{{h{{Gd{c}}}}{h{dHb}}}HfHj}{{{h{{Hl{c}}}}{h{dHb}}}HfHh}{{{h{{Hl{c}}}}{h{dHb}}}HfHj}{{{h{f}}{h{dHb}}}Hf}{{{h{Cd}}{h{dHb}}}Hf}{{{h{Fj}}{h{dHb}}}Hf}0{{{h{Gh}}{h{dHb}}}Hf}0{{{h{Gj}}{h{dHb}}}Hf}{{{h{Hn}}{h{dHb}}}Hf}0`{cc{}}0000000{I`Ef}{{{Id{ClIb}}}Ef}{IbEf}{{{If{Cl}}}Ef}4{Gj{{Gd{c}}}{}}55{IhCd}{{{Ij{j}}}Cd}77{GjGh}888{{{h{F`}}}{{Il{Ef}}}}{{EjIn}Ej}{{FhIn}Fh}{{{h{f}}E`{Fl{J`}}Gb}{{Bf{JbJd}}}}{{{h{f}}j}{{A`{Jf}}}}{{{h{f}}D`}{{Fl{{Jh{{A`{Bl}}Cl}}}}}}{{{h{f}}Jj}{{Fl{E`}}}}`{{{h{j}}{h{dc}}}AbJl}{{{h{E`}}{h{dc}}}AbJl}```{{{h{df}}Bh}{{Bf{GbJn}}}}{{{h{df}}Bl}Gb}{{{h{df}}JjK`}Ab}{ce{}{}}000000000000000{{{h{Kb}}{h{Kd}}}Gb}{{{h{Ef}}}Gb}{{{h{f}}Af}Gb}```{{{h{f}}}{{`{{Aj{}{{Ad{{C`{j{h{Kf}}}}}}}}}}}}{{EjjKh}Ej}{{FhjKh}Fh}``{{{h{f}}}Kj}{{{h{f}}}{{`{{Aj{}{{Ad{E`}}}}}}}}0{{{h{f}}j}{{`{{Kl{}{{Ad{Fj}}}}}}}}{{}Fh}{{{h{dF`}}c}{{Bf{{Fl{f}}e}}}{}{}}{{{h{d{Fb{Ef}}}}c}{{Bf{{Fl{f}}e}}}{}{}}{{{h{dEn}}c}{{Bf{{Fl{f}}e}}}{}{}}{{Fh{h{dc}}}{{Bf{{Fl{Fd}}}}}{}}0{{FhEf}{{Bf{{Fl{f}}Gh}}}}{{EfFh}{{Bf{{Fl{f}}Gh}}}}{{{h{f}}}{{h{Kn}}}}`{{EjBb}Ej}{{FhBb}Fh}{{{h{df}}jBb}Gb}{{{h{dEf}}Ef}Ab}`{{EjL`}Ej}{{FhL`}Fh}{{{h{f}}}L`}`{{cc}EjEl}?{cEjEl}{{{h{f}}j}Bb}{{{h{df}}j}Fj}{{{h{Ed}}}Jj}`{{{h{j}}{h{j}}}{{Fl{Eh}}}}{{{h{f}}jBb}Fj}{{{h{d{Fb{Ef}}}}{h{c}}}{{Bf{Abe}}}{}{}}{{{h{dF`}}{h{c}}}{{Bf{Abe}}}{}{}}{{{h{dEn}}{h{c}}}{{Bf{Abe}}}{}{}}{{{h{Ef}}{h{F`}}}{{Il{Ab}}}}{{{h{f}}j}{{Bf{{Fl{Lb}}Ff}}}}`{{{h{f}}j}{{h{Kf}}}}{{{h{df}}jBb}{{`{{Aj{}{{Ad{Fj}}}}}}}}:```{{{h{f}}}{{h{{Lf{Ld}}}}}}{{{h{f}}{h{Bl}}}{{C`{DhDh}}}}{{{h{Ed}}}{{Fl{Lh}}}}``{{{h{b}}c}BfLj}{{{h{j}}c}BfLj}{{{h{E`}}c}BfLj}{{{h{Ef}}c}BfLj}{{{h{df}}jKh}Ab}{{{h{df}}c}Ab{{Cb{}{{Ad{{C`{jKh}}}}}}}}{{{h{f}}{h{dGl}}Gn}{{Bf{GbH`}}}}```{{{h{f}}}{{h{{Ll{j}}}}}}{{{h{f}}}{{Fl{{h{Ef}}}}}}{{{h{df}}}{{h{dc}}}{}}{{{h{f}}}{{Ln{j}}}}{{{h{f}}}{{M`{{C`{jBb}}}}}}{{{h{df}}}{{Fl{Ef}}}}``{{{h{c}}}e{}{}}000000{{{h{c}}}Fn{}}00000{{{h{b}}}Dh}{{{h{f}}}{{`{{Aj{}{{Ad{{Jh{{A`{Bl}}Cl}}}}}}}}}}``1`{c{{Bf{e}}}{}{}}0000000000000000000000000000000`{{{h{f}}}{{h{{Cn{Cl}}}}}}`{{{h{Ed}}}{{h{K`}}}}`{{{h{c}}}Mb{}}000000000000000{{{h{f}}j}{{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}{{{h{f}}}{{`{{Aj{}{{Ad{{Md{{A`{Bl}}Cl}}}}}}}}}}{{{h{df}}jBb}Gb}``{{}{{h{Mf}}}}{ce{}{}}000000000000000{{c{Fl{c}}L`{h{{Lf{Ld}}}}}{{Bf{FnFf}}}El}`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{dc}}}{{h{de}}}{}{}}00000{{{h{Mh}}}Mh}{{{h{Mj}}}Mj}{{{h{Ml}}}Ml}{{{h{c}}{h{de}}}Ab{}{}}00{{{h{Mn}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{{h{Mh}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{{h{Mj}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{{h{Ml}}{N`{Eb}}{N`{Eb}}DlBn{h{Kd}}}{{Bf{NbNd}}}}{{BnDl{h{Kd}}}Nf}{{}Mh}{{}Mj}{{}Ml}``{{{h{Nd}}{h{dHb}}}Hf}0{{{h{Nf}}{h{dHb}}}Hf}{{{h{Nb}}{h{dHb}}}Hf}{{{h{Mh}}{h{dHb}}}Hf}{{{h{Mj}}{h{dHb}}}Hf}{{{h{Ml}}{h{dHb}}}Hf}{cc{}}00000{ce{}{}}00000{{{h{Nb}}}Bn}{BnMl}`1{{{h{c}}}e{}{}}00{{{h{c}}}Fn{}}{c{{Bf{e}}}{}{}}00000000000{{{h{c}}}Mb{}}00000666666`````````````````````````````````````````````{{{h{{Nh{c}}}}L`}{{Bf{NjNl}}}{NnO`}}{{}Ob}0{{{h{{Od{ce}}}}}{{h{{Of{ce}}}}}NnOh}{{{h{{h{{Od{ce}}}}}}}{{Oj{{h{{Od{ce}}}}}}}NnOh}{{{h{{Nh{Ol}}}}Bb}{{Bf{{Nh{On}}A@`}}}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{dc}}}{{h{de}}}{}{}}000{{{h{{Od{ce}}}}}{{N`{{h{{Od{ce}}}}}}}NnOh}{{{h{{Od{ce}}}}{h{g}}}{{A@d{{A@b{c}}}}}{O`Nn}Oh{{A@f{c}}}}0`{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Od{cAAn}}}}}{{Bf{AbA@j}}}Nn}{{{h{{Od{cAB`}}}}}{{Bf{AbA@j}}}Nn}2022102102{{{h{c}}}{{Bf{AbA@j}}}Nn}00{{{h{{Of{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Of{cAAn}}}}}{{Bf{AbA@j}}}Nn}{{{h{{Of{cAB`}}}}}{{Bf{AbA@j}}}Nn}{{{h{{Cj{{N`{Ch}}}}}}}{{Bf{AbA@j}}}}00`{{{h{{Nh{c}}}}}{{Nh{c}}}{AlNn}}{{{h{AAn}}}AAn}{{{h{AB`}}}AB`}{{{h{{Od{ce}}}}}{{Od{ce}}}{AlNn}{AlOh}}{{{h{c}}{h{de}}}Ab{}{}}000{{{h{{Nh{c}}}}{h{{Nh{c}}}}}Eh{ABbNn}}{{{h{AAn}}{h{AAn}}}Eh}{{{h{AB`}}{h{AB`}}}Eh}{{{h{{Od{ce}}}}{h{{Od{ce}}}}}EhNnOh}{{{h{{Od{ce}}}}}GbNnOh}{{{h{{Nh{Ol}}}}Bb}{{Bf{{Nh{On}}A@`}}}}{{{h{{Nh{Ol}}}}{h{{Lf{c}}}}Bb}{{Bf{{Nh{ABd}}A@`}}}ABf}{{{h{{Nh{On}}}}{h{{Lf{c}}}}}{{Bf{{Nh{ABd}}A@`}}}ABf}{{{h{{Nh{c}}}}}ABhNn}{{{h{{Nh{Ol}}}}}ABj}{c{{Bf{{Nh{e}}}}}G`ABl}{c{{Bf{{Od{eg}}}}}G`ABlOh}{{{h{{Nh{Ol}}}}}Bn}{{{h{{Od{ce}}}}}Af{O`Nn}Oh}{{{h{{Nh{c}}}}{h{{Nh{c}}}}}Gb{GfNn}}{{{h{AAn}}{h{AAn}}}Gb}{{{h{AB`}}{h{AB`}}}Gb}{{{h{{Od{ce}}}}{h{{Od{ce}}}}}GbNnOh}{{{h{c}}{h{e}}}Gb{}{}}0000000`{{{h{{Nh{c}}}}}{{Bf{AfNl}}}{NnO`}}`{{{h{{Od{ce}}}}{h{ABn}}}{{Bf{AbAC`}}}NnOh}{{{h{ACb}}{h{Jf}}ACd{h{{Lf{Ld}}}}}{{Bf{{Fl{Lb}}Ff}}}}{{{h{{Nh{Ol}}}}{h{Jf}}ACd{h{{Lf{Ld}}}}}{{Bf{{Fl{Lb}}Ff}}}}{{{h{{Od{Olc}}}}{h{Jf}}ACd{h{{Lf{Ld}}}}}{{Bf{{Fl{Lb}}Ff}}}Oh}{{{h{{Nh{Ol}}}}{h{{Lf{c}}}}{h{Kd}}{ACf{Bb}}}{{Bf{{Fl{{C`{Bb{Nh{ABd}}}}}}A@`}}}ABf}{{{h{{Nh{c}}}}{h{dHb}}}{{Bf{AbHd}}}Nn}0{{{h{AAn}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{AB`}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{{Od{ce}}}}{h{dHb}}}{{Bf{AbHd}}}NnOh}0{{{h{{Nh{c}}}}e}GbNn{{ACj{{h{c}}}{{ACh{Gb}}}}}}{{{h{{Od{ce}}}}g}GbNnOh{{ACj{{h{c}}}{{ACh{Gb}}}}}}{{{ACl{c}}}{{Nh{c}}}Nn}{{{ACn{c}}}{{Nh{c}}}Nn}{{{AD`{c}}}{{Nh{c}}}Nn}{{{ADb{c}}}{{Nh{c}}}Nn}{{{ADd{c}}}{{Nh{c}}}Nn}{cc{}}{{{ADf{c}}}{{Nh{c}}}Nn}111{{{Of{ce}}}{{Bf{{Od{ce}}Nl}}}NnOh}{{{Of{ce}}ADhADj}{{Od{ce}}}NnOh}{{{h{Mf}}}{{Bf{{Nh{c}}Nl}}}ABl}{{{h{Mf}}}{{Bf{{Od{ce}}Nl}}}ABlOh}{{{h{Mf}}{h{ABn}}}{{Bf{{Od{ce}}Nl}}}ABlOh}1{{{h{ADl}}}{{Bf{{Nh{c}}Nl}}}ABl}{{{h{ADl}}}{{Bf{{Od{ce}}Nl}}}ABlOh}{{{h{{Od{ce}}}}ADn}{{Fl{{h{{Od{ce}}}}}}}NnOh}{{{h{{Od{ce}}}}ADn}{{Fl{c}}}NnOh}{{{h{{Nh{c}}}}e}{{Bf{{C`{{N`{{N`{Ch}}}}Af}}Nl}}}{NnO`}{{AE`{c}}}}0{{{h{{Od{ce}}}}}GbNnOh}0{{{h{{Nh{Ol}}}}}Gb}{{{h{{Nh{c}}}}{h{de}}}Ab{AEbNn}Jl}{{{h{AAn}}{h{dc}}}AbJl}{{{h{AB`}}{h{dc}}}AbJl}{{{h{{Od{ce}}}}{h{dg}}}AbNnOhJl}{ce{}{}}000{{{Od{ce}}}{{Of{ce}}}NnOh}{{{Nh{Ol}}}{{Bf{{N`{{Nh{Ol}}}}Nl}}}}{{El{h{{Lf{Ld}}}}L`}{{Bf{{C`{KfKh}}Ff}}}}{{Kf{h{{Lf{Ld}}}}L`}{{Bf{{C`{KfKh}}Ff}}}}99:{{{h{{Od{ce}}}}}{{AEd{ce}}}NnOh}{{{h{{Od{ce}}}}}{{AEf{ce}}}NnOh}{{{h{{Nh{c}}}}}{{Bf{{AEh{c}}Nl}}}Nn}{{{h{{Od{ce}}}}}{{Bf{{AEh{c}}Nl}}}NnOh}{{{h{{Od{ce}}}}}{{Bf{AbAEj}}}NnOh}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Fl{ADn}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Od{cAAn}}}}}{{Fl{ADn}}}Nn}{{{h{{Od{cAB`}}}}}{{Fl{ADn}}}Nn}{{{h{{Od{ce}}}}}{{Bf{ADnNl}}}NnOh}{{{h{{Nh{c}}}}}{{Bf{ADnNl}}}Nn}1{{{h{{Nh{c}}}}}{{Bf{AElNl}}}Nn}{{}{{h{Mf}}}}00{{{Od{cAEn}}}{{Bf{{Nh{c}}Nl}}}Nn}{c{{Nh{c}}}Nn}{c{{Bf{{Nh{c}}Nl}}}Nn}{{{Od{cAAn}}}{{Bf{{Nh{c}}Nl}}}Nn}{{ADn{N`{c}}}{{Bf{{Nh{c}}Nl}}}Nn}{{{ACl{c}}}{{Nh{c}}}Nn}{{{AD`{c}}}{{Nh{c}}}Nn}4{{{Od{cAB`}}}{{Bf{{Nh{c}}Nl}}}Nn}3{{c{Fl{{AF`{c}}}}}{{Bf{{Nh{c}}Nl}}}Nn}614`{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{Kd}}}{{Bf{{Od{c}}Nl}}}Oh}{{{h{{Lf{c}}}}{h{Mf}}}{{Bf{{C`{{Nh{Ol}}{An{OlAFb}}}}Nl}}}AFd}1{{{h{Kd}}{h{ABn}}}{{Bf{{Od{c}}Nl}}}Oh}{{{h{{Nh{c}}}}{h{{Nh{c}}}}}{{Fl{Eh}}}{AFfNn}}{{{h{AAn}}{h{AAn}}}{{Fl{Eh}}}}{{{h{AB`}}{h{AB`}}}{{Fl{Eh}}}}{{{h{{Od{ce}}}}{h{{Od{ce}}}}}{{Fl{Eh}}}NnOh}{{{h{c}}}ADnNn}00{{{Nh{On}}{h{c}}}{{Bf{AFh{Nh{On}}}}}{{A@f{On}}}}0`{{{h{{Od{ce}}}}}GbNnOh}{{{h{{Nh{c}}}}}{{Bf{AbNl}}}Nn}{{{h{{Od{ce}}}}}{{Bf{AbAC`}}}NnOh}{{{h{{Nh{c}}}}{h{dAFj}}e}{{Bf{AbNl}}}{NnO`}{{AE`{c}}}}{{{h{{Od{ce}}}}g}{{Bf{{N`{{N`{Ch}}}}Nl}}}{O`Nn}Oh{{AE`{c}}}}0{{{h{{Nh{c}}}}}{{Bf{AfNl}}}{NnO`}}{{{h{{Nh{c}}}}}Af{NnO`}}{{{h{{Od{ce}}}}}ADnNnOh}{{{h{{Nh{c}}}}e}BfNnLj}{{{h{{Od{ce}}}}g}BfNnOhLj}{{}AFl}00{{{h{{Od{ce}}}}{h{{An{AAjc}}}}}{{Od{ce}}}NnOh}`{{{h{c}}}e{}{}}000{{{h{c}}}Fn{}}0{{{h{{Nh{Ol}}}}{h{{An{OlAFb}}}}}Fn}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}0{{{h{{Nh{c}}}}{h{di}}}{{Bf{{AFn{g}}}}}NnNn{}{{AG`{ceg}}}}{{{h{{Od{ce}}}}{h{dk}}}{{Bf{{AFn{i}}}}}NnOhNn{}{{AG`{cgi}}}}{c{{Bf{e}}}{}{}}0000000`{{{h{c}}}Mb{}}000={ce{}{}}000{{{h{{Od{ce}}}}}GbNnOh}{{{h{Mf}}}{{Bf{FnFf}}}}``````````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{Ff}}{h{Ff}}}Gb}{{{h{Ff}}{h{dHb}}}Hf}0{AGbFf}{AGdFf}{AGfFf}{NlFf}{cc{}}{AGhFf}{AGjFf}{AGlFf}>{{{h{c}}}Fn{}}{c{{Bf{e}}}{}{}}0{{{h{c}}}Mb{}}{ce{}{}}```````````````````````````````````???????>>>>>>>{{{h{AGn}}}AGn}{{{h{AH`}}}AH`}{{{h{AHb}}}AHb}{{{h{Lb}}}Lb}{{{h{AHd}}}AHd}{{{h{ACd}}}ACd}{{{h{c}}{h{de}}}Ab{}{}}00000``{{}AHd}{{{h{AGn}}{h{AGn}}}Gb}{{{h{AH`}}{h{AH`}}}Gb}{{{h{AHb}}{h{AHb}}}Gb}{{{h{Lb}}{h{Lb}}}Gb}{{{h{AHd}}{h{AHd}}}Gb}{{{h{AGb}}{h{AGb}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}00000000000{{{h{AGn}}{h{dHb}}}Hf}{{{h{AH`}}{h{dHb}}}Hf}{{{h{AHb}}{h{dHb}}}Hf}{{{h{Lb}}{h{dHb}}}Hf}{{{h{AHd}}{h{dHb}}}Hf}{{{h{AGb}}{h{dHb}}}Hf}0{{{h{ACd}}{h{dHb}}}Hf}{cc{}}00{GbAHb}1{AH`Lb}222{{{h{Lb}}{h{{An{Fn{N`{ADn}}}}}}}{{Bf{AHdAGb}}}}{{{h{AGn}}{h{dc}}}AbJl}{{{h{AHd}}{h{dc}}}AbJl}{{{h{AH`}}}Fn}`{ce{}{}}000000{{{h{AH`}}}Gb}{{{h{AHb}}}Gb}{{{h{AHd}}}Gb}`{{{h{AHd}}{h{AHd}}}{{Fl{Eh}}}}{{{h{Lb}}}Gb}`{{{h{AGn}}c}BfLj}{{{h{AH`}}c}BfLj}{{{h{AHb}}c}BfLj}{{{h{Lb}}c}BfLj}{{{h{AHd}}c}BfLj}`{{{h{c}}}e{}{}}00000{{{h{c}}}Fn{}}{c{{Bf{e}}}{}{}}0000000000000{{{h{c}}}Mb{}}000000>>>>>>>``````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{dc}}}{{h{de}}}{}{}}00000000000{{AHfL`}{{Bf{AHhFf}}}}{{{AHj{c}}L`}{{Bf{AHhFf}}}{{AHl{AAn}}}}{{{AHn{c}}L`}{{Bf{AHhFf}}}{{AHl{AB`}}}}{{{AI`{c}}L`}{{Bf{AHhFf}}}{{AHl{AB`}}}}{{{AIb{c}}L`}{{Bf{AHhFf}}}{{AHl{AId}}}}{{{AIf{c}}L`}{{Bf{AHhFf}}}{{AIh{AAn}}}}{{{AIj{c}}L`}{{Bf{AHhFf}}}{{AIh{AAn}}}}{{{AIl{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AIn{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AJ`{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AJb{c}}L`}{{Bf{AHhFf}}}{{AIh{AB`}}}}{{{AJd{c}}L`}{{Bf{AHhFf}}}{{AIh{AId}}}}{{{AJf{c}}L`}{{Bf{AHhFf}}}{{AIh{AId}}}}{{{h{{AHj{c}}}}}{{AHj{c}}}{Al{AHl{AAn}}}}{{{h{{AHn{c}}}}}{{AHn{c}}}{Al{AHl{AB`}}}}{{{h{{AI`{c}}}}}{{AI`{c}}}{Al{AHl{AB`}}}}{{{h{{AIb{c}}}}}{{AIb{c}}}{Al{AHl{AId}}}}{{{h{{AIf{c}}}}}{{AIf{c}}}{Al{AIh{AAn}}}}{{{h{{AIj{c}}}}}{{AIj{c}}}{Al{AIh{AAn}}}}{{{h{{AIl{c}}}}}{{AIl{c}}}{Al{AIh{AB`}}}}{{{h{{AIn{c}}}}}{{AIn{c}}}{Al{AIh{AB`}}}}{{{h{{AJ`{c}}}}}{{AJ`{c}}}{Al{AIh{AB`}}}}{{{h{{AJb{c}}}}}{{AJb{c}}}{Al{AIh{AB`}}}}{{{h{{AJd{c}}}}}{{AJd{c}}}{Al{AIh{AId}}}}{{{h{{AJf{c}}}}}{{AJf{c}}}{Al{AIh{AId}}}}{{{h{c}}{h{de}}}Ab{}{}}00000000000{{{h{{AHj{c}}}}{h{dHb}}}Hf{Hj{AHl{AAn}}}}{{{h{{AHn{c}}}}{h{dHb}}}Hf{Hj{AHl{AB`}}}}{{{h{{AI`{c}}}}{h{dHb}}}Hf{Hj{AHl{AB`}}}}{{{h{{AIb{c}}}}{h{dHb}}}Hf{Hj{AHl{AId}}}}{{{h{{AIf{c}}}}{h{dHb}}}Hf{Hj{AIh{AAn}}}}{{{h{{AIj{c}}}}{h{dHb}}}Hf{Hj{AIh{AAn}}}}{{{h{{AIl{c}}}}{h{dHb}}}Hf{Hj{AIh{AB`}}}}{{{h{{AIn{c}}}}{h{dHb}}}Hf{Hj{AIh{AB`}}}}{{{h{{AJ`{c}}}}{h{dHb}}}Hf{Hj{AIh{AB`}}}}{{{h{{AJb{c}}}}{h{dHb}}}Hf{Hj{AIh{AB`}}}}{{{h{{AJd{c}}}}{h{dHb}}}Hf{Hj{AIh{AId}}}}{{{h{{AJf{c}}}}{h{dHb}}}Hf{Hj{AIh{AId}}}}{cc{}}00000000000{ce{}{}}00000000000{{AHh{h{{Lf{Ld}}}}L`}{{Bf{{C`{KfKh}}Ff}}}}{{c{h{{Lf{Ld}}}}L`}{{Bf{{C`{{Nh{Ol}}{An{OlAFb}}}}Ff}}}{}}00000000000{{{h{c}}}e{}{}}00000000000{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Mb{}}00000000000555555555555``````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{dc}}}{{h{de}}}{}{}}00{{{h{AJh}}}AJh}{{{h{c}}{h{de}}}Ab{}{}}{{{h{AJh}}{h{dHb}}}Hf}0{{{h{Jd}}{h{dHb}}}Hf}0{{{h{Df}}{h{dHb}}}Hf}0={AJjJd}{AJhJd}{FfJd}{NdJd}{cc{}}{AGbJd}1{ce{}{}}00{{{h{c}}}e{}{}}{{{h{c}}}Fn{}}00{c{{Bf{e}}}{}{}}00000{{{h{c}}}Mb{}}00444``````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{AJl}}}{{Fl{Fn}}}}{{{h{AJl}}}Fn}{c{{Bf{AJl}}}G`}{{{h{f}}{h{Mf}}Gb}{{Bf{AJl{h{Mf}}}}}}{{{h{AJl}}{h{dHb}}}Hf}0={{{h{Mf}}}{{Bf{AJlc}}}{}}<``{{{h{AJl}}c}BfLj};::9=```````````````````````````````````````````{{}AJn}{{}Ob}{{OlBb}{{Bf{OnA@`}}}};;;;;;;;;;;;::::::::::::{{{h{{AK`{ce}}}}{h{g}}}{{A@d{{A@b{c}}}}}{O`Nn}Oh{{A@f{c}}}}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}00000{{{h{c}}}{{Bf{AbA@j}}}Nn}{{{h{{Of{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbA@j}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{h{{Cj{{N`{Ch}}}}}}}{{Bf{AbA@j}}}}{{{h{{AKb{ce}}}}}{{AKb{ce}}}AlOh}{{{h{Ob}}}Ob}{{{h{AKd}}}AKd}{{{h{{AK`{ce}}}}}{{AK`{ce}}}{AlNn}{AlOh}}{{{h{Ol}}}Ol}{{{h{AFb}}}AFb}{{{h{AKf}}}AKf}{{{h{AKh}}}AKh}{{{h{AKj}}}AKj}{{{h{c}}{h{de}}}Ab{}{}}00000000{{{h{{AK`{ce}}}}{h{{AK`{ce}}}}}Eh{ABbNn}{ABbOh}}{{{h{Ol}}{h{Ol}}}Eh}{{{h{AKf}}{h{AKf}}}Eh}{{{h{AKj}}{h{AKj}}}Eh}`{{}AKd}{{{h{{AKb{ce}}}}}{{h{g}}}{}Oh{}}{{OlBb}{{Bf{OnA@`}}}}{c{{Bf{Ol}}}G`}{{{h{{AK`{ce}}}}}Af{O`Nn}Oh}{{{h{Ob}}{h{Ob}}}Gb}{{{h{AGl}}{h{AGl}}}Gb}{{{h{{AK`{ce}}}}{h{{AK`{ce}}}}}Gb{GfNn}{GfOh}}{{{h{Ol}}{h{Ol}}}Gb}{{{h{AFb}}{h{AFb}}}Gb}{{{h{AKf}}{h{AKf}}}Gb}{{{h{AKh}}{h{AKh}}}Gb}{{{h{AKj}}{h{AKj}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}0000000000000{{{h{{AKl{c}}}}{h{dHb}}}Hf{HjOh}}{{{h{Ob}}{h{dHb}}}Hf}{{{h{AKd}}{h{dHb}}}Hf}{{{h{AGl}}{h{dHb}}}Hf}0{{{h{{AK`{ce}}}}{h{dHb}}}{{Bf{AbHd}}}NnOh}0{{{h{Ol}}{h{dHb}}}{{Bf{AbHd}}}}0{{{h{AFb}}{h{dHb}}}{{Bf{AbHd}}}}0{{{h{AKf}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{AKh}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{AKj}}{h{dHb}}}{{Bf{AbHd}}}}{{{h{{AK`{ce}}}}g}GbNnOh{{ACj{{h{c}}}{{ACh{Gb}}}}}}{AKn{{AL`{c}}}Oh}{ALb{{AL`{c}}}Oh}{cc{}}0000{AGhAGl}{NlAGl}222{OnOl}3333{{OlAJn}{{AKl{c}}}Oh}{{AFbAJn}{{AKl{c}}}Oh}{{{h{Mf}}}{{Bf{Ol}}}}{{{h{Mf}}}{{Bf{AFb}}}}{{{h{ADl}}}{{Bf{{AK`{ce}}Nl}}}{ALdNn}Oh}{{{h{Ol}}}{{Fl{ALf}}}}{{{h{Ol}}}{{N`{ALf}}}}{c{{Bf{{AKb{{ALn{}{{ALh{e}}{ALj{c}}{ALl{g}}}}i}}g}}}{}{{AM`{{Cj{Ch}}}}AMb}HjOh}{{}{{Bf{{AKb{AMdc}}e}}}Oh{}}{{{h{dc}}}{{Bf{{AKb{AMde}}g}}}{AMfAMh}Oh{}}{{c{h{de}}}{{Bf{{AKb{{ALn{}{{ALh{g}}{ALj{c}}{ALl{i}}}}k}}i}}}{}{AMfAMh}{{AM`{{Cj{Ch}}}}AMb}HjOh}{{ce}{{Bf{{AKb{{ALn{}{{ALh{e}}{ALj{c}}{ALl{g}}}}i}}g}}}{}{{AM`{{Cj{Ch}}}}AMb}HjOh}{c{{Bf{{AKb{AMde}}g}}}{}Oh{}}{{{h{{AL`{c}}}}}GbOh}{{{h{Ol}}}Gb}{{{h{{AK`{ce}}}}{h{dg}}}Ab{AEbNn}{AEbOh}Jl}{{{h{Ol}}{h{dc}}}AbJl}{{{h{AKf}}{h{dc}}}AbJl}{{{h{AKj}}{h{dc}}}AbJl}{ce{}{}}00000000000{OlAMj}{AHl{{Bf{{AKl{c}}AGl}}}Oh}{{AIh{Fl{AMl}}ALf}{{Bf{{AKl{c}}AGl}}}Oh}{{{AKb{ec}}}{{Bf{{AKl{c}}AGl}}}Oh{{AHl{c}}}}{{{AKb{ec}}{Fl{AMl}}ALf}{{Bf{{AKl{c}}AGl}}}Oh{{AIh{c}}}}{{{AKl{c}}}{{Bf{{AKl{c}}AGl}}}Oh}{Ol{{Bf{{AKl{c}}AGl}}}Oh}{AFb{{Bf{{AKl{c}}AGl}}}Oh}{AIh{{Bf{{AL`{c}}AGl}}}Oh}{{{AL`{c}}}{{Bf{{AL`{c}}AGl}}}Oh}{{{AKb{ec}}}{{Bf{{AL`{c}}AGl}}}Oh{{AIh{c}}}}{{{AKb{ce}}}c{}Oh}{Ol{{N`{Ol}}}}{AFb{{N`{AFb}}}}{{{AL`{c}}L`}{{Fl{AKn}}}Oh}{{{AL`{c}}L`{h{{Lf{e}}}}}ALbOhAFd}{{{h{Ol}}}Gb}{{}Gb}{{{h{Ob}}}Gb}2{{{h{AFb}}}Gb}212133{{{h{{AK`{ce}}}}}ADnNnOh}``{{{h{{AK`{ce}}}}}{{Bf{{AEh{c}}Nl}}}NnOh}{{}AJn}{{{h{Ol}}}AMn}{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Fl{ADn}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}44{{{h{AJn}}{h{AJn}}}AJn}5{{}{{h{Mf}}}}{{ADn{N`{c}}}{{Bf{{AK`{ce}}Nl}}}NnOh}{{{h{Ol}}}ADn}``{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}{{{AKl{c}}AJn}{{AKl{c}}}Oh}{{{h{{AK`{ce}}}}{h{{AK`{ce}}}}}{{Fl{Eh}}}{AFfNn}{AFfOh}}{{{h{Ol}}{h{Ol}}}{{Fl{Eh}}}}{{{h{AKf}}{h{AKf}}}{{Fl{Eh}}}}{{{h{AKj}}{h{AKj}}}{{Fl{Eh}}}}{{{h{c}}}ADnNn}{{{h{{AK`{ce}}}}}{{h{{Cj{c}}}}}NnOh}{{{h{{AK`{ce}}}}}{{Bf{AbNl}}}NnOh}{{{h{{AK`{ce}}}}g}{{Bf{{N`{{N`{Ch}}}}Nl}}}{O`Nn}Oh{{AE`{c}}}}{{{h{{AK`{ce}}}}}ADnNnOh}{{{h{Ol}}c}BfLj}{{}AFl}{{{h{{AK`{ce}}}}}{{Of{ce}}}{O`Nn}Oh}{{}AJn}{{{h{c}}}e{}{}}00000000{{{h{AFb}}{h{{Lf{c}}}}}{{Bf{OlAN`}}}AFd}{{{h{c}}}Fn{}}000{{{h{{Od{c{Oh{}{{A@h{e}}}}}}}}}{{Bf{AbNl}}}Nn{{AAl{}{{A@l{A@n}}{AA`{AAb}}{AAd{AAf}}{AAh{AAj}}}}NnNnNnNn}}0{{{h{{AK`{ce}}}}{h{dk}}}{{Bf{{AK`{ge}}{AFn{i}}}}}NnOhNn{}{{AG`{cgi}}}}{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Mb{}}00000000000{ce{}{}}00000000000`{{{h{ANb}}}{{Fl{Dh}}}}{{{h{ANb}}}{{Fl{Dl}}}}{{{h{ANb}}ADn}{{Fl{K`}}}}`{{{h{F`}}{h{Mf}}{h{{Cj{{h{{Cj{{h{Mf}}}}}}}}}}}{{Bf{AbANd}}}}````````````````````````````````````{{{h{dJf}}ANfl{A`{n}}}{{Fl{{A`{n}}}}}}``{{{h{Jf}}{h{{Lf{Ld}}}}}Kh}`{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{dc}}}{{h{de}}}{}{}}0000000{{Kh{h{{Nh{Ol}}}}{h{{Lf{Ld}}}}}Jf}{{{h{ANf}}}ANf}{{{h{ANh}}}ANh}{{{h{{ANj{c}}}}}{{ANj{c}}}{AlANlHjAl}}{{{h{l}}}l}{{{h{Jf}}}Jf}{{{h{Gn}}}Gn}{{{h{ANn}}}ANn}{{{h{c}}{h{de}}}Ab{}{}}000000{{{h{ANf}}{h{ANf}}}Eh}{{{h{l}}{h{l}}}Eh}{{}l}{{}Jf}{{}Gn}{{}ANn}{{{h{{ANj{c}}}}}{{h{e}}}{ANlHjAl}{}}{{{h{AO`}}}{{Fl{AFb}}}}0{{{h{{ANj{{AOb{AKn}}}}}}}{{Fl{AFb}}}}{{{h{{ANj{{AOd{AKn}}}}}}}{{Fl{AFb}}}}{{{h{{ANj{AOf}}}}}{{Fl{AFb}}}}{{{h{ANf}}{h{ANf}}}Gb}{{{h{ANh}}{h{ANh}}}Gb}{{{h{l}}{h{l}}}Gb}{{{h{ANn}}{h{ANn}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}0000000{{{h{Jf}}ANf}{{Fl{{h{{A`{n}}}}}}}}{{{h{ANf}}{h{dHb}}}Hf}{{{h{H`}}{h{dHb}}}Hf}0{{{h{ANh}}{h{dHb}}}Hf}{{{h{{ANj{c}}}}{h{dHb}}}Hf{HjANlHjAl}}{{{h{l}}{h{dHb}}}Hf}{{{h{Jf}}{h{dHb}}}Hf}{{{h{Gn}}{h{dHb}}}Hf}{{{h{ANn}}{h{dHb}}}Hf}{AMnANf}{AAjANf}{cc{}}0000000{{{h{ANf}}{h{dc}}}AbJl}{{{h{AO`}}{h{{Lf{Ld}}}}}ANf}{{{h{{ANj{{AOb{AKn}}}}}}{h{{Lf{Ld}}}}}ANf}{{{h{{ANj{{AOd{AKn}}}}}}{h{{Lf{Ld}}}}}ANf}{{{h{{ANj{AOf}}}}{h{{Lf{Ld}}}}}ANf}{{{h{Jf}}}{{N`{{h{ANf}}}}}}{ce{}{}}0000000{{cANh}{{ANj{c}}}{ANlHjAl}}{{}Jf}{{{h{ANf}}{h{ANf}}}{{Fl{Eh}}}}{{{h{l}}{h{l}}}{{Fl{Eh}}}}{{{h{dJf}}ANfl}{{Fl{{A`{n}}}}}}{{{h{AOh}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{{ANj{{AOb{AKn}}}}}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{{ANj{AOf}}}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{{ANj{{AOd{AKn}}}}}}{h{dGl}}ADn{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{n}}{h{dGl}}{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}}{{{h{c}}{h{dGl}}{h{Gn}}{h{{Lf{Ld}}}}}{{Bf{AbH`}}}{}}`{{{h{Jf}}}{{N`{{h{{A`{n}}}}}}}}`{{{h{c}}}e{}{}}000000{{{h{c}}}Fn{}}``{c{{Bf{e}}}{}{}}000000000000000{{{h{c}}}Mb{}}0000000{ce{}{}}0000000````````````````{{{h{d{Dd{c}}}}{h{e}}}{{h{d{Dd{c}}}}}{}{{AOl{AOj}}}}{{{h{d{Dd{c}}}}JjJbAEl}{{Bf{{h{d{Dd{c}}}}AOn}}}{}}{{{h{d{Dd{c}}}}JjJbAElLh}{{Bf{{h{d{Dd{c}}}}AOn}}}{}}{{{h{d{Dd{c}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}AfDh}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Jj}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Jj}{{Bf{{h{d{Dd{c}}}}B@`}}}{}}{{{h{d{Dd{c}}}}{h{{Cj{Jj}}}}}{{Bf{{h{d{Dd{c}}}}B@`}}}{}}{{{h{d{Dd{c}}}}Gb}{{h{d{Dd{c}}}}}{}}{{{h{c}}}{{h{e}}}{}{}}0000{{{h{dc}}}{{h{de}}}{}{}}0000{{{h{d{Dd{c}}}}B@b}{{h{d{Dd{c}}}}}{}}{{{h{{Dd{c}}}}}{{Dd{c}}}Al}{{{h{B@d}}}B@d}{{{h{B@b}}}B@b}{{{h{c}}{h{de}}}Ab{}{}}00{{{h{B@b}}{h{B@b}}}Eh}{{{Dd{c}}e}{{Dd{e}}}{}Mn}{{{h{d{Dd{c}}}}Bb}{{h{d{Dd{c}}}}}{}}{{}B@d}{{}B@b}{{{h{d{Dd{c}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Af}{{h{d{Dd{c}}}}}{}}11{{{h{d{Dd{c}}}}Lh}{{h{d{Dd{c}}}}}{}}{{{h{B@b}}{h{B@b}}}Gb}{{{h{c}}{h{e}}}Gb{}{}}0{{{h{d{Dd{c}}}}Dh}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}Dl}{{h{d{Dd{c}}}}}{}}{{{Dd{c}}}{{Bf{GlJd}}}Mn}{{{Dd{c}}{h{de}}}{{Bf{GlJd}}}MnAMh}{{{h{{Dd{c}}}}{h{dHb}}}HfHj}{{{h{B@`}}{h{dHb}}}Hf}0{{{h{AOn}}{h{dHb}}}Hf}0{{{h{B@d}}{h{dHb}}}Hf}{{{h{B@b}}{h{dHb}}}Hf}{cc{}}0000{{{h{B@b}}{h{dc}}}AbJl}?{ce{}{}}0000{{{h{d{Dd{c}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}B@f}{{h{d{Dd{c}}}}}{}}11{{{h{d{Dd{c}}}}B@d}{{h{d{Dd{c}}}}}{}}{{{h{B@b}}{h{B@b}}}{{Fl{Eh}}}}{{{h{d{Dd{c}}}}{An{Fn{N`{ADn}}}}j}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}{N`{{C`{AfDh}}}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}J`}{{h{d{Dd{c}}}}}{}}{{{h{B@d}}{h{dBl}}}Ab}{{{h{B@d}}{h{dBl}}{h{dc}}}AbAMh}{{{h{c}}}e{}{}}00{{{h{c}}}Fn{}}0{c{{Bf{e}}}{}{}}000000000{{{h{c}}}Mb{}}0000{{{h{d{Dd{c}}}}{N`{Jj}}}{{h{d{Dd{c}}}}}{}}{{{h{d{Dd{c}}}}B@h}{{h{d{Dd{c}}}}}{}}?????````","D":"G@f","p":[[5,"Balance",0,1937],[0,"mut"],[5,"Wallet",0,1938],[1,"reference"],[6,"KeychainKind",0,1939],[5,"SignerOrdering",1631,1940],[10,"TransactionSigner",1631,1940],[5,"Arc",1941],[1,"unit"],[17,"Item"],[5,"ScriptBuf",1942],[8,"Indexed",1943],[10,"Iterator",1944],[10,"Clone",1945],[5,"BTreeMap",1946],[5,"Block",1947],[1,"u32"],[5,"CannotConnectError",1948],[6,"Result",1949],[5,"BlockId",1950],[6,"ApplyHeaderError",1948],[5,"Transaction",1951],[1,"u64"],[1,"tuple"],[10,"IntoIterator",1952],[5,"Update",0,1938],[10,"Into",1953],[1,"u8"],[1,"slice"],[5,"ConfirmationBlockTime",1950],[5,"TxGraph",1954],[5,"Txid",1951],[8,"DefaultCoinSelectionAlgorithm",449,1955],[5,"TxBuilder",1818,1956],[6,"BuildFeeBumpError",1209,1957],[5,"Amount",1958],[6,"CalculateFeeError",1954],[5,"FeeRate",1959],[5,"CheckPointIter",1948],[5,"LocalOutput",0,1939],[5,"WeightedUtxo",0,1939],[6,"Utxo",0,1939],[5,"ChangeSet",0,1960],[6,"Ordering",1961],[5,"CreateParams",0,1962],[10,"IntoWalletDescriptor",548],[5,"Connection",1963],[5,"Transaction",1964],[5,"Store",1965],[8,"PersistedWallet",0,1966],[6,"Error",809],[5,"LoadParams",0,1962],[5,"AddressInfo",0,1938],[6,"Option",1967],[5,"String",1968],[10,"Deserializer",1969],[1,"bool"],[6,"LoadWithPersistError",0,1966],[10,"PartialEq",1961],[6,"LoadError",0,1938],[6,"LoadMismatch",0,1938],[5,"Psbt",1970],[5,"SignOptions",1631,1940],[6,"SignerError",1631,1940],[5,"Formatter",1971],[5,"Error",1971],[8,"Result",1971],[10,"Display",1971],[10,"Debug",1971],[6,"CreateWithPersistError",0,1966],[6,"ApplyBlockError",0,1938],[5,"ChangeSet",1948],[5,"ChangeSet",1972],[5,"ChangeSet",1973],[5,"ChangeSet",1954],[5,"SyncResult",1974],[5,"FullScanResult",1974],[8,"Result",1963],[5,"BlockHash",1947],[5,"PsbtSighashType",1975],[5,"Input",1975],[6,"CreateTxError",1209,1957],[5,"SignersContainer",1631,1940],[5,"CanonicalTx",1954],[5,"OutPoint",1951],[10,"Hasher",1976],[5,"AlterCheckPointError",1948],[5,"TxOut",1951],[10,"IsDust",0,1977],[5,"Script",1978],[8,"ExtendedDescriptor",548],[8,"KeyMap",1309,1979],[5,"CheckPoint",1948],[10,"DoubleEndedIterator",1980],[5,"LocalChain",1948],[6,"Network",1981],[5,"Policy",842],[6,"All",1982],[5,"Secp256k1",1983],[5,"Sequence",1951],[10,"Serializer",1984],[5,"KeychainTxOutIndex",1972],[5,"FullScanRequestBuilder",1974],[5,"SyncRequestBuilder",1974],[5,"TypeId",1985],[5,"TxNode",1954],[1,"str"],[5,"LargestFirstCoinSelection",449,1955],[5,"OldestFirstCoinSelection",449,1955],[5,"BranchAndBoundCoinSelection",449,1955],[10,"CoinSelectionAlgorithm",449,1955],[5,"Vec",1986],[5,"CoinSelectionResult",449,1955],[6,"Error",449,1955],[6,"Excess",449,1955],[6,"Descriptor",548,1979],[5,"Address",1987],[6,"Error",1988],[10,"MiniscriptKey",1988],[10,"ToPublicKey",1988],[6,"ScriptContextEnum",1309],[5,"Miniscript",548,1989],[6,"Terminal",1990],[10,"ScriptContext",1309,1991],[6,"Tree",1992],[6,"DescriptorPublicKey",1309,1993],[5,"DefiniteDescriptorKey",1993],[6,"ConversionError",1993],[6,"Placeholder",1994],[5,"Satisfaction",1994],[10,"AssetProvider",1995],[17,"Key"],[6,"ScriptContextError",1991],[17,"Sha256"],[5,"Hash",1996],[17,"Hash256"],[5,"Hash",1997],[17,"Ripemd160"],[5,"Hash",1998],[17,"Hash160"],[5,"Hash",1999],[10,"ParseableKey",1990],[6,"Legacy",548,1991],[6,"Segwitv0",548,1991],[10,"Ord",1961],[5,"PublicKey",2000],[10,"Verification",2001],[6,"DescriptorType",1979],[5,"DescriptorId",2002],[10,"FromStrKey",2003],[5,"ExtParams",2004],[6,"AnalysisError",2004],[10,"ExtractPolicy",548],[6,"BuildSatisfaction",842],[5,"Range",2005],[17,"Output"],[10,"FnMut",2006],[5,"Wpkh",2007],[5,"Tr",2008],[5,"Wsh",2007],[5,"Sh",2009],[5,"Pkh",2010],[5,"Bare",2010],[5,"Type",2011],[5,"ExtData",2012],[5,"Tree",2013],[1,"usize"],[10,"Satisfier",1994],[10,"Hash",1976],[5,"Iter",2014],[5,"PkIter",2014],[6,"Policy",2015],[6,"LiftError",2016],[5,"Weight",2017],[6,"BareCtx",1991],[6,"TapTree",2008],[6,"DescriptorSecretKey",1309,1993],[10,"Signing",2001],[10,"PartialOrd",1961],[5,"Plan",1995],[5,"TxIn",1951],[6,"SigType",1991],[6,"TranslateErr",1988],[10,"Translator",1988],[6,"PolicyError",842],[6,"Error",2018],[6,"ParsePublicKeyError",2000],[6,"Error",2019],[6,"HexToBytesError",2020],[6,"KeyError",1309],[6,"PkOrF",842],[6,"SatisfiableItem",842],[6,"Satisfaction",842],[5,"Condition",842],[10,"DescriptorTemplate",1025],[8,"DescriptorTemplateOut",1025],[5,"P2Pkh",1025],[10,"IntoDescriptorKey",1309],[5,"P2Wpkh_P2Sh",1025],[5,"P2Wpkh",1025],[5,"P2TR",1025],[6,"Tap",1991],[5,"Bip44",1025],[10,"DerivableKey",1309],[5,"Bip44Public",1025],[5,"Bip49",1025],[5,"Bip49Public",1025],[5,"Bip84",1025],[5,"Bip84Public",1025],[5,"Bip86",1025],[5,"Bip86Public",1025],[6,"MiniscriptPsbtError",1209,1957],[6,"Error",2021],[5,"FullyNodedExport",1286,2022],[8,"ValidNetworks",1309],[5,"SortedMultiVec",1309,2023],[5,"GeneratedKey",1309],[5,"PrivateKeyGenerateOptions",1309],[5,"SinglePub",1309,1993],[5,"SinglePriv",1309,1993],[6,"SinglePubKey",1309,1993],[6,"DescriptorKey",1309],[5,"Xpriv",2019],[6,"ExtendedKey",1309],[5,"Xpub",2019],[10,"FromStr",2024],[5,"DerivationPath",2019],[17,"Entropy"],[17,"Options"],[17,"Error"],[10,"GeneratableKey",1309],[10,"AsMut",1953],[10,"Default",2025],[10,"GeneratableDefaultOptions",1309],[10,"CryptoRng",2026],[10,"RngCore",2026],[5,"Assets",1995],[8,"KeySource",2019],[5,"Fingerprint",2019],[5,"DescriptorKeyParseError",1993],[10,"PsbtUtils",1625],[6,"Error",2027],[6,"SignerId",1631,1940],[6,"SignerContext",1631,1940],[5,"SignerWrapper",1631,1940],[10,"Sized",2028],[6,"TapLeavesOptions",1631,1940],[10,"SignerCommon",1631,1940],[5,"DescriptorXKey",1993],[5,"DescriptorMultiXKey",1993],[5,"PrivateKey",2000],[10,"InputSigner",1631,1940],[5,"PushBytes",2029],[10,"AsRef",1953],[6,"AddForeignUtxoError",1818,1956],[6,"AddUtxoError",1818,1956],[6,"ChangeSpendPolicy",1818,1956],[6,"TxOrdering",1818,1956],[6,"LockTime",2030],[1,"i32"],[15,"InvalidTxid",1933],[15,"UnexpectedConnectedToHash",435],[15,"Network",437],[15,"Genesis",437],[15,"Descriptor",437],[15,"Custom",1935],[15,"Foreign",446],[15,"InsufficientFunds",541],[15,"Change",543],[15,"NoChange",543],[8,"DerivedDescriptor",548],[15,"PsbtTimelocks",1001],[15,"Complete",1004],[15,"Partial",1004],[15,"PartialComplete",1004],[15,"Sha256Preimage",1015],[15,"Hash256Preimage",1015],[15,"Ripemd160Preimage",1015],[15,"Hash160Preimage",1015],[15,"Thresh",1015],[15,"Multisig",1015],[15,"AbsoluteTimelock",1015],[15,"RelativeTimelock",1015],[15,"RbfSequenceCsv",1280],[15,"LockTime",1280],[15,"FeeTooLow",1280],[15,"FeeRateTooLow",1280],[8,"WalletExport",1286],[10,"ExtScriptContext",1309],[15,"Tap",1817]],"r":[[0,1956],[1,1956],[2,1938],[3,1938],[4,1937],[8,1960],[9,1956],[10,1962],[11,1966],[19,548],[24,1977],[25,1939],[26,1938],[27,1938],[28,1962],[29,1966],[31,1939],[41,1966],[43,1940],[44,1956],[45,1956],[49,1938],[50,1939],[53,1938],[54,1939],[127,1938],[178,1938],[179,1938],[313,1943],[328,1938],[329,1938],[337,548],[389,1938],[432,1938],[451,1955],[453,1955],[454,1955],[455,1955],[456,1955],[457,1955],[459,1955],[461,1955],[484,1955],[552,1979],[554,1993],[561,1991],[562,1989],[567,842],[568,1991],[569,1991],[603,808],[1209,1957],[1212,1957],[1220,1957],[1286,2022],[1287,2022],[1312,1993],[1313,1993],[1328,1979],[1338,1991],[1343,1993],[1344,1993],[1345,1993],[1346,2023],[1629,2031],[1630,2031],[1638,1940],[1655,1940],[1656,1940],[1657,1940],[1658,1940],[1659,1940],[1660,1940],[1661,1940],[1662,1940],[1664,1940],[1665,1940],[1818,1956],[1819,1956],[1822,1956],[1829,1956],[1830,1956]],"b":[[130,"impl-Wallet"],[131,"impl-PersistWith%3CConnection%3E-for-Wallet"],[132,"impl-PersistWith%3CTransaction%3C\'c%3E%3E-for-Wallet"],[133,"impl-PersistWith%3CStore%3CChangeSet%3E%3E-for-Wallet"],[183,"impl-Display-for-Balance"],[184,"impl-Debug-for-Balance"],[190,"impl-Display-for-LoadWithPersistError%3CE%3E"],[191,"impl-Debug-for-LoadWithPersistError%3CE%3E"],[192,"impl-Display-for-CreateWithPersistError%3CE%3E"],[193,"impl-Debug-for-CreateWithPersistError%3CE%3E"],[196,"impl-Debug-for-AddressInfo"],[197,"impl-Display-for-AddressInfo"],[198,"impl-Display-for-LoadError"],[199,"impl-Debug-for-LoadError"],[201,"impl-Display-for-ApplyBlockError"],[202,"impl-Debug-for-ApplyBlockError"],[212,"impl-From%3CChangeSet%3E-for-ChangeSet"],[213,"impl-From%3CChangeSet%3CConfirmationBlockTime,+ChangeSet%3E%3E-for-ChangeSet"],[214,"impl-From%3CChangeSet%3E-for-ChangeSet"],[215,"impl-From%3CChangeSet%3CConfirmationBlockTime%3E%3E-for-ChangeSet"],[220,"impl-From%3CSyncResult%3E-for-Update"],[221,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[275,"impl-Wallet"],[276,"impl-PersistWith%3CTransaction%3C\'c%3E%3E-for-Wallet"],[277,"impl-PersistWith%3CStore%3CChangeSet%3E%3E-for-Wallet"],[278,"impl-PersistWith%3CConnection%3E-for-Wallet"],[303,"impl-PersistWith%3CStore%3CChangeSet%3E%3E-for-Wallet"],[304,"impl-PersistWith%3CTransaction%3C\'c%3E%3E-for-Wallet"],[305,"impl-PersistWith%3CConnection%3E-for-Wallet"],[331,"impl-Wallet"],[332,"impl-Staged-for-Wallet"],[490,"impl-Display-for-Error"],[491,"impl-Debug-for-Error"],[641,"impl-Descriptor%3CDescriptorPublicKey%3E"],[642,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[669,"impl-Display-for-Descriptor%3CPk%3E"],[670,"impl-Debug-for-Descriptor%3CPk%3E"],[673,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[674,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[677,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[678,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[679,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[680,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[681,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[683,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[826,"impl-Display-for-Error"],[827,"impl-Debug-for-Error"],[828,"impl-From%3CPolicyError%3E-for-Error"],[829,"impl-From%3CError%3E-for-Error"],[830,"impl-From%3CParsePublicKeyError%3E-for-Error"],[831,"impl-From%3CError%3E-for-Error"],[833,"impl-From%3CError%3E-for-Error"],[834,"impl-From%3CHexToBytesError%3E-for-Error"],[835,"impl-From%3CKeyError%3E-for-Error"],[929,"impl-Display-for-PolicyError"],[930,"impl-Debug-for-PolicyError"],[1247,"impl-Display-for-MiniscriptPsbtError"],[1248,"impl-Debug-for-MiniscriptPsbtError"],[1249,"impl-Debug-for-CreateTxError"],[1250,"impl-Display-for-CreateTxError"],[1251,"impl-Debug-for-BuildFeeBumpError"],[1252,"impl-Display-for-BuildFeeBumpError"],[1254,"impl-From%3CError%3E-for-CreateTxError"],[1255,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1256,"impl-From%3CError%3E-for-CreateTxError"],[1257,"impl-From%3CError%3E-for-CreateTxError"],[1259,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1296,"impl-Display-for-FullyNodedExport"],[1297,"impl-Debug-for-FullyNodedExport"],[1442,"impl-Display-for-KeyError"],[1443,"impl-Debug-for-KeyError"],[1444,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[1445,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[1446,"impl-Display-for-DescriptorPublicKey"],[1447,"impl-Debug-for-DescriptorPublicKey"],[1448,"impl-Display-for-DescriptorSecretKey"],[1449,"impl-Debug-for-DescriptorSecretKey"],[1454,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[1455,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[1461,"impl-From%3CError%3E-for-KeyError"],[1462,"impl-From%3CError%3E-for-KeyError"],[1505,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1506,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1712,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1713,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1714,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1729,"impl-Display-for-SignerError"],[1730,"impl-Debug-for-SignerError"],[1737,"impl-From%3CFingerprint%3E-for-SignerId"],[1738,"impl-From%3CHash%3E-for-SignerId"],[1749,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1750,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1751,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1767,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1768,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1769,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1877,"impl-Debug-for-AddUtxoError"],[1878,"impl-Display-for-AddUtxoError"],[1879,"impl-Display-for-AddForeignUtxoError"],[1880,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAAIECywLXAggFhwXvBQ==","e":"OzAAAAEAAA4EggAUAAAAOAAAAEMAAQBHACAAbQAAAHEADgCEAAIAjAAEAJkAGQC2AAAAuAATANUAAwDaAAAA3QABAOEAAADtAAEABgEAABUBAgAiAQAALgEAADABAgA5AQAAPwEFAEoBAABNAQAAUgENAGYBHwCLAQ8AoQEPAM8BEQDiAQIA5gECAOsBBgACAhsAKgIAADgCAABMAgEATwIAAFECBwBcAgAAXgIBAGECAABkAgEAZwIBAGsCAQBuAgEAcQIBAHQCCwCFAgMAigILAJsCAQCeAgwArAIAALICAAC/AgMAygIAANACAQDUAgEA2wIBAPECAwD2AgEABAMBAAcDAQALAwUAFgMHAB8DAwAkAwMAOAMIAEIDAgBGAwQAbgMZAIoDGgCoAwAAqgMAAK8DAQC+AwAAwQMEAMcDIgAQBBcAKQQvAHEESADYBA0A5wQDAOwEAADxBA8ACwUBAA8FAAARBQEAFAUAABgFBQBMBRcAbgUVAIUFAQCIBQAAigUmALYFAQC7BQAAwgUBAM8FAwDfBQAA4gUEAOgFAQD4BQEA/QUAAAcGAAAMBgMAFQYAABkGCAAjBgMAKgYvAIkGDwCaBhQAsQYOAMEGCgDUBgAA1gYCAOQGAQDoBgIA7AYAAPAGBwD6Bh8AMwcJAD4HBgBHBwEATgcCAFUHBgBhBwAAbQcAAHMHEwCJBwQA"}],\ ["example_bitcoind_rpc_polling",{"t":"PSSSSGPSPFGSPPNNNNHNNNNNNNNNNONNNNNNNNNNNNNNHNOOOHNNNNNNNNNNNNNNNONNNOO","n":["Block","CHANNEL_BOUND","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"],[69,"example_bitcoind_rpc_polling::RpcCommands"],[71,"clap::builder::command"],[72,"core::sync::atomic"],[73,"core::time"],[74,"core::fmt"],[75,"clap::parser::matches::arg_matches"],[76,"clap::error"],[77,"core::result"],[78,"anyhow"],[79,"bitcoincore_rpc::client"],[80,"alloc::sync"],[81,"core::any"]],"i":[10,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",71],[5,"AtomicBool",72],[1,"reference"],[5,"Duration",73],[1,"bool"],[0,"mut"],[5,"RpcArgs",0],[6,"RpcCommands",0],[1,"unit"],[6,"Emission",0],[5,"Formatter",74],[8,"Result",74],[5,"ArgMatches",75],[5,"Error",76],[6,"Result",77],[1,"str"],[8,"Result",78],[5,"Client",79],[5,"Arc",80],[5,"TypeId",81],[15,"Sync",69],[15,"Live",69]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADYACQAAAAEABAACAAkAAgAOAA8AHwACACUABAAtAAEAMgAPAEMABAA="}],\ -["example_cli",{"t":"PGFPPPFFGGPPPPFPPGIPPPPPPPPIPGPPPGEONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOENNNNNNNNNNNNNNNOHONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOHNNNNOOOOHNNNNNNNNNNNNNONOONHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOO","n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","ChangeInfo","ChangeSet","CoinSelectionAlgo","Commands","External","Extract","Generate","Index","Init","Init","Internal","Keychain","KeychainTxGraph","LargestFirst","List","List","New","New","NewestFirst","Next","OldestFirst","PlanUtxo","Psbt","PsbtCmd","Sign","SmallestFirst","TxOut","TxOutCmd","anyhow","args","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","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","change_descriptor","change_keychain","clap","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","create_tx","db","default","default","descriptor","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_arg_matches","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_arg_matches_mut","from_str","graph","handle_commands","has_subcommand","has_subcommand","has_subcommand","has_subcommand","index","index","indexer","indexer","init_or_load","into","into","into","into","into","into","into","into","into","into","into_app","into_app_for_update","is_empty","local_chain","merge","network","network","partial_cmp","planned_utxos","serialize","serialize","to_owned","to_owned","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_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","type_id","type_id","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","update_from_arg_matches_mut","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","vzip","vzip","change","addr_cmd","change_descriptor","descriptor","network","network","psbt_cmd","txout_cmd","address","after","chain_specific","coin_select","debug","descriptor","older","psbt","psbt","try_broadcast","value","confirmed","spent","unconfirmed","unspent"],"q":[[0,"example_cli"],[221,"example_cli::AddressCmd"],[222,"example_cli::Commands"],[229,"example_cli::PsbtCmd"],[240,"example_cli::TxOutCmd"],[244,"clap::builder::command"],[245,"core::clone"],[246,"clap::derive"],[247,"core::cmp"],[248,"miniscript::plan"],[249,"bitcoin::address"],[250,"bitcoin::psbt"],[251,"core::option"],[252,"anyhow"],[253,"bdk_chain::chain_oracle"],[254,"core::result"],[255,"serde::de"],[256,"core::fmt"],[257,"clap::parser::matches::arg_matches"],[258,"clap::error"],[259,"std::sync::mutex"],[260,"bdk_chain::local_chain"],[261,"bdk_file_store::store"],[262,"bitcoin::network"],[263,"bitcoin::blockdata::transaction"],[264,"core::ops::function"],[265,"alloc::vec"],[266,"serde::ser"],[267,"alloc::string"],[268,"core::any"]],"i":[5,0,0,5,13,5,0,0,0,0,12,11,5,9,0,5,12,0,0,13,9,10,9,11,13,9,13,0,5,0,11,13,5,0,0,45,33,33,5,9,10,11,5,9,10,11,45,4,33,5,9,10,11,12,13,21,45,4,33,5,9,10,11,12,13,21,45,4,21,0,4,5,9,10,11,12,13,4,5,9,10,11,12,13,12,33,0,45,4,13,4,4,12,4,12,12,12,12,4,5,9,10,11,12,12,13,13,21,45,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,13,45,0,5,9,10,11,16,21,4,21,0,45,4,33,5,9,10,11,12,13,21,33,33,4,4,4,45,4,12,0,4,12,4,5,9,10,11,12,13,12,13,45,4,33,5,9,10,11,12,13,21,45,4,33,5,9,10,11,12,13,21,4,45,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,45,4,33,5,9,10,11,12,13,21,51,52,53,53,53,54,55,56,57,57,58,57,57,59,57,59,58,58,57,60,60,60,60],"f":"````````````````````````````````````{bb}000000000{{{d{c}}}{{d{e}}}{}{}}000000000{{{d{fc}}}{{d{fe}}}{}{}}000000000````{{{d{h}}}h}{{{d{{j{ce}}}}}{{j{ce}}}{ln}{lA`}}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{{Af{c}}}}}{{Af{c}}}{lA`}}{{{d{Ah}}}Ah}{{{d{Aj}}}Aj}{{{d{c}}{d{fe}}}Al{}{}}000000{{{d{Ah}}{d{Ah}}}An}`{{{d{fB`}}{d{c}}{d{Bb}}AjBdBf}{{C`{{Bn{Bh{Bl{Bj}}}}}}}Cb}`{{}h}{{}Aj}`{c{{Cd{h}}}Cf}{c{{Cd{Ah}}}Cf}{{{d{h}}{d{h}}}Ch}{{{d{Ah}}{d{Ah}}}Ch}{{{d{c}}{d{e}}}Ch{}{}}00{{{d{h}}{d{fCj}}}Cl}{{{d{{j{ce}}}}{d{fCj}}}Cl{Cnn}{CnA`}}{{{d{Ab}}{d{fCj}}}Cl}{{{d{Ad}}{d{fCj}}}Cl}{{{d{{Af{c}}}}{d{fCj}}}Cl{CnA`}}{{{d{Ah}}{d{fCj}}}Cl}0{{{d{Aj}}{d{fCj}}}Cl}0{{{d{Bj}}{d{fCj}}}Cl}{cc{}}000000000{{{d{D`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{AbDd}}}}{{{d{D`}}}{{Cd{AdDd}}}}{{{d{D`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{fD`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{AbDd}}}}{{{d{fD`}}}{{Cd{AdDd}}}}{{{d{fD`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{Df}}}{{Cd{Ajc}}}{}}`{{{d{{Dh{B`}}}}{d{{Dh{Dj}}}}{d{{Dh{{Dl{h}}}}}}Dne{j{gc}}}{{C`{Al}}}A`{{Ed{c{d{E`}}}{{Eb{{C`{Al}}}}}}}n}{{{d{Df}}}Ch}000````{{{d{{Eh{Ef}}}}{d{Df}}}{{C`{{Bl{{Ej{ce}}}}}}}nA`}{ce{}{}}000000000{{}b}0{{{d{h}}}Ch}`{{{d{fh}}h}Al}``{{{d{Ah}}{d{Ah}}}{{Bl{An}}}}{{{d{B`}}{d{c}}{d{Bb}}}{{Cd{{En{El}}}}}Cb}{{{d{h}}c}CdF`}{{{d{Ah}}c}CdF`}{{{d{c}}}e{}{}}000000{{{d{c}}}Fb{}}0{c{{Cd{e}}}{}{}}0000000000000000000`{{{d{c}}}Fd{}}000000000{{{d{f{Db{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{D`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{D`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{D`}}}{{Cd{AlDd}}}A`}{{{d{f{Db{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{fD`}}}{{Cd{AlDd}}}A`}{ce{}{}}000000000```````````````````````","D":"Hj","p":[[8,"Command",244],[1,"reference"],[0,"mut"],[5,"ChangeSet",0],[6,"Commands",0],[10,"Clone",245],[10,"Subcommand",246],[10,"Args",246],[6,"AddressCmd",0],[6,"TxOutCmd",0],[6,"PsbtCmd",0],[6,"Keychain",0],[6,"CoinSelectionAlgo",0],[1,"unit"],[6,"Ordering",247],[8,"KeychainTxGraph",0],[5,"Assets",248],[5,"Address",249],[1,"u64"],[5,"Psbt",250],[5,"ChangeInfo",0],[6,"Option",251],[1,"tuple"],[8,"Result",252],[10,"ChainOracle",253],[6,"Result",254],[10,"Deserializer",255],[1,"bool"],[5,"Formatter",256],[8,"Result",256],[10,"Debug",256],[5,"ArgMatches",257],[5,"Args",0],[5,"Error",258],[1,"str"],[5,"Mutex",259],[5,"LocalChain",260],[5,"Store",261],[6,"Network",262],[5,"Transaction",263],[17,"Output"],[10,"FnOnce",264],[1,"u8"],[1,"slice"],[5,"Init",0],[8,"PlanUtxo",0],[5,"Vec",265],[10,"Serializer",266],[5,"String",267],[5,"TypeId",268],[15,"List",221],[15,"Address",222],[15,"Init",222],[15,"Generate",222],[15,"Psbt",222],[15,"TxOut",222],[15,"New",229],[15,"Extract",229],[15,"Sign",229],[15,"List",240]],"r":[],"b":[[103,"impl-Display-for-Keychain"],[104,"impl-Debug-for-Keychain"],[105,"impl-Display-for-CoinSelectionAlgo"],[106,"impl-Debug-for-CoinSelectionAlgo"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAK8AGgAAAAAAAgABAAUAAgAJAAIAEQABABQAAAAZAAAAGwABAB4AAAAgAAAAIgABACUAHQBFABIAWQABAFwAEAB3AAoAgwAEAIkAAACLAAAAlwACAJsAAACeACAAwAAdAN8AAADkAAEA6AAAAA=="}],\ +["example_cli",{"t":"PGFPPPFFGGPPPPFPPGIPPPPPPPPIPGPPPGEONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOENNNNNNNNNNNNNNNOHONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOHNNNNOOOOHNNNNNNNNNNNNNONOONHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOO","n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","ChangeInfo","ChangeSet","CoinSelectionAlgo","Commands","External","Extract","Generate","Index","Init","Init","Internal","Keychain","KeychainTxGraph","LargestFirst","List","List","New","New","NewestFirst","Next","OldestFirst","PlanUtxo","Psbt","PsbtCmd","Sign","SmallestFirst","TxOut","TxOutCmd","anyhow","args","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","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","change_descriptor","change_keychain","clap","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","create_tx","db","default","default","descriptor","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_arg_matches","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_arg_matches_mut","from_str","graph","handle_commands","has_subcommand","has_subcommand","has_subcommand","has_subcommand","index","index","indexer","indexer","init_or_load","into","into","into","into","into","into","into","into","into","into","into_app","into_app_for_update","is_empty","local_chain","merge","network","network","partial_cmp","planned_utxos","serialize","serialize","to_owned","to_owned","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_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","type_id","type_id","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","update_from_arg_matches_mut","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","vzip","vzip","change","addr_cmd","change_descriptor","descriptor","network","network","psbt_cmd","txout_cmd","address","after","chain_specific","coin_select","debug","descriptor","older","psbt","psbt","try_broadcast","value","confirmed","spent","unconfirmed","unspent"],"q":[[0,"example_cli"],[221,"example_cli::AddressCmd"],[222,"example_cli::Commands"],[229,"example_cli::PsbtCmd"],[240,"example_cli::TxOutCmd"],[244,"clap::builder::command"],[245,"core::clone"],[246,"clap::derive"],[247,"core::cmp"],[248,"miniscript::plan"],[249,"bitcoin::address"],[250,"bitcoin::psbt"],[251,"core::option"],[252,"anyhow"],[253,"bdk_chain::chain_oracle"],[254,"core::result"],[255,"serde::de"],[256,"core::fmt"],[257,"clap::parser::matches::arg_matches"],[258,"clap::error"],[259,"std::sync::mutex"],[260,"bdk_chain::local_chain"],[261,"bdk_file_store::store"],[262,"bitcoin::network"],[263,"bitcoin::blockdata::transaction"],[264,"core::ops::function"],[265,"alloc::vec"],[266,"serde::ser"],[267,"alloc::string"],[268,"core::any"]],"i":[5,0,0,5,13,5,0,0,0,0,12,11,5,9,0,5,12,0,0,13,9,10,9,11,13,9,13,0,5,0,11,13,5,0,0,45,33,33,5,9,10,11,5,9,10,11,45,4,33,5,9,10,11,12,13,21,45,4,33,5,9,10,11,12,13,21,45,4,21,0,4,5,9,10,11,12,13,4,5,9,10,11,12,13,12,33,0,45,4,13,4,4,12,4,12,12,12,12,4,5,9,10,11,12,12,13,13,21,45,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,13,45,0,5,9,10,11,16,21,4,21,0,45,4,33,5,9,10,11,12,13,21,33,33,4,4,4,45,4,12,0,4,12,4,5,9,10,11,12,13,12,13,45,4,33,5,9,10,11,12,13,21,45,4,33,5,9,10,11,12,13,21,4,45,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,45,4,33,5,9,10,11,12,13,21,51,52,53,53,53,54,55,56,57,57,58,57,57,59,57,59,58,58,57,60,60,60,60],"f":"````````````````````````````````````{bb}000000000{{{d{c}}}{{d{e}}}{}{}}000000000{{{d{fc}}}{{d{fe}}}{}{}}000000000````{{{d{h}}}h}{{{d{{j{ce}}}}}{{j{ce}}}{ln}{lA`}}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{{Af{c}}}}}{{Af{c}}}{lA`}}{{{d{Ah}}}Ah}{{{d{Aj}}}Aj}{{{d{c}}{d{fe}}}Al{}{}}000000{{{d{Ah}}{d{Ah}}}An}`{{{d{fB`}}{d{c}}{d{Bb}}AjBdBf}{{C`{{Bn{Bh{Bl{Bj}}}}}}}Cb}`{{}h}{{}Aj}`{c{{Cd{h}}}Cf}{c{{Cd{Ah}}}Cf}{{{d{h}}{d{h}}}Ch}{{{d{Ah}}{d{Ah}}}Ch}{{{d{c}}{d{e}}}Ch{}{}}00{{{d{h}}{d{fCj}}}Cl}{{{d{{j{ce}}}}{d{fCj}}}Cl{Cnn}{CnA`}}{{{d{Ab}}{d{fCj}}}Cl}{{{d{Ad}}{d{fCj}}}Cl}{{{d{{Af{c}}}}{d{fCj}}}Cl{CnA`}}{{{d{Ah}}{d{fCj}}}Cl}0{{{d{Aj}}{d{fCj}}}Cl}0{{{d{Bj}}{d{fCj}}}Cl}{cc{}}000000000{{{d{D`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{AbDd}}}}{{{d{D`}}}{{Cd{AdDd}}}}{{{d{D`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{fD`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{AbDd}}}}{{{d{fD`}}}{{Cd{AdDd}}}}{{{d{fD`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{Df}}}{{Cd{Ajc}}}{}}`{{{d{{Dh{B`}}}}{d{{Dh{Dj}}}}{d{{Dh{{Dl{h}}}}}}Dne{j{gc}}}{{C`{Al}}}A`{{Ed{c{d{E`}}}{{Eb{{C`{Al}}}}}}}n}{{{d{Df}}}Ch}000````{{{d{{Eh{Ef}}}}{d{Df}}}{{C`{{Bl{{Ej{ce}}}}}}}nA`}{ce{}{}}000000000{{}b}0{{{d{h}}}Ch}`{{{d{fh}}h}Al}``{{{d{Ah}}{d{Ah}}}{{Bl{An}}}}{{{d{B`}}{d{c}}{d{Bb}}}{{Cd{{En{El}}}}}Cb}{{{d{h}}c}CdF`}{{{d{Ah}}c}CdF`}{{{d{c}}}e{}{}}000000{{{d{c}}}Fb{}}0{c{{Cd{e}}}{}{}}0000000000000000000`{{{d{c}}}Fd{}}000000000{{{d{f{Db{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{D`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{D`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{D`}}}{{Cd{AlDd}}}A`}{{{d{f{Db{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{fD`}}}{{Cd{AlDd}}}A`}{ce{}{}}000000000```````````````````````","D":"Hj","p":[[8,"Command",244],[1,"reference"],[0,"mut"],[5,"ChangeSet",0],[6,"Commands",0],[10,"Clone",245],[10,"Subcommand",246],[10,"Args",246],[6,"AddressCmd",0],[6,"TxOutCmd",0],[6,"PsbtCmd",0],[6,"Keychain",0],[6,"CoinSelectionAlgo",0],[1,"unit"],[6,"Ordering",247],[8,"KeychainTxGraph",0],[5,"Assets",248],[5,"Address",249],[1,"u64"],[5,"Psbt",250],[5,"ChangeInfo",0],[6,"Option",251],[1,"tuple"],[8,"Result",252],[10,"ChainOracle",253],[6,"Result",254],[10,"Deserializer",255],[1,"bool"],[5,"Formatter",256],[8,"Result",256],[10,"Debug",256],[5,"ArgMatches",257],[5,"Args",0],[5,"Error",258],[1,"str"],[5,"Mutex",259],[5,"LocalChain",260],[5,"Store",261],[6,"Network",262],[5,"Transaction",263],[17,"Output"],[10,"FnOnce",264],[1,"u8"],[1,"slice"],[5,"Init",0],[8,"PlanUtxo",0],[5,"Vec",265],[10,"Serializer",266],[5,"String",267],[5,"TypeId",268],[15,"List",221],[15,"Address",222],[15,"Init",222],[15,"Generate",222],[15,"Psbt",222],[15,"TxOut",222],[15,"New",229],[15,"Extract",229],[15,"Sign",229],[15,"List",240]],"r":[],"b":[[103,"impl-Debug-for-Keychain"],[104,"impl-Display-for-Keychain"],[105,"impl-Debug-for-CoinSelectionAlgo"],[106,"impl-Display-for-CoinSelectionAlgo"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAK8AGgAAAAAAAgABAAUAAgAJAAIAEQABABQAAAAZAAAAGwABAB4AAAAgAAAAIgABACUAHQBFABIAWQABAFwAEAB3AAoAgwAEAIkAAACLAAAAlwACAJsAAACeACAAwAAdAN8AAADkAAEA6AAAAA=="}],\ ["example_electrum",{"t":"SSFGPFPNNNNNNONNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNOOOOOOOOO","n":["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"],[70,"example_electrum::ElectrumCommands"],[79,"clap::builder::command"],[80,"bitcoin::network"],[81,"electrum_client::client"],[82,"anyhow"],[83,"core::fmt"],[84,"clap::parser::matches::arg_matches"],[85,"clap::error"],[86,"core::result"],[87,"core::any"]],"i":[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",79],[1,"reference"],[0,"mut"],[5,"ElectrumArgs",0],[6,"Network",80],[5,"Client",81],[8,"Result",82],[6,"ElectrumCommands",0],[5,"ScanOptions",0],[1,"unit"],[1,"bool"],[5,"Formatter",83],[8,"Result",83],[5,"ArgMatches",84],[5,"Error",85],[6,"Result",86],[1,"str"],[5,"TypeId",87],[15,"Sync",70],[15,"Scan",70]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEAACAAAAAQABgAAAAgABQAPAA0AHgADACUABgAvABcASAADAA=="}],\ ["example_esplora",{"t":"SSFGPFPNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNHONNNNNNNNNNNNNNNNNNNNNOOOOOOOOO","n":["DB_MAGIC","DB_PATH","EsploraArgs","EsploraCommands","Scan","ScanOptions","Sync","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","client","clone","clone","clone","clone_into","clone_into","clone_into","eq","esplora_args","esplora_url","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","parallel_requests","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","esplora_args","esplora_args","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":[[0,"example_esplora"],[70,"example_esplora::EsploraCommands"],[79,"clap::builder::command"],[80,"bitcoin::network"],[81,"esplora_client::blocking"],[82,"anyhow"],[83,"core::fmt"],[84,"clap::parser::matches::arg_matches"],[85,"clap::error"],[86,"core::result"],[87,"core::any"]],"i":[0,0,0,0,8,0,8,4,9,4,9,8,8,8,4,9,8,4,9,4,8,4,9,8,4,9,9,8,4,8,4,9,8,4,9,8,4,9,8,4,9,8,8,4,9,9,9,0,9,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{Ab}}{d{Ab}}}Af}{{{d{A`}}}h}`{{{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",79],[1,"reference"],[0,"mut"],[5,"EsploraArgs",0],[6,"Network",80],[5,"BlockingClient",81],[8,"Result",82],[6,"EsploraCommands",0],[5,"ScanOptions",0],[1,"unit"],[1,"bool"],[5,"Formatter",83],[8,"Result",83],[5,"ArgMatches",84],[5,"Error",85],[6,"Result",86],[1,"str"],[5,"TypeId",87],[15,"Sync",70],[15,"Scan",70]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEAACAAAAAQABgAAAAgAFAAeAAIAJAAGAC4AAgAyABQASAADAA=="}],\ ["wallet_electrum_example",{"t":"SSSSSSSSH","n":["BATCH_SIZE","DB_MAGIC","ELECTRUM_URL","EXTERNAL_DESC","INTERNAL_DESC","NETWORK","SEND_AMOUNT","STOP_GAP","main"],"q":[[0,"wallet_electrum_example"],[9,"anyhow"],[10,"core::result"]],"i":[0,0,0,0,0,0,0,0,0],"f":"````````{{}{{f{bd}}}}","D":"`","p":[[1,"unit"],[5,"Error",9],[6,"Result",10]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAkAAQAAAAkA"}],\ 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 6430ecae25..9baa0145a8 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, …\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.\nType for staged changes.\nAn Anchor implementation that also records the exact …\nBlock height and timestamp at which a transaction is …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nError type of PersistWith::create.\nError type of PersistAsyncWith::create.\nParameters for PersistWith::create.\nParameters for PersistAsyncWith::create.\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 wrapper that we use to impl remote traits for types in …\nA tuple of keychain index and T representing the indexed …\nA tuple of keychain K, derivation index (u32) and a T …\nError type of PersistWith::load.\nError type of PersistAsyncWith::load.\nParameters for PersistWith::load.\nParameters for PersistAsyncWith::load.\nTrait that makes an object mergeable.\nTrait that persists the type with an async Db.\nError type of PersistWith::persist.\nError type of PersistAsyncWith::persist.\nTrait that persists the type with Db.\nRepresents a persisted T.\nAn iterator for derived script pubkeys.\nRepresents a type that contains staged changes.\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nReturns the BlockId that the associated blockchain data is …\nReturns a reference to the inner hash (sha256, sh256d …\nThe anchor block.\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\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\nInitialize the Db and create Self.\nInitialize the Db and create Self.\nCreate a new persisted T.\nCreate a new persisted T with async Db.\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 …\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).\nConvert an iterator of anything into FallibleIterator by …\nReturns the inner T.\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.\nInitialize the Db and load a previously-persisted Self.\nInitialize the Db and load a previously-persisted Self.\nConstruct a persisted T from Db.\nConstruct a persisted T from an async Db.\nThe LocalChain is a local implementation of ChainOracle.\nMerge another object of the same type onto self.\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nPersist changes to the Db.\nPersist changes to the Db.\nPersist staged changes of T into Db.\nPersist staged changes of T into an async Db.\nModule for stuff\nThe txid and chain position of the transaction (if any) …\nHelper types for spk-based blockchain clients.\nGet mutable reference of staged changes.\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.\nConvert an iterator of Results into FallibleIterator by …\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.\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.\nTxGraph changeset.\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 …\nName for table that stores last revealed indices per …\nSchema name for the changeset.\nGet unbounded spk iterators for all keychains.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct KeychainTxOutIndex from sqlite database and …\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).\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 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 …\nMerge another ChangeSet into self.\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 …\nPersist changeset to the sqlite database.\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.\nName of sqlite table that stores blocks of LocalChain.\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 …\nSchema name for the changeset.\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.\nChanges to the LocalChain blocks.\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.\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 sqlite database.\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).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\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 …\nPersist changeset to the sqlite database.\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.\nConvert an iterator of Results into FallibleIterator by …\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nTable name for schemas.\nRuns logic that initializes/migrates the table schemas.\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.\nName of table that stores Anchors.\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 …\nSchema name for tx_graph::ChangeSet.\nName of table that stores floating txouts.\nName of table that stores full transactions and last_seen …\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.\nConstruct a TxGraph from an sqlite database.\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).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\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.\nPersist changeset to the sqlite database.\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\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, …\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.\nType for staged changes.\nAn Anchor implementation that also records the exact …\nBlock height and timestamp at which a transaction is …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nError type of PersistWith::create.\nError type of PersistAsyncWith::create.\nParameters for PersistWith::create.\nParameters for PersistAsyncWith::create.\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 wrapper that we use to impl remote traits for types in …\nA tuple of keychain index and T representing the indexed …\nA tuple of keychain K, derivation index (u32) and a T …\nError type of PersistWith::load.\nError type of PersistAsyncWith::load.\nParameters for PersistWith::load.\nParameters for PersistAsyncWith::load.\nTrait that makes an object mergeable.\nTrait that persists the type with an async Db.\nError type of PersistWith::persist.\nError type of PersistAsyncWith::persist.\nTrait that persists the type with Db.\nRepresents a persisted T.\nAn iterator for derived script pubkeys.\nRepresents a type that contains staged changes.\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nReturns the BlockId that the associated blockchain data is …\nReturns a reference to the inner hash (sha256, sh256d …\nThe anchor block.\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\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\nInitialize the Db and create Self.\nInitialize the Db and create Self.\nCreate a new persisted T.\nCreate a new persisted T with async Db.\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 …\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).\nConvert an iterator of anything into FallibleIterator by …\nReturns the inner T.\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.\nInitialize the Db and load a previously-persisted Self.\nInitialize the Db and load a previously-persisted Self.\nConstruct a persisted T from Db.\nConstruct a persisted T from an async Db.\nThe LocalChain is a local implementation of ChainOracle.\nMerge another object of the same type onto self.\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nPersist changes to the Db.\nPersist changes to the Db.\nPersist staged changes of T into Db.\nPersist staged changes of T into an async Db.\nModule for stuff\nThe txid and chain position of the transaction (if any) …\nHelper types for spk-based blockchain clients.\nGet mutable reference of staged changes.\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.\nConvert an iterator of Results into FallibleIterator by …\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.\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.\nTxGraph changeset.\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 …\nName for table that stores last revealed indices per …\nSchema name for the changeset.\nGet unbounded spk iterators for all keychains.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct KeychainTxOutIndex from sqlite database and …\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).\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 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 …\nMerge another ChangeSet into self.\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 …\nPersist changeset to the sqlite database.\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.\nName of sqlite table that stores blocks of LocalChain.\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 …\nSchema name for the changeset.\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.\nChanges to the LocalChain blocks.\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.\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 sqlite database.\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).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\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 …\nPersist changeset to the sqlite database.\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.\nConvert an iterator of Results into FallibleIterator by …\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nTable name for schemas.\nRuns logic that initializes/migrates the table schemas.\nData required to perform a spk-based blockchain client …\nBuilds a FullScanRequest.\nData returned from a spk-based blockchain client full scan.\nOutpoint sync item.\nScript pubkey sync item.\nAn item reported to the inspect closure of SyncRequest.\nThe progress of SyncRequest.\nData required to perform a spk-based blockchain client …\nBuilds a SyncRequest.\nData returned from a spk-based blockchain client sync.\nTxid sync item.\nBuild the SyncRequest.\nBuild the FullScanRequest.\nStart building a SyncRequest.\nStart building a FullScanRequest.\nSet the initial chain tip for the sync request.\nGet the chain tip CheckPoint of this request (if any).\nSet the initial chain tip for the full scan request.\nGet the chain tip CheckPoint of this request (if any).\nThe update to apply to the receiving LocalChain.\nThe update to apply to the receiving TxGraph.\nTotal consumed items of the request.\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.\nThe update to apply to the receiving TxGraph.\nThe update to apply to the receiving LocalChain.\nSet the closure that will inspect every sync item visited.\nSet the closure that will inspect every sync item visited.\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).\nIterate over OutPoints contained in this request.\nIterate over ScriptBufs contained in this request.\nIterate over indexed ScriptBufs contained in this request …\nIterate over Txids contained in this request.\nList all keychains contained in this request.\nLast active indices for the corresponding keychains (K).\nAdvances the sync request and returns the next OutPoint.\nAdvances the sync request and returns the next ScriptBuf.\nAdvances the full scan request and returns the next …\nAdvances the sync request and returns the next Txid.\nAdd OutPoints that will be synced against.\nOutpoints consumed by the request.\nOutpoints remaining in the request.\nGet the SyncProgress of this request.\nTotal remaining items of the request.\nAdd Scripts that are revealed by the indexer of the given …\nAdd Scripts that will be synced against.\nScript pubkeys consumed by the request.\nSet the spk iterator for a given keychain.\nAdd spk iterators for each keychain tracked in indexer.\nScript pubkeys remaining in the request.\nAdd Scripts coupled with associated indexes that will be …\nTotal items, consumed and remaining, of the request.\nTotal outpoints, consumed and remaining, of the request.\nTotal script pubkeys, consumed and remaining, of the …\nTotal txids, consumed and remaining, of the request.\nAdd Txids that will be synced against.\nTxids consumed by the request.\nTxids remaining in the request.\nAdd Scripts that are revealed by the indexer but currently …\nName of table that stores Anchors.\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 …\nSchema name for tx_graph::ChangeSet.\nName of table that stores floating txouts.\nName of table that stores full transactions and last_seen …\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.\nConstruct a TxGraph from an sqlite database.\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).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\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.\nPersist changeset to the sqlite database.\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\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/search.desc/bdk_esplora/bdk_esplora-desc-0-.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_esplora/bdk_esplora-desc-0-.js index b269821e93..e60efc4fa5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_esplora/bdk_esplora-desc-0-.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_esplora/bdk_esplora-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("bdk_esplora", 0, "BDK Esplora\nesplora_client::Error\nTrait to extend the functionality of …\nTrait to extend the functionality of …\nScan keychain scripts for transactions against Esplora, …\nScan keychain scripts for transactions against Esplora, …\nSync a set of scripts with the blockchain (via an Esplora …\nSync a set of scripts with the blockchain (via an Esplora …") \ No newline at end of file +searchState.loadedDescShard("bdk_esplora", 0, "BDK Esplora\nesplora_client::Error\nTrait to extend the functionality of …\nTrait to extend the functionality of …\nScan keychain scripts for transactions against Esplora, …\nScan keychain scripts for transactions against Esplora, …\nSync a set of scripts, txids, and/or outpoints against …\nSync a set of scripts, txids, and/or outpoints against …") \ 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 0a3b100ef5..d4be82f0e6 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/bdk_chain/spk_client.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html index d7527a21b2..ae488d7d47 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,392 +386,788 @@ 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
    //! Helper types for spk-based blockchain clients.
    -
     use crate::{
    -    collections::BTreeMap, local_chain::CheckPoint, ConfirmationBlockTime, Indexed, TxGraph,
    +    alloc::{boxed::Box, collections::VecDeque, vec::Vec},
    +    collections::BTreeMap,
    +    local_chain::CheckPoint,
    +    ConfirmationBlockTime, Indexed, TxGraph,
     };
    -use alloc::boxed::Box;
     use bitcoin::{OutPoint, Script, ScriptBuf, Txid};
    -use core::marker::PhantomData;
     
    -/// Data required to perform a spk-based blockchain client sync.
    -///
    -/// A client sync fetches relevant chain data for a known list of scripts, transaction ids and
    -/// outpoints. The sync process also updates the chain from the given [`CheckPoint`].
    -pub struct SyncRequest {
    -    /// A checkpoint for the current chain [`LocalChain::tip`].
    -    /// The sync process will return a new chain update that extends this tip.
    -    ///
    -    /// [`LocalChain::tip`]: crate::local_chain::LocalChain::tip
    -    pub chain_tip: CheckPoint,
    -    /// Transactions that spend from or to these indexed script pubkeys.
    -    pub spks: Box<dyn ExactSizeIterator<Item = ScriptBuf> + Send>,
    -    /// Transactions with these txids.
    -    pub txids: Box<dyn ExactSizeIterator<Item = Txid> + Send>,
    -    /// Transactions with these outpoints or spent from these outpoints.
    -    pub outpoints: Box<dyn ExactSizeIterator<Item = OutPoint> + Send>,
    -}
    -
    -impl SyncRequest {
    -    /// Construct a new [`SyncRequest`] from a given `cp` tip.
    -    pub fn from_chain_tip(cp: CheckPoint) -> Self {
    +type InspectSync<I> = dyn FnMut(SyncItem<I>, SyncProgress) + Send + 'static;
    +
    +type InspectFullScan<K> = dyn FnMut(K, u32, &Script) + Send + 'static;
    +
    +/// An item reported to the [`inspect`](SyncRequestBuilder::inspect) closure of [`SyncRequest`].
    +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
    +pub enum SyncItem<'i, I> {
    +    /// Script pubkey sync item.
    +    Spk(I, &'i Script),
    +    /// Txid sync item.
    +    Txid(Txid),
    +    /// Outpoint sync item.
    +    OutPoint(OutPoint),
    +}
    +
    +impl<'i, I: core::fmt::Debug + core::any::Any> core::fmt::Display for SyncItem<'i, I> {
    +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    +        match self {
    +            SyncItem::Spk(i, spk) => {
    +                if (i as &dyn core::any::Any).is::<()>() {
    +                    write!(f, "script '{}'", spk)
    +                } else {
    +                    write!(f, "script {:?} '{}'", i, spk)
    +                }
    +            }
    +            SyncItem::Txid(txid) => write!(f, "txid '{}'", txid),
    +            SyncItem::OutPoint(op) => write!(f, "outpoint '{}'", op),
    +        }
    +    }
    +}
    +
    +/// The progress of [`SyncRequest`].
    +#[derive(Debug, Clone)]
    +pub struct SyncProgress {
    +    /// Script pubkeys consumed by the request.
    +    pub spks_consumed: usize,
    +    /// Script pubkeys remaining in the request.
    +    pub spks_remaining: usize,
    +    /// Txids consumed by the request.
    +    pub txids_consumed: usize,
    +    /// Txids remaining in the request.
    +    pub txids_remaining: usize,
    +    /// Outpoints consumed by the request.
    +    pub outpoints_consumed: usize,
    +    /// Outpoints remaining in the request.
    +    pub outpoints_remaining: usize,
    +}
    +
    +impl SyncProgress {
    +    /// Total items, consumed and remaining, of the request.
    +    pub fn total(&self) -> usize {
    +        self.total_spks() + self.total_txids() + self.total_outpoints()
    +    }
    +
    +    /// Total script pubkeys, consumed and remaining, of the request.
    +    pub fn total_spks(&self) -> usize {
    +        self.spks_consumed + self.spks_remaining
    +    }
    +
    +    /// Total txids, consumed and remaining, of the request.
    +    pub fn total_txids(&self) -> usize {
    +        self.txids_consumed + self.txids_remaining
    +    }
    +
    +    /// Total outpoints, consumed and remaining, of the request.
    +    pub fn total_outpoints(&self) -> usize {
    +        self.outpoints_consumed + self.outpoints_remaining
    +    }
    +
    +    /// Total consumed items of the request.
    +    pub fn consumed(&self) -> usize {
    +        self.spks_consumed + self.txids_consumed + self.outpoints_consumed
    +    }
    +
    +    /// Total remaining items of the request.
    +    pub fn remaining(&self) -> usize {
    +        self.spks_remaining + self.txids_remaining + self.outpoints_remaining
    +    }
    +}
    +
    +/// Builds a [`SyncRequest`].
    +#[must_use]
    +pub struct SyncRequestBuilder<I = ()> {
    +    inner: SyncRequest<I>,
    +}
    +
    +impl<I> Default for SyncRequestBuilder<I> {
    +    fn default() -> Self {
             Self {
    -            chain_tip: cp,
    -            spks: Box::new(core::iter::empty()),
    -            txids: Box::new(core::iter::empty()),
    -            outpoints: Box::new(core::iter::empty()),
    +            inner: Default::default(),
             }
         }
    +}
     
    -    /// Set the [`Script`]s that will be synced against.
    -    ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn set_spks(
    -        mut self,
    -        spks: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = ScriptBuf> + Send + 'static>,
    +#[cfg(feature = "miniscript")]
    +impl<K: Clone + Ord + core::fmt::Debug + Send + Sync> SyncRequestBuilder<(K, u32)> {
    +    /// Add [`Script`]s that are revealed by the `indexer` of the given `spk_range` that will be
    +    /// synced against.
    +    pub fn revealed_spks_from_indexer(
    +        self,
    +        indexer: &crate::indexer::keychain_txout::KeychainTxOutIndex<K>,
    +        spk_range: impl core::ops::RangeBounds<K>,
         ) -> Self {
    -        self.spks = Box::new(spks.into_iter());
    -        self
    -    }
    +        self.spks_with_indexes(indexer.revealed_spks(spk_range))
    +    }
     
    -    /// Set the [`Txid`]s that will be synced against.
    -    ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn set_txids(
    -        mut self,
    -        txids: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = Txid> + Send + 'static>,
    +    /// Add [`Script`]s that are revealed by the `indexer` but currently unused.
    +    pub fn unused_spks_from_indexer(
    +        self,
    +        indexer: &crate::indexer::keychain_txout::KeychainTxOutIndex<K>,
         ) -> Self {
    -        self.txids = Box::new(txids.into_iter());
    -        self
    -    }
    +        self.spks_with_indexes(indexer.unused_spks())
    +    }
    +}
     
    -    /// Set the [`OutPoint`]s that will be synced against.
    +impl SyncRequestBuilder<()> {
    +    /// Add [`Script`]s that will be synced against.
    +    pub fn spks(self, spks: impl IntoIterator<Item = ScriptBuf>) -> Self {
    +        self.spks_with_indexes(spks.into_iter().map(|spk| ((), spk)))
    +    }
    +}
    +
    +impl<I> SyncRequestBuilder<I> {
    +    /// Set the initial chain tip for the sync request.
         ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn set_outpoints(
    -        mut self,
    -        outpoints: impl IntoIterator<
    -            IntoIter = impl ExactSizeIterator<Item = OutPoint> + Send + 'static,
    -        >,
    -    ) -> Self {
    -        self.outpoints = Box::new(outpoints.into_iter());
    +    /// This is used to update [`LocalChain`](crate::local_chain::LocalChain).
    +    pub fn chain_tip(mut self, cp: CheckPoint) -> Self {
    +        self.inner.chain_tip = Some(cp);
             self
         }
     
    -    /// Chain on additional [`Script`]s that will be synced against.
    +    /// Add [`Script`]s coupled with associated indexes that will be synced against.
         ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn chain_spks(
    -        mut self,
    -        spks: impl IntoIterator<
    -            IntoIter = impl ExactSizeIterator<Item = ScriptBuf> + Send + 'static,
    -            Item = ScriptBuf,
    -        >,
    -    ) -> Self {
    -        self.spks = Box::new(ExactSizeChain::new(self.spks, spks.into_iter()));
    +    /// # Example
    +    ///
    +    /// Sync revealed script pubkeys obtained from a
    +    /// [`KeychainTxOutIndex`](crate::keychain_txout::KeychainTxOutIndex).
    +    ///
    +    /// ```rust
    +    /// # use bdk_chain::spk_client::SyncRequest;
    +    /// # use bdk_chain::indexer::keychain_txout::KeychainTxOutIndex;
    +    /// # use bdk_chain::miniscript::{Descriptor, DescriptorPublicKey};
    +    /// # let secp = bdk_chain::bitcoin::secp256k1::Secp256k1::signing_only();
    +    /// # let (descriptor_a,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/0/*)").unwrap();
    +    /// # let (descriptor_b,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/*)").unwrap();
    +    /// let mut indexer = KeychainTxOutIndex::<&'static str>::default();
    +    /// indexer.insert_descriptor("descriptor_a", descriptor_a)?;
    +    /// indexer.insert_descriptor("descriptor_b", descriptor_b)?;
    +    ///
    +    /// /* Assume that the caller does more mutations to the `indexer` here... */
    +    ///
    +    /// // Reveal spks for "descriptor_a", then build a sync request. Each spk will be indexed with
    +    /// // `u32`, which represents the derivation index of the associated spk from "descriptor_a".
    +    /// let (newly_revealed_spks, _changeset) = indexer
    +    ///     .reveal_to_target("descriptor_a", 21)
    +    ///     .expect("keychain must exist");
    +    /// let _request = SyncRequest::builder()
    +    ///     .spks_with_indexes(newly_revealed_spks)
    +    ///     .build();
    +    ///
    +    /// // Sync all revealed spks in the indexer. This time, spks may be derived from different
    +    /// // keychains. Each spk will be indexed with `(&'static str, u32)` where `&'static str` is
    +    /// // the keychain identifier and `u32` is the derivation index.
    +    /// let all_revealed_spks = indexer.revealed_spks(..);
    +    /// let _request = SyncRequest::builder()
    +    ///     .spks_with_indexes(all_revealed_spks)
    +    ///     .build();
    +    /// # Ok::<_, bdk_chain::keychain_txout::InsertDescriptorError<_>>(())
    +    /// ```
    +    pub fn spks_with_indexes(mut self, spks: impl IntoIterator<Item = (I, ScriptBuf)>) -> Self {
    +        self.inner.spks.extend(spks);
             self
         }
     
    -    /// Chain on additional [`Txid`]s that will be synced against.
    -    ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn chain_txids(
    -        mut self,
    -        txids: impl IntoIterator<
    -            IntoIter = impl ExactSizeIterator<Item = Txid> + Send + 'static,
    -            Item = Txid,
    -        >,
    -    ) -> Self {
    -        self.txids = Box::new(ExactSizeChain::new(self.txids, txids.into_iter()));
    +    /// Add [`Txid`]s that will be synced against.
    +    pub fn txids(mut self, txids: impl IntoIterator<Item = Txid>) -> Self {
    +        self.inner.txids.extend(txids);
             self
         }
     
    -    /// Chain on additional [`OutPoint`]s that will be synced against.
    -    ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn chain_outpoints(
    -        mut self,
    -        outpoints: impl IntoIterator<
    -            IntoIter = impl ExactSizeIterator<Item = OutPoint> + Send + 'static,
    -            Item = OutPoint,
    -        >,
    -    ) -> Self {
    -        self.outpoints = Box::new(ExactSizeChain::new(self.outpoints, outpoints.into_iter()));
    +    /// Add [`OutPoint`]s that will be synced against.
    +    pub fn outpoints(mut self, outpoints: impl IntoIterator<Item = OutPoint>) -> Self {
    +        self.inner.outpoints.extend(outpoints);
             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.
    -    #[must_use]
    -    pub fn inspect_spks(
    -        mut self,
    -        mut inspect: impl FnMut(&Script) + Send + Sync + 'static,
    -    ) -> Self {
    -        self.spks = Box::new(self.spks.inspect(move |spk| inspect(spk)));
    +    /// Set the closure that will inspect every sync item visited.
    +    pub fn inspect<F>(mut self, inspect: F) -> Self
    +    where
    +        F: FnMut(SyncItem<I>, SyncProgress) + Send + 'static,
    +    {
    +        self.inner.inspect = Box::new(inspect);
             self
         }
     
    -    /// Add a closure that will be called for [`Txid`]s previously added to this request.
    +    /// Build the [`SyncRequest`].
    +    pub fn build(self) -> SyncRequest<I> {
    +        self.inner
    +    }
    +}
    +
    +/// Data required to perform a spk-based blockchain client sync.
    +///
    +/// A client sync fetches relevant chain data for a known list of scripts, transaction ids and
    +/// outpoints. The sync process also updates the chain from the given
    +/// [`chain_tip`](SyncRequestBuilder::chain_tip) (if provided).
    +///
    +/// ```rust
    +/// # use bdk_chain::{bitcoin::{hashes::Hash, ScriptBuf}, local_chain::LocalChain};
    +/// # let (local_chain, _) = LocalChain::from_genesis_hash(Hash::all_zeros());
    +/// # let scripts = [ScriptBuf::default(), ScriptBuf::default()];
    +/// # use bdk_chain::spk_client::SyncRequest;
    +/// // Construct a sync request.
    +/// let sync_request = SyncRequest::builder()
    +///     // Provide chain tip of the local wallet.
    +///     .chain_tip(local_chain.tip())
    +///     // Provide list of scripts to scan for transactions against.
    +///     .spks(scripts)
    +///     // This is called for every synced item.
    +///     .inspect(|item, progress| println!("{} (remaining: {})", item, progress.remaining()))
    +///     // Finish constructing the sync request.
    +///     .build();
    +/// ```
    +#[must_use]
    +pub struct SyncRequest<I = ()> {
    +    chain_tip: Option<CheckPoint>,
    +    spks: VecDeque<(I, ScriptBuf)>,
    +    spks_consumed: usize,
    +    txids: VecDeque<Txid>,
    +    txids_consumed: usize,
    +    outpoints: VecDeque<OutPoint>,
    +    outpoints_consumed: usize,
    +    inspect: Box<InspectSync<I>>,
    +}
    +
    +impl<I> Default for SyncRequest<I> {
    +    fn default() -> Self {
    +        Self {
    +            chain_tip: None,
    +            spks: VecDeque::new(),
    +            spks_consumed: 0,
    +            txids: VecDeque::new(),
    +            txids_consumed: 0,
    +            outpoints: VecDeque::new(),
    +            outpoints_consumed: 0,
    +            inspect: Box::new(|_, _| {}),
    +        }
    +    }
    +}
    +
    +impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I> {
    +    fn from(builder: SyncRequestBuilder<I>) -> Self {
    +        builder.inner
    +    }
    +}
    +
    +impl<I> SyncRequest<I> {
    +    /// Start building a [`SyncRequest`].
    +    pub fn builder() -> SyncRequestBuilder<I> {
    +        SyncRequestBuilder {
    +            inner: Default::default(),
    +        }
    +    }
    +
    +    /// Get the [`SyncProgress`] of this request.
    +    pub fn progress(&self) -> SyncProgress {
    +        SyncProgress {
    +            spks_consumed: self.spks_consumed,
    +            spks_remaining: self.spks.len(),
    +            txids_consumed: self.txids_consumed,
    +            txids_remaining: self.txids.len(),
    +            outpoints_consumed: self.outpoints_consumed,
    +            outpoints_remaining: self.outpoints.len(),
    +        }
    +    }
    +
    +    /// Get the chain tip [`CheckPoint`] of this request (if any).
    +    pub fn chain_tip(&self) -> Option<CheckPoint> {
    +        self.chain_tip.clone()
    +    }
    +
    +    /// Advances the sync request and returns the next [`ScriptBuf`].
         ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn inspect_txids(mut self, mut inspect: impl FnMut(&Txid) + Send + Sync + 'static) -> Self {
    -        self.txids = Box::new(self.txids.inspect(move |txid| inspect(txid)));
    -        self
    -    }
    +    /// Returns [`None`] when there are no more scripts remaining in the request.
    +    pub fn next_spk(&mut self) -> Option<ScriptBuf> {
    +        let (i, spk) = self.spks.pop_front()?;
    +        self.spks_consumed += 1;
    +        self._call_inspect(SyncItem::Spk(i, spk.as_script()));
    +        Some(spk)
    +    }
     
    -    /// Add a closure that will be called for [`OutPoint`]s previously added to this request.
    +    /// Advances the sync request and returns the next [`Txid`].
         ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn inspect_outpoints(
    -        mut self,
    -        mut inspect: impl FnMut(&OutPoint) + Send + Sync + 'static,
    -    ) -> Self {
    -        self.outpoints = Box::new(self.outpoints.inspect(move |op| inspect(op)));
    -        self
    -    }
    +    /// Returns [`None`] when there are no more txids remaining in the request.
    +    pub fn next_txid(&mut self) -> Option<Txid> {
    +        let txid = self.txids.pop_front()?;
    +        self.txids_consumed += 1;
    +        self._call_inspect(SyncItem::Txid(txid));
    +        Some(txid)
    +    }
     
    -    /// Populate the request with revealed script pubkeys from `index` with the given `spk_range`.
    +    /// Advances the sync request and returns the next [`OutPoint`].
         ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[cfg(feature = "miniscript")]
    -    #[must_use]
    -    pub fn populate_with_revealed_spks<K: Clone + Ord + core::fmt::Debug + Send + Sync>(
    -        self,
    -        index: &crate::indexer::keychain_txout::KeychainTxOutIndex<K>,
    -        spk_range: impl core::ops::RangeBounds<K>,
    -    ) -> Self {
    -        use alloc::borrow::ToOwned;
    -        use alloc::vec::Vec;
    -        self.chain_spks(
    -            index
    -                .revealed_spks(spk_range)
    -                .map(|(_, spk)| spk.to_owned())
    -                .collect::<Vec<_>>(),
    -        )
    +    /// Returns [`None`] when there are no more outpoints in the request.
    +    pub fn next_outpoint(&mut self) -> Option<OutPoint> {
    +        let outpoint = self.outpoints.pop_front()?;
    +        self.outpoints_consumed += 1;
    +        self._call_inspect(SyncItem::OutPoint(outpoint));
    +        Some(outpoint)
    +    }
    +
    +    /// Iterate over [`ScriptBuf`]s contained in this request.
    +    pub fn iter_spks(&mut self) -> impl ExactSizeIterator<Item = ScriptBuf> + '_ {
    +        SyncIter::<I, ScriptBuf>::new(self)
    +    }
    +
    +    /// Iterate over [`Txid`]s contained in this request.
    +    pub fn iter_txids(&mut self) -> impl ExactSizeIterator<Item = Txid> + '_ {
    +        SyncIter::<I, Txid>::new(self)
    +    }
    +
    +    /// Iterate over [`OutPoint`]s contained in this request.
    +    pub fn iter_outpoints(&mut self) -> impl ExactSizeIterator<Item = OutPoint> + '_ {
    +        SyncIter::<I, OutPoint>::new(self)
    +    }
    +
    +    fn _call_inspect(&mut self, item: SyncItem<I>) {
    +        let progress = self.progress();
    +        (*self.inspect)(item, progress);
         }
     }
     
     /// Data returned from a spk-based blockchain client sync.
     ///
     /// See also [`SyncRequest`].
    +#[must_use]
    +#[derive(Debug)]
     pub struct SyncResult<A = ConfirmationBlockTime> {
         /// The update to apply to the receiving [`TxGraph`].
         pub graph_update: TxGraph<A>,
         /// The update to apply to the receiving [`LocalChain`](crate::local_chain::LocalChain).
    -    pub chain_update: CheckPoint,
    -}
    -
    -/// 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
    -/// generally only used when importing or restoring previously used keychains in which the list of
    -/// used scripts is not known. The full scan process also updates the chain from the given [`CheckPoint`].
    -pub struct FullScanRequest<K> {
    -    /// A checkpoint for the current [`LocalChain::tip`].
    -    /// The full scan process will return a new chain update that extends this tip.
    -    ///
    -    /// [`LocalChain::tip`]: crate::local_chain::LocalChain::tip
    -    pub chain_tip: CheckPoint,
    -    /// Iterators of script pubkeys indexed by the keychain index.
    -    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
    +    pub chain_update: Option<CheckPoint>,
     }
     
    -impl<K: Ord + Clone> FullScanRequest<K> {
    -    /// Construct a new [`FullScanRequest`] from a given `chain_tip`.
    -    #[must_use]
    -    pub fn from_chain_tip(chain_tip: CheckPoint) -> Self {
    +impl<A> Default for SyncResult<A> {
    +    fn default() -> Self {
             Self {
    -            chain_tip,
    -            spks_by_keychain: BTreeMap::new(),
    +            graph_update: Default::default(),
    +            chain_update: Default::default(),
             }
         }
    +}
     
    -    /// 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
    -    /// [`FullScanRequest`].
    -    ///
    -    /// [`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::indexer::keychain_txout::KeychainTxOutIndex<K>,
    -    ) -> Self
    -    where
    -        K: core::fmt::Debug,
    -    {
    -        let mut req = Self::from_chain_tip(chain_tip);
    -        for (keychain, spks) in index.all_unbounded_spk_iters() {
    -            req = req.set_spks_for_keychain(keychain, spks);
    +/// Builds a [`FullScanRequest`].
    +#[must_use]
    +pub struct FullScanRequestBuilder<K> {
    +    inner: FullScanRequest<K>,
    +}
    +
    +impl<K> Default for FullScanRequestBuilder<K> {
    +    fn default() -> Self {
    +        Self {
    +            inner: Default::default(),
             }
    -        req
         }
    +}
     
    -    /// Set the [`Script`]s for a given `keychain`.
    -    ///
    -    /// This consumes the [`FullScanRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn set_spks_for_keychain(
    +#[cfg(feature = "miniscript")]
    +impl<K: Ord + Clone + core::fmt::Debug> FullScanRequestBuilder<K> {
    +    /// Add spk iterators for each keychain tracked in `indexer`.
    +    pub fn spks_from_indexer(
             mut self,
    -        keychain: K,
    -        spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static>,
    +        indexer: &crate::indexer::keychain_txout::KeychainTxOutIndex<K>,
         ) -> Self {
    -        self.spks_by_keychain
    -            .insert(keychain, Box::new(spks.into_iter()));
    +        for (keychain, spks) in indexer.all_unbounded_spk_iters() {
    +            self = self.spks_for_keychain(keychain, spks);
    +        }
             self
         }
    +}
     
    -    /// Chain on additional [`Script`]s that will be synced against.
    +impl<K: Ord> FullScanRequestBuilder<K> {
    +    /// Set the initial chain tip for the full scan request.
         ///
    -    /// This consumes the [`FullScanRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn chain_spks_for_keychain(
    +    /// This is used to update [`LocalChain`](crate::local_chain::LocalChain).
    +    pub fn chain_tip(mut self, tip: CheckPoint) -> Self {
    +        self.inner.chain_tip = Some(tip);
    +        self
    +    }
    +
    +    /// Set the spk iterator for a given `keychain`.
    +    pub fn spks_for_keychain(
             mut self,
             keychain: K,
             spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static>,
         ) -> Self {
    -        match self.spks_by_keychain.remove(&keychain) {
    -            // clippy here suggests to remove `into_iter` from `spks.into_iter()`, but doing so
    -            // results in a compilation error
    -            #[allow(clippy::useless_conversion)]
    -            Some(keychain_spks) => self
    -                .spks_by_keychain
    -                .insert(keychain, Box::new(keychain_spks.chain(spks.into_iter()))),
    -            None => self
    -                .spks_by_keychain
    -                .insert(keychain, Box::new(spks.into_iter())),
    -        };
    +        self.inner
    +            .spks_by_keychain
    +            .insert(keychain, Box::new(spks.into_iter()));
             self
         }
     
    -    /// 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.
    -    #[must_use]
    -    pub fn inspect_spks_for_all_keychains(
    -        mut self,
    -        inspect: impl FnMut(K, u32, &Script) + Send + Sync + Clone + 'static,
    -    ) -> Self
    +    /// Set the closure that will inspect every sync item visited.
    +    pub fn inspect<F>(mut self, inspect: F) -> Self
         where
    -        K: Send + 'static,
    +        F: FnMut(K, u32, &Script) + Send + 'static,
         {
    -        for (keychain, spks) in core::mem::take(&mut self.spks_by_keychain) {
    -            let mut inspect = inspect.clone();
    -            self.spks_by_keychain.insert(
    -                keychain.clone(),
    -                Box::new(spks.inspect(move |(i, spk)| inspect(keychain.clone(), *i, spk))),
    -            );
    -        }
    +        self.inner.inspect = Box::new(inspect);
             self
         }
     
    -    /// Add a closure that will be called for every [`Script`] previously added to a given
    -    /// `keychain` in this request.
    -    ///
    -    /// This consumes the [`SyncRequest`] and returns the updated one.
    -    #[must_use]
    -    pub fn inspect_spks_for_keychain(
    -        mut self,
    -        keychain: K,
    -        mut inspect: impl FnMut(u32, &Script) + Send + Sync + 'static,
    -    ) -> Self
    -    where
    -        K: Send + 'static,
    -    {
    -        if let Some(spks) = self.spks_by_keychain.remove(&keychain) {
    -            self.spks_by_keychain.insert(
    -                keychain,
    -                Box::new(spks.inspect(move |(i, spk)| inspect(*i, spk))),
    -            );
    +    /// Build the [`FullScanRequest`].
    +    pub fn build(self) -> FullScanRequest<K> {
    +        self.inner
    +    }
    +}
    +
    +/// 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
    +/// generally only used when importing or restoring previously used keychains in which the list of
    +/// used scripts is not known. The full scan process also updates the chain from the given
    +/// [`chain_tip`](FullScanRequestBuilder::chain_tip) (if provided).
    +#[must_use]
    +pub struct FullScanRequest<K> {
    +    chain_tip: Option<CheckPoint>,
    +    spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
    +    inspect: Box<InspectFullScan<K>>,
    +}
    +
    +impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K> {
    +    fn from(builder: FullScanRequestBuilder<K>) -> Self {
    +        builder.inner
    +    }
    +}
    +
    +impl<K> Default for FullScanRequest<K> {
    +    fn default() -> Self {
    +        Self {
    +            chain_tip: None,
    +            spks_by_keychain: Default::default(),
    +            inspect: Box::new(|_, _, _| {}),
             }
    -        self
    -    }
    +    }
    +}
    +
    +impl<K: Ord + Clone> FullScanRequest<K> {
    +    /// Start building a [`FullScanRequest`].
    +    pub fn builder() -> FullScanRequestBuilder<K> {
    +        FullScanRequestBuilder {
    +            inner: Self::default(),
    +        }
    +    }
    +
    +    /// Get the chain tip [`CheckPoint`] of this request (if any).
    +    pub fn chain_tip(&self) -> Option<CheckPoint> {
    +        self.chain_tip.clone()
    +    }
    +
    +    /// List all keychains contained in this request.
    +    pub fn keychains(&self) -> Vec<K> {
    +        self.spks_by_keychain.keys().cloned().collect()
    +    }
    +
    +    /// Advances the full scan request and returns the next indexed [`ScriptBuf`] of the given
    +    /// `keychain`.
    +    pub fn next_spk(&mut self, keychain: K) -> Option<Indexed<ScriptBuf>> {
    +        self.iter_spks(keychain).next()
    +    }
    +
    +    /// Iterate over indexed [`ScriptBuf`]s contained in this request of the given `keychain`.
    +    pub fn iter_spks(&mut self, keychain: K) -> impl Iterator<Item = Indexed<ScriptBuf>> + '_ {
    +        let spks = self.spks_by_keychain.get_mut(&keychain);
    +        let inspect = &mut self.inspect;
    +        KeychainSpkIter {
    +            keychain,
    +            spks,
    +            inspect,
    +        }
    +    }
     }
     
     /// Data returned from a spk-based blockchain client full scan.
     ///
     /// See also [`FullScanRequest`].
    +#[must_use]
    +#[derive(Debug)]
     pub struct FullScanResult<K, A = ConfirmationBlockTime> {
         /// The update to apply to the receiving [`LocalChain`](crate::local_chain::LocalChain).
         pub graph_update: TxGraph<A>,
         /// The update to apply to the receiving [`TxGraph`].
    -    pub chain_update: CheckPoint,
    +    pub chain_update: Option<CheckPoint>,
         /// Last active indices for the corresponding keychains (`K`).
         pub last_active_indices: BTreeMap<K, u32>,
     }
     
    -/// A version of [`core::iter::Chain`] which can combine two [`ExactSizeIterator`]s to form a new
    -/// [`ExactSizeIterator`].
    -///
    -/// The danger of this is explained in [the `ExactSizeIterator` docs]
    -/// (https://doc.rust-lang.org/core/iter/trait.ExactSizeIterator.html#when-shouldnt-an-adapter-be-exactsizeiterator).
    -/// This does not apply here since it would be impossible to scan an item count that overflows
    -/// `usize` anyway.
    -struct ExactSizeChain<A, B, I> {
    -    a: Option<A>,
    -    b: Option<B>,
    -    i: PhantomData<I>,
    -}
    -
    -impl<A, B, I> ExactSizeChain<A, B, I> {
    -    fn new(a: A, b: B) -> Self {
    -        ExactSizeChain {
    -            a: Some(a),
    -            b: Some(b),
    -            i: PhantomData,
    +impl<K, A> Default for FullScanResult<K, A> {
    +    fn default() -> Self {
    +        Self {
    +            graph_update: Default::default(),
    +            chain_update: Default::default(),
    +            last_active_indices: Default::default(),
             }
         }
     }
     
    -impl<A, B, I> Iterator for ExactSizeChain<A, B, I>
    -where
    -    A: Iterator<Item = I>,
    -    B: Iterator<Item = I>,
    -{
    -    type Item = I;
    +struct KeychainSpkIter<'r, K> {
    +    keychain: K,
    +    spks: Option<&'r mut Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
    +    inspect: &'r mut Box<InspectFullScan<K>>,
    +}
    +
    +impl<'r, K: Ord + Clone> Iterator for KeychainSpkIter<'r, K> {
    +    type Item = Indexed<ScriptBuf>;
     
         fn next(&mut self) -> Option<Self::Item> {
    -        if let Some(a) = &mut self.a {
    -            let item = a.next();
    -            if item.is_some() {
    -                return item;
    -            }
    -            self.a = None;
    -        }
    -        if let Some(b) = &mut self.b {
    -            let item = b.next();
    -            if item.is_some() {
    -                return item;
    -            }
    -            self.b = None;
    +        let (i, spk) = self.spks.as_mut()?.next()?;
    +        (*self.inspect)(self.keychain.clone(), i, &spk);
    +        Some((i, spk))
    +    }
    +}
    +
    +struct SyncIter<'r, I, Item> {
    +    request: &'r mut SyncRequest<I>,
    +    marker: core::marker::PhantomData<Item>,
    +}
    +
    +impl<'r, I, Item> SyncIter<'r, I, Item> {
    +    fn new(request: &'r mut SyncRequest<I>) -> Self {
    +        Self {
    +            request,
    +            marker: core::marker::PhantomData,
             }
    -        None
    -    }
    +    }
     }
     
    -impl<A, B, I> ExactSizeIterator for ExactSizeChain<A, B, I>
    -where
    -    A: ExactSizeIterator<Item = I>,
    -    B: ExactSizeIterator<Item = I>,
    -{
    -    fn len(&self) -> usize {
    -        let a_len = self.a.as_ref().map(|a| a.len()).unwrap_or(0);
    -        let b_len = self.b.as_ref().map(|a| a.len()).unwrap_or(0);
    -        a_len + b_len
    +impl<'r, I, Item> ExactSizeIterator for SyncIter<'r, I, Item> where SyncIter<'r, I, Item>: Iterator {}
    +
    +impl<'r, I> Iterator for SyncIter<'r, I, ScriptBuf> {
    +    type Item = ScriptBuf;
    +
    +    fn next(&mut self) -> Option<Self::Item> {
    +        self.request.next_spk()
    +    }
    +
    +    fn size_hint(&self) -> (usize, Option<usize>) {
    +        let remaining = self.request.spks.len();
    +        (remaining, Some(remaining))
    +    }
    +}
    +
    +impl<'r, I> Iterator for SyncIter<'r, I, Txid> {
    +    type Item = Txid;
    +
    +    fn next(&mut self) -> Option<Self::Item> {
    +        self.request.next_txid()
    +    }
    +
    +    fn size_hint(&self) -> (usize, Option<usize>) {
    +        let remaining = self.request.txids.len();
    +        (remaining, Some(remaining))
    +    }
    +}
    +
    +impl<'r, I> Iterator for SyncIter<'r, I, OutPoint> {
    +    type Item = OutPoint;
    +
    +    fn next(&mut self) -> Option<Self::Item> {
    +        self.request.next_outpoint()
    +    }
    +
    +    fn size_hint(&self) -> (usize, Option<usize>) {
    +        let remaining = self.request.outpoints.len();
    +        (remaining, Some(remaining))
         }
     }
     
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/bdk_electrum_client.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/bdk_electrum_client.rs.html index c7cb794b28..2b8390e5d0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/bdk_electrum_client.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/bdk_electrum_client.rs.html @@ -507,6 +507,32 @@ 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
    use bdk_chain::{
         bitcoin::{block::Header, BlockHash, OutPoint, ScriptBuf, Transaction, Txid},
         collections::{BTreeMap, HashMap},
    @@ -635,17 +661,22 @@
         /// [`Wallet.calculate_fee_rate`]: https://docs.rs/bdk_wallet/latest/bdk_wallet/struct.Wallet.html#method.calculate_fee_rate
         pub fn full_scan<K: Ord + Clone>(
             &self,
    -        request: FullScanRequest<K>,
    +        request: impl Into<FullScanRequest<K>>,
             stop_gap: usize,
             batch_size: usize,
             fetch_prev_txouts: bool,
         ) -> Result<FullScanResult<K>, Error> {
    -        let (tip, latest_blocks) =
    -            fetch_tip_and_latest_blocks(&self.inner, request.chain_tip.clone())?;
    -        let mut graph_update = TxGraph::<ConfirmationBlockTime>::default();
    -        let mut last_active_indices = BTreeMap::<K, u32>::new();
    +        let mut request: FullScanRequest<K> = request.into();
    +
    +        let tip_and_latest_blocks = match request.chain_tip() {
    +            Some(chain_tip) => Some(fetch_tip_and_latest_blocks(&self.inner, chain_tip)?),
    +            None => None,
    +        };
     
    -        for (keychain, spks) in request.spks_by_keychain {
    +        let mut graph_update = TxGraph::<ConfirmationBlockTime>::default();
    +        let mut last_active_indices = BTreeMap::<K, u32>::default();
    +        for keychain in request.keychains() {
    +            let spks = request.iter_spks(keychain.clone());
                 if let Some(last_active_index) =
                     self.populate_with_spks(&mut graph_update, spks, stop_gap, batch_size)?
                 {
    @@ -653,13 +684,20 @@
                 }
             }
     
    -        let chain_update = chain_update(tip, &latest_blocks, graph_update.all_anchors())?;
    -
             // Fetch previous `TxOut`s for fee calculation if flag is enabled.
             if fetch_prev_txouts {
                 self.fetch_prev_txout(&mut graph_update)?;
             }
     
    +        let chain_update = match tip_and_latest_blocks {
    +            Some((chain_tip, latest_blocks)) => Some(chain_update(
    +                chain_tip,
    +                &latest_blocks,
    +                graph_update.all_anchors(),
    +            )?),
    +            _ => None,
    +        };
    +
             Ok(FullScanResult {
                 graph_update,
                 chain_update,
    @@ -689,35 +727,49 @@
         /// [`CalculateFeeError::MissingTxOut`]: bdk_chain::tx_graph::CalculateFeeError::MissingTxOut
         /// [`Wallet.calculate_fee`]: https://docs.rs/bdk_wallet/latest/bdk_wallet/struct.Wallet.html#method.calculate_fee
         /// [`Wallet.calculate_fee_rate`]: https://docs.rs/bdk_wallet/latest/bdk_wallet/struct.Wallet.html#method.calculate_fee_rate
    -    pub fn sync(
    +    pub fn sync<I: 'static>(
             &self,
    -        request: SyncRequest,
    +        request: impl Into<SyncRequest<I>>,
             batch_size: usize,
             fetch_prev_txouts: bool,
         ) -> Result<SyncResult, Error> {
    -        let full_scan_req = FullScanRequest::from_chain_tip(request.chain_tip.clone())
    -            .set_spks_for_keychain((), request.spks.enumerate().map(|(i, spk)| (i as u32, spk)));
    -        let mut full_scan_res = self.full_scan(full_scan_req, usize::MAX, batch_size, false)?;
    -        let (tip, latest_blocks) =
    -            fetch_tip_and_latest_blocks(&self.inner, request.chain_tip.clone())?;
    -
    -        self.populate_with_txids(&mut full_scan_res.graph_update, request.txids)?;
    -        self.populate_with_outpoints(&mut full_scan_res.graph_update, request.outpoints)?;
    -
    -        let chain_update = chain_update(
    -            tip,
    -            &latest_blocks,
    -            full_scan_res.graph_update.all_anchors(),
    +        let mut request: SyncRequest<I> = request.into();
    +
    +        let tip_and_latest_blocks = match request.chain_tip() {
    +            Some(chain_tip) => Some(fetch_tip_and_latest_blocks(&self.inner, chain_tip)?),
    +            None => None,
    +        };
    +
    +        let mut graph_update = TxGraph::<ConfirmationBlockTime>::default();
    +        self.populate_with_spks(
    +            &mut graph_update,
    +            request
    +                .iter_spks()
    +                .enumerate()
    +                .map(|(i, spk)| (i as u32, spk)),
    +            usize::MAX,
    +            batch_size,
             )?;
    +        self.populate_with_txids(&mut graph_update, request.iter_txids())?;
    +        self.populate_with_outpoints(&mut graph_update, request.iter_outpoints())?;
     
             // Fetch previous `TxOut`s for fee calculation if flag is enabled.
             if fetch_prev_txouts {
    -            self.fetch_prev_txout(&mut full_scan_res.graph_update)?;
    +            self.fetch_prev_txout(&mut graph_update)?;
             }
     
    +        let chain_update = match tip_and_latest_blocks {
    +            Some((chain_tip, latest_blocks)) => Some(chain_update(
    +                chain_tip,
    +                &latest_blocks,
    +                graph_update.all_anchors(),
    +            )?),
    +            None => None,
    +        };
    +
             Ok(SyncResult {
    +            graph_update,
                 chain_update,
    -            graph_update: full_scan_res.graph_update,
             })
         }
     
    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 1b36c951b9..ea3de402a0 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
    @@ -588,75 +588,121 @@
     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
     
    use std::collections::BTreeSet;
     
     use async_trait::async_trait;
     use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult};
     use bdk_chain::{
    -    bitcoin::{BlockHash, OutPoint, ScriptBuf, TxOut, Txid},
    +    bitcoin::{BlockHash, OutPoint, ScriptBuf, Txid},
         collections::BTreeMap,
         local_chain::CheckPoint,
         BlockId, ConfirmationBlockTime, TxGraph,
     };
     use bdk_chain::{Anchor, Indexed};
    -use esplora_client::{Amount, TxStatus};
    +use esplora_client::{Tx, TxStatus};
     use futures::{stream::FuturesOrdered, TryStreamExt};
     
    -use crate::anchor_from_status;
    +use crate::{insert_anchor_from_status, insert_prevouts};
     
     /// [`esplora_client::Error`]
     type Error = Box<esplora_client::Error>;
     
     /// Trait to extend the functionality of [`esplora_client::AsyncClient`].
     ///
    -/// Refer to [crate-level documentation] for more.
    -///
    -/// [crate-level documentation]: crate
    +/// Refer to [crate-level documentation](crate) for more.
     #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
     #[cfg_attr(not(target_arch = "wasm32"), async_trait)]
     pub trait EsploraAsyncExt {
         /// 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`]
    -    ///
    -    /// 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
    -    /// make in parallel.
    -    ///
    -    /// ## Note
    +    /// `request` provides the data required to perform a script-pubkey-based full scan
    +    /// (see [`FullScanRequest`]). The full scan for each keychain (`K`) stops after a gap of
    +    /// `stop_gap` script pubkeys with no associated transactions. `parallel_requests` specifies
    +    /// the maximum number of HTTP requests to make in parallel.
         ///
    -    /// `stop_gap` is defined as "the maximum number of consecutive unused addresses".
    -    /// For example, with a `stop_gap` of  3, `full_scan` will keep scanning
    -    /// until it encounters 3 consecutive script pubkeys with no associated transactions.
    -    ///
    -    /// This follows the same approach as other Bitcoin-related software,
    -    /// such as [Electrum](https://electrum.readthedocs.io/en/latest/faq.html#what-is-the-gap-limit),
    -    /// [BTCPay Server](https://docs.btcpayserver.org/FAQ/Wallet/#the-gap-limit-problem),
    -    /// and [Sparrow](https://www.sparrowwallet.com/docs/faq.html#ive-restored-my-wallet-but-some-of-my-funds-are-missing).
    -    ///
    -    /// A `stop_gap` of 0 will be treated as a `stop_gap` of 1.
    -    async fn full_scan<K: Ord + Clone + Send>(
    +    /// Refer to [crate-level docs](crate) for more.
    +    async fn full_scan<K: Ord + Clone + Send, R: Into<FullScanRequest<K>> + Send>(
             &self,
    -        request: FullScanRequest<K>,
    +        request: R,
             stop_gap: usize,
             parallel_requests: usize,
         ) -> Result<FullScanResult<K>, 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`]
    +    /// Sync a set of scripts, txids, and/or outpoints against Esplora.
         ///
    -    /// 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.
    +    /// `request` provides the data required to perform a script-pubkey-based sync (see
    +    /// [`SyncRequest`]). `parallel_requests` specifies the maximum number of HTTP requests to make
    +    /// in parallel.
         ///
    -    /// [`full_scan`]: EsploraAsyncExt::full_scan
    -    async fn sync(
    +    /// Refer to [crate-level docs](crate) for more.
    +    async fn sync<I: Send, R: Into<SyncRequest<I>> + Send>(
             &self,
    -        request: SyncRequest,
    +        request: R,
             parallel_requests: usize,
         ) -> Result<SyncResult, Error>;
     }
    @@ -664,27 +710,42 @@
     #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
     #[cfg_attr(not(target_arch = "wasm32"), async_trait)]
     impl EsploraAsyncExt for esplora_client::AsyncClient {
    -    async fn full_scan<K: Ord + Clone + Send>(
    +    async fn full_scan<K: Ord + Clone + Send, R: Into<FullScanRequest<K>> + Send>(
             &self,
    -        request: FullScanRequest<K>,
    +        request: R,
             stop_gap: usize,
             parallel_requests: usize,
         ) -> Result<FullScanResult<K>, Error> {
    -        let latest_blocks = fetch_latest_blocks(self).await?;
    -        let (graph_update, last_active_indices) = full_scan_for_index_and_graph(
    -            self,
    -            request.spks_by_keychain,
    -            stop_gap,
    -            parallel_requests,
    -        )
    -        .await?;
    -        let chain_update = chain_update(
    -            self,
    -            &latest_blocks,
    -            &request.chain_tip,
    -            graph_update.all_anchors(),
    -        )
    -        .await?;
    +        let mut request = request.into();
    +        let keychains = request.keychains();
    +
    +        let chain_tip = request.chain_tip();
    +        let latest_blocks = if chain_tip.is_some() {
    +            Some(fetch_latest_blocks(self).await?)
    +        } else {
    +            None
    +        };
    +
    +        let mut graph_update = TxGraph::default();
    +        let mut last_active_indices = BTreeMap::<K, u32>::new();
    +        for keychain in keychains {
    +            let keychain_spks = request.iter_spks(keychain.clone());
    +            let (tx_graph, last_active_index) =
    +                fetch_txs_with_keychain_spks(self, keychain_spks, stop_gap, parallel_requests)
    +                    .await?;
    +            let _ = graph_update.apply_update(tx_graph);
    +            if let Some(last_active_index) = last_active_index {
    +                last_active_indices.insert(keychain, last_active_index);
    +            }
    +        }
    +
    +        let chain_update = match (chain_tip, latest_blocks) {
    +            (Some(chain_tip), Some(latest_blocks)) => Some(
    +                chain_update(self, &latest_blocks, &chain_tip, graph_update.all_anchors()).await?,
    +            ),
    +            _ => None,
    +        };
    +
             Ok(FullScanResult {
                 chain_update,
                 graph_update,
    @@ -692,27 +753,37 @@
             })
         }
     
    -    async fn sync(
    +    async fn sync<I: Send, R: Into<SyncRequest<I>> + Send>(
             &self,
    -        request: SyncRequest,
    +        request: R,
             parallel_requests: usize,
         ) -> Result<SyncResult, Error> {
    -        let latest_blocks = fetch_latest_blocks(self).await?;
    -        let graph_update = sync_for_index_and_graph(
    -            self,
    -            request.spks,
    -            request.txids,
    -            request.outpoints,
    -            parallel_requests,
    -        )
    -        .await?;
    -        let chain_update = chain_update(
    -            self,
    -            &latest_blocks,
    -            &request.chain_tip,
    -            graph_update.all_anchors(),
    -        )
    -        .await?;
    +        let mut request = request.into();
    +
    +        let chain_tip = request.chain_tip();
    +        let latest_blocks = if chain_tip.is_some() {
    +            Some(fetch_latest_blocks(self).await?)
    +        } else {
    +            None
    +        };
    +
    +        let mut graph_update = TxGraph::<ConfirmationBlockTime>::default();
    +        let _ = graph_update
    +            .apply_update(fetch_txs_with_spks(self, request.iter_spks(), parallel_requests).await?);
    +        let _ = graph_update.apply_update(
    +            fetch_txs_with_txids(self, request.iter_txids(), parallel_requests).await?,
    +        );
    +        let _ = graph_update.apply_update(
    +            fetch_txs_with_outpoints(self, request.iter_outpoints(), parallel_requests).await?,
    +        );
    +
    +        let chain_update = match (chain_tip, latest_blocks) {
    +            (Some(chain_tip), Some(latest_blocks)) => Some(
    +                chain_update(self, &latest_blocks, &chain_tip, graph_update.all_anchors()).await?,
    +            ),
    +            _ => None,
    +        };
    +
             Ok(SyncResult {
                 chain_update,
                 graph_update,
    @@ -820,135 +891,150 @@
         Ok(tip)
     }
     
    -/// This performs a full scan to get an update for the [`TxGraph`] and
    -/// [`KeychainTxOutIndex`](bdk_chain::indexer::keychain_txout::KeychainTxOutIndex).
    -async fn full_scan_for_index_and_graph<K: Ord + Clone + Send>(
    +/// Fetch transactions and associated [`ConfirmationBlockTime`]s by scanning
    +/// `keychain_spks` against Esplora.
    +///
    +/// `keychain_spks` is an *unbounded* indexed-[`ScriptBuf`] iterator that represents scripts
    +/// derived from a keychain. The scanning logic stops after a `stop_gap` number of consecutive
    +/// scripts with no transaction history is reached. `parallel_requests` specifies the maximum
    +/// number of HTTP requests to make in parallel.
    +///
    +/// A [`TxGraph`] (containing the fetched transactions and anchors) and the last active
    +/// keychain index (if any) is returned. The last active keychain index is the keychain's last
    +/// script pubkey that contains a non-empty transaction history.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +async fn fetch_txs_with_keychain_spks<I: Iterator<Item = Indexed<ScriptBuf>> + Send>(
         client: &esplora_client::AsyncClient,
    -    keychain_spks: BTreeMap<
    -        K,
    -        impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send> + Send,
    -    >,
    +    mut keychain_spks: I,
         stop_gap: usize,
         parallel_requests: usize,
    -) -> Result<(TxGraph<ConfirmationBlockTime>, BTreeMap<K, u32>), Error> {
    +) -> Result<(TxGraph<ConfirmationBlockTime>, Option<u32>), Error> {
         type TxsOfSpkIndex = (u32, Vec<esplora_client::Tx>);
    -    let parallel_requests = Ord::max(parallel_requests, 1);
    -    let mut graph = TxGraph::<ConfirmationBlockTime>::default();
    -    let mut last_active_indexes = BTreeMap::<K, u32>::new();
     
    -    for (keychain, spks) in keychain_spks {
    -        let mut spks = spks.into_iter();
    -        let mut last_index = Option::<u32>::None;
    -        let mut last_active_index = Option::<u32>::None;
    +    let mut tx_graph = TxGraph::default();
    +    let mut last_index = Option::<u32>::None;
    +    let mut last_active_index = Option::<u32>::None;
     
    -        loop {
    -            let handles = spks
    -                .by_ref()
    -                .take(parallel_requests)
    -                .map(|(spk_index, spk)| {
    -                    let client = client.clone();
    -                    async move {
    -                        let mut last_seen = None;
    -                        let mut spk_txs = Vec::new();
    -                        loop {
    -                            let txs = client.scripthash_txs(&spk, last_seen).await?;
    -                            let tx_count = txs.len();
    -                            last_seen = txs.last().map(|tx| tx.txid);
    -                            spk_txs.extend(txs);
    -                            if tx_count < 25 {
    -                                break Result::<_, Error>::Ok((spk_index, spk_txs));
    -                            }
    +    loop {
    +        let handles = keychain_spks
    +            .by_ref()
    +            .take(parallel_requests)
    +            .map(|(spk_index, spk)| {
    +                let client = client.clone();
    +                async move {
    +                    let mut last_seen = None;
    +                    let mut spk_txs = Vec::new();
    +                    loop {
    +                        let txs = client.scripthash_txs(&spk, last_seen).await?;
    +                        let tx_count = txs.len();
    +                        last_seen = txs.last().map(|tx| tx.txid);
    +                        spk_txs.extend(txs);
    +                        if tx_count < 25 {
    +                            break Result::<_, Error>::Ok((spk_index, spk_txs));
                             }
                         }
    -                })
    -                .collect::<FuturesOrdered<_>>();
    -
    -            if handles.is_empty() {
    -                break;
    -            }
    -
    -            for (index, txs) in handles.try_collect::<Vec<TxsOfSpkIndex>>().await? {
    -                last_index = Some(index);
    -                if !txs.is_empty() {
    -                    last_active_index = Some(index);
                     }
    -                for tx in txs {
    -                    let _ = graph.insert_tx(tx.to_tx());
    -                    if let Some(anchor) = anchor_from_status(&tx.status) {
    -                        let _ = graph.insert_anchor(tx.txid, anchor);
    -                    }
    +            })
    +            .collect::<FuturesOrdered<_>>();
     
    -                    let previous_outputs = tx.vin.iter().filter_map(|vin| {
    -                        let prevout = vin.prevout.as_ref()?;
    -                        Some((
    -                            OutPoint {
    -                                txid: vin.txid,
    -                                vout: vin.vout,
    -                            },
    -                            TxOut {
    -                                script_pubkey: prevout.scriptpubkey.clone(),
    -                                value: Amount::from_sat(prevout.value),
    -                            },
    -                        ))
    -                    });
    +        if handles.is_empty() {
    +            break;
    +        }
     
    -                    for (outpoint, txout) in previous_outputs {
    -                        let _ = graph.insert_txout(outpoint, txout);
    -                    }
    -                }
    +        for (index, txs) in handles.try_collect::<Vec<TxsOfSpkIndex>>().await? {
    +            last_index = Some(index);
    +            if !txs.is_empty() {
    +                last_active_index = Some(index);
                 }
    -
    -            let last_index = last_index.expect("Must be set since handles wasn't empty.");
    -            let gap_limit_reached = if let Some(i) = last_active_index {
    -                last_index >= i.saturating_add(stop_gap as u32)
    -            } else {
    -                last_index + 1 >= stop_gap as u32
    -            };
    -            if gap_limit_reached {
    -                break;
    +            for tx in txs {
    +                let _ = tx_graph.insert_tx(tx.to_tx());
    +                insert_anchor_from_status(&mut tx_graph, tx.txid, tx.status);
    +                insert_prevouts(&mut tx_graph, tx.vin);
                 }
             }
     
    -        if let Some(last_active_index) = last_active_index {
    -            last_active_indexes.insert(keychain, last_active_index);
    +        let last_index = last_index.expect("Must be set since handles wasn't empty.");
    +        let gap_limit_reached = if let Some(i) = last_active_index {
    +            last_index >= i.saturating_add(stop_gap as u32)
    +        } else {
    +            last_index + 1 >= stop_gap as u32
    +        };
    +        if gap_limit_reached {
    +            break;
             }
         }
     
    -    Ok((graph, last_active_indexes))
    +    Ok((tx_graph, last_active_index))
     }
     
    -async fn sync_for_index_and_graph(
    +/// Fetch transactions and associated [`ConfirmationBlockTime`]s by scanning `spks`
    +/// against Esplora.
    +///
    +/// Unlike with [`EsploraAsyncExt::fetch_txs_with_keychain_spks`], `spks` must be *bounded* as
    +/// all contained scripts will be scanned. `parallel_requests` specifies the maximum number of
    +/// HTTP requests to make in parallel.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +async fn fetch_txs_with_spks<I: IntoIterator<Item = ScriptBuf> + Send>(
         client: &esplora_client::AsyncClient,
    -    misc_spks: impl IntoIterator<IntoIter = impl Iterator<Item = ScriptBuf> + Send> + Send,
    -    txids: impl IntoIterator<IntoIter = impl Iterator<Item = Txid> + Send> + Send,
    -    outpoints: impl IntoIterator<IntoIter = impl Iterator<Item = OutPoint> + Send> + Send,
    +    spks: I,
         parallel_requests: usize,
    -) -> Result<TxGraph<ConfirmationBlockTime>, Error> {
    -    let mut graph = full_scan_for_index_and_graph(
    +) -> Result<TxGraph<ConfirmationBlockTime>, Error>
    +where
    +    I::IntoIter: Send,
    +{
    +    fetch_txs_with_keychain_spks(
             client,
    -        [(
    -            (),
    -            misc_spks
    -                .into_iter()
    -                .enumerate()
    -                .map(|(i, spk)| (i as u32, spk)),
    -        )]
    -        .into(),
    +        spks.into_iter().enumerate().map(|(i, spk)| (i as u32, spk)),
             usize::MAX,
             parallel_requests,
         )
         .await
    -    .map(|(g, _)| g)?;
    +    .map(|(tx_graph, _)| tx_graph)
    +}
    +
    +/// Fetch transactions and associated [`ConfirmationBlockTime`]s by scanning `txids`
    +/// against Esplora.
    +///
    +/// `parallel_requests` specifies the maximum number of HTTP requests to make in parallel.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +async fn fetch_txs_with_txids<I: IntoIterator<Item = Txid> + Send>(
    +    client: &esplora_client::AsyncClient,
    +    txids: I,
    +    parallel_requests: usize,
    +) -> Result<TxGraph<ConfirmationBlockTime>, Error>
    +where
    +    I::IntoIter: Send,
    +{
    +    enum EsploraResp {
    +        TxStatus(TxStatus),
    +        Tx(Option<Tx>),
    +    }
     
    +    let mut tx_graph = TxGraph::default();
         let mut txids = txids.into_iter();
         loop {
             let handles = txids
                 .by_ref()
                 .take(parallel_requests)
    -            .filter(|&txid| graph.get_tx(txid).is_none())
                 .map(|txid| {
                     let client = client.clone();
    -                async move { client.get_tx_status(&txid).await.map(|s| (txid, s)) }
    +                let tx_already_exists = tx_graph.get_tx(txid).is_some();
    +                async move {
    +                    if tx_already_exists {
    +                        client
    +                            .get_tx_status(&txid)
    +                            .await
    +                            .map(|s| (txid, EsploraResp::TxStatus(s)))
    +                    } else {
    +                        client
    +                            .get_tx_info(&txid)
    +                            .await
    +                            .map(|t| (txid, EsploraResp::Tx(t)))
    +                    }
    +                }
                 })
                 .collect::<FuturesOrdered<_>>();
     
    @@ -956,40 +1042,82 @@
                 break;
             }
     
    -        for (txid, status) in handles.try_collect::<Vec<(Txid, TxStatus)>>().await? {
    -            if let Some(anchor) = anchor_from_status(&status) {
    -                let _ = graph.insert_anchor(txid, anchor);
    +        for (txid, resp) in handles.try_collect::<Vec<_>>().await? {
    +            match resp {
    +                EsploraResp::TxStatus(status) => {
    +                    insert_anchor_from_status(&mut tx_graph, txid, status);
    +                }
    +                EsploraResp::Tx(Some(tx_info)) => {
    +                    let _ = tx_graph.insert_tx(tx_info.to_tx());
    +                    insert_anchor_from_status(&mut tx_graph, txid, tx_info.status);
    +                    insert_prevouts(&mut tx_graph, tx_info.vin);
    +                }
    +                _ => continue,
                 }
             }
         }
    +    Ok(tx_graph)
    +}
     
    -    for op in outpoints.into_iter() {
    -        if graph.get_tx(op.txid).is_none() {
    -            if let Some(tx) = client.get_tx(&op.txid).await? {
    -                let _ = graph.insert_tx(tx);
    -            }
    -            let status = client.get_tx_status(&op.txid).await?;
    -            if let Some(anchor) = anchor_from_status(&status) {
    -                let _ = graph.insert_anchor(op.txid, anchor);
    -            }
    +/// Fetch transactions and [`ConfirmationBlockTime`]s that contain and spend the provided
    +/// `outpoints`.
    +///
    +/// `parallel_requests` specifies the maximum number of HTTP requests to make in parallel.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +async fn fetch_txs_with_outpoints<I: IntoIterator<Item = OutPoint> + Send>(
    +    client: &esplora_client::AsyncClient,
    +    outpoints: I,
    +    parallel_requests: usize,
    +) -> Result<TxGraph<ConfirmationBlockTime>, Error>
    +where
    +    I::IntoIter: Send,
    +{
    +    let outpoints = outpoints.into_iter().collect::<Vec<_>>();
    +
    +    // make sure txs exists in graph and tx statuses are updated
    +    // TODO: We should maintain a tx cache (like we do with Electrum).
    +    let mut tx_graph = fetch_txs_with_txids(
    +        client,
    +        outpoints.iter().copied().map(|op| op.txid),
    +        parallel_requests,
    +    )
    +    .await?;
    +
    +    // get outpoint spend-statuses
    +    let mut outpoints = outpoints.into_iter();
    +    let mut missing_txs = Vec::<Txid>::with_capacity(outpoints.len());
    +    loop {
    +        let handles = outpoints
    +            .by_ref()
    +            .take(parallel_requests)
    +            .map(|op| {
    +                let client = client.clone();
    +                async move { client.get_output_status(&op.txid, op.vout as _).await }
    +            })
    +            .collect::<FuturesOrdered<_>>();
    +
    +        if handles.is_empty() {
    +            break;
             }
     
    -        if let Some(op_status) = client.get_output_status(&op.txid, op.vout as _).await? {
    -            if let Some(txid) = op_status.txid {
    -                if graph.get_tx(txid).is_none() {
    -                    if let Some(tx) = client.get_tx(&txid).await? {
    -                        let _ = graph.insert_tx(tx);
    -                    }
    -                    let status = client.get_tx_status(&txid).await?;
    -                    if let Some(anchor) = anchor_from_status(&status) {
    -                        let _ = graph.insert_anchor(txid, anchor);
    -                    }
    -                }
    +        for op_status in handles.try_collect::<Vec<_>>().await?.into_iter().flatten() {
    +            let spend_txid = match op_status.txid {
    +                Some(txid) => txid,
    +                None => continue,
    +            };
    +            if tx_graph.get_tx(spend_txid).is_none() {
    +                missing_txs.push(spend_txid);
    +            }
    +            if let Some(spend_status) = op_status.status {
    +                insert_anchor_from_status(&mut tx_graph, spend_txid, spend_status);
                 }
             }
         }
     
    -    Ok(graph)
    +    let _ =
    +        tx_graph.apply_update(fetch_txs_with_txids(client, missing_txs, parallel_requests).await?);
    +    Ok(tx_graph)
     }
     
     #[cfg(test)]
    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 68f7afd1ba..dad35cbfb4 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
    @@ -783,92 +783,163 @@
     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
     
    use std::collections::BTreeSet;
     use std::thread::JoinHandle;
     
     use bdk_chain::collections::BTreeMap;
     use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult};
     use bdk_chain::{
    -    bitcoin::{Amount, BlockHash, OutPoint, ScriptBuf, TxOut, Txid},
    +    bitcoin::{BlockHash, OutPoint, ScriptBuf, Txid},
         local_chain::CheckPoint,
         BlockId, ConfirmationBlockTime, TxGraph,
     };
     use bdk_chain::{Anchor, Indexed};
    -use esplora_client::TxStatus;
    +use esplora_client::{OutputStatus, Tx, TxStatus};
     
    -use crate::anchor_from_status;
    +use crate::{insert_anchor_from_status, insert_prevouts};
     
     /// [`esplora_client::Error`]
     pub type Error = Box<esplora_client::Error>;
     
     /// Trait to extend the functionality of [`esplora_client::BlockingClient`].
     ///
    -/// Refer to [crate-level documentation] for more.
    -///
    -/// [crate-level documentation]: crate
    +/// Refer to [crate-level documentation](crate) for more.
     pub trait EsploraExt {
         /// 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`]
    -    ///
    -    /// 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
    -    /// make in parallel.
    -    ///
    -    /// ## Note
    -    ///
    -    /// `stop_gap` is defined as "the maximum number of consecutive unused addresses".
    -    /// For example, with a `stop_gap` of  3, `full_scan` will keep scanning
    -    /// until it encounters 3 consecutive script pubkeys with no associated transactions.
    +    /// `request` provides the data required to perform a script-pubkey-based full scan
    +    /// (see [`FullScanRequest`]). The full scan for each keychain (`K`) stops after a gap of
    +    /// `stop_gap` script pubkeys with no associated transactions. `parallel_requests` specifies
    +    /// the maximum number of HTTP requests to make in parallel.
         ///
    -    /// This follows the same approach as other Bitcoin-related software,
    -    /// such as [Electrum](https://electrum.readthedocs.io/en/latest/faq.html#what-is-the-gap-limit),
    -    /// [BTCPay Server](https://docs.btcpayserver.org/FAQ/Wallet/#the-gap-limit-problem),
    -    /// and [Sparrow](https://www.sparrowwallet.com/docs/faq.html#ive-restored-my-wallet-but-some-of-my-funds-are-missing).
    -    ///
    -    /// A `stop_gap` of 0 will be treated as a `stop_gap` of 1.
    -    fn full_scan<K: Ord + Clone>(
    +    /// Refer to [crate-level docs](crate) for more.
    +    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>(
             &self,
    -        request: FullScanRequest<K>,
    +        request: R,
             stop_gap: usize,
             parallel_requests: usize,
         ) -> Result<FullScanResult<K>, 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`]
    +    /// Sync a set of scripts, txids, and/or outpoints against Esplora.
         ///
    -    /// 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.
    +    /// `request` provides the data required to perform a script-pubkey-based sync (see
    +    /// [`SyncRequest`]). `parallel_requests` specifies the maximum number of HTTP requests to make
    +    /// in parallel.
         ///
    -    /// [`full_scan`]: EsploraExt::full_scan
    -    fn sync(&self, request: SyncRequest, parallel_requests: usize) -> Result<SyncResult, Error>;
    +    /// Refer to [crate-level docs](crate) for more.
    +    fn sync<I: 'static, R: Into<SyncRequest<I>>>(
    +        &self,
    +        request: R,
    +        parallel_requests: usize,
    +    ) -> Result<SyncResult, Error>;
     }
     
     impl EsploraExt for esplora_client::BlockingClient {
    -    fn full_scan<K: Ord + Clone>(
    +    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>(
             &self,
    -        request: FullScanRequest<K>,
    +        request: R,
             stop_gap: usize,
             parallel_requests: usize,
         ) -> Result<FullScanResult<K>, Error> {
    -        let latest_blocks = fetch_latest_blocks(self)?;
    -        let (graph_update, last_active_indices) = full_scan_for_index_and_graph_blocking(
    -            self,
    -            request.spks_by_keychain,
    -            stop_gap,
    -            parallel_requests,
    -        )?;
    -        let chain_update = chain_update(
    -            self,
    -            &latest_blocks,
    -            &request.chain_tip,
    -            graph_update.all_anchors(),
    -        )?;
    +        let mut request = request.into();
    +
    +        let chain_tip = request.chain_tip();
    +        let latest_blocks = if chain_tip.is_some() {
    +            Some(fetch_latest_blocks(self)?)
    +        } else {
    +            None
    +        };
    +
    +        let mut graph_update = TxGraph::default();
    +        let mut last_active_indices = BTreeMap::<K, u32>::new();
    +        for keychain in request.keychains() {
    +            let keychain_spks = request.iter_spks(keychain.clone());
    +            let (tx_graph, last_active_index) =
    +                fetch_txs_with_keychain_spks(self, keychain_spks, stop_gap, parallel_requests)?;
    +            let _ = graph_update.apply_update(tx_graph);
    +            if let Some(last_active_index) = last_active_index {
    +                last_active_indices.insert(keychain, last_active_index);
    +            }
    +        }
    +
    +        let chain_update = match (chain_tip, latest_blocks) {
    +            (Some(chain_tip), Some(latest_blocks)) => Some(chain_update(
    +                self,
    +                &latest_blocks,
    +                &chain_tip,
    +                graph_update.all_anchors(),
    +            )?),
    +            _ => None,
    +        };
    +
             Ok(FullScanResult {
                 chain_update,
                 graph_update,
    @@ -876,21 +947,47 @@
             })
         }
     
    -    fn sync(&self, request: SyncRequest, parallel_requests: usize) -> Result<SyncResult, Error> {
    -        let latest_blocks = fetch_latest_blocks(self)?;
    -        let graph_update = sync_for_index_and_graph_blocking(
    +    fn sync<I: 'static, R: Into<SyncRequest<I>>>(
    +        &self,
    +        request: R,
    +        parallel_requests: usize,
    +    ) -> Result<SyncResult, Error> {
    +        let mut request: SyncRequest<I> = request.into();
    +
    +        let chain_tip = request.chain_tip();
    +        let latest_blocks = if chain_tip.is_some() {
    +            Some(fetch_latest_blocks(self)?)
    +        } else {
    +            None
    +        };
    +
    +        let mut graph_update = TxGraph::default();
    +        let _ = graph_update.apply_update(fetch_txs_with_spks(
                 self,
    -            request.spks,
    -            request.txids,
    -            request.outpoints,
    +            request.iter_spks(),
                 parallel_requests,
    -        )?;
    -        let chain_update = chain_update(
    +        )?);
    +        let _ = graph_update.apply_update(fetch_txs_with_txids(
                 self,
    -            &latest_blocks,
    -            &request.chain_tip,
    -            graph_update.all_anchors(),
    -        )?;
    +            request.iter_txids(),
    +            parallel_requests,
    +        )?);
    +        let _ = graph_update.apply_update(fetch_txs_with_outpoints(
    +            self,
    +            request.iter_outpoints(),
    +            parallel_requests,
    +        )?);
    +
    +        let chain_update = match (chain_tip, latest_blocks) {
    +            (Some(chain_tip), Some(latest_blocks)) => Some(chain_update(
    +                self,
    +                &latest_blocks,
    +                &chain_tip,
    +                graph_update.all_anchors(),
    +            )?),
    +            _ => None,
    +        };
    +
             Ok(SyncResult {
                 chain_update,
                 graph_update,
    @@ -997,184 +1094,221 @@
         Ok(tip)
     }
     
    -/// This performs a full scan to get an update for the [`TxGraph`] and
    -/// [`KeychainTxOutIndex`](bdk_chain::indexer::keychain_txout::KeychainTxOutIndex).
    -fn full_scan_for_index_and_graph_blocking<K: Ord + Clone>(
    +fn fetch_txs_with_keychain_spks<I: Iterator<Item = Indexed<ScriptBuf>>>(
         client: &esplora_client::BlockingClient,
    -    keychain_spks: BTreeMap<K, impl IntoIterator<Item = Indexed<ScriptBuf>>>,
    +    mut keychain_spks: I,
         stop_gap: usize,
         parallel_requests: usize,
    -) -> Result<(TxGraph<ConfirmationBlockTime>, BTreeMap<K, u32>), Error> {
    +) -> Result<(TxGraph<ConfirmationBlockTime>, Option<u32>), Error> {
         type TxsOfSpkIndex = (u32, Vec<esplora_client::Tx>);
    -    let parallel_requests = Ord::max(parallel_requests, 1);
    -    let mut tx_graph = TxGraph::<ConfirmationBlockTime>::default();
    -    let mut last_active_indices = BTreeMap::<K, u32>::new();
    -
    -    for (keychain, spks) in keychain_spks {
    -        let mut spks = spks.into_iter();
    -        let mut last_index = Option::<u32>::None;
    -        let mut last_active_index = Option::<u32>::None;
    -
    -        loop {
    -            let handles = spks
    -                .by_ref()
    -                .take(parallel_requests)
    -                .map(|(spk_index, spk)| {
    -                    std::thread::spawn({
    -                        let client = client.clone();
    -                        move || -> Result<TxsOfSpkIndex, Error> {
    -                            let mut last_seen = None;
    -                            let mut spk_txs = Vec::new();
    -                            loop {
    -                                let txs = client.scripthash_txs(&spk, last_seen)?;
    -                                let tx_count = txs.len();
    -                                last_seen = txs.last().map(|tx| tx.txid);
    -                                spk_txs.extend(txs);
    -                                if tx_count < 25 {
    -                                    break Ok((spk_index, spk_txs));
    -                                }
    -                            }
    -                        }
    -                    })
    -                })
    -                .collect::<Vec<JoinHandle<Result<TxsOfSpkIndex, Error>>>>();
     
    -            if handles.is_empty() {
    -                break;
    -            }
    +    let mut tx_graph = TxGraph::default();
    +    let mut last_index = Option::<u32>::None;
    +    let mut last_active_index = Option::<u32>::None;
     
    -            for handle in handles {
    -                let (index, txs) = handle.join().expect("thread must not panic")?;
    -                last_index = Some(index);
    -                if !txs.is_empty() {
    -                    last_active_index = Some(index);
    -                }
    -                for tx in txs {
    -                    let _ = tx_graph.insert_tx(tx.to_tx());
    -                    if let Some(anchor) = anchor_from_status(&tx.status) {
    -                        let _ = tx_graph.insert_anchor(tx.txid, anchor);
    +    loop {
    +        let handles = keychain_spks
    +            .by_ref()
    +            .take(parallel_requests)
    +            .map(|(spk_index, spk)| {
    +                std::thread::spawn({
    +                    let client = client.clone();
    +                    move || -> Result<TxsOfSpkIndex, Error> {
    +                        let mut last_seen = None;
    +                        let mut spk_txs = Vec::new();
    +                        loop {
    +                            let txs = client.scripthash_txs(&spk, last_seen)?;
    +                            let tx_count = txs.len();
    +                            last_seen = txs.last().map(|tx| tx.txid);
    +                            spk_txs.extend(txs);
    +                            if tx_count < 25 {
    +                                break Ok((spk_index, spk_txs));
    +                            }
    +                        }
                         }
    +                })
    +            })
    +            .collect::<Vec<JoinHandle<Result<TxsOfSpkIndex, Error>>>>();
     
    -                    let previous_outputs = tx.vin.iter().filter_map(|vin| {
    -                        let prevout = vin.prevout.as_ref()?;
    -                        Some((
    -                            OutPoint {
    -                                txid: vin.txid,
    -                                vout: vin.vout,
    -                            },
    -                            TxOut {
    -                                script_pubkey: prevout.scriptpubkey.clone(),
    -                                value: Amount::from_sat(prevout.value),
    -                            },
    -                        ))
    -                    });
    +        if handles.is_empty() {
    +            break;
    +        }
     
    -                    for (outpoint, txout) in previous_outputs {
    -                        let _ = tx_graph.insert_txout(outpoint, txout);
    -                    }
    -                }
    +        for handle in handles {
    +            let (index, txs) = handle.join().expect("thread must not panic")?;
    +            last_index = Some(index);
    +            if !txs.is_empty() {
    +                last_active_index = Some(index);
                 }
    -
    -            let last_index = last_index.expect("Must be set since handles wasn't empty.");
    -            let gap_limit_reached = if let Some(i) = last_active_index {
    -                last_index >= i.saturating_add(stop_gap as u32)
    -            } else {
    -                last_index + 1 >= stop_gap as u32
    -            };
    -            if gap_limit_reached {
    -                break;
    +            for tx in txs {
    +                let _ = tx_graph.insert_tx(tx.to_tx());
    +                insert_anchor_from_status(&mut tx_graph, tx.txid, tx.status);
    +                insert_prevouts(&mut tx_graph, tx.vin);
                 }
             }
     
    -        if let Some(last_active_index) = last_active_index {
    -            last_active_indices.insert(keychain, last_active_index);
    +        let last_index = last_index.expect("Must be set since handles wasn't empty.");
    +        let gap_limit_reached = if let Some(i) = last_active_index {
    +            last_index >= i.saturating_add(stop_gap as u32)
    +        } else {
    +            last_index + 1 >= stop_gap as u32
    +        };
    +        if gap_limit_reached {
    +            break;
             }
         }
     
    -    Ok((tx_graph, last_active_indices))
    +    Ok((tx_graph, last_active_index))
     }
     
    -fn sync_for_index_and_graph_blocking(
    +/// Fetch transactions and associated [`ConfirmationBlockTime`]s by scanning `spks`
    +/// against Esplora.
    +///
    +/// Unlike with [`EsploraExt::fetch_txs_with_keychain_spks`], `spks` must be *bounded* as all
    +/// contained scripts will be scanned. `parallel_requests` specifies the maximum number of HTTP
    +/// requests to make in parallel.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +fn fetch_txs_with_spks<I: IntoIterator<Item = ScriptBuf>>(
         client: &esplora_client::BlockingClient,
    -    misc_spks: impl IntoIterator<Item = ScriptBuf>,
    -    txids: impl IntoIterator<Item = Txid>,
    -    outpoints: impl IntoIterator<Item = OutPoint>,
    +    spks: I,
         parallel_requests: usize,
     ) -> Result<TxGraph<ConfirmationBlockTime>, Error> {
    -    let (mut tx_graph, _) = full_scan_for_index_and_graph_blocking(
    +    fetch_txs_with_keychain_spks(
             client,
    -        {
    -            let mut keychains = BTreeMap::new();
    -            keychains.insert(
    -                (),
    -                misc_spks
    -                    .into_iter()
    -                    .enumerate()
    -                    .map(|(i, spk)| (i as u32, spk)),
    -            );
    -            keychains
    -        },
    +        spks.into_iter().enumerate().map(|(i, spk)| (i as u32, spk)),
             usize::MAX,
             parallel_requests,
    -    )?;
    +    )
    +    .map(|(tx_graph, _)| tx_graph)
    +}
    +
    +/// Fetch transactions and associated [`ConfirmationBlockTime`]s by scanning `txids`
    +/// against Esplora.
    +///
    +/// `parallel_requests` specifies the maximum number of HTTP requests to make in parallel.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +fn fetch_txs_with_txids<I: IntoIterator<Item = Txid>>(
    +    client: &esplora_client::BlockingClient,
    +    txids: I,
    +    parallel_requests: usize,
    +) -> Result<TxGraph<ConfirmationBlockTime>, Error> {
    +    enum EsploraResp {
    +        TxStatus(TxStatus),
    +        Tx(Option<Tx>),
    +    }
     
    +    let mut tx_graph = TxGraph::default();
         let mut txids = txids.into_iter();
         loop {
             let handles = txids
                 .by_ref()
                 .take(parallel_requests)
    -            .filter(|&txid| tx_graph.get_tx(txid).is_none())
                 .map(|txid| {
    -                std::thread::spawn({
    -                    let client = client.clone();
    -                    move || {
    +                let client = client.clone();
    +                let tx_already_exists = tx_graph.get_tx(txid).is_some();
    +                std::thread::spawn(move || {
    +                    if tx_already_exists {
                             client
                                 .get_tx_status(&txid)
                                 .map_err(Box::new)
    -                            .map(|s| (txid, s))
    +                            .map(|s| (txid, EsploraResp::TxStatus(s)))
    +                    } else {
    +                        client
    +                            .get_tx_info(&txid)
    +                            .map_err(Box::new)
    +                            .map(|t| (txid, EsploraResp::Tx(t)))
                         }
                     })
                 })
    -            .collect::<Vec<JoinHandle<Result<(Txid, TxStatus), Error>>>>();
    +            .collect::<Vec<JoinHandle<Result<(Txid, EsploraResp), Error>>>>();
     
             if handles.is_empty() {
                 break;
             }
     
             for handle in handles {
    -            let (txid, status) = handle.join().expect("thread must not panic")?;
    -            if let Some(anchor) = anchor_from_status(&status) {
    -                let _ = tx_graph.insert_anchor(txid, anchor);
    +            let (txid, resp) = handle.join().expect("thread must not panic")?;
    +            match resp {
    +                EsploraResp::TxStatus(status) => {
    +                    insert_anchor_from_status(&mut tx_graph, txid, status);
    +                }
    +                EsploraResp::Tx(Some(tx_info)) => {
    +                    let _ = tx_graph.insert_tx(tx_info.to_tx());
    +                    insert_anchor_from_status(&mut tx_graph, txid, tx_info.status);
    +                    insert_prevouts(&mut tx_graph, tx_info.vin);
    +                }
    +                _ => continue,
                 }
             }
         }
    +    Ok(tx_graph)
    +}
     
    -    for op in outpoints {
    -        if tx_graph.get_tx(op.txid).is_none() {
    -            if let Some(tx) = client.get_tx(&op.txid)? {
    -                let _ = tx_graph.insert_tx(tx);
    -            }
    -            let status = client.get_tx_status(&op.txid)?;
    -            if let Some(anchor) = anchor_from_status(&status) {
    -                let _ = tx_graph.insert_anchor(op.txid, anchor);
    -            }
    +/// Fetch transactions and [`ConfirmationBlockTime`]s that contain and spend the provided
    +/// `outpoints`.
    +///
    +/// `parallel_requests` specifies the maximum number of HTTP requests to make in parallel.
    +///
    +/// Refer to [crate-level docs](crate) for more.
    +fn fetch_txs_with_outpoints<I: IntoIterator<Item = OutPoint>>(
    +    client: &esplora_client::BlockingClient,
    +    outpoints: I,
    +    parallel_requests: usize,
    +) -> Result<TxGraph<ConfirmationBlockTime>, Error> {
    +    let outpoints = outpoints.into_iter().collect::<Vec<_>>();
    +
    +    // make sure txs exists in graph and tx statuses are updated
    +    // TODO: We should maintain a tx cache (like we do with Electrum).
    +    let mut tx_graph = fetch_txs_with_txids(
    +        client,
    +        outpoints.iter().map(|op| op.txid),
    +        parallel_requests,
    +    )?;
    +
    +    // get outpoint spend-statuses
    +    let mut outpoints = outpoints.into_iter();
    +    let mut missing_txs = Vec::<Txid>::with_capacity(outpoints.len());
    +    loop {
    +        let handles = outpoints
    +            .by_ref()
    +            .take(parallel_requests)
    +            .map(|op| {
    +                let client = client.clone();
    +                std::thread::spawn(move || {
    +                    client
    +                        .get_output_status(&op.txid, op.vout as _)
    +                        .map_err(Box::new)
    +                })
    +            })
    +            .collect::<Vec<JoinHandle<Result<Option<OutputStatus>, Error>>>>();
    +
    +        if handles.is_empty() {
    +            break;
             }
     
    -        if let Some(op_status) = client.get_output_status(&op.txid, op.vout as _)? {
    -            if let Some(txid) = op_status.txid {
    -                if tx_graph.get_tx(txid).is_none() {
    -                    if let Some(tx) = client.get_tx(&txid)? {
    -                        let _ = tx_graph.insert_tx(tx);
    -                    }
    -                    let status = client.get_tx_status(&txid)?;
    -                    if let Some(anchor) = anchor_from_status(&status) {
    -                        let _ = tx_graph.insert_anchor(txid, anchor);
    -                    }
    +        for handle in handles {
    +            if let Some(op_status) = handle.join().expect("thread must not panic")? {
    +                let spend_txid = match op_status.txid {
    +                    Some(txid) => txid,
    +                    None => continue,
    +                };
    +                if tx_graph.get_tx(spend_txid).is_none() {
    +                    missing_txs.push(spend_txid);
    +                }
    +                if let Some(spend_status) = op_status.status {
    +                    insert_anchor_from_status(&mut tx_graph, spend_txid, spend_status);
                     }
                 }
             }
         }
     
    +    let _ = tx_graph.apply_update(fetch_txs_with_txids(
    +        client,
    +        missing_txs,
    +        parallel_requests,
    +    )?);
         Ok(tx_graph)
     }
     
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/lib.rs.html
    index 657a4bb938..ce004e8e81 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/lib.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/lib.rs.html
    @@ -47,25 +47,68 @@
     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
     
    #![doc = include_str!("../README.md")]
    -
    -//! This crate is used for updating structures of [`bdk_chain`] with data from an Esplora server.
    +//! # Stop Gap
    +//!
    +//! [`EsploraExt::full_scan`] takes in a `stop_gap` input which is defined as the maximum number of
    +//! consecutive unused script pubkeys to scan transactions for before stopping.
    +//!
    +//! For example, with a `stop_gap` of 3, `full_scan` will keep scanning until it encounters 3
    +//! consecutive script pubkeys with no associated transactions.
    +//!
    +//! This follows the same approach as other Bitcoin-related software,
    +//! such as [Electrum](https://electrum.readthedocs.io/en/latest/faq.html#what-is-the-gap-limit),
    +//! [BTCPay Server](https://docs.btcpayserver.org/FAQ/Wallet/#the-gap-limit-problem),
    +//! and [Sparrow](https://www.sparrowwallet.com/docs/faq.html#ive-restored-my-wallet-but-some-of-my-funds-are-missing).
     //!
    -//! The two primary methods are [`EsploraExt::sync`] and [`EsploraExt::full_scan`]. In most cases
    -//! [`EsploraExt::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
    -//! has shown a user. [`EsploraExt::full_scan`] is meant to be used when importing or restoring a
    -//! keychain where the range of possibly used scripts is not known. In this case it is necessary to
    -//! scan all keychain scripts until a number (the "stop gap") of unused scripts is discovered. For a
    -//! sync or full scan the user receives relevant blockchain data and output updates for [`bdk_chain`]
    -//! via a new [`TxGraph`] to be appended to any existing [`TxGraph`] data.
    +//! A `stop_gap` of 0 will be treated as a `stop_gap` of 1.
     //!
    -//! Refer to [`example_esplora`] for a complete example.
    +//! # Async
    +//!
    +//! Just like how [`EsploraExt`] extends the functionality of an
    +//! [`esplora_client::BlockingClient`], [`EsploraAsyncExt`] is the async version which extends
    +//! [`esplora_client::AsyncClient`].
     //!
     //! [`TxGraph`]: bdk_chain::tx_graph::TxGraph
    +//! [`LocalChain`]: bdk_chain::local_chain::LocalChain
    +//! [`ChainOracle`]: bdk_chain::ChainOracle
     //! [`example_esplora`]: https://github.com/bitcoindevkit/bdk/tree/master/example-crates/example_esplora
     
    -use bdk_chain::{BlockId, ConfirmationBlockTime};
    +use bdk_chain::bitcoin::{Amount, OutPoint, TxOut, Txid};
    +use bdk_chain::{BlockId, ConfirmationBlockTime, TxGraph};
     use esplora_client::TxStatus;
     
     pub use esplora_client;
    @@ -80,20 +123,43 @@
     #[cfg(feature = "async")]
     pub use async_ext::*;
     
    -fn anchor_from_status(status: &TxStatus) -> Option<ConfirmationBlockTime> {
    +fn insert_anchor_from_status(
    +    tx_graph: &mut TxGraph<ConfirmationBlockTime>,
    +    txid: Txid,
    +    status: TxStatus,
    +) {
         if let TxStatus {
             block_height: Some(height),
             block_hash: Some(hash),
             block_time: Some(time),
             ..
    -    } = status.clone()
    +    } = status
         {
    -        Some(ConfirmationBlockTime {
    +        let anchor = ConfirmationBlockTime {
                 block_id: BlockId { height, hash },
                 confirmation_time: time,
    -        })
    -    } else {
    -        None
    -    }
    +        };
    +        let _ = tx_graph.insert_anchor(txid, anchor);
    +    }
    +}
    +
    +/// Inserts floating txouts into `tx_graph` using [`Vin`](esplora_client::api::Vin)s returned by
    +/// Esplora.
    +fn insert_prevouts(
    +    tx_graph: &mut TxGraph<ConfirmationBlockTime>,
    +    esplora_inputs: impl IntoIterator<Item = esplora_client::api::Vin>,
    +) {
    +    let prevouts = esplora_inputs
    +        .into_iter()
    +        .filter_map(|vin| Some((vin.txid, vin.vout, vin.prevout?)));
    +    for (prev_txid, prev_vout, prev_txout) in prevouts {
    +        let _ = tx_graph.insert_txout(
    +            OutPoint::new(prev_txid, prev_vout),
    +            TxOut {
    +                script_pubkey: prev_txout.scriptpubkey,
    +                value: Amount::from_sat(prev_txout.value),
    +            },
    +        );
    +    }
     }
     
    \ No newline at end of file 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 5fdd02946b..9699e2faf9 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 @@ -2591,6 +2591,12 @@ 2591 2592 2593 +2594 +2595 +2596 +2597 +2598 +2599
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -2622,7 +2628,10 @@
         local_chain::{
             self, ApplyHeaderError, CannotConnectError, CheckPoint, CheckPointIter, LocalChain,
         },
    -    spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult},
    +    spk_client::{
    +        FullScanRequest, FullScanRequestBuilder, FullScanResult, SyncRequest, SyncRequestBuilder,
    +        SyncResult,
    +    },
         tx_graph::{CanonicalTx, TxGraph, TxNode},
         BlockId, ChainPosition, ConfirmationBlockTime, ConfirmationTime, DescriptorExt, FullTxOut,
         Indexed, IndexedTxGraph, Merge,
    @@ -2744,7 +2753,7 @@
             Self {
                 last_active_indices: value.last_active_indices,
                 graph: value.graph_update,
    -            chain: Some(value.chain_update),
    +            chain: value.chain_update,
             }
         }
     }
    @@ -2754,7 +2763,7 @@
             Self {
                 last_active_indices: BTreeMap::new(),
                 graph: value.graph_update,
    -            chain: Some(value.chain_update),
    +            chain: value.chain_update,
             }
         }
     }
    @@ -5030,9 +5039,10 @@
         /// 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
         /// start a blockchain sync with a spk based blockchain client.
    -    pub fn start_sync_with_revealed_spks(&self) -> SyncRequest {
    -        SyncRequest::from_chain_tip(self.chain.tip())
    -            .populate_with_revealed_spks(&self.indexed_graph.index, ..)
    +    pub fn start_sync_with_revealed_spks(&self) -> SyncRequestBuilder<(KeychainKind, u32)> {
    +        SyncRequest::builder()
    +            .chain_tip(self.chain.tip())
    +            .revealed_spks_from_indexer(&self.indexed_graph.index, ..)
         }
     
         /// Create a [`FullScanRequest] for this wallet.
    @@ -5043,8 +5053,10 @@
         ///
         /// This operation is generally only used when importing or restoring a previously used wallet
         /// in which the list of used scripts is not known.
    -    pub fn start_full_scan(&self) -> FullScanRequest<KeychainKind> {
    -        FullScanRequest::from_keychain_txout_index(self.chain.tip(), &self.indexed_graph.index)
    +    pub fn start_full_scan(&self) -> FullScanRequestBuilder<KeychainKind> {
    +        FullScanRequest::builder()
    +            .chain_tip(self.chain.tip())
    +            .spks_from_indexer(&self.indexed_graph.index)
         }
     }
     
    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 1a68c7e838..f64022a851 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
    @@ -280,65 +280,10 @@
     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
     
    use std::io::{self, Write};
     
     use bdk_chain::{
    -    bitcoin::{Address, Network, Txid},
    +    bitcoin::Network,
         collections::BTreeSet,
         indexed_tx_graph,
         spk_client::{FullScanRequest, SyncRequest},
    @@ -476,8 +421,9 @@
                     let graph = &*graph.lock().unwrap();
                     let chain = &*chain.lock().unwrap();
     
    -                FullScanRequest::from_chain_tip(chain.tip())
    -                    .set_spks_for_keychain(
    +                FullScanRequest::builder()
    +                    .chain_tip(chain.tip())
    +                    .spks_for_keychain(
                             Keychain::External,
                             graph
                                 .index
    @@ -485,7 +431,7 @@
                                 .into_iter()
                                 .flatten(),
                         )
    -                    .set_spks_for_keychain(
    +                    .spks_for_keychain(
                             Keychain::Internal,
                             graph
                                 .index
    @@ -493,7 +439,7 @@
                                 .into_iter()
                                 .flatten(),
                         )
    -                    .inspect_spks_for_all_keychains({
    +                    .inspect({
                             let mut once = BTreeSet::new();
                             move |k, spk_i, _| {
                                 if once.insert(k) {
    @@ -536,99 +482,43 @@
                 }
     
                 let chain_tip = chain.tip();
    -            let mut request = SyncRequest::from_chain_tip(chain_tip.clone());
    +            let mut request =
    +                SyncRequest::builder()
    +                    .chain_tip(chain_tip.clone())
    +                    .inspect(|item, progress| {
    +                        let pc = (100 * progress.consumed()) as f32 / progress.total() as f32;
    +                        eprintln!("[ SCANNING {:03.0}% ] {}", pc, item);
    +                    });
     
                 if all_spks {
    -                let all_spks = graph
    -                    .index
    -                    .revealed_spks(..)
    -                    .map(|(index, spk)| (index, spk.to_owned()))
    -                    .collect::<Vec<_>>();
    -                request = request.chain_spks(all_spks.into_iter().map(|((k, spk_i), spk)| {
    -                    eprint!("Scanning {}: {}", k, spk_i);
    -                    spk
    -                }));
    +                request = request.spks_with_indexes(graph.index.revealed_spks(..));
                 }
                 if unused_spks {
    -                let unused_spks = graph
    -                    .index
    -                    .unused_spks()
    -                    .map(|(index, spk)| (index, spk.to_owned()))
    -                    .collect::<Vec<_>>();
    -                request =
    -                    request.chain_spks(unused_spks.into_iter().map(move |((k, spk_i), spk)| {
    -                        eprint!(
    -                            "Checking if address {} {}:{} has been used",
    -                            Address::from_script(&spk, network).unwrap(),
    -                            k,
    -                            spk_i,
    -                        );
    -                        spk
    -                    }));
    +                request = request.spks_with_indexes(graph.index.unused_spks());
                 }
    -
                 if utxos {
                     let init_outpoints = graph.index.outpoints();
    -
    -                let utxos = graph
    -                    .graph()
    -                    .filter_chain_unspents(
    -                        &*chain,
    -                        chain_tip.block_id(),
    -                        init_outpoints.iter().cloned(),
    -                    )
    -                    .map(|(_, utxo)| utxo)
    -                    .collect::<Vec<_>>();
    -                request = request.chain_outpoints(utxos.into_iter().map(|utxo| {
    -                    eprint!(
    -                        "Checking if outpoint {} (value: {}) has been spent",
    -                        utxo.outpoint, utxo.txout.value
    -                    );
    -                    utxo.outpoint
    -                }));
    +                request = request.outpoints(
    +                    graph
    +                        .graph()
    +                        .filter_chain_unspents(
    +                            &*chain,
    +                            chain_tip.block_id(),
    +                            init_outpoints.iter().cloned(),
    +                        )
    +                        .map(|(_, utxo)| utxo.outpoint),
    +                );
                 };
    -
                 if unconfirmed {
    -                let unconfirmed_txids = graph
    -                    .graph()
    -                    .list_canonical_txs(&*chain, chain_tip.block_id())
    -                    .filter(|canonical_tx| !canonical_tx.chain_position.is_confirmed())
    -                    .map(|canonical_tx| canonical_tx.tx_node.txid)
    -                    .collect::<Vec<Txid>>();
    -
    -                request = request.chain_txids(
    -                    unconfirmed_txids
    -                        .into_iter()
    -                        .inspect(|txid| eprint!("Checking if {} is confirmed yet", txid)),
    +                request = request.txids(
    +                    graph
    +                        .graph()
    +                        .list_canonical_txs(&*chain, chain_tip.block_id())
    +                        .filter(|canonical_tx| !canonical_tx.chain_position.is_confirmed())
    +                        .map(|canonical_tx| canonical_tx.tx_node.txid),
                     );
                 }
     
    -            let total_spks = request.spks.len();
    -            let total_txids = request.txids.len();
    -            let total_ops = request.outpoints.len();
    -            request = request
    -                .inspect_spks({
    -                    let mut visited = 0;
    -                    move |_| {
    -                        visited += 1;
    -                        eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_spks as f32)
    -                    }
    -                })
    -                .inspect_txids({
    -                    let mut visited = 0;
    -                    move |_| {
    -                        visited += 1;
    -                        eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_txids as f32)
    -                    }
    -                })
    -                .inspect_outpoints({
    -                    let mut visited = 0;
    -                    move |_| {
    -                        visited += 1;
    -                        eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_ops as f32)
    -                    }
    -                });
    -
                 let res = client
                     .sync(request, scan_options.batch_size, false)
                     .context("scanning the blockchain")?;
    @@ -650,7 +540,7 @@
             let mut chain = chain.lock().unwrap();
             let mut graph = graph.lock().unwrap();
     
    -        let chain_changeset = chain.apply_update(chain_update)?;
    +        let chain_changeset = chain.apply_update(chain_update.expect("request has chain tip"))?;
     
             let mut indexed_tx_graph_changeset =
                 indexed_tx_graph::ChangeSet::<ConfirmationBlockTime, _>::default();
    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 4c3bd23383..2fac019d70 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
    @@ -293,62 +293,14 @@
     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
    -
    use std::{
    +
    use core::f32;
    +use std::{
         collections::BTreeSet,
         io::{self, Write},
     };
     
     use bdk_chain::{
    -    bitcoin::{Address, Network, Txid},
    +    bitcoin::Network,
         spk_client::{FullScanRequest, SyncRequest},
         Merge,
     };
    @@ -488,8 +440,10 @@
                 let request = {
                     let chain_tip = chain.lock().expect("mutex must not be poisoned").tip();
                     let indexed_graph = &*graph.lock().expect("mutex must not be poisoned");
    -                FullScanRequest::from_keychain_txout_index(chain_tip, &indexed_graph.index)
    -                    .inspect_spks_for_all_keychains({
    +                FullScanRequest::builder()
    +                    .chain_tip(chain_tip)
    +                    .spks_from_indexer(&indexed_graph.index)
    +                    .inspect({
                             let mut once = BTreeSet::<Keychain>::new();
                             move |keychain, spk_i, _| {
                                 if once.insert(keychain) {
    @@ -500,6 +454,7 @@
                                 let _ = io::stderr().flush();
                             }
                         })
    +                    .build()
                 };
     
                 // The client scans keychain spks for transaction histories, stopping after `stop_gap`
    @@ -520,14 +475,17 @@
                 // deriviation indices. Usually before a scan you are on a fresh wallet with no
                 // addresses derived so we need to derive up to last active addresses the scan found
                 // before adding the transactions.
    -            (chain.apply_update(update.chain_update)?, {
    -                let index_changeset = graph
    -                    .index
    -                    .reveal_to_target_multi(&update.last_active_indices);
    -                let mut indexed_tx_graph_changeset = graph.apply_update(update.graph_update);
    -                indexed_tx_graph_changeset.merge(index_changeset.into());
    -                indexed_tx_graph_changeset
    -            })
    +            (
    +                chain.apply_update(update.chain_update.expect("request included chain tip"))?,
    +                {
    +                    let index_changeset = graph
    +                        .index
    +                        .reveal_to_target_multi(&update.last_active_indices);
    +                    let mut indexed_tx_graph_changeset = graph.apply_update(update.graph_update);
    +                    indexed_tx_graph_changeset.merge(index_changeset.into());
    +                    indexed_tx_graph_changeset
    +                },
    +            )
             }
             EsploraCommands::Sync {
                 mut unused_spks,
    @@ -550,7 +508,15 @@
     
                 let local_tip = chain.lock().expect("mutex must not be poisoned").tip();
                 // Spks, outpoints and txids we want updates on will be accumulated here.
    -            let mut request = SyncRequest::from_chain_tip(local_tip.clone());
    +            let mut request =
    +                SyncRequest::builder()
    +                    .chain_tip(local_tip.clone())
    +                    .inspect(|item, progress| {
    +                        let pc = (100 * progress.consumed()) as f32 / progress.total() as f32;
    +                        eprintln!("[ SCANNING {:03.0}% ] {}", pc, item);
    +                        // Flush early to ensure we print at every iteration.
    +                        let _ = io::stderr().flush();
    +                    });
     
                 // Get a short lock on the structures to get spks, utxos, and txs that we are interested
                 // in.
    @@ -559,108 +525,41 @@
                     let chain = chain.lock().unwrap();
     
                     if *all_spks {
    -                    let all_spks = graph
    -                        .index
    -                        .revealed_spks(..)
    -                        .map(|((k, i), spk)| (k, i, spk.to_owned()))
    -                        .collect::<Vec<_>>();
    -                    request = request.chain_spks(all_spks.into_iter().map(|(k, i, spk)| {
    -                        eprint!("scanning {}:{}", k, i);
    -                        // Flush early to ensure we print at every iteration.
    -                        let _ = io::stderr().flush();
    -                        spk
    -                    }));
    +                    request = request.spks_with_indexes(graph.index.revealed_spks(..));
                     }
                     if unused_spks {
    -                    let unused_spks = graph
    -                        .index
    -                        .unused_spks()
    -                        .map(|(index, spk)| (index, spk.to_owned()))
    -                        .collect::<Vec<_>>();
    -                    request =
    -                        request.chain_spks(unused_spks.into_iter().map(move |((k, i), spk)| {
    -                            eprint!(
    -                                "Checking if address {} {}:{} has been used",
    -                                Address::from_script(&spk, network).unwrap(),
    -                                k,
    -                                i,
    -                            );
    -                            // Flush early to ensure we print at every iteration.
    -                            let _ = io::stderr().flush();
    -                            spk
    -                        }));
    +                    request = request.spks_with_indexes(graph.index.unused_spks());
                     }
                     if utxos {
                         // We want to search for whether the UTXO is spent, and spent by which
                         // transaction. We provide the outpoint of the UTXO to
                         // `EsploraExt::update_tx_graph_without_keychain`.
                         let init_outpoints = graph.index.outpoints();
    -                    let utxos = graph
    -                        .graph()
    -                        .filter_chain_unspents(
    -                            &*chain,
    -                            local_tip.block_id(),
    -                            init_outpoints.iter().cloned(),
    -                        )
    -                        .map(|(_, utxo)| utxo)
    -                        .collect::<Vec<_>>();
    -                    request = request.chain_outpoints(
    -                        utxos
    -                            .into_iter()
    -                            .inspect(|utxo| {
    -                                eprint!(
    -                                    "Checking if outpoint {} (value: {}) has been spent",
    -                                    utxo.outpoint, utxo.txout.value
    -                                );
    -                                // Flush early to ensure we print at every iteration.
    -                                let _ = io::stderr().flush();
    -                            })
    -                            .map(|utxo| utxo.outpoint),
    +                    request = request.outpoints(
    +                        graph
    +                            .graph()
    +                            .filter_chain_unspents(
    +                                &*chain,
    +                                local_tip.block_id(),
    +                                init_outpoints.iter().cloned(),
    +                            )
    +                            .map(|(_, utxo)| utxo.outpoint),
                         );
                     };
                     if unconfirmed {
                         // We want to search for whether the unconfirmed transaction is now confirmed.
                         // We provide the unconfirmed txids to
                         // `EsploraExt::update_tx_graph_without_keychain`.
    -                    let unconfirmed_txids = graph
    -                        .graph()
    -                        .list_canonical_txs(&*chain, local_tip.block_id())
    -                        .filter(|canonical_tx| !canonical_tx.chain_position.is_confirmed())
    -                        .map(|canonical_tx| canonical_tx.tx_node.txid)
    -                        .collect::<Vec<Txid>>();
    -                    request = request.chain_txids(unconfirmed_txids.into_iter().inspect(|txid| {
    -                        eprint!("Checking if {} is confirmed yet", txid);
    -                        // Flush early to ensure we print at every iteration.
    -                        let _ = io::stderr().flush();
    -                    }));
    +                    request = request.txids(
    +                        graph
    +                            .graph()
    +                            .list_canonical_txs(&*chain, local_tip.block_id())
    +                            .filter(|canonical_tx| !canonical_tx.chain_position.is_confirmed())
    +                            .map(|canonical_tx| canonical_tx.tx_node.txid),
    +                    );
                     }
                 }
     
    -            let total_spks = request.spks.len();
    -            let total_txids = request.txids.len();
    -            let total_ops = request.outpoints.len();
    -            request = request
    -                .inspect_spks({
    -                    let mut visited = 0;
    -                    move |_| {
    -                        visited += 1;
    -                        eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_spks as f32)
    -                    }
    -                })
    -                .inspect_txids({
    -                    let mut visited = 0;
    -                    move |_| {
    -                        visited += 1;
    -                        eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_txids as f32)
    -                    }
    -                })
    -                .inspect_outpoints({
    -                    let mut visited = 0;
    -                    move |_| {
    -                        visited += 1;
    -                        eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_ops as f32)
    -                    }
    -                });
                 let mut update = client.sync(request, scan_options.parallel_requests)?;
     
                 // Update last seen unconfirmed
    @@ -668,7 +567,10 @@
                 let _ = update.graph_update.update_last_seen_unconfirmed(now);
     
                 (
    -                chain.lock().unwrap().apply_update(update.chain_update)?,
    +                chain
    +                    .lock()
    +                    .unwrap()
    +                    .apply_update(update.chain_update.expect("request has chain tip"))?,
                     graph.lock().unwrap().apply_update(update.graph_update),
                 )
             }
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_electrum_example/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_electrum_example/main.rs.html
    index abc59f6243..6b692fbf6b 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_electrum_example/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_electrum_example/main.rs.html
    @@ -103,8 +103,6 @@
     103
     104
     105
    -106
    -107
     
    use bdk_wallet::file_store::Store;
     use bdk_wallet::Wallet;
     use std::io::Write;
    @@ -159,19 +157,17 @@
         // already have.
         client.populate_tx_cache(wallet.tx_graph());
     
    -    let request = wallet
    -        .start_full_scan()
    -        .inspect_spks_for_all_keychains({
    -            let mut once = HashSet::<KeychainKind>::new();
    -            move |k, spk_i, _| {
    -                if once.insert(k) {
    -                    print!("\nScanning keychain [{:?}]", k)
    -                } else {
    -                    print!(" {:<3}", spk_i)
    -                }
    +    let request = wallet.start_full_scan().inspect({
    +        let mut stdout = std::io::stdout();
    +        let mut once = HashSet::<KeychainKind>::new();
    +        move |k, spk_i, _| {
    +            if once.insert(k) {
    +                print!("\nScanning keychain [{:?}]", k);
                 }
    -        })
    -        .inspect_spks_for_all_keychains(|_, _, _| std::io::stdout().flush().expect("must flush"));
    +            print!(" {:<3}", spk_i);
    +            stdout.flush().expect("must flush");
    +        }
    +    });
     
         let mut update = client.full_scan(request, STOP_GAP, BATCH_SIZE, false)?;
     
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_async/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_async/main.rs.html
    index e0b30fdfe2..c284a6a120 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_async/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_async/main.rs.html
    @@ -92,6 +92,7 @@
     92
     93
     94
    +95
     
    use std::{collections::BTreeSet, io::Write};
     
     use anyhow::Ok;
    @@ -139,14 +140,15 @@
         print!("Syncing...");
         let client = esplora_client::Builder::new(ESPLORA_URL).build_async()?;
     
    -    let request = wallet.start_full_scan().inspect_spks_for_all_keychains({
    +    let request = wallet.start_full_scan().inspect({
    +        let mut stdout = std::io::stdout();
             let mut once = BTreeSet::<KeychainKind>::new();
             move |keychain, spk_i, _| {
                 if once.insert(keychain) {
    -                print!("\nScanning keychain [{:?}] ", keychain);
    +                print!("\nScanning keychain [{:?}]", keychain);
                 }
                 print!(" {:<3}", spk_i);
    -            std::io::stdout().flush().expect("must flush")
    +            stdout.flush().expect("must flush")
             }
         });
     
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_blocking/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_blocking/main.rs.html
    index f6697fd071..1733368141 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_blocking/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora_blocking/main.rs.html
    @@ -94,6 +94,7 @@
     94
     95
     96
    +97
     
    use std::{collections::BTreeSet, io::Write};
     
     use bdk_esplora::{esplora_client, EsploraExt};
    @@ -143,14 +144,15 @@
         print!("Syncing...");
         let client = esplora_client::Builder::new(ESPLORA_URL).build_blocking();
     
    -    let request = wallet.start_full_scan().inspect_spks_for_all_keychains({
    +    let request = wallet.start_full_scan().inspect({
    +        let mut stdout = std::io::stdout();
             let mut once = BTreeSet::<KeychainKind>::new();
             move |keychain, spk_i, _| {
                 if once.insert(keychain) {
                     print!("\nScanning keychain [{:?}] ", keychain);
                 }
                 print!(" {:<3}", spk_i);
    -            std::io::stdout().flush().expect("must flush")
    +            stdout.flush().expect("must flush")
             }
         });
     
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.PersistWith.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.PersistWith.js
    index eb11aadc0c..35e40869ee 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.PersistWith.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.PersistWith.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"bdk_wallet":[["impl PersistWith<Connection> for Wallet"],["impl PersistWith<Store<ChangeSet>> for Wallet"],["impl<'c> PersistWith<Transaction<'c>> for Wallet"]]
    +"bdk_wallet":[["impl PersistWith<Store<ChangeSet>> for Wallet"],["impl PersistWith<Connection> for Wallet"],["impl<'c> PersistWith<Transaction<'c>> for Wallet"]]
     };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/persist/trait.Staged.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.Staged.js
    index 971a74895b..16e5aea7d6 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.Staged.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/persist/trait.Staged.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"bdk_wallet":[["impl Staged for Wallet"]]
    +"bdk_wallet":[["impl Staged for Wallet"]]
     };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/tx_data_traits/trait.Merge.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Merge.js
    index 2ac90a8a74..a543ed209b 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Merge.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Merge.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
     "bdk_chain":[],
    -"bdk_wallet":[["impl Merge for ChangeSet"]],
    -"example_cli":[["impl Merge for ChangeSet"]]
    +"bdk_wallet":[["impl Merge for ChangeSet"]],
    +"example_cli":[["impl Merge for ChangeSet"]]
     };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_wallet/wallet/signer/trait.SignerCommon.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_wallet/wallet/signer/trait.SignerCommon.js
    index b941023d12..e2be123c6f 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_wallet/wallet/signer/trait.SignerCommon.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_wallet/wallet/signer/trait.SignerCommon.js
    @@ -1,4 +1,4 @@
     (function() {var implementors = {
    -"bdk_hwi":[["impl SignerCommon for HWISigner"]],
    +"bdk_hwi":[["impl SignerCommon for HWISigner"]],
     "bdk_wallet":[]
     };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_wallet/wallet/signer/trait.TransactionSigner.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_wallet/wallet/signer/trait.TransactionSigner.js
    index 4974266e47..54cf1ae9be 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_wallet/wallet/signer/trait.TransactionSigner.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_wallet/wallet/signer/trait.TransactionSigner.js
    @@ -1,4 +1,4 @@
     (function() {var implementors = {
    -"bdk_hwi":[["impl TransactionSigner for HWISigner"]],
    +"bdk_hwi":[["impl TransactionSigner for HWISigner"]],
     "bdk_wallet":[]
     };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 a942564774..0291bb26c4 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 ChangeSet"],["impl Clone for AlterCheckPointError"],["impl Clone for CannotConnectError"],["impl Clone for ChangeSet"],["impl Clone for CheckPoint"],["impl Clone for LocalChain"],["impl Clone for MissingGenesisError"],["impl Clone for Balance"],["impl Clone for BlockId"],["impl Clone for ConfirmationBlockTime"],["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 KeychainTxOutIndex<K>"]],
    +"bdk_chain":[["impl Clone for ConfirmationTime"],["impl Clone for ApplyHeaderError"],["impl Clone for ChangeSet"],["impl Clone for AlterCheckPointError"],["impl Clone for CannotConnectError"],["impl Clone for ChangeSet"],["impl Clone for CheckPoint"],["impl Clone for LocalChain"],["impl Clone for MissingGenesisError"],["impl Clone for SyncProgress"],["impl Clone for Balance"],["impl Clone for BlockId"],["impl Clone for ConfirmationBlockTime"],["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<'i, I: Clone> Clone for SyncItem<'i, I>"],["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 KeychainTxOutIndex<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 MiniscriptPsbtError"],["impl Clone for ScriptContextEnum"],["impl Clone for SignerContext"],["impl Clone for SignerId"],["impl Clone for TapLeavesOptions"],["impl Clone for ChangeSpendPolicy"],["impl Clone for TxOrdering"],["impl Clone for BranchAndBoundCoinSelection"],["impl Clone for LargestFirstCoinSelection"],["impl Clone for OldestFirstCoinSelection"],["impl Clone for Condition"],["impl Clone for Policy"],["impl Clone for PrivateKeyGenerateOptions"],["impl Clone for SignOptions"],["impl Clone for SignerOrdering"],["impl Clone for SignersContainer"],["impl Clone for ChangeSet"],["impl Clone for LocalOutput"],["impl Clone for Update"],["impl Clone for WeightedUtxo"],["impl<'a> Clone for BuildSatisfaction<'a>"],["impl<'a, Cs: Clone> Clone for TxBuilder<'a, Cs>"],["impl<K: Clone + DerivableKey<Legacy>> Clone for Bip44<K>"],["impl<K: Clone + DerivableKey<Legacy>> Clone for Bip44Public<K>"],["impl<K: Clone + DerivableKey<Segwitv0>> Clone for Bip49<K>"],["impl<K: Clone + DerivableKey<Segwitv0>> Clone for Bip49Public<K>"],["impl<K: Clone + DerivableKey<Segwitv0>> Clone for Bip84<K>"],["impl<K: Clone + DerivableKey<Segwitv0>> Clone for Bip84Public<K>"],["impl<K: Clone + DerivableKey<Tap>> Clone for Bip86<K>"],["impl<K: Clone + DerivableKey<Tap>> Clone for Bip86Public<K>"],["impl<K: Clone + IntoDescriptorKey<Legacy>> Clone for P2Pkh<K>"],["impl<K: Clone + IntoDescriptorKey<Segwitv0>> Clone for P2Wpkh<K>"],["impl<K: Clone + IntoDescriptorKey<Segwitv0>> Clone for P2Wpkh_P2Sh<K>"],["impl<K: Clone + IntoDescriptorKey<Tap>> Clone for P2TR<K>"],["impl<K: Clone, Ctx: ScriptContext> Clone for GeneratedKey<K, Ctx>"],["impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>"]],
     "example_bitcoind_rpc_polling":[["impl Clone for RpcCommands"],["impl Clone for RpcArgs"]],
     "example_cli":[["impl Clone for AddressCmd"],["impl Clone for CoinSelectionAlgo"],["impl Clone for Keychain"],["impl Clone for TxOutCmd"],["impl Clone for ChangeSet"],["impl<CS: Clone + Subcommand, S: Clone + Args> Clone for Commands<CS, S>"],["impl<S: Clone + Args> Clone for PsbtCmd<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 af24ef0f08..217d13f1f2 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 ConfirmationBlockTime"],["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<T: Eq> Eq for Persisted<T>"]],
    +"bdk_chain":[["impl Eq for ConfirmationTime"],["impl Eq for CalculateFeeError"],["impl Eq for Balance"],["impl Eq for BlockId"],["impl Eq for ConfirmationBlockTime"],["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<'i, I: Eq> Eq for SyncItem<'i, I>"],["impl<A: Eq> Eq for ChainPosition<A>"],["impl<A: Eq> Eq for FullTxOut<A>"],["impl<T: Eq> Eq for Persisted<T>"]],
     "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 SignerOrdering"],["impl Eq for AddressInfo"],["impl Eq for LocalOutput"],["impl Eq for WeightedUtxo"]],
     "example_cli":[["impl Eq 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/core/cmp/trait.Ord.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Ord.js
    index e1808dd634..a90e1ebe69 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Ord.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Ord.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl Ord for ConfirmationTime"],["impl Ord for BlockId"],["impl Ord for ConfirmationBlockTime"],["impl Ord for DescriptorId"],["impl<'a, T: Ord, A: Ord> Ord for CanonicalTx<'a, T, A>"],["impl<'a, T: Ord, A: Ord> Ord for TxNode<'a, T, A>"],["impl<A: Ord> Ord for ChainPosition<A>"],["impl<A: Ord> Ord for FullTxOut<A>"],["impl<T: Ord> Ord for Persisted<T>"]],
    +"bdk_chain":[["impl Ord for ConfirmationTime"],["impl Ord for BlockId"],["impl Ord for ConfirmationBlockTime"],["impl Ord for DescriptorId"],["impl<'a, T: Ord, A: Ord> Ord for CanonicalTx<'a, T, A>"],["impl<'a, T: Ord, A: Ord> Ord for TxNode<'a, T, A>"],["impl<'i, I: Ord> Ord for SyncItem<'i, I>"],["impl<A: Ord> Ord for ChainPosition<A>"],["impl<A: Ord> Ord for FullTxOut<A>"],["impl<T: Ord> Ord for Persisted<T>"]],
     "bdk_wallet":[["impl Ord for KeychainKind"],["impl Ord for SignerId"],["impl Ord for ChangeSpendPolicy"],["impl Ord for SignerOrdering"]],
     "example_cli":[["impl Ord 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/core/cmp/trait.PartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js
    index 8db2b07d73..348c7d7b44 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 ChangeSet"],["impl PartialEq for AlterCheckPointError"],["impl PartialEq for CannotConnectError"],["impl PartialEq for ChangeSet"],["impl PartialEq for CheckPoint"],["impl PartialEq for LocalChain"],["impl PartialEq for MissingGenesisError"],["impl PartialEq for Balance"],["impl PartialEq for BlockId"],["impl PartialEq for ConfirmationBlockTime"],["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<T: PartialEq> PartialEq for Persisted<T>"]],
    +"bdk_chain":[["impl PartialEq for ConfirmationTime"],["impl PartialEq for ApplyHeaderError"],["impl PartialEq for CalculateFeeError"],["impl PartialEq for ChangeSet"],["impl PartialEq for AlterCheckPointError"],["impl PartialEq for CannotConnectError"],["impl PartialEq for ChangeSet"],["impl PartialEq for CheckPoint"],["impl PartialEq for LocalChain"],["impl PartialEq for MissingGenesisError"],["impl PartialEq for Balance"],["impl PartialEq for BlockId"],["impl PartialEq for ConfirmationBlockTime"],["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<'i, I: PartialEq> PartialEq for SyncItem<'i, I>"],["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<T: PartialEq> PartialEq for Persisted<T>"]],
     "bdk_wallet":[["impl PartialEq for Error"],["impl PartialEq for PkOrF"],["impl PartialEq for PolicyError"],["impl PartialEq for Satisfaction"],["impl PartialEq for SatisfiableItem"],["impl PartialEq for KeychainKind"],["impl PartialEq for LoadError"],["impl PartialEq for LoadMismatch"],["impl PartialEq for Utxo"],["impl PartialEq for KeyError"],["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 SignerOrdering"],["impl PartialEq for AddressInfo"],["impl PartialEq for ChangeSet"],["impl PartialEq for LocalOutput"],["impl PartialEq for WeightedUtxo"],["impl<E: PartialEq> PartialEq for LoadWithPersistError<E>"]],
     "example_cli":[["impl PartialEq for Keychain"],["impl PartialEq for ChangeSet"]],
     "example_electrum":[["impl PartialEq for ScanOptions"]],
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialOrd.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialOrd.js
    index 488540075e..610b564a4f 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialOrd.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialOrd.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl PartialOrd for ConfirmationTime"],["impl PartialOrd for BlockId"],["impl PartialOrd for ConfirmationBlockTime"],["impl PartialOrd for DescriptorId"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for CanonicalTx<'a, T, A>"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for TxNode<'a, T, A>"],["impl<A: PartialOrd> PartialOrd for ChainPosition<A>"],["impl<A: PartialOrd> PartialOrd for FullTxOut<A>"],["impl<T: PartialOrd> PartialOrd for Persisted<T>"]],
    +"bdk_chain":[["impl PartialOrd for ConfirmationTime"],["impl PartialOrd for BlockId"],["impl PartialOrd for ConfirmationBlockTime"],["impl PartialOrd for DescriptorId"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for CanonicalTx<'a, T, A>"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd for TxNode<'a, T, A>"],["impl<'i, I: PartialOrd> PartialOrd for SyncItem<'i, I>"],["impl<A: PartialOrd> PartialOrd for ChainPosition<A>"],["impl<A: PartialOrd> PartialOrd for FullTxOut<A>"],["impl<T: PartialOrd> PartialOrd for Persisted<T>"]],
     "bdk_wallet":[["impl PartialOrd for KeychainKind"],["impl PartialOrd for SignerId"],["impl PartialOrd for ChangeSpendPolicy"],["impl PartialOrd for Condition"],["impl PartialOrd for SignerOrdering"]],
     "example_cli":[["impl PartialOrd 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/core/convert/trait.AsRef.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js
    index f85fedae4e..a54eb9a2cf 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<ConfirmationBlockTime>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]]
    +"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationBlockTime>> 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 f43b972e00..e5aba555e5 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,6 +1,6 @@
     (function() {var implementors = {
    -"bdk_chain":[["impl From<(&u32, &BlockHash)> for BlockId"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<ChainPosition<ConfirmationBlockTime>> for ConfirmationTime"],["impl From<BlockId> for (u32, BlockHash)"],["impl From<DescriptorId> for Hash"],["impl From<Hash> for DescriptorId"],["impl<A> From<ChangeSet> for ChangeSet<A, ChangeSet>"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet"],["impl<T> From<T> for Impl<T>"]],
    +"bdk_chain":[["impl From<(&u32, &BlockHash)> for BlockId"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<ChainPosition<ConfirmationBlockTime>> for ConfirmationTime"],["impl From<BlockId> for (u32, BlockHash)"],["impl From<DescriptorId> for Hash"],["impl From<Hash> for DescriptorId"],["impl<A> From<ChangeSet> for ChangeSet<A, ChangeSet>"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet"],["impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>"],["impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>"],["impl<T> From<T> for Impl<T>"]],
     "bdk_file_store":[["impl From<Error> for FileError"],["impl From<Error> for IterError"]],
    -"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<LoadMismatch> for LoadError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<KeyError> for Error"],["impl From<bool> for Satisfaction"],["impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet> for ChangeSet"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<SyncResult> for Update"],["impl From<ChangeSet<ConfirmationBlockTime>> for ChangeSet"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for CreateTxError"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["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>"],["impl<E> From<LoadMismatch> for LoadWithPersistError<E>"]],
    +"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<LoadMismatch> for LoadError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<KeyError> for Error"],["impl From<bool> for Satisfaction"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet<ConfirmationBlockTime>> for ChangeSet"],["impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for CreateTxError"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["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>"],["impl<E> From<LoadMismatch> for LoadWithPersistError<E>"]],
     "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 23827ae31c..34679f0f9f 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 ChangeSet"],["impl Default for ChangeSet"],["impl Default for Balance"],["impl Default for BlockId"],["impl Default for ConfirmationBlockTime"],["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 KeychainTxOutIndex<K>"]],
    +"bdk_chain":[["impl Default for ChangeSet"],["impl Default for ChangeSet"],["impl Default for Balance"],["impl Default for BlockId"],["impl Default for ConfirmationBlockTime"],["impl<A> Default for SyncResult<A>"],["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<I> Default for SyncRequest<I>"],["impl<I> Default for SyncRequestBuilder<I>"],["impl<K> Default for KeychainTxOutIndex<K>"],["impl<K> Default for FullScanRequest<K>"],["impl<K> Default for FullScanRequestBuilder<K>"],["impl<K, A> Default for FullScanResult<K, A>"]],
     "bdk_testenv":[["impl<'a> Default for Config<'a>"]],
     "bdk_wallet":[["impl Default for TapLeavesOptions"],["impl Default for ChangeSpendPolicy"],["impl Default for TxOrdering"],["impl Default for BranchAndBoundCoinSelection"],["impl Default for LargestFirstCoinSelection"],["impl Default for OldestFirstCoinSelection"],["impl Default for Condition"],["impl Default for PrivateKeyGenerateOptions"],["impl Default for SignOptions"],["impl Default for SignerOrdering"],["impl Default for SignersContainer"],["impl Default for ChangeSet"],["impl Default for LoadParams"],["impl Default for Update"]],
     "example_cli":[["impl Default for CoinSelectionAlgo"],["impl Default for ChangeSet"]]
    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 73e1e79980..01c1a951af 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 ChangeSet"],["impl Debug for AlterCheckPointError"],["impl Debug for CannotConnectError"],["impl Debug for ChangeSet"],["impl Debug for CheckPoint"],["impl Debug for LocalChain"],["impl Debug for MissingGenesisError"],["impl Debug for Balance"],["impl Debug for BlockId"],["impl Debug for ConfirmationBlockTime"],["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 KeychainTxOutIndex<K>"],["impl<T: Debug> Debug for Persisted<T>"]],
    +"bdk_chain":[["impl Debug for ConfirmationTime"],["impl Debug for ApplyHeaderError"],["impl Debug for CalculateFeeError"],["impl Debug for ChangeSet"],["impl Debug for AlterCheckPointError"],["impl Debug for CannotConnectError"],["impl Debug for ChangeSet"],["impl Debug for CheckPoint"],["impl Debug for LocalChain"],["impl Debug for MissingGenesisError"],["impl Debug for SyncProgress"],["impl Debug for Balance"],["impl Debug for BlockId"],["impl Debug for ConfirmationBlockTime"],["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<'i, I: Debug> Debug for SyncItem<'i, I>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl<A: Debug> Debug for SyncResult<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 KeychainTxOutIndex<K>"],["impl<K: Debug, A: Debug> Debug for FullScanResult<K, A>"],["impl<T: Debug> Debug for Persisted<T>"]],
     "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>"]], "bdk_hwi":[["impl Debug for HWISigner"]], 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 32bda681b0..491fbe0a4c 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 AlterCheckPointError"],["impl Display for CannotConnectError"],["impl Display for MissingGenesisError"],["impl Display for Balance"],["impl Display for DescriptorId"],["impl<K: Debug> Display for InsertDescriptorError<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<'i, I: Debug + Any> Display for SyncItem<'i, I>"],["impl<K: Debug> Display for InsertDescriptorError<K>"]], "bdk_file_store":[["impl Display for FileError"],["impl Display for IterError"],["impl<C> Display for AggregateChangesetsError<C>"]], "bdk_wallet":[["impl Display for Error"],["impl Display for Error"],["impl Display for PolicyError"],["impl Display for ApplyBlockError"],["impl Display for LoadError"],["impl Display for BuildFeeBumpError"],["impl Display for CreateTxError"],["impl Display for MiniscriptPsbtError"],["impl Display for KeyError"],["impl Display for SignerError"],["impl Display for AddForeignUtxoError"],["impl Display for AddUtxoError"],["impl Display for FullyNodedExport"],["impl Display for AddressInfo"],["impl<E: Display> Display for CreateWithPersistError<E>"],["impl<E: Display> Display for LoadWithPersistError<E>"]], "example_cli":[["impl Display for CoinSelectionAlgo"],["impl Display for Keychain"]] diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/hash/trait.Hash.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/hash/trait.Hash.js index cd803ef02f..0a7aff6015 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/hash/trait.Hash.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/hash/trait.Hash.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"bdk_chain":[["impl Hash for ConfirmationTime"],["impl Hash for BlockId"],["impl Hash for ConfirmationBlockTime"],["impl Hash for DescriptorId"],["impl<A: Hash> Hash for ChainPosition<A>"]], +"bdk_chain":[["impl Hash for ConfirmationTime"],["impl Hash for BlockId"],["impl Hash for ConfirmationBlockTime"],["impl Hash for DescriptorId"],["impl<'i, I: Hash> Hash for SyncItem<'i, I>"],["impl<A: Hash> Hash for ChainPosition<A>"]], "bdk_wallet":[["impl Hash for PkOrF"],["impl Hash for KeychainKind"],["impl Hash for SignerId"],["impl Hash for ChangeSpendPolicy"],["impl Hash for Condition"],["impl Hash for LocalOutput"]] };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/marker/trait.Copy.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Copy.js index 61c17e704a..9ada9e0264 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Copy.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Copy.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Copy for ConfirmationTime"],["impl Copy for BlockId"],["impl Copy for ConfirmationBlockTime"],["impl Copy for DescriptorId"],["impl<A: Copy> Copy for ChainPosition<A>"]], +"bdk_chain":[["impl Copy for ConfirmationTime"],["impl Copy for BlockId"],["impl Copy for ConfirmationBlockTime"],["impl Copy for DescriptorId"],["impl<'i, I: Copy> Copy for SyncItem<'i, I>"],["impl<A: Copy> Copy for ChainPosition<A>"]], "bdk_wallet":[["impl Copy for KeychainKind"],["impl Copy for ScriptContextEnum"],["impl Copy for SignerContext"],["impl Copy for ChangeSpendPolicy"],["impl Copy for LargestFirstCoinSelection"],["impl Copy for OldestFirstCoinSelection"],["impl Copy for Condition"],["impl Copy for PrivateKeyGenerateOptions"],["impl<'a> Copy for BuildSatisfaction<'a>"]], "example_cli":[["impl Copy 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/core/marker/trait.Freeze.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js index 8ef061a8e0..ef7476a93a 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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Freeze for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Freeze for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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 KeychainTxOutIndex<K>",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["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<T> Freeze for Impl<T>
    where\n T: Freeze,
    ",1,["bdk_chain::Impl"]],["impl<T> Freeze for Persisted<T>
    where\n T: Freeze,
    ",1,["bdk_chain::persist::Persisted"]]], +"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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Freeze for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Freeze for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 SyncProgress",1,["bdk_chain::spk_client::SyncProgress"]],["impl Freeze for Balance",1,["bdk_chain::balance::Balance"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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<'i, I> Freeze for SyncItem<'i, I>
    where\n I: Freeze,
    ",1,["bdk_chain::spk_client::SyncItem"]],["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<I> Freeze for SyncRequest<I>",1,["bdk_chain::spk_client::SyncRequest"]],["impl<I> Freeze for SyncRequestBuilder<I>",1,["bdk_chain::spk_client::SyncRequestBuilder"]],["impl<K> !Freeze for InsertDescriptorError<K>",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Freeze for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Freeze for FullScanRequestBuilder<K>",1,["bdk_chain::spk_client::FullScanRequestBuilder"]],["impl<K, A> Freeze for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> Freeze for Impl<T>
    where\n T: Freeze,
    ",1,["bdk_chain::Impl"]],["impl<T> Freeze for Persisted<T>
    where\n T: Freeze,
    ",1,["bdk_chain::persist::Persisted"]]], "bdk_electrum":[["impl<E> !Freeze for BdkElectrumClient<E>",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]]], "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"]]], "bdk_hwi":[["impl Freeze for HWISigner",1,["bdk_hwi::signer::HWISigner"]]], 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 5195f862d3..3beddae8ab 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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Send for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Send for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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 KeychainTxOutIndex<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["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<T> Send for Impl<T>
    where\n T: Send,
    ",1,["bdk_chain::Impl"]],["impl<T> Send for Persisted<T>
    where\n T: Send,
    ",1,["bdk_chain::persist::Persisted"]]], +"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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Send for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Send for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 SyncProgress",1,["bdk_chain::spk_client::SyncProgress"]],["impl Send for Balance",1,["bdk_chain::balance::Balance"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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<'i, I> Send for SyncItem<'i, I>
    where\n I: Send,
    ",1,["bdk_chain::spk_client::SyncItem"]],["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<I> Send for SyncRequest<I>
    where\n I: Send,
    ",1,["bdk_chain::spk_client::SyncRequest"]],["impl<I> Send for SyncRequestBuilder<I>
    where\n I: Send,
    ",1,["bdk_chain::spk_client::SyncRequestBuilder"]],["impl<K> Send for InsertDescriptorError<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Send for KeychainTxOutIndex<K>
    where\n K: Send,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Send for FullScanRequest<K>
    where\n K: Send,
    ",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Send for FullScanRequestBuilder<K>
    where\n K: Send,
    ",1,["bdk_chain::spk_client::FullScanRequestBuilder"]],["impl<K, A> Send for FullScanResult<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> Send for Impl<T>
    where\n T: Send,
    ",1,["bdk_chain::Impl"]],["impl<T> Send for Persisted<T>
    where\n T: Send,
    ",1,["bdk_chain::persist::Persisted"]]], "bdk_electrum":[["impl<E> Send for BdkElectrumClient<E>
    where\n E: Send,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]]], "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"]]], "bdk_hwi":[["impl Send for HWISigner",1,["bdk_hwi::signer::HWISigner"]]], 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 c493010a93..2b8a086e43 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 ChangeSet"],["impl StructuralPartialEq for AlterCheckPointError"],["impl StructuralPartialEq for CannotConnectError"],["impl StructuralPartialEq for ChangeSet"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for MissingGenesisError"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationBlockTime"],["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<T> StructuralPartialEq for Persisted<T>"]], +"bdk_chain":[["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for ApplyHeaderError"],["impl StructuralPartialEq for CalculateFeeError"],["impl StructuralPartialEq for ChangeSet"],["impl StructuralPartialEq for AlterCheckPointError"],["impl StructuralPartialEq for CannotConnectError"],["impl StructuralPartialEq for ChangeSet"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for MissingGenesisError"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationBlockTime"],["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<'i, I> StructuralPartialEq for SyncItem<'i, I>"],["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<T> StructuralPartialEq for Persisted<T>"]], "bdk_wallet":[["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for PkOrF"],["impl StructuralPartialEq for PolicyError"],["impl StructuralPartialEq for Satisfaction"],["impl StructuralPartialEq for SatisfiableItem"],["impl StructuralPartialEq for KeychainKind"],["impl StructuralPartialEq for LoadError"],["impl StructuralPartialEq for LoadMismatch"],["impl StructuralPartialEq for Utxo"],["impl StructuralPartialEq for KeyError"],["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 SignerOrdering"],["impl StructuralPartialEq for AddressInfo"],["impl StructuralPartialEq for ChangeSet"],["impl StructuralPartialEq for LocalOutput"],["impl StructuralPartialEq for WeightedUtxo"],["impl<E> StructuralPartialEq for LoadWithPersistError<E>"]], "example_cli":[["impl StructuralPartialEq for Keychain"],["impl StructuralPartialEq for ChangeSet"]], "example_electrum":[["impl StructuralPartialEq for ScanOptions"]], 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 0519617e9a..2aa554ccf3 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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Sync for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Sync for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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 KeychainTxOutIndex<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K, A> Sync for FullScanResult<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> Sync for Impl<T>
    where\n T: Sync,
    ",1,["bdk_chain::Impl"]],["impl<T> Sync for Persisted<T>
    where\n T: Sync,
    ",1,["bdk_chain::persist::Persisted"]]], +"bdk_chain":[["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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Sync for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Sync for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 SyncProgress",1,["bdk_chain::spk_client::SyncProgress"]],["impl Sync for Balance",1,["bdk_chain::balance::Balance"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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<'i, I> Sync for SyncItem<'i, I>
    where\n I: Sync,
    ",1,["bdk_chain::spk_client::SyncItem"]],["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 SyncRequest<I>",1,["bdk_chain::spk_client::SyncRequest"]],["impl<I = ()> !Sync for SyncRequestBuilder<I>",1,["bdk_chain::spk_client::SyncRequestBuilder"]],["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 FullScanRequestBuilder<K>",1,["bdk_chain::spk_client::FullScanRequestBuilder"]],["impl<K> Sync for InsertDescriptorError<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Sync for KeychainTxOutIndex<K>
    where\n K: Sync,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K, A> Sync for FullScanResult<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> Sync for Impl<T>
    where\n T: Sync,
    ",1,["bdk_chain::Impl"]],["impl<T> Sync for Persisted<T>
    where\n T: Sync,
    ",1,["bdk_chain::persist::Persisted"]]], "bdk_electrum":[["impl<E> Sync for BdkElectrumClient<E>
    where\n E: Sync,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]]], "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"]]], "bdk_hwi":[["impl Sync for HWISigner",1,["bdk_hwi::signer::HWISigner"]]], 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 7316af6a78..545dab735a 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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Unpin for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Unpin for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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 KeychainTxOutIndex<K>
    where\n K: Unpin,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["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<T> Unpin for Impl<T>
    where\n T: Unpin,
    ",1,["bdk_chain::Impl"]],["impl<T> Unpin for Persisted<T>
    where\n T: Unpin,
    ",1,["bdk_chain::persist::Persisted"]]], +"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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl Unpin for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Unpin for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 SyncProgress",1,["bdk_chain::spk_client::SyncProgress"]],["impl Unpin for Balance",1,["bdk_chain::balance::Balance"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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<'i, I> Unpin for SyncItem<'i, I>
    where\n I: Unpin,
    ",1,["bdk_chain::spk_client::SyncItem"]],["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<I> Unpin for SyncRequest<I>
    where\n I: Unpin,
    ",1,["bdk_chain::spk_client::SyncRequest"]],["impl<I> Unpin for SyncRequestBuilder<I>
    where\n I: Unpin,
    ",1,["bdk_chain::spk_client::SyncRequestBuilder"]],["impl<K> Unpin for InsertDescriptorError<K>
    where\n K: Unpin,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> Unpin for KeychainTxOutIndex<K>
    where\n K: Unpin,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K> Unpin for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Unpin for FullScanRequestBuilder<K>",1,["bdk_chain::spk_client::FullScanRequestBuilder"]],["impl<K, A> Unpin for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> Unpin for Impl<T>
    where\n T: Unpin,
    ",1,["bdk_chain::Impl"]],["impl<T> Unpin for Persisted<T>
    where\n T: Unpin,
    ",1,["bdk_chain::persist::Persisted"]]], "bdk_electrum":[["impl<E> Unpin for BdkElectrumClient<E>
    where\n E: Unpin,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]]], "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"]]], "bdk_hwi":[["impl Unpin for HWISigner",1,["bdk_hwi::signer::HWISigner"]]], 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 3ea5013de5..62747b7be9 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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl RefUnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl RefUnwindSafe for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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 KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> RefUnwindSafe for Impl<T>
    where\n T: RefUnwindSafe,
    ",1,["bdk_chain::Impl"]],["impl<T> RefUnwindSafe for Persisted<T>
    where\n T: RefUnwindSafe,
    ",1,["bdk_chain::persist::Persisted"]]], +"bdk_chain":[["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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl RefUnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl RefUnwindSafe for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 SyncProgress",1,["bdk_chain::spk_client::SyncProgress"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::balance::Balance"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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<'i, I> RefUnwindSafe for SyncItem<'i, I>
    where\n I: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncItem"]],["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 SyncRequest<I>",1,["bdk_chain::spk_client::SyncRequest"]],["impl<I = ()> !RefUnwindSafe for SyncRequestBuilder<I>",1,["bdk_chain::spk_client::SyncRequestBuilder"]],["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 FullScanRequestBuilder<K>",1,["bdk_chain::spk_client::FullScanRequestBuilder"]],["impl<K> RefUnwindSafe for InsertDescriptorError<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> RefUnwindSafe for Impl<T>
    where\n T: RefUnwindSafe,
    ",1,["bdk_chain::Impl"]],["impl<T> RefUnwindSafe for Persisted<T>
    where\n T: RefUnwindSafe,
    ",1,["bdk_chain::persist::Persisted"]]], "bdk_electrum":[["impl<E> RefUnwindSafe for BdkElectrumClient<E>
    where\n E: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]]], "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"]]], "bdk_hwi":[["impl !RefUnwindSafe for HWISigner",1,["bdk_hwi::signer::HWISigner"]]], 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 84e3f558ac..ee0050a2cd 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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl UnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl UnwindSafe for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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 KeychainTxOutIndex<K>",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K, A> UnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> UnwindSafe for Impl<T>
    where\n T: UnwindSafe,
    ",1,["bdk_chain::Impl"]],["impl<T> UnwindSafe for Persisted<T>
    where\n T: UnwindSafe,
    ",1,["bdk_chain::persist::Persisted"]]], +"bdk_chain":[["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 ChangeSet",1,["bdk_chain::indexer::keychain_txout::ChangeSet"]],["impl UnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl UnwindSafe for ChangeSet",1,["bdk_chain::local_chain::ChangeSet"]],["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 SyncProgress",1,["bdk_chain::spk_client::SyncProgress"]],["impl UnwindSafe for Balance",1,["bdk_chain::balance::Balance"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationBlockTime",1,["bdk_chain::chain_data::ConfirmationBlockTime"]],["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<'i, I> UnwindSafe for SyncItem<'i, I>
    where\n I: UnwindSafe,
    ",1,["bdk_chain::spk_client::SyncItem"]],["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 SyncRequest<I>",1,["bdk_chain::spk_client::SyncRequest"]],["impl<I = ()> !UnwindSafe for SyncRequestBuilder<I>",1,["bdk_chain::spk_client::SyncRequestBuilder"]],["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 FullScanRequestBuilder<K>",1,["bdk_chain::spk_client::FullScanRequestBuilder"]],["impl<K> UnwindSafe for InsertDescriptorError<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::indexer::keychain_txout::InsertDescriptorError"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>",1,["bdk_chain::indexer::keychain_txout::KeychainTxOutIndex"]],["impl<K, A> UnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]],["impl<T> UnwindSafe for Impl<T>
    where\n T: UnwindSafe,
    ",1,["bdk_chain::Impl"]],["impl<T> UnwindSafe for Persisted<T>
    where\n T: UnwindSafe,
    ",1,["bdk_chain::persist::Persisted"]]], "bdk_electrum":[["impl<E> UnwindSafe for BdkElectrumClient<E>
    where\n E: UnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]]], "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"]]], "bdk_hwi":[["impl UnwindSafe for HWISigner",1,["bdk_hwi::signer::HWISigner"]]], 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 8fad46bc07..7f2a5f8124 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,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    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"],["
    source§

    impl<K, V> Merge for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn merge(&mut self, other: BTreeMap<K, V>)

    Merge 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.
    ","Merge","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":[["
    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"],["
    §

    impl<K, V> Merge for BTreeMap<K, V>
    where\n K: Ord,

    §

    fn merge(&mut self, other: BTreeMap<K, V>)

    Merge 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.
    ","Merge","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/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 2f94667f00..8ab34b1526 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 + Merge,

    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 + Merge,

    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 + Merge,

    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_chain/persist/struct.Persisted.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/persist/struct.Persisted.js index 6003302606..bc361f3e5b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/persist/struct.Persisted.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/persist/struct.Persisted.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    source§

    impl<T> Debug for Persisted<T>
    where\n T: Debug,

    source§

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

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> Deref for Persisted<T>

    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &<Persisted<T> as Deref>::Target

    Dereferences the value.
    ","Deref","bdk_wallet::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> DerefMut for Persisted<T>

    source§

    fn deref_mut(&mut self) -> &mut <Persisted<T> as Deref>::Target

    Mutably dereferences the value.
    ","DerefMut","bdk_wallet::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> Ord for Persisted<T>
    where\n T: Ord,

    source§

    fn cmp(&self, other: &Persisted<T>) -> 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::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> PartialEq for Persisted<T>
    where\n T: PartialEq,

    source§

    fn eq(&self, other: &Persisted<T>) -> 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::persisted::PersistedWallet"],["
    source§

    impl<T> PartialOrd for Persisted<T>
    where\n T: PartialOrd,

    source§

    fn partial_cmp(&self, other: &Persisted<T>) -> 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::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> Persisted<T>

    source

    pub fn create<Db>(\n db: &mut Db,\n params: <T as PersistWith<Db>>::CreateParams\n) -> Result<Persisted<T>, <T as PersistWith<Db>>::CreateError>
    where\n T: PersistWith<Db>,

    Create a new persisted T.

    \n
    source

    pub async fn create_async<Db>(\n db: &mut Db,\n params: <T as PersistAsyncWith<Db>>::CreateParams\n) -> Result<Persisted<T>, <T as PersistAsyncWith<Db>>::CreateError>
    where\n T: PersistAsyncWith<Db>,

    Create a new persisted T with async Db.

    \n
    source

    pub fn load<Db>(\n db: &mut Db,\n params: <T as PersistWith<Db>>::LoadParams\n) -> Result<Option<Persisted<T>>, <T as PersistWith<Db>>::LoadError>
    where\n T: PersistWith<Db>,

    Construct a persisted T from Db.

    \n
    source

    pub async fn load_async<Db>(\n db: &mut Db,\n params: <T as PersistAsyncWith<Db>>::LoadParams\n) -> Result<Option<Persisted<T>>, <T as PersistAsyncWith<Db>>::LoadError>
    where\n T: PersistAsyncWith<Db>,

    Construct a persisted T from an async Db.

    \n
    source

    pub fn persist<Db>(\n &mut self,\n db: &mut Db\n) -> Result<bool, <T as PersistWith<Db>>::PersistError>
    where\n T: PersistWith<Db>,

    Persist staged changes of T into Db.

    \n

    If the database errors, the staged changes will not be cleared.

    \n
    source

    pub async fn persist_async<'a, Db>(\n &'a mut self,\n db: &'a mut Db\n) -> Result<bool, <T as PersistAsyncWith<Db>>::PersistError>
    where\n T: PersistAsyncWith<Db>,

    Persist staged changes of T into an async Db.

    \n

    If the database errors, the staged changes will not be cleared.

    \n
    ",0,"bdk_wallet::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> Eq for Persisted<T>
    where\n T: Eq,

    ","Eq","bdk_wallet::wallet::persisted::PersistedWallet"],["
    source§

    impl<T> StructuralPartialEq for Persisted<T>

    ","StructuralPartialEq","bdk_wallet::wallet::persisted::PersistedWallet"]] +"bdk_wallet":[["
    §

    impl<T> Debug for Persisted<T>
    where\n T: Debug,

    §

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

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::persisted::PersistedWallet"],["
    §

    impl<T> Deref for Persisted<T>

    §

    type Target = T

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<Persisted<T> as Deref>::Target

    Dereferences the value.
    ","Deref","bdk_wallet::wallet::persisted::PersistedWallet"],["
    §

    impl<T> DerefMut for Persisted<T>

    §

    fn deref_mut(&mut self) -> &mut <Persisted<T> as Deref>::Target

    Mutably dereferences the value.
    ","DerefMut","bdk_wallet::wallet::persisted::PersistedWallet"],["
    §

    impl<T> Ord for Persisted<T>
    where\n T: Ord,

    §

    fn cmp(&self, other: &Persisted<T>) -> 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::wallet::persisted::PersistedWallet"],["
    §

    impl<T> PartialEq for Persisted<T>
    where\n T: PartialEq,

    §

    fn eq(&self, other: &Persisted<T>) -> 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::persisted::PersistedWallet"],["
    §

    impl<T> PartialOrd for Persisted<T>
    where\n T: PartialOrd,

    §

    fn partial_cmp(&self, other: &Persisted<T>) -> 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::wallet::persisted::PersistedWallet"],["
    §

    impl<T> Persisted<T>

    pub fn create<Db>(\n db: &mut Db,\n params: <T as PersistWith<Db>>::CreateParams\n) -> Result<Persisted<T>, <T as PersistWith<Db>>::CreateError>
    where\n T: PersistWith<Db>,

    Create a new persisted T.

    \n

    pub async fn create_async<Db>(\n db: &mut Db,\n params: <T as PersistAsyncWith<Db>>::CreateParams\n) -> Result<Persisted<T>, <T as PersistAsyncWith<Db>>::CreateError>
    where\n T: PersistAsyncWith<Db>,

    Create a new persisted T with async Db.

    \n

    pub fn load<Db>(\n db: &mut Db,\n params: <T as PersistWith<Db>>::LoadParams\n) -> Result<Option<Persisted<T>>, <T as PersistWith<Db>>::LoadError>
    where\n T: PersistWith<Db>,

    Construct a persisted T from Db.

    \n

    pub async fn load_async<Db>(\n db: &mut Db,\n params: <T as PersistAsyncWith<Db>>::LoadParams\n) -> Result<Option<Persisted<T>>, <T as PersistAsyncWith<Db>>::LoadError>
    where\n T: PersistAsyncWith<Db>,

    Construct a persisted T from an async Db.

    \n

    pub fn persist<Db>(\n &mut self,\n db: &mut Db\n) -> Result<bool, <T as PersistWith<Db>>::PersistError>
    where\n T: PersistWith<Db>,

    Persist staged changes of T into Db.

    \n

    If the database errors, the staged changes will not be cleared.

    \n

    pub async fn persist_async<'a, Db>(\n &'a mut self,\n db: &'a mut Db\n) -> Result<bool, <T as PersistAsyncWith<Db>>::PersistError>
    where\n T: PersistAsyncWith<Db>,

    Persist staged changes of T into an async Db.

    \n

    If the database errors, the staged changes will not be cleared.

    \n
    ",0,"bdk_wallet::wallet::persisted::PersistedWallet"],["
    §

    impl<T> Eq for Persisted<T>
    where\n T: Eq,

    ","Eq","bdk_wallet::wallet::persisted::PersistedWallet"],["
    §

    impl<T> StructuralPartialEq for Persisted<T>

    ","StructuralPartialEq","bdk_wallet::wallet::persisted::PersistedWallet"]] };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 df4a3692a7..b290095773 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 compatibility.\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 compatibility.\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/wallet_electrum_example/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/fn.main.html index 6e7fa5a93d..42b814952f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/fn.main.html @@ -1 +1 @@ -main in wallet_electrum_example - Rust

    Function wallet_electrum_example::main

    source ·
    pub(crate) fn main() -> Result<(), Error>
    \ No newline at end of file +main in wallet_electrum_example - Rust

    Function wallet_electrum_example::main

    source ·
    pub(crate) fn main() -> Result<(), Error>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/index.html index b714e904d3..97ede053c2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_electrum_example/index.html @@ -1 +1 @@ -wallet_electrum_example - Rust

    Crate wallet_electrum_example

    source ·

    Constants§

    Functions§

    \ No newline at end of file +wallet_electrum_example - Rust

    Crate wallet_electrum_example

    source ·

    Constants§

    Functions§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/fn.main.html index 34c2601c6c..124679c81a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/fn.main.html @@ -1 +1 @@ -main in wallet_esplora_async - Rust

    Function wallet_esplora_async::main

    source ·
    pub(crate) fn main() -> Result<(), Error>
    \ No newline at end of file +main in wallet_esplora_async - Rust

    Function wallet_esplora_async::main

    source ·
    pub(crate) fn main() -> Result<(), Error>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/index.html index a7cb554501..31feb2bb07 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/index.html @@ -1 +1 @@ -wallet_esplora_async - Rust

    Crate wallet_esplora_async

    source ·

    Constants§

    Functions§

    \ No newline at end of file +wallet_esplora_async - Rust

    Crate wallet_esplora_async

    source ·

    Constants§

    Functions§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/fn.main.html index b84c9fc32b..9aa8829885 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/fn.main.html @@ -1 +1 @@ -main in wallet_esplora_blocking - Rust

    Function wallet_esplora_blocking::main

    source ·
    pub(crate) fn main() -> Result<(), Error>
    \ No newline at end of file +main in wallet_esplora_blocking - Rust

    Function wallet_esplora_blocking::main

    source ·
    pub(crate) fn main() -> Result<(), Error>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/index.html index 60666c71dc..17539f19b8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_blocking/index.html @@ -1 +1 @@ -wallet_esplora_blocking - Rust

    Crate wallet_esplora_blocking

    source ·

    Constants§

    Functions§

    \ No newline at end of file +wallet_esplora_blocking - Rust

    Crate wallet_esplora_blocking

    source ·

    Constants§

    Functions§

    \ No newline at end of file