From 2f13a179e405e0fb975810aa933413b713a092ea Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 3 Aug 2023 08:08:50 +0000 Subject: [PATCH] Publish autogenerated nightly docs --- .../fn.wallet_name_from_descriptor.html | 2 +- .../bdk/nightly/latest/bdk/wallet/index.html | 2 +- .../latest/bdk/wallet/struct.Balance.html | 2 +- .../latest/bdk/wallet/struct.Wallet.html | 33 +- .../bdk/nightly/latest/bdk_chain/all.html | 2 +- .../struct.IndexedAdditions.html | 2 +- .../latest/bdk_chain/keychain/index.html | 5 +- .../bdk_chain/keychain/sidebar-items.js | 2 +- .../bdk_chain/keychain/struct.Balance.html | 10 +- .../keychain/struct.DerivationAdditions.html | 12 +- .../keychain/struct.LocalChangeSet.html | 8 +- .../keychain/struct.LocalUpdate.html | 19 +- .../latest/bdk_chain/local_chain/index.html | 6 +- .../bdk_chain/local_chain/sidebar-items.js | 2 +- .../struct.CannotConnectError.html | 12 + .../local_chain/struct.CheckPoint.html | 23 + .../local_chain/struct.CheckPointIter.html | 39 + .../local_chain/struct.InsertBlockError.html | 16 + .../struct.InsertBlockNotMatchingError.html | 16 - .../local_chain/struct.LocalChain.html | 51 +- .../bdk_chain/local_chain/struct.Update.html | 20 + .../struct.UpdateNotConnectedError.html | 13 - .../bdk_chain/local_chain/type.ChangeSet.html | 4 +- .../latest/bdk_chain/trait.Anchor.html | 9 +- .../latest/bdk_chain/trait.Append.html | 8 +- .../latest/bdk_chain/trait.ChainOracle.html | 2 +- .../latest/bdk_chain/trait.ForEachTxOut.html | 2 +- .../latest/bdk_chain/tx_graph/index.html | 2 +- .../bdk_chain/tx_graph/struct.Additions.html | 10 +- .../tx_graph/struct.TxDescendants.html | 4 +- .../bdk_chain/tx_graph/struct.TxGraph.html | 31 +- .../nightly/latest/bdk_electrum/index.html | 6 +- .../latest/bdk_electrum/sidebar-items.js | 2 +- .../bdk_electrum/struct.ElectrumUpdate.html | 19 +- .../bdk_electrum/trait.ElectrumExt.html | 22 +- .../bdk/nightly/latest/bdk_esplora/index.html | 4 +- .../latest/bdk_esplora/sidebar-items.js | 2 +- .../bdk_esplora/trait.EsploraAsyncExt.html | 29 +- .../latest/bdk_esplora/trait.EsploraExt.html | 26 +- .../nightly/latest/example_electrum/all.html | 2 +- .../constant.ASSUME_FINAL_DEPTH.html | 1 - .../example_electrum/constant.DB_PATH.html | 2 +- .../enum.ElectrumCommands.html | 4 +- .../latest/example_electrum/fn.main.html | 2 +- .../latest/example_electrum/index.html | 2 +- .../latest/example_electrum/sidebar-items.js | 2 +- .../example_electrum/struct.ScanOptions.html | 6 +- .../example_electrum/type.ChangeSet.html | 2 +- .../implementors/core/clone/trait.Clone.js | 2 +- .../latest/implementors/core/cmp/trait.Eq.js | 2 +- .../latest/implementors/core/cmp/trait.Ord.js | 2 +- .../implementors/core/cmp/trait.PartialEq.js | 2 +- .../implementors/core/cmp/trait.PartialOrd.js | 2 +- .../implementors/core/convert/trait.AsRef.js | 2 +- .../core/default/trait.Default.js | 3 +- .../implementors/core/error/trait.Error.js | 2 +- .../implementors/core/fmt/trait.Debug.js | 2 +- .../implementors/core/fmt/trait.Display.js | 2 +- .../iter/traits/collect/trait.IntoIterator.js | 3 + .../iter/traits/iterator/trait.Iterator.js | 2 +- .../implementors/core/marker/trait.Freeze.js | 2 +- .../implementors/core/marker/trait.Send.js | 2 +- .../core/marker/trait.StructuralEq.js | 2 +- .../core/marker/trait.StructuralPartialEq.js | 2 +- .../implementors/core/marker/trait.Sync.js | 2 +- .../implementors/core/marker/trait.Unpin.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- .../bdk/nightly/latest/search-index.js | 10 +- .../nightly/latest/src/bdk/wallet/mod.rs.html | 64 +- .../latest/src/bdk_chain/keychain.rs.html | 46 +- .../latest/src/bdk_chain/local_chain.rs.html | 938 +++++++++++++++--- .../src/bdk_chain/tx_data_traits.rs.html | 4 + .../latest/src/bdk_chain/tx_graph.rs.html | 130 ++- .../src/bdk_electrum/electrum_ext.rs.html | 306 ++++-- .../latest/src/bdk_electrum/lib.rs.html | 24 +- .../latest/src/bdk_esplora/async_ext.rs.html | 442 ++++++--- .../src/bdk_esplora/blocking_ext.rs.html | 460 ++++++--- .../latest/src/bdk_esplora/lib.rs.html | 36 +- .../latest/src/example_electrum/main.rs.html | 60 +- .../src/wallet_electrum_example/main.rs.html | 6 +- .../latest/src/wallet_esplora/main.rs.html | 34 +- .../src/wallet_esplora_async/main.rs.html | 24 +- .../wallet_electrum_example/fn.main.html | 2 +- .../latest/wallet_electrum_example/index.html | 2 +- .../constant.PARALLEL_REQUESTS.html | 2 +- .../wallet_esplora/constant.SEND_AMOUNT.html | 2 +- .../wallet_esplora/constant.STOP_GAP.html | 2 +- .../latest/wallet_esplora/fn.main.html | 2 +- .../nightly/latest/wallet_esplora/index.html | 2 +- .../constant.DB_MAGIC.html | 2 +- .../constant.PARALLEL_REQUESTS.html | 2 +- .../constant.SEND_AMOUNT.html | 2 +- .../constant.STOP_GAP.html | 2 +- .../latest/wallet_esplora_async/fn.main.html | 2 +- .../latest/wallet_esplora_async/index.html | 2 +- 96 files changed, 2199 insertions(+), 955 deletions(-) create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CannotConnectError.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockError.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockNotMatchingError.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.Update.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.UpdateNotConnectedError.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.ASSUME_FINAL_DEPTH.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/collect/trait.IntoIterator.js 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 64a7a2e6eb..e5e80583da 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
pub fn wallet_name_from_descriptor<T>(
    descriptor: T,
    change_descriptor: Option<T>,
    network: Network,
    secp: &Secp256k1<All>
) -> Result<String, Error>where
    T: IntoWalletDescriptor,
Expand description

Deterministically generate a unique name given the descriptors defining the wallet

+ logo
pub fn wallet_name_from_descriptor<T>(
    descriptor: T,
    change_descriptor: Option<T>,
    network: Network,
    secp: &Secp256k1<All>
) -> Result<String, Error>where
    T: IntoWalletDescriptor,
Expand description

Deterministically generate a unique name given the descriptors defining the wallet

Compatible with wallet_name_from_descriptor

\ No newline at end of file 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 b779705d05..9e98aa6ebb 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 @@ -1,5 +1,5 @@ bdk::wallet - Rust

Module bdk::wallet

source ·
Expand description

Wallet

+ logo

Module wallet

Module bdk::wallet

source ·
Expand description

Wallet

This module defines the Wallet structure.

Modules

Coin selection
Wallet export
Generalized signers
Transaction builder

Structs

A derived address and the index it was found at. For convenience this automatically derefs to Address
Balance, differentiated into various categories.
A Bitcoin wallet

Enums

The address index selection strategy to use to derived an address from the wallet’s external 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 bc59ba311d..cebd26d035 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 @@ -13,7 +13,7 @@

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

Get the whole balance visible to the wallet.

-

Trait Implementations§

The resulting type after applying the + operator.
Performs the + operation. Read more
Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more
Deserialize this value from the given Serde deserializer. Read more
Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used +

Trait Implementations§

The resulting type after applying the + operator.
Performs the + operation. Read more
Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more
Deserialize this value from the given Serde deserializer. Read more
Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more
Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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 2fd97f61c3..c282feccb8 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 @@ -7,7 +7,7 @@ Its main components are:

  • signers that can contribute signatures to addresses instantiated from the descriptors.
  • Implementations§

    Creates a wallet that does not persist data.

    -

    Create a wallet from a descriptor (and an optional change_descriptor) and load related +

    Create a wallet from a descriptor (and an optional change_descriptor) and load related transaction data from db.

    Get the Bitcoin network the wallet is using.

    Iterator over all keychains in this wallet

    @@ -23,8 +23,8 @@ be returned for any

    Finds how the wallet derived the script pubkey spk.

    Will only return Some(_) if the wallet has given out the spk.

    Return the list of unspent outputs of this wallet

    -

    Get all the checkpoints the wallet is currently storing indexed by height.

    -

    Returns the latest checkpoint.

    +

    Get all the checkpoints the wallet is currently storing indexed by height.

    +

    Returns the latest checkpoint.

    Returns a iterators of all the script pubkeys for the Internal and Externalvariants inKeychainKind`.

    This is inteded 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. @@ -38,7 +38,7 @@ wallet’s database.

    Return a single transactions made and received by the wallet

    Optionally fill the TransactionDetails::transaction field with the raw transaction if include_raw is true.

    -

    Add a new checkpoint to the wallet’s internal view of the chain. +

    Add a new checkpoint to the wallet’s internal view of the chain. This stages but does not commit the change.

    Returns whether anything changed with the insertion (e.g. false if checkpoint was already there).

    @@ -52,12 +52,12 @@ inserting new transactions.

    WARNING: If position is confirmed, we anchor the tx to a the lowest checkpoint that is >= the position’s height. The caller is responsible for ensuring the tx exists in our local view of the best chain’s history.

    -

    Iterate over the transactions in the wallet.

    -

    Return the balance, separated into available, trusted-pending, untrusted-pending and immature +

    Iterate over the transactions in the wallet.

    +

    Return the balance, separated into available, trusted-pending, untrusted-pending and immature values.

    -

    Add an external signer

    +

    Add an external signer

    See the signer module for an example.

    -

    Get the signers

    +

    Get the signers

    Example
    let wallet = Wallet::new_no_persist("wpkh(tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/0'/0'/0/*)", None, Network::Testnet)?;
     for secret_key in wallet.get_signers(KeychainKind::External).signers().iter().filter_map(|s| s.descriptor_secret_key()) {
    @@ -66,7 +66,7 @@ values.

    } Ok::<(), Box<dyn std::error::Error>>(())
    -

    Start building a transaction.

    +

    Start building a transaction.

    This returns a blank TxBuilder from which you can specify the parameters for the transaction.

    Example
    let (psbt, details) = {
    @@ -136,18 +136,17 @@ Otherwise, it will return the index of the highest address it has derived.

    get the corresponding PSBT Input for a LocalUtxo

    Return the checksum of the public descriptor associated to keychain

    Internally calls Self::get_descriptor_for_keychain to fetch the right descriptor

    -

    Applies an update to the wallet and stages the changes (but does not commit them).

    -

    This returns whether the update resulted in any changes.

    +

    Applies an update to the wallet and stages the changes (but does not commit them).

    Usually you create an update by interacting with some blockchain data source and inserting transactions related to your wallet into it.

    -

    Commits all curently staged changed to the persistence backend returning and error when +

    Commits all curently staged changed to the persistence backend returning and error when this fails.

    This returns whether the update resulted in any changes.

    -

    Returns the changes that will be staged with the next call to commit.

    -

    Get a reference to the inner [TxGraph].

    -

    Get a reference to the inner [KeychainTxOutIndex].

    -

    Get a reference to the inner [LocalChain].

    -

    Trait Implementations§

    Converts this type into a shared reference of the (usually inferred) input type.
    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Returns the changes that will be staged with the next call to commit.

    +

    Get a reference to the inner [TxGraph].

    +

    Get a reference to the inner [KeychainTxOutIndex].

    +

    Get a reference to the inner [LocalChain].

    +

    Trait Implementations§

    Converts this type into a shared reference of the (usually inferred) input type.
    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    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 f131b01936..8b4eefe654 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/indexed_tx_graph/struct.IndexedAdditions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedAdditions.html index 9b1ca842f3..4178c2f2e1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedAdditions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.IndexedAdditions.html @@ -4,7 +4,7 @@ }
    Expand description

    A structure that represents changes to an IndexedTxGraph.

    Fields§

    §graph_additions: Additions<A>

    TxGraph additions.

    §index_additions: IA

    Indexer additions.

    -

    Trait Implementations§

    Append another object of the same type onto self.
    Returns whether the structure is considered empty.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Append another object of the same type onto self.
    Returns whether the structure is considered empty.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html index ddf2ea889e..055b0d7826 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html @@ -1,4 +1,4 @@ -bdk_chain::keychain - Rust

    Module bdk_chain::keychain

    source ·
    Expand description

    Module for keychain related structures.

    +bdk_chain::keychain - Rust

    Module bdk_chain::keychain

    source ·
    Expand description

    Module for keychain related structures.

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

    @@ -6,5 +6,4 @@ anything that implements Ord.

    has a txout containing an indexed script pubkey). Internally, this uses SpkTxOutIndex, but also maintains “revealed” and “lookahead” index counts per keychain.

    Structs

    Balance, differentiated into various categories.
    Represents updates to the derivation index of a KeychainTxOutIndex.
    A convenient wrapper around SpkTxOutIndex that relates script pubkeys to miniscript public -Descriptors.
    A structure that records the corresponding changes as result of applying an LocalUpdate.
    A structure to update KeychainTxOutIndex, TxGraph and LocalChain -atomically.
    \ No newline at end of file +Descriptors.
    A structure that records the corresponding changes as result of applying an LocalUpdate.
    A structure to update KeychainTxOutIndex, TxGraph and LocalChain atomically.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js index 8d9a54623c..b23f0a5009 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["Balance","Balance, differentiated into various categories."],["DerivationAdditions","Represents updates to the derivation index of a `KeychainTxOutIndex`."],["KeychainTxOutIndex","A convenient wrapper around `SpkTxOutIndex` that relates script pubkeys to miniscript public `Descriptor`s."],["LocalChangeSet","A structure that records the corresponding changes as result of applying an [`LocalUpdate`]."],["LocalUpdate","A structure to update [`KeychainTxOutIndex`], [`TxGraph`] and [`LocalChain`] atomically."]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":[["Balance","Balance, differentiated into various categories."],["DerivationAdditions","Represents updates to the derivation index of a `KeychainTxOutIndex`."],["KeychainTxOutIndex","A convenient wrapper around `SpkTxOutIndex` that relates script pubkeys to miniscript public `Descriptor`s."],["LocalChangeSet","A structure that records the corresponding changes as result of applying an [`LocalUpdate`]."],["LocalUpdate","A structure to update [`KeychainTxOutIndex`], [`TxGraph`] and `LocalChain` atomically."]]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html index ae6302899a..a50049e6f8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html @@ -1,4 +1,4 @@ -Balance in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::Balance

    source ·
    pub struct Balance {
    +Balance in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::Balance

    source ·
    pub struct Balance {
         pub immature: u64,
         pub trusted_pending: u64,
         pub untrusted_pending: u64,
    @@ -8,13 +8,13 @@
     
    §trusted_pending: u64

    Unconfirmed UTXOs generated by a wallet tx

    §untrusted_pending: u64

    Unconfirmed UTXOs received from an external wallet

    §confirmed: u64

    Confirmed and immediately spendable balance

    -

    Implementations§

    Get sum of trusted_pending and confirmed coins.

    +

    Implementations§

    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.

    -

    Get the whole balance visible to the wallet.

    -

    Trait Implementations§

    The resulting type after applying the + operator.
    Performs the + operation. Read more
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Formats the value using the given formatter. Read more
    This method tests for self and other values to be equal, and is used +

    Get the whole balance visible to the wallet.

    +

    Trait Implementations§

    The resulting type after applying the + operator.
    Performs the + operation. Read more
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Formats the value using the given formatter. Read more
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.DerivationAdditions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.DerivationAdditions.html index 8cad3e966d..b3b5f44221 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.DerivationAdditions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.DerivationAdditions.html @@ -1,14 +1,14 @@ -DerivationAdditions in bdk_chain::keychain - Rust
    pub struct DerivationAdditions<K>(pub BTreeMap<K, u32>);
    Expand description

    Represents updates to the derivation index of a KeychainTxOutIndex.

    +DerivationAdditions in bdk_chain::keychain - Rust
    pub struct DerivationAdditions<K>(pub BTreeMap<K, u32>);
    Expand description

    Represents updates to the derivation index of a KeychainTxOutIndex.

    It can be applied to KeychainTxOutIndex with apply_additions. `DerivationAdditions are monotone in that they will never decrease the revealed derivation index.

    -

    Tuple Fields§

    §0: BTreeMap<K, u32>

    Implementations§

    Get the inner map of the keychain to its new derivation index.

    -

    Trait Implementations§

    Append another DerivationAdditions into self.

    +

    Tuple Fields§

    §0: BTreeMap<K, u32>

    Implementations§

    Get the inner map of the keychain to its new derivation index.

    +

    Trait Implementations§

    Append another DerivationAdditions into self.

    If the keychain already exists, increase the index when the other’s index > self’s index. If the keychain did not exist, append the new keychain.

    -

    Returns whether the additions are empty.

    -
    Converts this type into a shared reference of the (usually inferred) input type.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used +

    Returns whether the additions are empty.

    +
    Converts this type into a shared reference of the (usually inferred) input type.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalChangeSet.html index a3b96d2bde..9a219b9fe1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalChangeSet.html @@ -1,12 +1,12 @@ -LocalChangeSet in bdk_chain::keychain - Rust

    Fields§

    §chain_changeset: ChangeSet

    Changes to the LocalChain.

    §indexed_additions: IndexedAdditions<A, DerivationAdditions<K>>

    Additions to IndexedTxGraph.

    -

    Trait Implementations§

    Append another object of the same type onto self.
    Returns whether the structure is considered empty.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Append another object of the same type onto self.
    Returns whether the structure is considered empty.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalUpdate.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalUpdate.html index 80168eaba6..6d80486cfd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalUpdate.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.LocalUpdate.html @@ -1,15 +1,14 @@ -LocalUpdate in bdk_chain::keychain - Rust
    pub struct LocalUpdate<K, A> {
    -    pub keychain: BTreeMap<K, u32>,
    +LocalUpdate in bdk_chain::keychain - Rust
    pub struct LocalUpdate<K, A> {
    +    pub last_active_indices: BTreeMap<K, u32>,
         pub graph: TxGraph<A>,
    -    pub chain: LocalChain,
    -}
    Expand description

    A structure to update KeychainTxOutIndex, TxGraph and LocalChain -atomically.

    -

    Fields§

    §keychain: BTreeMap<K, u32>

    Last active derivation index per keychain (K).

    + pub chain: Update, +}
    Expand description

    A structure to update KeychainTxOutIndex, TxGraph and LocalChain atomically.

    +

    Fields§

    §last_active_indices: BTreeMap<K, u32>

    Contains the last active derivation indices per keychain (K), which is used to update the +KeychainTxOutIndex.

    §graph: TxGraph<A>

    Update for the TxGraph.

    -
    §chain: LocalChain

    Update for the LocalChain.

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    This method tests for self and other values to be equal, and is used -by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +
    §chain: Update

    Update for the LocalChain.

    +

    Implementations§

    Construct a LocalUpdate with a given local_chain::Update.

    +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/index.html index fb0c3e8d75..c8ae7c6a74 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/index.html @@ -1,3 +1,3 @@ -bdk_chain::local_chain - Rust

    Module bdk_chain::local_chain

    source ·
    Expand description

    The LocalChain is a local implementation of ChainOracle.

    -

    Structs

    Represents a failure when trying to insert a checkpoint into LocalChain.
    This is a local implementation of ChainOracle.
    Represents an update failure of LocalChain due to the update not connecting to the original -chain.

    Type Definitions

    This is the return value of determine_changeset and represents changes to LocalChain.
    \ No newline at end of file +bdk_chain::local_chain - Rust

    Module bdk_chain::local_chain

    source ·
    Expand description

    The LocalChain is a local implementation of ChainOracle.

    +

    Structs

    Occurs when an update does not have a common checkpoint with the original chain.
    A LocalChain checkpoint is used to find the agreement point between two chains and as a +transaction anchor.
    A structure that iterates over checkpoints backwards.
    Represents a failure when trying to insert a checkpoint into LocalChain.
    This is a local implementation of ChainOracle.
    A struct to update LocalChain.

    Type Definitions

    A structure that represents changes to LocalChain.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/sidebar-items.js index 1affff0d90..69f15ea3f7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["InsertBlockNotMatchingError","Represents a failure when trying to insert a checkpoint into [`LocalChain`]."],["LocalChain","This is a local implementation of [`ChainOracle`]."],["UpdateNotConnectedError","Represents an update failure of [`LocalChain`] due to the update not connecting to the original chain."]],"type":[["ChangeSet","This is the return value of `determine_changeset` and represents changes to [`LocalChain`]."]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":[["CannotConnectError","Occurs when an update does not have a common checkpoint with the original chain."],["CheckPoint","A [`LocalChain`] checkpoint is used to find the agreement point between two chains and as a transaction anchor."],["CheckPointIter","A structure that iterates over checkpoints backwards."],["InsertBlockError","Represents a failure when trying to insert a checkpoint into [`LocalChain`]."],["LocalChain","This is a local implementation of [`ChainOracle`]."],["Update","A struct to update [`LocalChain`]."]],"type":[["ChangeSet","A structure that represents changes to [`LocalChain`]."]]}; \ No newline at end of file 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 new file mode 100644 index 0000000000..650f29d6c2 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CannotConnectError.html @@ -0,0 +1,12 @@ +CannotConnectError in bdk_chain::local_chain - Rust
    pub struct CannotConnectError {
    +    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§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Formats the value using the given formatter. Read more
    The lower-level source of this error, if any. Read more
    👎Deprecated since 1.42.0: use the Display impl or to_string()
    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    This method tests for self and other values to be equal, and is used +by ==. Read more
    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Calls U::from(self).

    +

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

    +
    🔬This is a nightly-only experimental API. (provide_any)
    Data providers should implement this method to provide all values they are able to +provide by using demand. Read more
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    Converts the given value to a String. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html new file mode 100644 index 0000000000..62e9aa0354 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html @@ -0,0 +1,23 @@ +CheckPoint in bdk_chain::local_chain - Rust
    pub struct CheckPoint(_);
    Expand description

    A LocalChain checkpoint is used to find the agreement point between two chains and as a +transaction anchor.

    +

    Each checkpoint contains the height and hash of a block (BlockId).

    +

    Internaly, checkpoints are nodes of a reference-counted linked-list. This allows the caller to +cheaply clone a CheckPoint without copying the whole list and to view the entire chain +without holding a lock on LocalChain.

    +

    Implementations§

    Construct a new base block at the front of a linked list.

    +

    Puts another checkpoint onto the linked list representing the blockchain.

    +

    Returns an Err(self) if the block you are pushing on is not at a greater height that the one you +are pushing on to.

    +

    Extends the checkpoint linked list by a iterator of block ids.

    +

    Returns an Err(self) if there is block which does not have a greater height than the +previous one.

    +

    Get the BlockId of the checkpoint.

    +

    Get the height of the checkpoint.

    +

    Get the block hash of the checkpoint.

    +

    Get the previous checkpoint in the chain

    +

    Iterate from this checkpoint in descending height.

    +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    The type of the elements being iterated over.
    Which kind of iterator are we turning this into?
    Creates an iterator from a value. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Calls U::from(self).

    +

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

    +
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html new file mode 100644 index 0000000000..771e03fada --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html @@ -0,0 +1,39 @@ +CheckPointIter in bdk_chain::local_chain - Rust
    pub struct CheckPointIter { /* private fields */ }
    Expand description

    A structure that iterates over checkpoints backwards.

    +

    Trait Implementations§

    The type of the elements being iterated over.
    Advances the iterator and returns the next value. Read more
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    Returns the bounds on the remaining length of the iterator. Read more
    Consumes the iterator, counting the number of iterations and returning it. Read more
    Consumes the iterator, returning the last element. Read more
    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    Returns the nth element of the iterator. Read more
    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    Takes two iterators and creates a new iterator over both in sequence. Read more
    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    Calls a closure on each element of an iterator. Read more
    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    Creates an iterator that both filters and maps. Read more
    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
    Creates an iterator that skips elements based on a predicate. Read more
    Creates an iterator that yields elements based on a predicate. Read more
    Creates an iterator that both yields elements based on a predicate and maps. Read more
    Creates an iterator that skips the first n elements. Read more
    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    An iterator adapter similar to fold that holds internal state and +produces a new iterator. Read more
    Creates an iterator that works like map, but flattens nested structure. Read more
    Creates an iterator which ends after the first None. Read more
    Does something with each element of an iterator, passing the value on. Read more
    Borrows an iterator, rather than consuming it. Read more
    Transforms an iterator into a collection. Read more
    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    Consumes an iterator, creating two collections from it. Read more
    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    Tests if every element of the iterator matches a predicate. Read more
    Tests if any element of the iterator matches a predicate. Read more
    Searches for an element of an iterator that satisfies a predicate. Read more
    Applies function to the elements of iterator and returns +the first non-none result. Read more
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    Searches for an element in an iterator, returning its index. Read more
    Returns the element that gives the maximum value from the +specified function. Read more
    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    Returns the element that gives the minimum value from the +specified function. Read more
    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    Converts an iterator of pairs into a pair of containers. Read more
    Creates an iterator which copies all of its elements. Read more
    Creates an iterator which clones all of its elements. Read more
    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    Sums the elements of an iterator. Read more
    Iterates over the entire iterator, multiplying all the elements Read more
    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    Lexicographically compares the elements of this Iterator with those +of another. Read more
    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    Determines if the elements of this Iterator are equal to those of +another. Read more
    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    Determines if the elements of this Iterator are unequal to those of +another. Read more
    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Calls U::from(self).

    +

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

    +
    The type of the elements being iterated over.
    Which kind of iterator are we turning this into?
    Creates an iterator from a value. Read more
    Choose one element at random from the iterator. Read more
    Choose one element at random from the iterator. Read more
    Collects values at random from the iterator into a supplied buffer +until that buffer is filled. Read more
    Collects amount values at random from the iterator into a vector. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockError.html new file mode 100644 index 0000000000..92397a2dc1 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockError.html @@ -0,0 +1,16 @@ +InsertBlockError in bdk_chain::local_chain - Rust
    pub struct InsertBlockError {
    +    pub height: u32,
    +    pub original_hash: BlockHash,
    +    pub update_hash: BlockHash,
    +}
    Expand description

    Represents a failure when trying to insert a checkpoint into LocalChain.

    +

    Fields§

    §height: u32

    The checkpoints’ height.

    +
    §original_hash: BlockHash

    Original checkpoint’s block hash.

    +
    §update_hash: BlockHash

    Update checkpoint’s block hash.

    +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Formats the value using the given formatter. Read more
    The lower-level source of this error, if any. Read more
    👎Deprecated since 1.42.0: use the Display impl or to_string()
    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    This method tests for self and other values to be equal, and is used +by ==. Read more
    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Calls U::from(self).

    +

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

    +
    🔬This is a nightly-only experimental API. (provide_any)
    Data providers should implement this method to provide all values they are able to +provide by using demand. Read more
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    Converts the given value to a String. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockNotMatchingError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockNotMatchingError.html deleted file mode 100644 index d46ad32e38..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.InsertBlockNotMatchingError.html +++ /dev/null @@ -1,16 +0,0 @@ -InsertBlockNotMatchingError in bdk_chain::local_chain - Rust
    pub struct InsertBlockNotMatchingError {
    -    pub height: u32,
    -    pub original_hash: BlockHash,
    -    pub update_hash: BlockHash,
    -}
    Expand description

    Represents a failure when trying to insert a checkpoint into LocalChain.

    -

    Fields§

    §height: u32

    The checkpoints’ height.

    -
    §original_hash: BlockHash

    Original checkpoint’s block hash.

    -
    §update_hash: BlockHash

    Update checkpoint’s block hash.

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Formats the value using the given formatter. Read more
    The lower-level source of this error, if any. Read more
    👎Deprecated since 1.42.0: use the Display impl or to_string()
    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    This method tests for self and other values to be equal, and is used -by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    -

    Calls U::from(self).

    -

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

    -
    🔬This is a nightly-only experimental API. (provide_any)
    Data providers should implement this method to provide all values they are able to -provide by using demand. Read more
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    Converts the given value to a String. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.LocalChain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.LocalChain.html index d20e279246..e8c25d3974 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.LocalChain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.LocalChain.html @@ -1,24 +1,35 @@ -LocalChain in bdk_chain::local_chain - Rust
    pub struct LocalChain { /* private fields */ }
    Expand description

    This is a local implementation of ChainOracle.

    -

    Implementations§

    Contruct a LocalChain from a list of BlockIds.

    -

    Get a reference to a map of block height to hash.

    -

    Get the chain tip.

    -

    This is like the sparsechain’s logic, expect we must guarantee that all invalidated heights -are to be re-filled.

    -

    Applies the given changeset.

    -

    Updates LocalChain with an update LocalChain.

    -

    This is equivalent to calling determine_changeset and apply_changeset in sequence.

    -

    Derives a ChangeSet that assumes that there are no preceding changesets.

    -

    The changeset returned will record additions of all blocks included in Self.

    -

    Insert a block of BlockId into the LocalChain.

    -
    Error
    -

    If the insertion height already contains a block, and the block has a different blockhash, -this will result in an InsertBlockNotMatchingError.

    -

    Trait Implementations§

    Converts this type into a shared reference of the (usually inferred) input type.
    Error type.
    Determines whether block of BlockId exists as an ancestor of chain_tip. Read more
    Get the best chain’s chain tip.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    This method returns an Ordering between self and other. Read more
    Compares and returns the maximum of two values. Read more
    Compares and returns the minimum of two values. Read more
    Restrict a value to a certain interval. Read more
    This method tests for self and other values to be equal, and is used +LocalChain in bdk_chain::local_chain - Rust
    pub struct LocalChain { /* private fields */ }
    Expand description

    This is a local implementation of ChainOracle.

    +

    Implementations§

    Construct a LocalChain from an initial changeset.

    +

    Construct a LocalChain from a given checkpoint tip.

    +

    Constructs a LocalChain from a BTreeMap of height to [BlockHash].

    +

    The BTreeMap enforces the height order. However, the caller must ensure the blocks are +all of the same chain.

    +

    Get the highest checkpoint.

    +

    Returns whether the LocalChain is empty (has no checkpoints).

    +

    Applies the given update to the chain.

    +

    The method returns ChangeSet on success. This represents the applied changes to self.

    +

    There must be no ambiguity about which of the existing chain’s blocks are still valid and +which are now invalid. That is, the new chain must implicitly connect to a definite block in +the existing chain and invalidate the block after it (if it exists) by including a block at +the same height but with a different hash to explicitly exclude it as a connection point.

    +

    Additionally, an empty chain can be updated with any chain, and a chain with a single block +can have it’s block invalidated by an update chain with a block at the same height but +different hash.

    +
    Errors
    +

    An error will occur if the update does not correctly connect with self.

    +

    Refer to Update for more about the update struct.

    +

    Apply the given changeset.

    +

    Insert a BlockId.

    +
    Errors
    +

    Replacing the block hash of an existing checkpoint will result in an error.

    +

    Derives an initial ChangeSet, meaning that it can be applied to an empty chain to +recover the current chain.

    +

    Iterate over checkpoints in descending height order.

    +

    Get a reference to the internal index mapping the height to block hash.

    +

    Trait Implementations§

    Error type.
    Determines whether block of BlockId exists as an ancestor of chain_tip. Read more
    Get the best chain’s chain tip.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    This method returns an ordering between self and other values if one exists. Read more
    This method tests less than (for self and other) and is used by the < operator. Read more
    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    This method tests greater than (for self and other) and is used by the > operator. Read more
    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    -
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file +
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.Update.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.Update.html new file mode 100644 index 0000000000..356565d5ab --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.Update.html @@ -0,0 +1,20 @@ +Update in bdk_chain::local_chain - Rust

    Struct bdk_chain::local_chain::Update

    source ·
    pub struct Update {
    +    pub tip: CheckPoint,
    +    pub introduce_older_blocks: bool,
    +}
    Expand description

    A struct to update LocalChain.

    +

    This is used as input for LocalChain::apply_update. It contains the update’s chain tip and +a flag introduce_older_blocks which signals whether this update intends to introduce missing +blocks to the original chain.

    +

    Block-by-block syncing mechanisms would typically create updates that builds upon the previous +tip. In this case, introduce_older_blocks would be false.

    +

    Script-pubkey based syncing mechanisms may not introduce transactions in a chronological order +so some updates require introducing older blocks (to anchor older transactions). For +script-pubkey based syncing, introduce_older_blocks would typically be true.

    +

    Fields§

    §tip: CheckPoint

    The update chain’s new tip.

    +
    §introduce_older_blocks: bool

    Whether the update allows for introducing older blocks.

    +

    Refer to struct-level documentation for more.

    +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Calls U::from(self).

    +

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

    +
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.UpdateNotConnectedError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.UpdateNotConnectedError.html deleted file mode 100644 index d30c8a431b..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.UpdateNotConnectedError.html +++ /dev/null @@ -1,13 +0,0 @@ -UpdateNotConnectedError in bdk_chain::local_chain - Rust
    pub struct UpdateNotConnectedError(pub u32);
    Expand description

    Represents an update failure of LocalChain due to the update not connecting to the original -chain.

    -

    The update cannot be applied to the chain because the chain suffix it represents did not -connect to the existing chain. This error case contains the checkpoint height to include so -that the chains can connect.

    -

    Tuple Fields§

    §0: u32

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Formats the value using the given formatter. Read more
    The lower-level source of this error, if any. Read more
    👎Deprecated since 1.42.0: use the Display impl or to_string()
    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    This method tests for self and other values to be equal, and is used -by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    -

    Calls U::from(self).

    -

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

    -
    🔬This is a nightly-only experimental API. (provide_any)
    Data providers should implement this method to provide all values they are able to -provide by using demand. Read more
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    Converts the given value to a String. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/type.ChangeSet.html index 03a069dfab..e090df18b7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/type.ChangeSet.html @@ -1,2 +1,4 @@ -ChangeSet in bdk_chain::local_chain - Rust

    Type Definition bdk_chain::local_chain::ChangeSet

    source ·
    pub type ChangeSet = BTreeMap<u32, Option<BlockHash>>;
    Expand description

    This is the return value of determine_changeset and represents changes to LocalChain.

    +ChangeSet in bdk_chain::local_chain - Rust

    Type Definition bdk_chain::local_chain::ChangeSet

    source ·
    pub type ChangeSet = BTreeMap<u32, Option<BlockHash>>;
    Expand description

    A structure that represents changes to LocalChain.

    +

    The key represents the block height, and the value either represents added a new CheckPoint +(if Some), or removing a CheckPoint (if None).

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Anchor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Anchor.html index 17bc592159..5e877fa0bb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Anchor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Anchor.html @@ -1,14 +1,15 @@ -Anchor in bdk_chain - Rust

    Trait bdk_chain::Anchor

    source ·
    pub trait Anchor: Debug + Clone + Eq + PartialOrd + Ord + Hash {
    +Anchor in bdk_chain - Rust

    Trait bdk_chain::Anchor

    source ·
    pub trait Anchor: Debug + Clone + Eq + PartialOrd + Ord + Hash {
         fn anchor_block(&self) -> BlockId;
     
         fn confirmation_height_upper_bound(&self) -> u32 { ... }
     }
    Expand description

    Trait that “anchors” blockchain data to a specific block of height and hash.

    +

    Anchor implementations must be Ord by the anchor block’s BlockId first.

    I.e. If transaction A is anchored in block B, then if block B is in the best chain, we can assume that transaction A is also confirmed in the best chain. This does not necessarily mean that transaction A is confirmed in block B. It could also mean transaction A is confirmed in a parent block of B.

    -

    Required Methods§

    Returns the BlockId that the associated blockchain data is “anchored” in.

    -

    Provided Methods§

    Get the upper bound of the chain data’s confirmation height.

    +

    Required Methods§

    Returns the BlockId that the associated blockchain data is “anchored” in.

    +

    Provided Methods§

    Get the upper bound of the chain data’s confirmation height.

    The default definition gives a pessimistic answer. This can be overridden by the Anchor implementation for a more accurate value.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html index 6e547a34e7..c439d30b72 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html @@ -1,7 +1,7 @@ -Append in bdk_chain - Rust

    Trait bdk_chain::Append

    source ·
    pub trait Append {
    +Append in bdk_chain - Rust

    Trait bdk_chain::Append

    source ·
    pub trait Append {
         fn append(&mut self, other: Self);
         fn is_empty(&self) -> bool;
     }
    Expand description

    Trait that makes an object appendable.

    -

    Required Methods§

    Append another object of the same type onto self.

    -

    Returns whether the structure is considered empty.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Required Methods§

    Append another object of the same type onto self.

    +

    Returns whether the structure is considered empty.

    +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ChainOracle.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ChainOracle.html index 0340ab8b59..1e50e6b855 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ChainOracle.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ChainOracle.html @@ -11,4 +11,4 @@ is an ancestor of another “static block”.

    If None is returned, it means the implementation cannot determine whether block exists under chain_tip.

    Get the best chain’s chain tip.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ForEachTxOut.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ForEachTxOut.html index ab41fa0aad..4f27505cb9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ForEachTxOut.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.ForEachTxOut.html @@ -4,4 +4,4 @@

    We would prefer to just work with things that can give us an Iterator<Item=(OutPoint, &TxOut)> here, but rust’s type system makes it extremely hard to do this (without trait objects).

    Required Methods§

    The provided closure f will be called with each outpoint/txout pair.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html index fbcc813d12..22510a16ec 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html @@ -1,4 +1,4 @@ -bdk_chain::tx_graph - Rust

    Module bdk_chain::tx_graph

    source ·
    Expand description

    Module for structures that store and traverse transactions.

    +bdk_chain::tx_graph - Rust

    Module bdk_chain::tx_graph

    source ·
    Expand description

    Module for structures that store and traverse transactions.

    TxGraph is a monotone structure that inserts transactions and indexes the spends. The Additions structure reports changes of TxGraph but can also be applied to a TxGraph as well. Lastly, TxDescendants is an Iterator that traverses descendants of diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.Additions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.Additions.html index 77176b3c80..055a9e42d8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.Additions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.Additions.html @@ -1,4 +1,4 @@ -Additions in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::Additions

    source ·
    pub struct Additions<A = ()> {
    +Additions in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::Additions

    source ·
    pub struct Additions<A = ()> {
         pub txs: BTreeSet<Transaction>,
         pub txouts: BTreeMap<OutPoint, TxOut>,
         pub anchors: BTreeSet<(A, Txid)>,
    @@ -11,11 +11,11 @@ not removed.

    §txouts: BTreeMap<OutPoint, TxOut>

    Added txouts.

    §anchors: BTreeSet<(A, Txid)>

    Added anchors.

    §last_seen: BTreeMap<Txid, u64>

    Added last-seen unix timestamps of transactions.

    -

    Implementations§

    Returns true if the Additions is empty (no transactions or txouts).

    -

    Iterates over all outpoints contained within Additions.

    -

    Trait Implementations§

    Append another object of the same type onto self.
    Returns whether the structure is considered empty.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    The provided closure f will be called with each outpoint/txout pair.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used +

    Implementations§

    Returns true if the Additions is empty (no transactions or txouts).

    +

    Iterates over all outpoints contained within Additions.

    +

    Trait Implementations§

    Append another object of the same type onto self.
    Returns whether the structure is considered empty.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    Deserialize this value from the given Serde deserializer. Read more
    The provided closure f will be called with each outpoint/txout pair.
    Converts to this type from the input type.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +sufficient, and should not be overridden without very good reason. Read more
    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html index bb2791a021..f81aabafaf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html @@ -1,6 +1,6 @@ -TxDescendants in bdk_chain::tx_graph - Rust
    pub struct TxDescendants<'g, A, F> { /* private fields */ }
    Expand description

    An iterator that traverses transaction descendants.

    +TxDescendants in bdk_chain::tx_graph - Rust
    pub struct TxDescendants<'g, A, F> { /* private fields */ }
    Expand description

    An iterator that traverses transaction descendants.

    This struct is created by the walk_descendants method of TxGraph.

    -

    Trait Implementations§

    The type of the elements being iterated over.
    Advances the iterator and returns the next value. Read more
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    Returns the bounds on the remaining length of the iterator. Read more
    Consumes the iterator, counting the number of iterations and returning it. Read more
    Consumes the iterator, returning the last element. Read more
    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    Returns the nth element of the iterator. Read more
    Creates an iterator starting at the same point, but stepping by +

    Trait Implementations§

    The type of the elements being iterated over.
    Advances the iterator and returns the next value. Read more
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    Returns the bounds on the remaining length of the iterator. Read more
    Consumes the iterator, counting the number of iterations and returning it. Read more
    Consumes the iterator, returning the last element. Read more
    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    Returns the nth element of the iterator. Read more
    Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more
    Takes two iterators and creates a new iterator over both in sequence. Read more
    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator between adjacent items of the original iterator. Read more
    Takes a closure and creates an iterator which calls that closure on each element. Read more
    Calls a closure on each element of an iterator. Read more
    Creates an iterator which uses a closure to determine if an element diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html index 2eff7d1703..3d73e25152 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxGraph.html @@ -1,4 +1,4 @@ -TxGraph in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxGraph

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

    A graph of transactions and spends.

    +TxGraph in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxGraph

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

    A graph of transactions and spends.

    See the module-level documentation for more.

    Implementations§

    Iterate over all tx outputs known by TxGraph.

    This includes txouts of both full transactions as well as floating transactions.

    @@ -78,33 +78,36 @@ exist in update but not in self).

    Previews the resultant Additions when Self is updated against the update graph.

    The Additions would be the set difference between update and self (transactions that exist in update but not in self).

    -

    Get the position of the transaction in chain with tip chain_tip.

    +

    Find missing block heights of chain.

    +

    This works by scanning through anchors, and seeing whether the anchor block of the anchor +exists in the LocalChain. The returned iterator does not output duplicate heights.

    +

    Get the position of the transaction in chain with tip chain_tip.

    If the given transaction of txid does not exist in the chain of chain_tip, None is returned.

    Error

    An error will occur if the ChainOracle implementation (chain) fails. If the ChainOracle is infallible, get_chain_position can be used instead.

    -

    Get the position of the transaction in chain with tip chain_tip.

    +

    Get the position of the transaction in chain with tip chain_tip.

    This is the infallible version of try_get_chain_position.

    -

    Get the txid of the spending transaction and where the spending transaction is observed in +

    Get the txid of the spending transaction and where the spending transaction is observed in the chain of chain_tip.

    If no in-chain transaction spends outpoint, None will be returned.

    Error

    An error will occur only if the ChainOracle implementation (chain) fails.

    If the ChainOracle is infallible, get_chain_spend can be used instead.

    -

    Get the txid of the spending transaction and where the spending transaction is observed in +

    Get the txid of the spending transaction and where the spending transaction is observed in the chain of chain_tip.

    This is the infallible version of try_get_chain_spend

    -

    List graph transactions that are in chain with chain_tip.

    +

    List graph transactions that are in chain with chain_tip.

    Each transaction is represented as a CanonicalTx that contains where the transaction is observed in-chain, and the TxNode.

    Error

    If the ChainOracle implementation (chain) fails, an error will be returned with the returned item.

    If the ChainOracle is infallible, list_chain_txs can be used instead.

    -

    List graph transactions that are in chain with chain_tip.

    +

    List graph transactions that are in chain with chain_tip.

    This is the infallible version of try_list_chain_txs.

    -

    Get a filtered list of outputs from the given outpoints that are in chain with +

    Get a filtered list of outputs from the given outpoints that are in chain with chain_tip.

    outpoints is a list of outpoints we are interested in, coupled with an outpoint identifier (OI) for convenience. If OI is not necessary, the caller can use (), or @@ -115,10 +118,10 @@ returned item.

    fails.

    If the ChainOracle implementation is infallible, filter_chain_txouts can be used instead.

    -

    Get a filtered list of outputs from the given outpoints that are in chain with +

    Get a filtered list of outputs from the given outpoints that are in chain with chain_tip.

    This is the infallible version of try_filter_chain_txouts.

    -

    Get a filtered list of unspent outputs (UTXOs) from the given outpoints that are in +

    Get a filtered list of unspent outputs (UTXOs) from the given outpoints that are in chain with chain_tip.

    outpoints is a list of outpoints we are interested in, coupled with an outpoint identifier (OI) for convenience. If OI is not necessary, the caller can use (), or @@ -129,19 +132,19 @@ instead.

    fails.

    If the ChainOracle implementation is infallible, filter_chain_unspents can be used instead.

    -

    Get a filtered list of unspent outputs (UTXOs) from the given outpoints that are in +

    Get a filtered list of unspent outputs (UTXOs) from the given outpoints that are in chain with chain_tip.

    This is the infallible version of try_filter_chain_unspents.

    -

    Get the total balance of outpoints that are in chain of chain_tip.

    +

    Get the total balance of outpoints that are in chain of chain_tip.

    The output of trust_predicate should return true for scripts that we trust.

    outpoints is a list of outpoints we are interested in, coupled with an outpoint identifier (OI) for convenience. If OI is not necessary, the caller can use (), or Iterator::enumerate over a list of [OutPoint]s.

    If the provided ChainOracle implementation (chain) is infallible, balance can be used instead.

    -

    Get the total balance of outpoints that are in chain of chain_tip.

    +

    Get the total balance of outpoints that are in chain of chain_tip.

    This is the infallible version of try_balance.

    -

    Trait Implementations§

    Converts this type into a shared reference of the (usually inferred) input type.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    The provided closure f will be called with each outpoint/txout pair.
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Converts this type into a shared reference of the (usually inferred) input type.
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more
    The provided closure f will be called with each outpoint/txout pair.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html index 4a074c080c..033b106809 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/index.html @@ -1,4 +1,4 @@ -bdk_electrum - Rust

    Crate bdk_electrum

    source ·
    Expand description

    This crate is used for updating structures of the [bdk_chain] crate with data from electrum.

    +bdk_electrum - Rust

    Crate bdk_electrum

    source ·
    Expand description

    This crate is used for updating structures of the [bdk_chain] crate with data from electrum.

    The star of the show is the ElectrumExt::scan method, which scans for relevant blockchain data (via electrum) and outputs an ElectrumUpdate.

    An ElectrumUpdate only includes txids and no full transactions. The caller is responsible @@ -11,8 +11,8 @@ these steps:

  • Obtaining the full transactions. To do this via electrum, the method -batch_transaction_get can be used.

    +batch_transaction_get can be used.

  • Refer to bdk_electrum_example for a complete example.

    -

    Re-exports

    pub use bdk_chain;
    pub use electrum_client;

    Structs

    Traits

    \ No newline at end of file +

    Re-exports

    pub use bdk_chain;
    pub use electrum_client;

    Structs

    Represents an update fetched from an Electrum server, but excludes full transactions.

    Traits

    Trait to extend [Client] functionality.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/sidebar-items.js index 0a2430d54b..23a13ad52e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["ElectrumUpdate",""]],"trait":[["ElectrumExt",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":[["ElectrumUpdate","Represents an update fetched from an Electrum server, but excludes full transactions."]],"trait":[["ElectrumExt","Trait to extend [`Client`] functionality."]]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html index bd77fb1fce..ff456cb6b0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html @@ -1,13 +1,24 @@ -ElectrumUpdate in bdk_electrum - Rust
    pub struct ElectrumUpdate<K, A> {
    +ElectrumUpdate in bdk_electrum - Rust
    pub struct ElectrumUpdate<K, A> {
         pub graph_update: HashMap<Txid, BTreeSet<A>>,
    -    pub chain_update: LocalChain,
    +    pub new_tip: CheckPoint,
         pub keychain_update: BTreeMap<K, u32>,
    -}

    Fields§

    §graph_update: HashMap<Txid, BTreeSet<A>>§chain_update: LocalChain§keychain_update: BTreeMap<K, u32>

    Implementations§

    Finalizes the ElectrumUpdate with new_txs and anchors of type +}

    Expand description

    Represents an update fetched from an Electrum server, but excludes full transactions.

    +

    To provide a complete update to [TxGraph], you’ll need to call Self::missing_full_txs to +determine the full transactions missing from [TxGraph]. Then call Self::finalize to fetch +the full transactions from Electrum and finalize the update.

    +

    Fields§

    §graph_update: HashMap<Txid, BTreeSet<A>>

    Map of [Txid]s to associated [Anchor]s.

    +
    §new_tip: CheckPoint

    The latest chain tip, as seen by the Electrum server.

    +
    §keychain_update: BTreeMap<K, u32>

    Last-used index update for KeychainTxOutIndex.

    +

    Implementations§

    Determine the full transactions that are missing from graph.

    +

    Refer to ElectrumUpdate.

    +

    Finalizes update with missing txids to fetch from client.

    +

    Refer to ElectrumUpdate.

    +

    Finalizes the ElectrumUpdate with new_txs and anchors of type [ConfirmationTimeAnchor].

    Note: The confirmation time might not be precisely correct if there has been a reorg. Electrum’s API intends that we use the merkle proof API, we should change bdk_electrum to use it.

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html index df603aeeb6..792a498b18 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html @@ -1,6 +1,18 @@ -ElectrumExt in bdk_electrum - Rust
    pub trait ElectrumExt<A> {
    -    fn get_tip(&self) -> Result<(u32, BlockHash), Error>;
    -    fn scan<K: Ord + Clone>(
            &self,
            local_chain: &BTreeMap<u32, BlockHash>,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            batch_size: usize
        ) -> Result<ElectrumUpdate<K, A>, Error>; +ElectrumExt in bdk_electrum - Rust
    pub trait ElectrumExt<A> {
    +    fn scan<K: Ord + Clone>(
            &self,
            prev_tip: Option<CheckPoint>,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            batch_size: usize
        ) -> Result<ElectrumUpdate<K, A>, Error>; - fn scan_without_keychain(
            &self,
            local_chain: &BTreeMap<u32, BlockHash>,
            misc_spks: impl IntoIterator<Item = Script>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            batch_size: usize
        ) -> Result<ElectrumUpdate<(), A>, Error> { ... } -}

    Required Methods§

    Provided Methods§

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file + fn scan_without_keychain(
            &self,
            prev_tip: Option<CheckPoint>,
            misc_spks: impl IntoIterator<Item = Script>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            batch_size: usize
        ) -> Result<ElectrumUpdate<(), A>, Error> { ... } +}
    Expand description

    Trait to extend [Client] functionality.

    +

    Required Methods§

    Scan the blockchain (via electrum) for the data specified and returns a ElectrumUpdate.

    +
      +
    • prev_tip: the most recent blockchain tip present locally
    • +
    • keychain_spks: keychains that we want to scan transactions for
    • +
    • txids: transactions for which we want updated [Anchor]s
    • +
    • outpoints: transactions associated with these outpoints (residing, spending) that we +want to included in the update
    • +
    +

    The scan for each keychain stops after a gap of stop_gap script pubkeys with no associated +transactions. batch_size specifies the max number of script pubkeys to request for in a +single batch request.

    +

    Provided Methods§

    Convenience method to call scan without requiring a keychain.

    +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file 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 7a4b8ff97f..ab1dd0fb13 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,4 +1,4 @@ -bdk_esplora - Rust

    Crate bdk_esplora

    source ·
    Expand description

    BDK Esplora

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

    Usage

    @@ -19,4 +19,4 @@ from an Esplora server.

    // for async // use bdk_esplora::EsploraAsyncExt;

    For full examples, refer to example-crates/wallet_esplora (blocking) and example-crates/wallet_esplora_async.

    -

    Re-exports

    pub use esplora_client;

    Traits

    Trait to extend [esplora_client::AsyncClient] functionality.
    Trait to extend [esplora_client::BlockingClient] functionality.
    \ No newline at end of file +

    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].
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/sidebar-items.js index d019d1ca86..ac69b2bda7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"trait":[["EsploraAsyncExt","Trait to extend [`esplora_client::AsyncClient`] functionality."],["EsploraExt","Trait to extend [`esplora_client::BlockingClient`] functionality."]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"trait":[["EsploraAsyncExt","Trait to extend the functionality of [`esplora_client::AsyncClient`]."],["EsploraExt","Trait to extend the functionality of [`esplora_client::BlockingClient`]."]]}; \ 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 9a13b0e7b4..75a63e0de8 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,22 +1,27 @@ -EsploraAsyncExt in bdk_esplora - Rust
    pub trait EsploraAsyncExt {
    -    fn scan<'life0, 'life1, 'async_trait, K>(
            &'life0 self,
            local_chain: &'life1 BTreeMap<u32, BlockHash>,
            keychain_spks: BTreeMap<K, impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = (u32, Script)> + Send> + Send>,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<LocalUpdate<K, ConfirmationTimeAnchor>, Error>> + Send + 'async_trait>>
        where
            K: 'async_trait + Ord + Clone + Send,
            Self: 'async_trait,
            'life0: 'async_trait,
            'life1: 'async_trait
    ; +EsploraAsyncExt in bdk_esplora - Rust
    pub trait EsploraAsyncExt {
    +    fn update_local_chain<'life0, 'async_trait>(
            &'life0 self,
            local_tip: Option<CheckPoint>,
            request_heights: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = u32> + Send> + Send
        ) -> Pin<Box<dyn Future<Output = Result<Update, Error>> + Send + 'async_trait>>
        where
            Self: 'async_trait,
            'life0: 'async_trait
    ; + fn update_tx_graph<'life0, 'async_trait, K>(
            &'life0 self,
            keychain_spks: BTreeMap<K, impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = (u32, Script)> + Send> + Send>,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>> + Send + 'async_trait>>
        where
            K: 'async_trait + Ord + Clone + Send,
            Self: 'async_trait,
            'life0: 'async_trait
    ; - fn scan_without_keychain<'life0, 'life1, 'async_trait>(
            &'life0 self,
            local_chain: &'life1 BTreeMap<u32, BlockHash>,
            misc_spks: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Script> + Send> + Send,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<LocalUpdate<(), ConfirmationTimeAnchor>, Error>> + Send + 'async_trait>>
        where
            Self: Sync + 'async_trait,
            'life0: 'async_trait,
            'life1: 'async_trait
    , + fn update_tx_graph_without_keychain<'life0, 'async_trait>(
            &'life0 self,
            misc_spks: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Script> + Send> + Send,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<TxGraph<ConfirmationTimeAnchor>, Error>> + Send + 'async_trait>>
        where
            Self: Sync + 'async_trait,
            'life0: 'async_trait
    , { ... } -}
    Expand description

    Trait to extend [esplora_client::AsyncClient] functionality.

    -

    This is the async version of EsploraExt. Refer to -crate-level documentation for more.

    -

    Required Methods§

    Scan the blockchain (via esplora) for the data specified and returns a -[LocalUpdate<K, ConfirmationTimeAnchor>].

    +}
    Expand description

    Trait to extend the functionality of [esplora_client::AsyncClient].

    +

    Refer to crate-level documentation for more.

    +

    Required Methods§

    Prepare an LocalChain update with blocks fetched from Esplora.

    +
      +
    • prev_tip is the previous tip of LocalChain::tip.
    • +
    • get_heights is the block heights that we are interested in fetching from Esplora.
    • +
    +

    The result of this method can be applied to LocalChain::apply_update.

    +

    Scan Esplora for the data specified and return a [TxGraph] and a map of last active +indices.

      -
    • local_chain: the most recent block hashes present locally
    • keychain_spks: keychains that we want to scan transactions for
    • txids: transactions for which we want updated [ConfirmationTimeAnchor]s
    • outpoints: transactions associated with these outpoints (residing, spending) that we -want to included in the update
    • +want to include in the update

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

    -

    Provided Methods§

    Convenience method to call scan without requiring a keychain.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Provided Methods§

    Convenience method to call update_tx_graph without requiring a keychain.

    +

    Implementations on Foreign Types§

    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 50628e0f27..075e035118 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,20 +1,26 @@ -EsploraExt in bdk_esplora - Rust

    Trait bdk_esplora::EsploraExt

    source ·
    pub trait EsploraExt {
    -    fn scan<K: Ord + Clone>(
            &self,
            local_chain: &BTreeMap<u32, BlockHash>,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Result<LocalUpdate<K, ConfirmationTimeAnchor>, Error>; +EsploraExt in bdk_esplora - Rust

    Trait bdk_esplora::EsploraExt

    source ·
    pub trait EsploraExt {
    +    fn update_local_chain(
            &self,
            local_tip: Option<CheckPoint>,
            request_heights: impl IntoIterator<Item = u32>
        ) -> Result<Update, Error>; + fn update_tx_graph<K: Ord + Clone>(
            &self,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>; - fn scan_without_keychain(
            &self,
            local_chain: &BTreeMap<u32, BlockHash>,
            misc_spks: impl IntoIterator<Item = Script>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            parallel_requests: usize
        ) -> Result<LocalUpdate<(), ConfirmationTimeAnchor>, Error> { ... } -}
    Expand description

    Trait to extend [esplora_client::BlockingClient] functionality.

    + fn update_tx_graph_without_keychain(
            &self,
            misc_spks: impl IntoIterator<Item = Script>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            parallel_requests: usize
        ) -> Result<TxGraph<ConfirmationTimeAnchor>, Error> { ... } +}
    Expand description

    Trait to extend the functionality of [esplora_client::BlockingClient].

    Refer to crate-level documentation for more.

    -

    Required Methods§

    Scan the blockchain (via esplora) for the data specified and returns a -[LocalUpdate<K, ConfirmationTimeAnchor>].

    +

    Required Methods§

    Prepare an LocalChain update with blocks fetched from Esplora.

    +
      +
    • prev_tip is the previous tip of LocalChain::tip.
    • +
    • get_heights is the block heights that we are interested in fetching from Esplora.
    • +
    +

    The result of this method can be applied to LocalChain::apply_update.

    +

    Scan Esplora for the data specified and return a [TxGraph] and a map of last active +indices.

      -
    • local_chain: the most recent block hashes present locally
    • keychain_spks: keychains that we want to scan transactions for
    • txids: transactions for which we want updated [ConfirmationTimeAnchor]s
    • outpoints: transactions associated with these outpoints (residing, spending) that we -want to included in the update
    • +want to include in the update

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

    -

    Provided Methods§

    Convenience method to call scan without requiring a keychain.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Provided Methods§

    Convenience method to call update_tx_graph without requiring a keychain.

    +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/all.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/all.html index f659ebc262..5ed43e0351 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/all.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/all.html @@ -1 +1 @@ -List of all items in this crate

    List of all items

    Structs

    Enums

    Functions

    Type Definitions

    Constants

    \ No newline at end of file +List of all items in this crate

    List of all items

    Structs

    Enums

    Functions

    Type Definitions

    Constants

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.ASSUME_FINAL_DEPTH.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.ASSUME_FINAL_DEPTH.html deleted file mode 100644 index bcd4b32881..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.ASSUME_FINAL_DEPTH.html +++ /dev/null @@ -1 +0,0 @@ -ASSUME_FINAL_DEPTH in example_electrum - Rust
    pub(crate) const ASSUME_FINAL_DEPTH: usize = 10;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.DB_PATH.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.DB_PATH.html index e058ba1366..923bff7a95 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.DB_PATH.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/constant.DB_PATH.html @@ -1 +1 @@ -DB_PATH in example_electrum - Rust

    Constant example_electrum::DB_PATH

    source ·
    pub(crate) const DB_PATH: &str = ".bdk_electrum_example.db";
    \ No newline at end of file +DB_PATH in example_electrum - Rust

    Constant example_electrum::DB_PATH

    source ·
    pub(crate) const DB_PATH: &str = ".bdk_example_electrum.db";
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/enum.ElectrumCommands.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/enum.ElectrumCommands.html index 45e1ef9089..de941048bb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/enum.ElectrumCommands.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/enum.ElectrumCommands.html @@ -1,4 +1,4 @@ -ElectrumCommands in example_electrum - Rust
    pub(crate) enum ElectrumCommands {
    +ElectrumCommands in example_electrum - Rust
    pub(crate) enum ElectrumCommands {
         Scan {
             stop_gap: usize,
             scan_options: ScanOptions,
    @@ -17,7 +17,7 @@
     
    §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

    Scans particular addresses using the electrum API.

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Assign values from ArgMatches to self.
    Assign values from ArgMatches to self.
    Append to [Command] so it can instantiate Self. Read more
    Append to [Command] so it can update self. Read more
    Test whether Self can parse a specific subcommand

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Assign values from ArgMatches to self.
    Assign values from ArgMatches to self.
    Append to [Command] so it can instantiate Self. Read more
    Append to [Command] so it can update self. Read more
    Test whether Self can parse a specific subcommand

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    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 59fcb85783..fd8222b7c5 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 acc4ee184a..fec0dc3098 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
    \ No newline at end of file +example_electrum - Rust
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/sidebar-items.js index 7ed1769574..b1bf5f69f3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":[["ASSUME_FINAL_DEPTH",""],["DB_MAGIC",""],["DB_PATH",""]],"enum":[["ElectrumCommands",""]],"fn":[["main",""]],"struct":[["ScanOptions",""]],"type":[["ChangeSet",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["DB_MAGIC",""],["DB_PATH",""]],"enum":[["ElectrumCommands",""]],"fn":[["main",""]],"struct":[["ScanOptions",""]],"type":[["ChangeSet",""]]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/struct.ScanOptions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/struct.ScanOptions.html index f17b2e3572..bf0c6874a9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/struct.ScanOptions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/struct.ScanOptions.html @@ -1,9 +1,9 @@ -ScanOptions in example_electrum - Rust
    pub struct ScanOptions {
    +ScanOptions in example_electrum - Rust
    pub struct ScanOptions {
         pub batch_size: usize,
     }

    Fields§

    §batch_size: usize

    Set batch size for each script_history call to electrum client.

    -

    Trait Implementations§

    Append to [Command] so it can instantiate Self. Read more
    Append to [Command] so it can update self. Read more
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Deprecated, replaced with CommandFactory::command
    Deprecated, replaced with CommandFactory::command_for_update
    Build a [Command] that can instantiate Self. Read more
    Build a [Command] that can update self. Read more
    Formats the value using the given formatter. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Assign values from ArgMatches to self.
    Assign values from ArgMatches to self.
    Parse from std::env::args_os(), exit on error
    Parse from std::env::args_os(), return Err on error.
    Parse from iterator, exit on error
    Parse from iterator, return Err on error.
    Update from iterator, exit on error
    Update from iterator, return Err on error.
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Append to [Command] so it can instantiate Self. Read more
    Append to [Command] so it can update self. Read more
    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Deprecated, replaced with CommandFactory::command
    Deprecated, replaced with CommandFactory::command_for_update
    Build a [Command] that can instantiate Self. Read more
    Build a [Command] that can update self. Read more
    Formats the value using the given formatter. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    Assign values from ArgMatches to self.
    Assign values from ArgMatches to self.
    Parse from std::env::args_os(), exit on error
    Parse from std::env::args_os(), return Err on error.
    Parse from iterator, exit on error
    Parse from iterator, return Err on error.
    Update from iterator, exit on error
    Update from iterator, return Err on error.
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    +sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html index 1e6554466d..5015239e10 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_electrum - Rust

    Type Definition example_electrum::ChangeSet

    source ·
    pub(crate) type ChangeSet = LocalChangeSet<Keychain, ConfirmationHeightAnchor>;
    \ No newline at end of file +ChangeSet in example_electrum - Rust

    Type Definition example_electrum::ChangeSet

    source ·
    pub(crate) type ChangeSet = LocalChangeSet<Keychain, ConfirmationHeightAnchor>;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/clone/trait.Clone.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/clone/trait.Clone.js index b295ff8be8..3341e8fbe5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/clone/trait.Clone.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/clone/trait.Clone.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Clone for PkOrF"],["impl Clone for SatisfiableItem"],["impl Clone for Satisfaction"],["impl Clone for Policy"],["impl Clone for Condition"],["impl<'a> Clone for BuildSatisfaction<'a>"],["impl Clone for ScriptContextEnum"],["impl<K: Clone, Ctx: ScriptContext> Clone for GeneratedKey<K, Ctx>"],["impl Clone for PrivateKeyGenerateOptions"],["impl Clone for KeychainKind"],["impl Clone for FeeRate"],["impl Clone for LocalUtxo"],["impl Clone for WeightedUtxo"],["impl Clone for Utxo"],["impl Clone for TransactionDetails"],["impl Clone for LargestFirstCoinSelection"],["impl Clone for OldestFirstCoinSelection"],["impl Clone for BranchAndBoundCoinSelection"],["impl Clone for SignerId"],["impl Clone for SignerError"],["impl Clone for SignerContext"],["impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>"],["impl Clone for SignerOrdering"],["impl Clone for SignersContainer"],["impl Clone for SignOptions"],["impl Clone for TapLeavesOptions"],["impl Clone for CreateTx"],["impl Clone for BumpFee"],["impl<'a, D, Cs: Clone, Ctx> Clone for TxBuilder<'a, D, Cs, Ctx>"],["impl Clone for TxOrdering"],["impl Clone for ChangeSpendPolicy"]], -"bdk_chain":[["impl<I: Clone> Clone for SpkTxOutIndex<I>"],["impl<A: Clone> Clone for ChainPosition<A>"],["impl Clone for ConfirmationTime"],["impl Clone for BlockId"],["impl Clone for ConfirmationHeightAnchor"],["impl Clone for ConfirmationTimeAnchor"],["impl<A: Clone> Clone for FullTxOut<A>"],["impl<A: Clone, IA: Clone> Clone for IndexedAdditions<A, IA>"],["impl<K: Clone> Clone for KeychainTxOutIndex<K>"],["impl<K: Clone> Clone for DerivationAdditions<K>"],["impl<K: Clone, A: Clone> Clone for LocalUpdate<K, A>"],["impl<K: Clone, A: Clone> Clone for LocalChangeSet<K, A>"],["impl Clone for Balance"],["impl Clone for LocalChain"],["impl Clone for UpdateNotConnectedError"],["impl Clone for InsertBlockNotMatchingError"],["impl<A: Clone> Clone for TxGraph<A>"],["impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>"],["impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>"],["impl<A: Clone> Clone for Additions<A>"],["impl<D: Clone> Clone for SpkIterator<D>"]], +"bdk_chain":[["impl<I: Clone> Clone for SpkTxOutIndex<I>"],["impl<A: Clone> Clone for ChainPosition<A>"],["impl Clone for ConfirmationTime"],["impl Clone for BlockId"],["impl Clone for ConfirmationHeightAnchor"],["impl Clone for ConfirmationTimeAnchor"],["impl<A: Clone> Clone for FullTxOut<A>"],["impl<A: Clone, IA: Clone> Clone for IndexedAdditions<A, IA>"],["impl<K: Clone> Clone for KeychainTxOutIndex<K>"],["impl<K: Clone> Clone for DerivationAdditions<K>"],["impl<K: Clone, A: Clone> Clone for LocalUpdate<K, A>"],["impl<K: Clone, A: Clone> Clone for LocalChangeSet<K, A>"],["impl Clone for Balance"],["impl Clone for CheckPoint"],["impl Clone for Update"],["impl Clone for LocalChain"],["impl Clone for InsertBlockError"],["impl Clone for CannotConnectError"],["impl<A: Clone> Clone for TxGraph<A>"],["impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>"],["impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>"],["impl<A: Clone> Clone for Additions<A>"],["impl<D: Clone> Clone for SpkIterator<D>"]], "bdk_coin_select":[["impl Clone for WeightedValue"],["impl Clone for CoinSelectorOpt"],["impl<'a> Clone for CoinSelector<'a>"],["impl Clone for SelectionError"],["impl Clone for SelectionConstraint"],["impl Clone for Selection"],["impl Clone for ExcessStrategyKind"],["impl Clone for ExcessStrategy"]], "bdk_electrum":[["impl<K: Clone, A: Clone> Clone for ElectrumUpdate<K, A>"]], "bdk_tmp_plan":[["impl<Ak: Clone> Clone for Requirements<Ak>"],["impl<Ak: Clone> Clone for RequiredSignatures<Ak>"],["impl Clone for SigningError"],["impl<Ak: Clone> Clone for PlanKey<Ak>"],["impl<AK: Clone> Clone for Plan<AK>"],["impl Clone for SatisfactionMaterial"],["impl<K: Clone> Clone for Assets<K>"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Eq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Eq.js index e101bd134a..1467889149 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Eq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Eq.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Eq for PkOrF"],["impl Eq for SatisfiableItem"],["impl Eq for Satisfaction"],["impl Eq for Policy"],["impl Eq for Condition"],["impl Eq for PolicyError"],["impl Eq for ScriptContextEnum"],["impl Eq for KeychainKind"],["impl Eq for LocalUtxo"],["impl Eq for WeightedUtxo"],["impl Eq for Utxo"],["impl Eq for TransactionDetails"],["impl Eq for SignerId"],["impl Eq for SignerError"],["impl Eq for SignerContext"],["impl Eq for SignerOrdering"],["impl Eq for TapLeavesOptions"],["impl Eq for TxOrdering"],["impl Eq for ChangeSpendPolicy"],["impl Eq for AddressInfo"]], -"bdk_chain":[["impl<A: Eq> Eq for ChainPosition<A>"],["impl Eq for ConfirmationTime"],["impl Eq for BlockId"],["impl Eq for ConfirmationHeightAnchor"],["impl Eq for ConfirmationTimeAnchor"],["impl<A: Eq> Eq for FullTxOut<A>"],["impl Eq for Balance"],["impl Eq for LocalChain"],["impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>"],["impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>"]], +"bdk_chain":[["impl<A: Eq> Eq for ChainPosition<A>"],["impl Eq for ConfirmationTime"],["impl Eq for BlockId"],["impl Eq for ConfirmationHeightAnchor"],["impl Eq for ConfirmationTimeAnchor"],["impl<A: Eq> Eq for FullTxOut<A>"],["impl Eq for Balance"],["impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>"],["impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>"]], "bdk_coin_select":[["impl Eq for SelectionConstraint"],["impl Eq for ExcessStrategyKind"]], "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/implementors/core/cmp/trait.Ord.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Ord.js index ba12207384..5b787c0c7f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Ord.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Ord.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Ord for KeychainKind"],["impl Ord for TransactionDetails"],["impl Ord for SignerId"],["impl Ord for SignerOrdering"],["impl Ord for TxOrdering"],["impl Ord for ChangeSpendPolicy"]], -"bdk_chain":[["impl<A: Ord> Ord for ChainPosition<A>"],["impl Ord for ConfirmationTime"],["impl Ord for BlockId"],["impl Ord for ConfirmationHeightAnchor"],["impl Ord for ConfirmationTimeAnchor"],["impl<A: Ord> Ord for FullTxOut<A>"],["impl Ord for LocalChain"],["impl<'a, T: Ord, A: Ord> Ord for TxNode<'a, T, A>"],["impl<'a, T: Ord, A: Ord> Ord for CanonicalTx<'a, T, A>"]], +"bdk_chain":[["impl<A: Ord> Ord for ChainPosition<A>"],["impl Ord for ConfirmationTime"],["impl Ord for BlockId"],["impl Ord for ConfirmationHeightAnchor"],["impl Ord for ConfirmationTimeAnchor"],["impl<A: Ord> Ord for FullTxOut<A>"],["impl<'a, T: Ord, A: Ord> Ord for TxNode<'a, T, A>"],["impl<'a, T: Ord, A: Ord> Ord for CanonicalTx<'a, T, A>"]], "bdk_coin_select":[["impl Ord for ExcessStrategyKind"]], "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/implementors/core/cmp/trait.PartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialEq.js index 7111cab5c5..bfdf6113f3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialEq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialEq.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl PartialEq<PkOrF> for PkOrF"],["impl PartialEq<SatisfiableItem> for SatisfiableItem"],["impl PartialEq<Satisfaction> for Satisfaction"],["impl PartialEq<Policy> for Policy"],["impl PartialEq<Condition> for Condition"],["impl PartialEq<PolicyError> for PolicyError"],["impl PartialEq<ScriptContextEnum> for ScriptContextEnum"],["impl PartialEq<KeychainKind> for KeychainKind"],["impl PartialEq<FeeRate> for FeeRate"],["impl PartialEq<LocalUtxo> for LocalUtxo"],["impl PartialEq<WeightedUtxo> for WeightedUtxo"],["impl PartialEq<Utxo> for Utxo"],["impl PartialEq<TransactionDetails> for TransactionDetails"],["impl PartialEq<SignerId> for SignerId"],["impl PartialEq<SignerError> for SignerError"],["impl PartialEq<SignerContext> for SignerContext"],["impl PartialEq<SignerOrdering> for SignerOrdering"],["impl PartialEq<TapLeavesOptions> for TapLeavesOptions"],["impl PartialEq<TxOrdering> for TxOrdering"],["impl PartialEq<ChangeSpendPolicy> for ChangeSpendPolicy"],["impl PartialEq<AddressInfo> for AddressInfo"]], -"bdk_chain":[["impl<A: PartialEq> PartialEq<ChainPosition<A>> for ChainPosition<A>"],["impl PartialEq<ConfirmationTime> for ConfirmationTime"],["impl PartialEq<BlockId> for BlockId"],["impl PartialEq<ConfirmationHeightAnchor> for ConfirmationHeightAnchor"],["impl PartialEq<ConfirmationTimeAnchor> for ConfirmationTimeAnchor"],["impl<A: PartialEq> PartialEq<FullTxOut<A>> for FullTxOut<A>"],["impl<A: PartialEq, IA: PartialEq> PartialEq<IndexedAdditions<A, IA>> for IndexedAdditions<A, IA>"],["impl<K: PartialEq> PartialEq<DerivationAdditions<K>> for DerivationAdditions<K>"],["impl<K: PartialEq, A: PartialEq> PartialEq<LocalUpdate<K, A>> for LocalUpdate<K, A>"],["impl<K: PartialEq, A: PartialEq> PartialEq<LocalChangeSet<K, A>> for LocalChangeSet<K, A>"],["impl PartialEq<Balance> for Balance"],["impl PartialEq<LocalChain> for LocalChain"],["impl PartialEq<UpdateNotConnectedError> for UpdateNotConnectedError"],["impl PartialEq<InsertBlockNotMatchingError> for InsertBlockNotMatchingError"],["impl<A: PartialEq> PartialEq<TxGraph<A>> for TxGraph<A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq<TxNode<'a, T, A>> for TxNode<'a, T, A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq<CanonicalTx<'a, T, A>> for CanonicalTx<'a, T, A>"],["impl<A: PartialEq> PartialEq<Additions<A>> for Additions<A>"]], +"bdk_chain":[["impl<A: PartialEq> PartialEq<ChainPosition<A>> for ChainPosition<A>"],["impl PartialEq<ConfirmationTime> for ConfirmationTime"],["impl PartialEq<BlockId> for BlockId"],["impl PartialEq<ConfirmationHeightAnchor> for ConfirmationHeightAnchor"],["impl PartialEq<ConfirmationTimeAnchor> for ConfirmationTimeAnchor"],["impl<A: PartialEq> PartialEq<FullTxOut<A>> for FullTxOut<A>"],["impl<A: PartialEq, IA: PartialEq> PartialEq<IndexedAdditions<A, IA>> for IndexedAdditions<A, IA>"],["impl<K: PartialEq> PartialEq<DerivationAdditions<K>> for DerivationAdditions<K>"],["impl<K: PartialEq, A: PartialEq> PartialEq<LocalChangeSet<K, A>> for LocalChangeSet<K, A>"],["impl PartialEq<Balance> for Balance"],["impl PartialEq<LocalChain> for LocalChain"],["impl PartialEq<InsertBlockError> for InsertBlockError"],["impl PartialEq<CannotConnectError> for CannotConnectError"],["impl<A: PartialEq> PartialEq<TxGraph<A>> for TxGraph<A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq<TxNode<'a, T, A>> for TxNode<'a, T, A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq<CanonicalTx<'a, T, A>> for CanonicalTx<'a, T, A>"],["impl<A: PartialEq> PartialEq<Additions<A>> for Additions<A>"]], "bdk_coin_select":[["impl PartialEq<SelectionConstraint> for SelectionConstraint"],["impl PartialEq<ExcessStrategyKind> for ExcessStrategyKind"]], "example_cli":[["impl PartialEq<Keychain> for Keychain"]], "example_electrum":[["impl PartialEq<ScanOptions> for ScanOptions"]] diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialOrd.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialOrd.js index c10faec600..470cc7fb40 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialOrd.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.PartialOrd.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl PartialOrd<Condition> for Condition"],["impl PartialOrd<KeychainKind> for KeychainKind"],["impl PartialOrd<FeeRate> for FeeRate"],["impl PartialOrd<TransactionDetails> for TransactionDetails"],["impl PartialOrd<SignerId> for SignerId"],["impl PartialOrd<SignerOrdering> for SignerOrdering"],["impl PartialOrd<TxOrdering> for TxOrdering"],["impl PartialOrd<ChangeSpendPolicy> for ChangeSpendPolicy"]], -"bdk_chain":[["impl<A: PartialOrd> PartialOrd<ChainPosition<A>> for ChainPosition<A>"],["impl PartialOrd<ConfirmationTime> for ConfirmationTime"],["impl PartialOrd<BlockId> for BlockId"],["impl PartialOrd<ConfirmationHeightAnchor> for ConfirmationHeightAnchor"],["impl PartialOrd<ConfirmationTimeAnchor> for ConfirmationTimeAnchor"],["impl<A: PartialOrd> PartialOrd<FullTxOut<A>> for FullTxOut<A>"],["impl PartialOrd<LocalChain> for LocalChain"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd<TxNode<'a, T, A>> for TxNode<'a, T, A>"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd<CanonicalTx<'a, T, A>> for CanonicalTx<'a, T, A>"]], +"bdk_chain":[["impl<A: PartialOrd> PartialOrd<ChainPosition<A>> for ChainPosition<A>"],["impl PartialOrd<ConfirmationTime> for ConfirmationTime"],["impl PartialOrd<BlockId> for BlockId"],["impl PartialOrd<ConfirmationHeightAnchor> for ConfirmationHeightAnchor"],["impl PartialOrd<ConfirmationTimeAnchor> for ConfirmationTimeAnchor"],["impl<A: PartialOrd> PartialOrd<FullTxOut<A>> for FullTxOut<A>"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd<TxNode<'a, T, A>> for TxNode<'a, T, A>"],["impl<'a, T: PartialOrd, A: PartialOrd> PartialOrd<CanonicalTx<'a, T, A>> for CanonicalTx<'a, T, A>"]], "bdk_coin_select":[["impl PartialOrd<ExcessStrategyKind> for ExcessStrategyKind"]], "example_cli":[["impl PartialOrd<Keychain> 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/implementors/core/convert/trait.AsRef.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js index e501f90875..e0873f1c03 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js @@ -1,4 +1,4 @@ (function() {var implementors = { "bdk":[["impl AsRef<[u8]> for KeychainKind"],["impl<D> AsRef<TxGraph<ConfirmationTimeAnchor>> for Wallet<D>"]], -"bdk_chain":[["impl<K> AsRef<BTreeMap<K, u32, Global>> for DerivationAdditions<K>"],["impl AsRef<BTreeMap<u32, BlockHash, Global>> for LocalChain"],["impl<A> AsRef<TxGraph<A>> for TxGraph<A>"]] +"bdk_chain":[["impl<K> AsRef<BTreeMap<K, u32, Global>> for DerivationAdditions<K>"],["impl<A> AsRef<TxGraph<A>> for TxGraph<A>"]] };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/implementors/core/default/trait.Default.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/default/trait.Default.js index a87bb1fb23..0a90ede72e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/default/trait.Default.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/default/trait.Default.js @@ -1,7 +1,6 @@ (function() {var implementors = { "bdk":[["impl Default for Condition"],["impl Default for PrivateKeyGenerateOptions"],["impl Default for FeeRate"],["impl Default for LargestFirstCoinSelection"],["impl Default for OldestFirstCoinSelection"],["impl Default for BranchAndBoundCoinSelection"],["impl Default for SignerOrdering"],["impl Default for SignersContainer"],["impl Default for TapLeavesOptions"],["impl Default for SignOptions"],["impl Default for CreateTx"],["impl Default for BumpFee"],["impl Default for TxOrdering"],["impl Default for ChangeSpendPolicy"]], -"bdk_chain":[["impl<I> Default for SpkTxOutIndex<I>"],["impl Default for BlockId"],["impl Default for ConfirmationHeightAnchor"],["impl Default for ConfirmationTimeAnchor"],["impl<A, I: Default> Default for IndexedTxGraph<A, I>"],["impl<A, IA: Default> Default for IndexedAdditions<A, IA>"],["impl<K> Default for KeychainTxOutIndex<K>"],["impl<K> Default for DerivationAdditions<K>"],["impl<K, A> Default for LocalUpdate<K, A>"],["impl<K, A> Default for LocalChangeSet<K, A>"],["impl Default for Balance"],["impl Default for LocalChain"],["impl<A> Default for TxGraph<A>"],["impl<A> Default for Additions<A>"]], -"bdk_electrum":[["impl<K, A> Default for ElectrumUpdate<K, A>"]], +"bdk_chain":[["impl<I> Default for SpkTxOutIndex<I>"],["impl Default for BlockId"],["impl Default for ConfirmationHeightAnchor"],["impl Default for ConfirmationTimeAnchor"],["impl<A, I: Default> Default for IndexedTxGraph<A, I>"],["impl<A, IA: Default> Default for IndexedAdditions<A, IA>"],["impl<K> Default for KeychainTxOutIndex<K>"],["impl<K> Default for DerivationAdditions<K>"],["impl<K, A> Default for LocalChangeSet<K, A>"],["impl Default for Balance"],["impl Default for LocalChain"],["impl<A> Default for TxGraph<A>"],["impl<A> Default for Additions<A>"]], "bdk_tmp_plan":[["impl<Ak> Default for RequiredSignatures<Ak>"],["impl<Ak> Default for Requirements<Ak>"],["impl Default for SatisfactionMaterial"],["impl<K> Default for Assets<K>"]], "example_cli":[["impl Default for CoinSelectionAlgo"]] };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/implementors/core/error/trait.Error.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/error/trait.Error.js index 2b7594177e..f87ed1598b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/error/trait.Error.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/error/trait.Error.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Error for Error"],["impl Error for Error"],["impl Error for PolicyError"],["impl Error for KeyError"],["impl Error for SignerError"],["impl<P: Display + Debug> Error for NewError<P>"]], -"bdk_chain":[["impl Error for UpdateNotConnectedError"],["impl Error for InsertBlockNotMatchingError"]], +"bdk_chain":[["impl Error for InsertBlockError"],["impl Error for CannotConnectError"]], "bdk_coin_select":[["impl Error for SelectionError"]], "bdk_file_store":[["impl Error for IterError"],["impl<'a> Error for FileError<'a>"]], "bdk_tmp_plan":[["impl Error for SigningError"]] diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Debug.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Debug.js index 3aec85602c..97bbd6069f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Debug.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Debug.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Debug for Error"],["impl Debug for Error"],["impl Debug for PkOrF"],["impl Debug for SatisfiableItem"],["impl Debug for Satisfaction"],["impl Debug for Policy"],["impl Debug for Condition"],["impl Debug for PolicyError"],["impl<'a> Debug for BuildSatisfaction<'a>"],["impl<Ctx: Debug + ScriptContext> Debug for DescriptorKey<Ctx>"],["impl Debug for ScriptContextEnum"],["impl Debug for PrivateKeyGenerateOptions"],["impl Debug for KeyError"],["impl Debug for KeychainKind"],["impl Debug for FeeRate"],["impl Debug for LocalUtxo"],["impl Debug for WeightedUtxo"],["impl Debug for Utxo"],["impl Debug for TransactionDetails"],["impl Debug for Excess"],["impl Debug for CoinSelectionResult"],["impl Debug for LargestFirstCoinSelection"],["impl Debug for OldestFirstCoinSelection"],["impl Debug for BranchAndBoundCoinSelection"],["impl Debug for FullyNodedExport"],["impl Debug for SignerId"],["impl Debug for SignerError"],["impl Debug for SignerContext"],["impl<S: Debug + Sized + Debug + Clone> Debug for SignerWrapper<S>"],["impl Debug for SignerOrdering"],["impl Debug for SignersContainer"],["impl Debug for SignOptions"],["impl Debug for TapLeavesOptions"],["impl Debug for CreateTx"],["impl Debug for BumpFee"],["impl<'a, D: Debug, Cs: Debug, Ctx: Debug> Debug for TxBuilder<'a, D, Cs, Ctx>"],["impl Debug for TxOrdering"],["impl Debug for ChangeSpendPolicy"],["impl<D: Debug> Debug for Wallet<D>"],["impl Debug for AddressIndex"],["impl Debug for AddressInfo"],["impl<P: Debug> Debug for NewError<P>"],["impl Debug for InsertTxError"]], -"bdk_chain":[["impl<I: Debug> Debug for SpkTxOutIndex<I>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl Debug for ConfirmationTime"],["impl Debug for BlockId"],["impl Debug for ConfirmationHeightAnchor"],["impl Debug for ConfirmationTimeAnchor"],["impl<A: Debug> Debug for FullTxOut<A>"],["impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>"],["impl<A: Debug, IA: Debug> Debug for IndexedAdditions<A, IA>"],["impl<K: Debug> Debug for KeychainTxOutIndex<K>"],["impl<K: Debug> Debug for DerivationAdditions<K>"],["impl<K: Debug, A: Debug> Debug for LocalUpdate<K, A>"],["impl<K: Debug, A: Debug> Debug for LocalChangeSet<K, A>"],["impl Debug for Balance"],["impl Debug for LocalChain"],["impl Debug for UpdateNotConnectedError"],["impl Debug for InsertBlockNotMatchingError"],["impl<A: Debug> Debug for TxGraph<A>"],["impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>"],["impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>"],["impl<A: Debug> Debug for Additions<A>"],["impl<B: Debug, C: Debug> Debug for Persist<B, C>"]], +"bdk_chain":[["impl<I: Debug> Debug for SpkTxOutIndex<I>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl Debug for ConfirmationTime"],["impl Debug for BlockId"],["impl Debug for ConfirmationHeightAnchor"],["impl Debug for ConfirmationTimeAnchor"],["impl<A: Debug> Debug for FullTxOut<A>"],["impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>"],["impl<A: Debug, IA: Debug> Debug for IndexedAdditions<A, IA>"],["impl<K: Debug> Debug for KeychainTxOutIndex<K>"],["impl<K: Debug> Debug for DerivationAdditions<K>"],["impl<K: Debug, A: Debug> Debug for LocalUpdate<K, A>"],["impl<K: Debug, A: Debug> Debug for LocalChangeSet<K, A>"],["impl Debug for Balance"],["impl Debug for CheckPoint"],["impl Debug for Update"],["impl Debug for LocalChain"],["impl Debug for InsertBlockError"],["impl Debug for CannotConnectError"],["impl<A: Debug> Debug for TxGraph<A>"],["impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>"],["impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>"],["impl<A: Debug> Debug for Additions<A>"],["impl<B: Debug, C: Debug> Debug for Persist<B, C>"]], "bdk_coin_select":[["impl Debug for WeightedValue"],["impl Debug for CoinSelectorOpt"],["impl<'a> Debug for CoinSelector<'a>"],["impl Debug for SelectionError"],["impl Debug for SelectionConstraint"],["impl Debug for Selection"],["impl Debug for ExcessStrategyKind"],["impl Debug for ExcessStrategy"]], "bdk_electrum":[["impl<K: Debug, A: Debug> Debug for ElectrumUpdate<K, A>"]], "bdk_file_store":[["impl Debug for IterError"],["impl<'a, C: Debug> Debug for Store<'a, C>"],["impl<'a> Debug for FileError<'a>"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Display.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Display.js index 36c69ff449..ae417d9fd9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Display.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Display.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Display for Error"],["impl Display for Error"],["impl Display for PolicyError"],["impl Display for KeyError"],["impl Display for SignerError"],["impl Display for AddressInfo"],["impl<P> Display for NewError<P>where
        P: Display,
    "]], -"bdk_chain":[["impl Display for Balance"],["impl Display for UpdateNotConnectedError"],["impl Display for InsertBlockNotMatchingError"]], +"bdk_chain":[["impl Display for Balance"],["impl Display for InsertBlockError"],["impl Display for CannotConnectError"]], "bdk_coin_select":[["impl Display for SelectionError"],["impl Display for SelectionConstraint"],["impl Display for ExcessStrategyKind"]], "bdk_file_store":[["impl Display for IterError"],["impl<'a> Display for FileError<'a>"]], "bdk_tmp_plan":[["impl Display for SigningError"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/collect/trait.IntoIterator.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/collect/trait.IntoIterator.js new file mode 100644 index 0000000000..8b097e3f40 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/collect/trait.IntoIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"bdk_chain":[["impl IntoIterator for CheckPoint"]] +};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/implementors/core/iter/traits/iterator/trait.Iterator.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js index 4849676b14..f4b1c141c2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl<'g, A, F, O> Iterator for TxDescendants<'g, A, F>where
        F: FnMut(usize, Txid) -> Option<O>,
    "],["impl<D> Iterator for SpkIterator<D>where
        D: Borrow<Descriptor<DescriptorPublicKey>>,
    "]], +"bdk_chain":[["impl Iterator for CheckPointIter"],["impl<'g, A, F, O> Iterator for TxDescendants<'g, A, F>where
        F: FnMut(usize, Txid) -> Option<O>,
    "],["impl<D> Iterator for SpkIterator<D>where
        D: Borrow<Descriptor<DescriptorPublicKey>>,
    "]], "bdk_coin_select":[["impl<'c, 'f, S: Ord + Copy + Display> Iterator for BnbIter<'c, 'f, S>"]], "bdk_file_store":[["impl<'t, T> Iterator for EntryIter<'t, T>where
        T: DeserializeOwned,
    "]] };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/implementors/core/marker/trait.Freeze.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js index 898fff3886..49e9129679 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Freeze for Error",1,["bdk::error::Error"]],["impl Freeze for Error",1,["bdk::descriptor::error::Error"]],["impl Freeze for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Freeze for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Freeze for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Freeze for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Freeze for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Freeze for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Freeze for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Freeze for P2Pkh<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Freeze for P2Wpkh_P2Sh<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Freeze for P2Wpkh<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Freeze for P2TR<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Freeze for Bip44<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Freeze for Bip44Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Freeze for Bip49<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Freeze for Bip49Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Freeze for Bip84<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Freeze for Bip84Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Freeze for Bip86<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Freeze for Bip86Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Freeze for DescriptorKey<Ctx>",1,["bdk::keys::DescriptorKey"]],["impl Freeze for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Freeze for ExtendedKey<Ctx>",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Freeze for GeneratedKey<K, Ctx>where
        K: Freeze,
    ",1,["bdk::keys::GeneratedKey"]],["impl Freeze for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Freeze for KeyError",1,["bdk::keys::KeyError"]],["impl Freeze for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Freeze for FeeRate",1,["bdk::types::FeeRate"]],["impl Freeze for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Freeze for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Freeze for Utxo",1,["bdk::types::Utxo"]],["impl Freeze for TransactionDetails",1,["bdk::types::TransactionDetails"]],["impl Freeze for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Freeze for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Freeze for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Freeze for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Freeze for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Freeze for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Freeze for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Freeze for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Freeze for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Freeze for SignerWrapper<S>where
        S: Freeze,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Freeze for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Freeze for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Freeze for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Freeze for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Freeze for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Freeze for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> Freeze for TxBuilder<'a, D, Cs, Ctx>where
        Cs: Freeze,
    ",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Freeze for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Freeze for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Freeze for Wallet<D>where
        D: Freeze,
    ",1,["bdk::wallet::Wallet"]],["impl Freeze for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Freeze for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Freeze for NewError<P>where
        P: Freeze,
    ",1,["bdk::wallet::NewError"]],["impl Freeze for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Freeze for ChainPosition<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Freeze for FullTxOut<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>where
        I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for IndexedAdditions<A, IA>where
        IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for DerivationAdditions<K>",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Freeze for LocalUpdate<K, A>",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Freeze for LocalChangeSet<K, A>",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for UpdateNotConnectedError",1,["bdk_chain::local_chain::UpdateNotConnectedError"]],["impl Freeze for InsertBlockNotMatchingError",1,["bdk_chain::local_chain::InsertBlockNotMatchingError"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Freeze for Additions<A>",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>where
        F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Freeze for Persist<B, C>where
        B: Freeze,
        C: Freeze,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Freeze for SpkIterator<D>where
        D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Freeze for ChainPosition<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Freeze for FullTxOut<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>where
        I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for IndexedAdditions<A, IA>where
        IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for DerivationAdditions<K>",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Freeze for LocalUpdate<K, A>",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Freeze for LocalChangeSet<K, A>",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for Update",1,["bdk_chain::local_chain::Update"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Freeze for Additions<A>",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>where
        F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Freeze for Persist<B, C>where
        B: Freeze,
        C: Freeze,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Freeze for SpkIterator<D>where
        D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Freeze for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Freeze for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Freeze for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Freeze for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Freeze for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Freeze for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Freeze for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Freeze for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Freeze for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Freeze for Bnb<'c, S>where
        S: Freeze,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> Freeze for BnbIter<'c, 'f, S>where
        S: Freeze,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl Freeze for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl<K, A> Freeze for ElectrumUpdate<K, A>",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Freeze for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Freeze for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Freeze for Store<'a, C>",1,["bdk_file_store::store::Store"]],["impl<'a> Freeze for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js index b57f0ce81a..70d6620efb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Send for Error",1,["bdk::error::Error"]],["impl Send for Error",1,["bdk::descriptor::error::Error"]],["impl Send for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Send for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Send for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Send for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Send for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Send for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Send for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Send for P2Pkh<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Send for P2Wpkh_P2Sh<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Send for P2Wpkh<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Send for P2TR<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Send for Bip44<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Send for Bip44Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Send for Bip49<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Send for Bip49Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Send for Bip84<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Send for Bip84Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Send for Bip86<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Send for Bip86Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Send for DescriptorKey<Ctx>where
        Ctx: Send,
    ",1,["bdk::keys::DescriptorKey"]],["impl Send for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Send for ExtendedKey<Ctx>where
        Ctx: Send,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Send for GeneratedKey<K, Ctx>where
        Ctx: Send,
        K: Send,
    ",1,["bdk::keys::GeneratedKey"]],["impl Send for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Send for KeyError",1,["bdk::keys::KeyError"]],["impl Send for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Send for FeeRate",1,["bdk::types::FeeRate"]],["impl Send for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Send for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Send for Utxo",1,["bdk::types::Utxo"]],["impl Send for TransactionDetails",1,["bdk::types::TransactionDetails"]],["impl Send for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Send for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Send for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Send for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Send for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Send for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Send for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Send for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Send for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Send for SignerWrapper<S>where
        S: Send,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Send for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Send for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Send for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Send for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Send for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Send for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !Send for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Send for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Send for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Send for Wallet<D>where
        D: Send,
    ",1,["bdk::wallet::Wallet"]],["impl Send for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Send for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Send for NewError<P>where
        P: Send,
    ",1,["bdk::wallet::NewError"]],["impl Send for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Send for SpkTxOutIndex<I>where
        I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Send for ChainPosition<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Send for FullTxOut<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Send for IndexedTxGraph<A, I>where
        A: Send,
        I: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for IndexedAdditions<A, IA>where
        A: Send,
        IA: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Send for KeychainTxOutIndex<K>where
        K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for DerivationAdditions<K>where
        K: Send,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Send for LocalUpdate<K, A>where
        A: Send,
        K: Send,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Send for LocalChangeSet<K, A>where
        A: Send,
        K: Send,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for UpdateNotConnectedError",1,["bdk_chain::local_chain::UpdateNotConnectedError"]],["impl Send for InsertBlockNotMatchingError",1,["bdk_chain::local_chain::InsertBlockNotMatchingError"]],["impl<A> Send for TxGraph<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Send for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Send for Additions<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>where
        A: Sync,
        F: Send,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Send for Persist<B, C>where
        B: Send,
        C: Send,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Send for SpkIterator<D>where
        D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Send for SpkTxOutIndex<I>where
        I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Send for ChainPosition<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Send for FullTxOut<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Send for IndexedTxGraph<A, I>where
        A: Send,
        I: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for IndexedAdditions<A, IA>where
        A: Send,
        IA: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Send for KeychainTxOutIndex<K>where
        K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for DerivationAdditions<K>where
        K: Send,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Send for LocalUpdate<K, A>where
        A: Send,
        K: Send,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Send for LocalChangeSet<K, A>where
        A: Send,
        K: Send,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for Update",1,["bdk_chain::local_chain::Update"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Send for TxGraph<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Send for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Send for Additions<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>where
        A: Sync,
        F: Send,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Send for Persist<B, C>where
        B: Send,
        C: Send,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Send for SpkIterator<D>where
        D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Send for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Send for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Send for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Send for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Send for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Send for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Send for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Send for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Send for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Send for Bnb<'c, S>where
        S: Send,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !Send for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl Send for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl<K, A> Send for ElectrumUpdate<K, A>where
        A: Send,
        K: Send,
    ",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Send for EntryIter<'t, T>where
        T: Send,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Send for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Send for Store<'a, C>where
        C: Send,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> Send for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralEq.js index bbc85cae85..f1871f5ad7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralEq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralEq.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl StructuralEq for PkOrF"],["impl StructuralEq for SatisfiableItem"],["impl StructuralEq for Satisfaction"],["impl StructuralEq for Policy"],["impl StructuralEq for Condition"],["impl StructuralEq for PolicyError"],["impl StructuralEq for ScriptContextEnum"],["impl StructuralEq for KeychainKind"],["impl StructuralEq for LocalUtxo"],["impl StructuralEq for WeightedUtxo"],["impl StructuralEq for Utxo"],["impl StructuralEq for TransactionDetails"],["impl StructuralEq for SignerId"],["impl StructuralEq for SignerError"],["impl StructuralEq for SignerContext"],["impl StructuralEq for SignerOrdering"],["impl StructuralEq for TapLeavesOptions"],["impl StructuralEq for TxOrdering"],["impl StructuralEq for ChangeSpendPolicy"],["impl StructuralEq for AddressInfo"]], -"bdk_chain":[["impl<A> StructuralEq for ChainPosition<A>"],["impl StructuralEq for ConfirmationTime"],["impl StructuralEq for BlockId"],["impl StructuralEq for ConfirmationHeightAnchor"],["impl StructuralEq for ConfirmationTimeAnchor"],["impl<A> StructuralEq for FullTxOut<A>"],["impl StructuralEq for Balance"],["impl StructuralEq for LocalChain"],["impl<'a, T, A> StructuralEq for TxNode<'a, T, A>"],["impl<'a, T, A> StructuralEq for CanonicalTx<'a, T, A>"]], +"bdk_chain":[["impl<A> StructuralEq for ChainPosition<A>"],["impl StructuralEq for ConfirmationTime"],["impl StructuralEq for BlockId"],["impl StructuralEq for ConfirmationHeightAnchor"],["impl StructuralEq for ConfirmationTimeAnchor"],["impl<A> StructuralEq for FullTxOut<A>"],["impl StructuralEq for Balance"],["impl<'a, T, A> StructuralEq for TxNode<'a, T, A>"],["impl<'a, T, A> StructuralEq for CanonicalTx<'a, T, A>"]], "bdk_coin_select":[["impl StructuralEq for SelectionConstraint"],["impl StructuralEq for ExcessStrategyKind"]], "example_cli":[["impl StructuralEq 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/implementors/core/marker/trait.StructuralPartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralPartialEq.js index 112afcbf49..c7b5d9eb61 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralPartialEq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl StructuralPartialEq for PkOrF"],["impl StructuralPartialEq for SatisfiableItem"],["impl StructuralPartialEq for Satisfaction"],["impl StructuralPartialEq for Policy"],["impl StructuralPartialEq for Condition"],["impl StructuralPartialEq for PolicyError"],["impl StructuralPartialEq for ScriptContextEnum"],["impl StructuralPartialEq for KeychainKind"],["impl StructuralPartialEq for FeeRate"],["impl StructuralPartialEq for LocalUtxo"],["impl StructuralPartialEq for WeightedUtxo"],["impl StructuralPartialEq for Utxo"],["impl StructuralPartialEq for TransactionDetails"],["impl StructuralPartialEq for SignerId"],["impl StructuralPartialEq for SignerError"],["impl StructuralPartialEq for SignerContext"],["impl StructuralPartialEq for SignerOrdering"],["impl StructuralPartialEq for TapLeavesOptions"],["impl StructuralPartialEq for TxOrdering"],["impl StructuralPartialEq for ChangeSpendPolicy"],["impl StructuralPartialEq for AddressInfo"]], -"bdk_chain":[["impl<A> StructuralPartialEq for ChainPosition<A>"],["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationHeightAnchor"],["impl StructuralPartialEq for ConfirmationTimeAnchor"],["impl<A> StructuralPartialEq for FullTxOut<A>"],["impl<A, IA> StructuralPartialEq for IndexedAdditions<A, IA>"],["impl<K> StructuralPartialEq for DerivationAdditions<K>"],["impl<K, A> StructuralPartialEq for LocalUpdate<K, A>"],["impl<K, A> StructuralPartialEq for LocalChangeSet<K, A>"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for UpdateNotConnectedError"],["impl StructuralPartialEq for InsertBlockNotMatchingError"],["impl<A> StructuralPartialEq for TxGraph<A>"],["impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>"],["impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>"],["impl<A> StructuralPartialEq for Additions<A>"]], +"bdk_chain":[["impl<A> StructuralPartialEq for ChainPosition<A>"],["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationHeightAnchor"],["impl StructuralPartialEq for ConfirmationTimeAnchor"],["impl<A> StructuralPartialEq for FullTxOut<A>"],["impl<A, IA> StructuralPartialEq for IndexedAdditions<A, IA>"],["impl<K> StructuralPartialEq for DerivationAdditions<K>"],["impl<K, A> StructuralPartialEq for LocalChangeSet<K, A>"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for InsertBlockError"],["impl StructuralPartialEq for CannotConnectError"],["impl<A> StructuralPartialEq for TxGraph<A>"],["impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>"],["impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>"],["impl<A> StructuralPartialEq for Additions<A>"]], "bdk_coin_select":[["impl StructuralPartialEq for SelectionConstraint"],["impl StructuralPartialEq for ExcessStrategyKind"]], "example_cli":[["impl StructuralPartialEq for Keychain"]], "example_electrum":[["impl StructuralPartialEq for ScanOptions"]] diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js index 4032682c9c..0716c1992d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Sync for Error",1,["bdk::error::Error"]],["impl Sync for Error",1,["bdk::descriptor::error::Error"]],["impl Sync for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Sync for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Sync for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Sync for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Sync for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Sync for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Sync for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Sync for P2Pkh<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Sync for P2Wpkh_P2Sh<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Sync for P2Wpkh<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Sync for P2TR<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Sync for Bip44<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Sync for Bip44Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Sync for Bip49<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Sync for Bip49Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Sync for Bip84<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Sync for Bip84Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Sync for Bip86<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Sync for Bip86Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Sync for DescriptorKey<Ctx>where
        Ctx: Sync,
    ",1,["bdk::keys::DescriptorKey"]],["impl Sync for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Sync for ExtendedKey<Ctx>where
        Ctx: Sync,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Sync for GeneratedKey<K, Ctx>where
        Ctx: Sync,
        K: Sync,
    ",1,["bdk::keys::GeneratedKey"]],["impl Sync for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Sync for KeyError",1,["bdk::keys::KeyError"]],["impl Sync for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Sync for FeeRate",1,["bdk::types::FeeRate"]],["impl Sync for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Sync for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Sync for Utxo",1,["bdk::types::Utxo"]],["impl Sync for TransactionDetails",1,["bdk::types::TransactionDetails"]],["impl Sync for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Sync for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Sync for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Sync for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Sync for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Sync for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Sync for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Sync for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Sync for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Sync for SignerWrapper<S>where
        S: Sync,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Sync for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Sync for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Sync for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Sync for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Sync for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Sync for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !Sync for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Sync for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Sync for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Sync for Wallet<D>where
        D: Sync,
    ",1,["bdk::wallet::Wallet"]],["impl Sync for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Sync for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Sync for NewError<P>where
        P: Sync,
    ",1,["bdk::wallet::NewError"]],["impl Sync for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Sync for SpkTxOutIndex<I>where
        I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Sync for ChainPosition<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Sync for FullTxOut<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Sync for IndexedTxGraph<A, I>where
        A: Sync,
        I: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for IndexedAdditions<A, IA>where
        A: Sync,
        IA: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Sync for KeychainTxOutIndex<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Sync for DerivationAdditions<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Sync for LocalUpdate<K, A>where
        A: Sync,
        K: Sync,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Sync for LocalChangeSet<K, A>where
        A: Sync,
        K: Sync,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for UpdateNotConnectedError",1,["bdk_chain::local_chain::UpdateNotConnectedError"]],["impl Sync for InsertBlockNotMatchingError",1,["bdk_chain::local_chain::InsertBlockNotMatchingError"]],["impl<A> Sync for TxGraph<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Sync for Additions<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>where
        A: Sync,
        F: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Sync for Persist<B, C>where
        B: Sync,
        C: Sync,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Sync for SpkIterator<D>where
        D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Sync for SpkTxOutIndex<I>where
        I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Sync for ChainPosition<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Sync for FullTxOut<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Sync for IndexedTxGraph<A, I>where
        A: Sync,
        I: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for IndexedAdditions<A, IA>where
        A: Sync,
        IA: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Sync for KeychainTxOutIndex<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Sync for DerivationAdditions<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Sync for LocalUpdate<K, A>where
        A: Sync,
        K: Sync,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Sync for LocalChangeSet<K, A>where
        A: Sync,
        K: Sync,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for Update",1,["bdk_chain::local_chain::Update"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Sync for TxGraph<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Sync for Additions<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>where
        A: Sync,
        F: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Sync for Persist<B, C>where
        B: Sync,
        C: Sync,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Sync for SpkIterator<D>where
        D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Sync for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Sync for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Sync for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Sync for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Sync for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Sync for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Sync for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Sync for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Sync for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Sync for Bnb<'c, S>where
        S: Sync,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !Sync for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl Sync for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl<K, A> Sync for ElectrumUpdate<K, A>where
        A: Sync,
        K: Sync,
    ",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Sync for EntryIter<'t, T>where
        T: Sync,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Sync for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Sync for Store<'a, C>where
        C: Sync,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> Sync for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js index d8ba1760bd..9e1f4ba691 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Unpin for Error",1,["bdk::error::Error"]],["impl Unpin for Error",1,["bdk::descriptor::error::Error"]],["impl Unpin for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Unpin for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Unpin for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Unpin for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Unpin for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Unpin for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Unpin for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Unpin for P2Pkh<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Unpin for P2Wpkh_P2Sh<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Unpin for P2Wpkh<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Unpin for P2TR<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Unpin for Bip44<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Unpin for Bip44Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Unpin for Bip49<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Unpin for Bip49Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Unpin for Bip84<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Unpin for Bip84Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Unpin for Bip86<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Unpin for Bip86Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Unpin for DescriptorKey<Ctx>where
        Ctx: Unpin,
    ",1,["bdk::keys::DescriptorKey"]],["impl Unpin for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Unpin for ExtendedKey<Ctx>where
        Ctx: Unpin,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Unpin for GeneratedKey<K, Ctx>where
        Ctx: Unpin,
        K: Unpin,
    ",1,["bdk::keys::GeneratedKey"]],["impl Unpin for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Unpin for KeyError",1,["bdk::keys::KeyError"]],["impl Unpin for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Unpin for FeeRate",1,["bdk::types::FeeRate"]],["impl Unpin for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Unpin for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Unpin for Utxo",1,["bdk::types::Utxo"]],["impl Unpin for TransactionDetails",1,["bdk::types::TransactionDetails"]],["impl Unpin for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Unpin for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Unpin for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Unpin for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Unpin for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Unpin for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Unpin for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Unpin for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Unpin for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Unpin for SignerWrapper<S>where
        S: Unpin,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Unpin for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Unpin for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Unpin for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Unpin for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Unpin for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Unpin for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> Unpin for TxBuilder<'a, D, Cs, Ctx>where
        Cs: Unpin,
        Ctx: Unpin,
    ",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Unpin for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Unpin for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Unpin for Wallet<D>where
        D: Unpin,
    ",1,["bdk::wallet::Wallet"]],["impl Unpin for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Unpin for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Unpin for NewError<P>where
        P: Unpin,
    ",1,["bdk::wallet::NewError"]],["impl Unpin for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Unpin for SpkTxOutIndex<I>where
        I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Unpin for ChainPosition<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Unpin for FullTxOut<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>where
        I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for IndexedAdditions<A, IA>where
        IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Unpin for KeychainTxOutIndex<K>where
        K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for DerivationAdditions<K>",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Unpin for LocalUpdate<K, A>",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Unpin for LocalChangeSet<K, A>",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for UpdateNotConnectedError",1,["bdk_chain::local_chain::UpdateNotConnectedError"]],["impl Unpin for InsertBlockNotMatchingError",1,["bdk_chain::local_chain::InsertBlockNotMatchingError"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Unpin for Additions<A>",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>where
        F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Unpin for Persist<B, C>where
        B: Unpin,
        C: Unpin,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Unpin for SpkIterator<D>where
        D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Unpin for SpkTxOutIndex<I>where
        I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Unpin for ChainPosition<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Unpin for FullTxOut<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>where
        I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for IndexedAdditions<A, IA>where
        IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> Unpin for KeychainTxOutIndex<K>where
        K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for DerivationAdditions<K>",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> Unpin for LocalUpdate<K, A>",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> Unpin for LocalChangeSet<K, A>",1,["bdk_chain::keychain::LocalChangeSet"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for Update",1,["bdk_chain::local_chain::Update"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> Unpin for Additions<A>",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>where
        F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Unpin for Persist<B, C>where
        B: Unpin,
        C: Unpin,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Unpin for SpkIterator<D>where
        D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Unpin for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Unpin for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Unpin for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Unpin for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Unpin for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Unpin for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Unpin for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Unpin for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Unpin for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Unpin for Bnb<'c, S>where
        S: Unpin,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> Unpin for BnbIter<'c, 'f, S>where
        S: Unpin,
        'c: 'f,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl Unpin for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl<K, A> Unpin for ElectrumUpdate<K, A>",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Unpin for EntryIter<'t, T>where
        T: Unpin,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Unpin for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Unpin for Store<'a, C>where
        C: Unpin,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> Unpin for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 217e144acf..6b8265133f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl RefUnwindSafe for Error",1,["bdk::error::Error"]],["impl RefUnwindSafe for Error",1,["bdk::descriptor::error::Error"]],["impl RefUnwindSafe for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl RefUnwindSafe for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl RefUnwindSafe for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl RefUnwindSafe for Policy",1,["bdk::descriptor::policy::Policy"]],["impl RefUnwindSafe for Condition",1,["bdk::descriptor::policy::Condition"]],["impl RefUnwindSafe for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> RefUnwindSafe for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> RefUnwindSafe for P2Pkh<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> RefUnwindSafe for P2Wpkh_P2Sh<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> RefUnwindSafe for P2Wpkh<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> RefUnwindSafe for P2TR<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> RefUnwindSafe for Bip44<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> RefUnwindSafe for Bip44Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> RefUnwindSafe for Bip49<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> RefUnwindSafe for Bip49Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> RefUnwindSafe for Bip84<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> RefUnwindSafe for Bip84Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> RefUnwindSafe for Bip86<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> RefUnwindSafe for Bip86Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> RefUnwindSafe for DescriptorKey<Ctx>where
        Ctx: RefUnwindSafe,
    ",1,["bdk::keys::DescriptorKey"]],["impl RefUnwindSafe for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx>where
        Ctx: RefUnwindSafe,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> RefUnwindSafe for GeneratedKey<K, Ctx>where
        Ctx: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk::keys::GeneratedKey"]],["impl RefUnwindSafe for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl RefUnwindSafe for KeyError",1,["bdk::keys::KeyError"]],["impl RefUnwindSafe for KeychainKind",1,["bdk::types::KeychainKind"]],["impl RefUnwindSafe for FeeRate",1,["bdk::types::FeeRate"]],["impl RefUnwindSafe for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl RefUnwindSafe for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl RefUnwindSafe for Utxo",1,["bdk::types::Utxo"]],["impl RefUnwindSafe for TransactionDetails",1,["bdk::types::TransactionDetails"]],["impl RefUnwindSafe for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl RefUnwindSafe for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl RefUnwindSafe for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl RefUnwindSafe for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl RefUnwindSafe for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl RefUnwindSafe for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl RefUnwindSafe for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl RefUnwindSafe for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl RefUnwindSafe for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> RefUnwindSafe for SignerWrapper<S>where
        S: RefUnwindSafe,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl RefUnwindSafe for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl !RefUnwindSafe for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl RefUnwindSafe for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl RefUnwindSafe for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl RefUnwindSafe for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl RefUnwindSafe for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !RefUnwindSafe for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl RefUnwindSafe for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl RefUnwindSafe for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D = ()> !RefUnwindSafe for Wallet<D>",1,["bdk::wallet::Wallet"]],["impl RefUnwindSafe for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl RefUnwindSafe for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> RefUnwindSafe for NewError<P>where
        P: RefUnwindSafe,
    ",1,["bdk::wallet::NewError"]],["impl RefUnwindSafe for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> RefUnwindSafe for SpkTxOutIndex<I>where
        I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> RefUnwindSafe for ChainPosition<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> RefUnwindSafe for FullTxOut<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for IndexedAdditions<A, IA>where
        A: RefUnwindSafe,
        IA: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for DerivationAdditions<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> RefUnwindSafe for LocalUpdate<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> RefUnwindSafe for LocalChangeSet<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for UpdateNotConnectedError",1,["bdk_chain::local_chain::UpdateNotConnectedError"]],["impl RefUnwindSafe for InsertBlockNotMatchingError",1,["bdk_chain::local_chain::InsertBlockNotMatchingError"]],["impl<A> RefUnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> RefUnwindSafe for Additions<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> RefUnwindSafe for Persist<B, C>where
        B: RefUnwindSafe,
        C: RefUnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> RefUnwindSafe for SpkIterator<D>where
        D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> RefUnwindSafe for SpkTxOutIndex<I>where
        I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> RefUnwindSafe for ChainPosition<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> RefUnwindSafe for FullTxOut<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for IndexedAdditions<A, IA>where
        A: RefUnwindSafe,
        IA: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for DerivationAdditions<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> RefUnwindSafe for LocalUpdate<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> RefUnwindSafe for LocalChangeSet<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for Update",1,["bdk_chain::local_chain::Update"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> RefUnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> RefUnwindSafe for Additions<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> RefUnwindSafe for Persist<B, C>where
        B: RefUnwindSafe,
        C: RefUnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> RefUnwindSafe for SpkIterator<D>where
        D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl RefUnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl RefUnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> RefUnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl RefUnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl RefUnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl RefUnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl RefUnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl RefUnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl RefUnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> RefUnwindSafe for Bnb<'c, S>where
        S: RefUnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !RefUnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl RefUnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl<K, A> RefUnwindSafe for ElectrumUpdate<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> RefUnwindSafe for EntryIter<'t, T>where
        T: RefUnwindSafe,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl !RefUnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> RefUnwindSafe for Store<'a, C>where
        C: RefUnwindSafe,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> !RefUnwindSafe for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index ba28bdda47..31e824dafc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl UnwindSafe for Error",1,["bdk::error::Error"]],["impl UnwindSafe for Error",1,["bdk::descriptor::error::Error"]],["impl UnwindSafe for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl UnwindSafe for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl UnwindSafe for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl UnwindSafe for Policy",1,["bdk::descriptor::policy::Policy"]],["impl UnwindSafe for Condition",1,["bdk::descriptor::policy::Condition"]],["impl UnwindSafe for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> UnwindSafe for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> UnwindSafe for P2Pkh<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> UnwindSafe for P2Wpkh_P2Sh<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> UnwindSafe for P2Wpkh<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> UnwindSafe for P2TR<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> UnwindSafe for Bip44<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> UnwindSafe for Bip44Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> UnwindSafe for Bip49<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> UnwindSafe for Bip49Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> UnwindSafe for Bip84<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> UnwindSafe for Bip84Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> UnwindSafe for Bip86<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> UnwindSafe for Bip86Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> UnwindSafe for DescriptorKey<Ctx>where
        Ctx: UnwindSafe,
    ",1,["bdk::keys::DescriptorKey"]],["impl UnwindSafe for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> UnwindSafe for ExtendedKey<Ctx>where
        Ctx: UnwindSafe,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> UnwindSafe for GeneratedKey<K, Ctx>where
        Ctx: UnwindSafe,
        K: UnwindSafe,
    ",1,["bdk::keys::GeneratedKey"]],["impl UnwindSafe for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl UnwindSafe for KeyError",1,["bdk::keys::KeyError"]],["impl UnwindSafe for KeychainKind",1,["bdk::types::KeychainKind"]],["impl UnwindSafe for FeeRate",1,["bdk::types::FeeRate"]],["impl UnwindSafe for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl UnwindSafe for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl UnwindSafe for Utxo",1,["bdk::types::Utxo"]],["impl UnwindSafe for TransactionDetails",1,["bdk::types::TransactionDetails"]],["impl UnwindSafe for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl UnwindSafe for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl UnwindSafe for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl UnwindSafe for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl UnwindSafe for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl UnwindSafe for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl UnwindSafe for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl UnwindSafe for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl UnwindSafe for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> UnwindSafe for SignerWrapper<S>where
        S: UnwindSafe,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl UnwindSafe for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl !UnwindSafe for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl UnwindSafe for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl UnwindSafe for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl UnwindSafe for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl UnwindSafe for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !UnwindSafe for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl UnwindSafe for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl UnwindSafe for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D = ()> !UnwindSafe for Wallet<D>",1,["bdk::wallet::Wallet"]],["impl UnwindSafe for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl UnwindSafe for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> UnwindSafe for NewError<P>where
        P: UnwindSafe,
    ",1,["bdk::wallet::NewError"]],["impl UnwindSafe for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> UnwindSafe for SpkTxOutIndex<I>where
        I: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> UnwindSafe for ChainPosition<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> UnwindSafe for FullTxOut<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for IndexedAdditions<A, IA>where
        A: RefUnwindSafe,
        IA: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>where
        K: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> UnwindSafe for DerivationAdditions<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> UnwindSafe for LocalUpdate<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> UnwindSafe for LocalChangeSet<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for UpdateNotConnectedError",1,["bdk_chain::local_chain::UpdateNotConnectedError"]],["impl UnwindSafe for InsertBlockNotMatchingError",1,["bdk_chain::local_chain::InsertBlockNotMatchingError"]],["impl<A> UnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> UnwindSafe for Additions<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: UnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> UnwindSafe for Persist<B, C>where
        B: UnwindSafe,
        C: UnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> UnwindSafe for SpkIterator<D>where
        D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> UnwindSafe for SpkTxOutIndex<I>where
        I: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> UnwindSafe for ChainPosition<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> UnwindSafe for FullTxOut<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for IndexedAdditions<A, IA>where
        A: RefUnwindSafe,
        IA: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedAdditions"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>where
        K: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> UnwindSafe for DerivationAdditions<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::DerivationAdditions"]],["impl<K, A> UnwindSafe for LocalUpdate<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalUpdate"]],["impl<K, A> UnwindSafe for LocalChangeSet<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::LocalChangeSet"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for Update",1,["bdk_chain::local_chain::Update"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> UnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<A> UnwindSafe for Additions<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::Additions"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: UnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> UnwindSafe for Persist<B, C>where
        B: UnwindSafe,
        C: UnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> UnwindSafe for SpkIterator<D>where
        D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl UnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl UnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> UnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl UnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl UnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl UnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl UnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl UnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl UnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> UnwindSafe for Bnb<'c, S>where
        S: UnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !UnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl UnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl<K, A> UnwindSafe for ElectrumUpdate<K, A>where
        A: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> !UnwindSafe for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl !UnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> UnwindSafe for Store<'a, C>where
        C: UnwindSafe,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> !UnwindSafe for FileError<'a>",1,["bdk_file_store::FileError"]]], 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 966af85083..4efdfde859 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,13 +1,13 @@ var searchIndex = JSON.parse('{\ -"bdk":{"doc":"bdk","t":[13,13,13,13,13,4,13,3,13,13,13,13,13,2,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,2,13,13,13,3,13,2,13,4,8,2,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,0,14,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,0,11,12,11,11,11,11,0,12,11,12,12,11,11,11,2,11,2,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,11,12,10,5,11,11,11,11,11,11,11,0,11,12,12,12,12,12,12,13,6,4,2,4,3,6,8,13,6,8,16,6,4,3,13,13,2,8,4,13,13,6,13,13,4,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,5,5,5,5,13,13,4,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,4,13,3,6,13,13,6,13,13,13,13,13,13,13,13,13,13,13,4,3,4,13,13,13,13,13,4,4,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,3,3,3,8,6,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,16,16,8,4,13,8,8,3,8,13,13,13,16,4,6,13,13,13,16,13,3,13,8,4,13,13,13,3,3,4,3,13,6,13,13,13,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,10,11,12,12,11,11,11,11,11,11,10,12,11,11,11,11,10,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,10,10,10,4,3,3,6,13,13,4,8,13,13,4,13,13,6,3,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,10,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,12,11,11,11,11,11,11,5,12,12,3,13,8,3,6,4,3,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,5,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,3,6,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,13,13,13,13,13,13,8,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,4,3,3,3,13,4,8,13,11,12,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,10,11,12,11,12,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,13,3,13,13,4,3,13,13,3,8,4,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Bip32","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","Descriptor","Error","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","HdKeyPaths","InsufficientFunds","Internal","InvalidOutpoint","InvalidPolicyPathError","IrreplaceableTransaction","Key","KeychainKind","Local","LocalUtxo","Miniscript","MiniscriptPsbt","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","Psbt","SignOptions","Signer","SpendingPolicyRequired","TransactionConfirmed","TransactionDetails","TransactionNotFound","TxBuilder","UnknownUtxo","Utxo","Vbytes","Wallet","WeightedUtxo","as_byte","as_ref","as_sat_per_vb","base32_len","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","check_base32","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","confirmation_time","confirmation_time","default","default_min_relay_fee","derivation_index","descriptor","descriptor","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","fee","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_kvb","from_sat_per_kwu","from_sat_per_vb","from_vb","from_wu","hash","hash","into","into","into","into","into","into","into","is_spent","keychain","keys","outpoint","outpoint","partial_cmp","partial_cmp","partial_cmp","provide","psbt","received","sat_per_kwu","satisfaction_weight","sent","serialize","serialize","serialize","signer","sub","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","transaction","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","txid","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","utxo","vbytes","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","available","needed","required","required","outpoint","psbt_input","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","DescriptorXKey","ExtendedDescriptor","ExtractPolicy","Hardened","HdKeyPaths","IntoWalletDescriptor","Key","KeyMap","Legacy","Miniscript","None","Pkh","Policy","ScriptContext","Segwitv0","Sh","Single","TapKeyOrigins","Tr","Unhardened","Wildcard","Wpkh","Wsh","XPub","address","as_enum","as_enum","as_inner","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","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_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","contains_raw_pkh","derivation_path","derive","derived_descriptor","derived_descriptor","desc_type","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from_ast","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","hash","hash","into","into","into","into","into","into","into_inner","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_non_malleable","iter","iter_pk","lift","lift","lift_check","matches","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","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","origin","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","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","template","to_owned","to_owned","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_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","vzip","vzip","wildcard","within_resource_limits","xkey","calc_checksum","calc_checksum_bytes","get_checksum","get_checksum_bytes","Base58","Bip32","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","provide","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","provide","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","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","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","encode","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","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_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_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","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","name_str","new","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","provide","sanity_check","satisfy","script_size","sig_type","sorted_node","test_networks","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","AddressIndex","AddressInfo","Balance","ChangeSet","ConfirmationHeightCannotBeGreaterThanTip","Descriptor","InsertTxError","IsDust","LastUnused","New","NewError","Peek","Persist","Update","Wallet","add","add_signer","address","apply_update","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","cancel_tx","checkpoints","clone","clone_into","coin_selection","commit","confirmed","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","eq","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_internal_address","get_psbt_input","get_signers","get_tx","get_utxo","immature","index","insert_checkpoint","insert_tx","into","into","into","into","into","into","is_dust","is_mine","keychain","keychains","latest_checkpoint","list_unspent","local_chain","network","new","new_no_persist","next_derivation_index","policies","provide","public_descriptor","secp_ctx","serialize","sign","signer","spk_index","spks_of_all_keychains","spks_of_keychain","staged","to_owned","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","tip_height","tx_height","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Excess","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","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","from","from","from","from","from","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","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","amount","change_fee","dust_threshold","fee","remaining_amount","FullyNodedExport","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","from","from_str","into","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Segwitv0","SighashError","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","clone_into","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","eq","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","provide","remove","remove_partial_sigs","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_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","Bip69Lexicographic","BumpFee","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","CreateTx","OnlyChange","Shuffle","TxBuilder","TxBuilderContext","TxOrdering","Untouched","add_data","add_foreign_utxo","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","allow_shrinking","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","current_height","default","default","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_owned","to_owned","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"],"q":["bdk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Error","","","","bdk::Utxo","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::checksum","","","","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::psbt","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::InsertTxError","","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::coin_selection::Excess","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerContext","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["BIP32 error","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Error related to the parsing and usage of descriptors","Errors that can be thrown by the Wallet","External keychain, used for deriving recipient addresses.","Fee rate","When bumping a tx the fee rate requested is lower than …","Node doesn’t have data to estimate a fee rate","When bumping a tx the absolute fee requested is lower than …","A UTXO owned by another wallet.","Generic error","","Wallet’s UTXO set is not enough to cover recipient’s …","Internal keychain, used for deriving change addresses.","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript error","Miniscript PSBT error","In order to use the TxBuilder::add_global_xpubs option …","Cannot build a tx without recipients","manually_selected_only option is selected but no utxo has …","Output created is under the dust limit, 546 satoshis","Partially signed bitcoin transaction error","","Signing error","Spending policy is not compatible with this KeychainKind","Happens when trying to bump a transaction that is already …","A wallet transaction","Thrown when a tx is not found in the internal database","","Happens when trying to spend an UTXO that is not in the …","An unspent transaction output (UTXO).","Trait implemented by types that can be used to measure …","","A Utxo with its satisfaction_weight.","Return KeychainKind as a byte","","Return the value as satoshi/vbyte","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The confirmation time for transaction containing this utxo","If the transaction is confirmed, contains height and Unix …","","Create a new FeeRate with the default min relay fee value","The derivation index for the script pubkey in the wallet","Descriptors","Macro to write full descriptors with code","","","","","","","","","","Fee value in sats if it was available.","Calculate absolute fee in Satoshis using size in virtual …","Calculate absolute fee in Satoshis using size in weight …","","","","","","","","","Macro to write descriptor fragments with code","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Calculate fee rate from fee and vbytes.","Calculate fee rate from fee and weight units (wu).","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Whether this UTXO is spent or not","Type of keychain","Key formats","Get the location of the UTXO","Reference to a transaction output","","","","","Additional functions on the rust-bitcoin …","Received value (sats) Sum of owned outputs of this …","Return the value as satoshi/kwu","The weight of the witness data and scriptSig expressed in …","Sent value (sats) Sum of owned inputs of this transaction.","","","","","","","","","","","","","","Optional transaction","","","","","","","","","","","","","","","Transaction id","Get the TxOut of the UTXO","Transaction output","","","","","","","","The UTXO","Convert weight units to virtual bytes.","Get the version of BDK at runtime","","","","","","","","Wallet","","Sats available for spending","Sats needed for some transaction","Required fee rate (satoshi/vbyte)","Required fee absolute value (satoshi)","The location of the output.","The information about the input we require to add it to a …","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Script descriptor","","The descriptor pubkey, either a single pubkey or an xpub.","An extended key with origin, derivation path, and wildcard.","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Unhardened wildcard, e.g. *h","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","The consensus key associated with the type. Must be a …","Alias type for a map of public key to secret key","Legacy ScriptContext To be used as P2SH scripts For …","Top-level script AST type","No wildcard","Pay-to-PubKey-Hash","","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Single public key.","Alias for the type of maps that represent taproot key …","Pay-to-Taproot","Unhardened wildcard, e.g. *","Whether a descriptor has a wildcard in it","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Extended public key (xpub).","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","Replaces all wildcards (i.e. /*) in the descriptor with a …","","","","","","","","","","","","","Enumerates all child nodes of the current AST node (self) …","","Depending on script Context, some of the Terminals might …","","","Depending on script Context, some of the script resource …","","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","","","Policy rules at the Miniscript satisfaction time. It is …","","","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","","","Check whether the given satisfaction is valid under the …","","","Descriptor checksum","","","","","","","","","","","","","","","","","","","Whether the given miniscript contains a raw pkh fragment","The derivation path","Deprecated name for [at_derivation_index].","Convert all the public keys in the descriptor to …","Convert all the public keys in the descriptor to …","Get the DescriptorType of Descriptor","","","","Encode as a Bitcoin script","","","","","","","Descriptor errors","Computes the the underlying script before any hashing is …","Additional information helpful for extra analysis.","Check whether the miniscript follows the given Extra …","Extract the spending policy","","","Utility method for deriving the descriptor at each index …","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Add type information(Type and Extdata) to Miniscript based …","","Parse a Miniscript from string and perform sanity checks …","Attempt to parse an Miniscripts that don’t follow the …","Attempt to parse an insane(scripts don’t clear sanity …","Parse an expression tree into a descriptor.","Parse an expression tree into a Miniscript. As a general …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns satisfying non-malleable witness and scriptSig to …","Returns a possilbly mallable satisfying non-malleable …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","Whether or not the descriptor has any wildcards i.e. /*.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Extracts the AstElem representing the root of the …","Convert to wallet descriptor","","Whether or not the descriptor has any wildcards","Whether the miniscript is malleable","Creates a new Iter iterator that will iterate over all …","Creates a new PkIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","Compares this key with a keysource and returns the …","Depending on script context, the size of a satifaction …","","","Maximum size, in bytes, of a satisfying witness. For …","Computes an upper bound on the weight of a satisfying …","Maximum number of witness elements used to satisfy the …","Local helper function to display error messages with …","","","Create a new bare descriptor from witness script Errors …","Create a new pk descriptor","Create a new PkH descriptor","Create a new sh for a given redeem script Errors when …","Create a new sh sortedmulti descriptor with threshold k …","Create a new sh wrapper for the given wpkh descriptor","Create a new sh wrapper for the given wsh descriptor","Create a new sh wrapped wpkh from Pk. Errors when …","Create a new sh wrapped wsh descriptor with witness script …","Create a new sh wrapped wsh sortedmulti descriptor from …","Create new tr descriptor Errors when miniscript exceeds …","Create a new Wpkh descriptor Will return Err if …","Create a new wsh descriptor from witness script Errors …","Create a new wsh sorted multi descriptor Errors when …","A node in the Abstract Syntax Tree(","Origin information","Other top level checks that are context specific","Attempt to parse a Script into Miniscript representation.","Parse a descriptor that may contain secret keys","Attempt to parse an insane(scripts don’t clear sanity …","Attempt to parse an miniscript with extra features that …","","","","","","","Get the len of public key when serialized based on context …","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Checks whether the descriptor is safe.","Check whether the underlying Miniscript is safe under the …","Attempts to produce a non-malleable satisfying witness and …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Computes the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor.","Size, in bytes of the script-pubkey. If this Miniscript is …","","","The type of signature required for satisfaction","","","Descriptor templates","","","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Converts a descriptor using abstract keys to one using …","Translates a struct from one generic to another where the …","","","","","","","","","","","","","The correctness and malleability type information for the …","","","","","","","Computes the scriptSig that will be in place for an …","","","","","","","Whether the descriptor is wildcard","Whether the miniscript can exceed the resource …","The extended key","Compute the checksum of a descriptor, excludes any …","Compute the checksum bytes of a descriptor, excludes any …","Compute the checksum of a descriptor","Compute the checksum bytes of a descriptor","Error during base58 decoding","BIP32 error","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid byte found in the descriptor checksum","The provided descriptor doesn’t match its checksum","Invalid HD Key path, such as having a wildcard but a …","Error thrown while working with keys","Miniscript error","Key-related error","Error while extracting and manipulating policies","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","Absolute timeclock timestamp","Can not add to an item that is Satisfaction::None or …","Can not add to an item that is …","Options to build the satisfaction field in the policy","Can satisfy the policy item","An extra condition that must be satisfied but that is out …","Type for a map of sets of Condition items keyed by each set…","ECDSA Signature for a raw public key","An extended key fingerprint","Type for a map of folded sets of Condition items keyed by …","SHA256 then RIPEMD160 preimage hash","Double SHA256 preimage hash","Incompatible conditions (not currently used)","Index out of range for an item to satisfy a …","Can not merge CSV or timelock values unless both are less …","Multi-signature public keys with threshold count","Cannot satisfy or contribute to the policy item","Don’t generate satisfaction field","Not enough items are selected to satisfy a …","Only a partial satisfaction of some kind of threshold …","Can reach the threshold of some kind of threshold policy","A unique identifier for a key","Descriptor spending policy","Errors that can happen while extracting and manipulating …","Analyze the given PSBT to check for existing signatures","Like Psbt variant and also check for expired timelocks","A legacy public key","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","Schnorr Signature for a raw public key","SHA256 preimage hash","Threshold items with threshold count","A x-only public key","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the SatisfiableItem is a leaf item","Returns whether the Satisfaction is a leaf item","Returns true if there are no extra conditions to verify","Type of this policy node","","","Return whether or not a specific path in the policy tree …","How much a given PSBT already satisfies this policy node …","","","","","","Optional timelock condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current blockchain height","The highest confirmation height between the inputs CSV …","Given PSBT","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","The items that can be satisfied by the descriptor or are …","The items that can be satisfied by the descriptor","Threshold","Threshold","Total number of items","Total number of items","Whether the items are sorted in lexicographic order (used …","Whether the items are sorted in lexicographic order (used …","The digest value","The digest value","The digest value","The digest value","The policy items","The raw public key or extended key fingerprint","The required threshold count","The required threshold count","The timelock value","The timelock value","BIP44 template. Expands to pkh(key/44'/{0,1}'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to …","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/{0,1}'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(key/{0,1}/*)","BIP86 template. Expands to tr(key/86'/{0,1}'/0'/{0,1}/*)","BIP86 public template. Expands to tr(key/{0,1}/*)","Trait for descriptor templates that can be built into a …","Type alias for the return type of DescriptorTemplate, …","P2PKH template. Expands to a descriptor pkh(key)","P2TR template. Expands to a descriptor tr(key)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The descriptor pubkey, either a single pubkey or an xpub.","The descriptor secret key, either a single private key or …","Type specifying the amount of entropy required e.g. [u8;32]","Returned error in case of failure","Trait that adds extra useful methods to ScriptContexts","Enum for extended keys that can be either xprv or xpub","A bitcoin public key (compressed or uncompressed).","Trait that allows generating a key with the default options","Trait for keys that can be generated","Output of a GeneratableKey key generation","Trait for objects that can be turned into a public or …","The key has an invalid checksum","The key is not valid for the given network","The key cannot exist in the given script context","The consensus key associated with the type. Must be a …","Errors thrown while working with keys","Alias type for a map of public key to secret key","Legacy scripts","Custom error message","Miniscript error","Extra options required by the generate_with_entropy","A private extended key, aka an xprv","Options for generating a PrivateKey","A public extended key, aka an xpub","The ScriptContext for Miniscript. Additional type …","Enum representation of the known valid ScriptContexts","Segwitv0 scripts","Single public key.","Single private key.","A descriptor bitcoin::PrivateKey with optional origin …","A descriptor SinglePubKey with optional origin information.","Single public key without any origin or range information.","Contents of a “sortedmulti” descriptor","Taproot scripts","Set of valid networks for a key","An xonly public key.","Extended private key (xpriv).","Extended public key (xpub).","Create a set containing mainnet, testnet, signet, and …","Returns the ScriptContext as a ScriptContextEnum","Replaces any wildcard (i.e. /*) in the key with a …","","","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","Deprecated name of [at_derivation_index].","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create an instance given a public key and a set of valid …","Create an instance given a secret key and a set of valid …","","","Parse an expression tree into a SortedMultiVec","Full path, from the master key","Generate a key given the options with a random entropy","Generate a key with the default options and a random …","Generate a key given the extra options and the entropy","Generate a key with the default options and a given entropy","Return whether or not the key contains the private data","Whether or not the key has a wildcard","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Turn the key into a DescriptorKey within the requested …","Consume self and turn it into a DescriptorKey by adding …","","","","","","Consume self and turn it into an ExtendedKey","","","Consumes self and returns the key","Transform the ExtendedKey into an ExtendedPrivKey for the …","Transform the ExtendedKey into an ExtendedPubKey for the …","Whether or not the key has a wildcard","Returns whether the script context is Legacy","Returns whether the script context is …","Returns whether the script context is Segwitv0","Returns whether the script context is …","Returns whether the script context is Tap, aka Taproot or …","Returns whether the script context is …","","","signatures required","The public key.","The private key.","","Create a set only containing mainnet","The fingerprint of the master key associated with this …","Depending on script context, the size of a satifaction …","Maximum size, in bytes, of a satisfying witness. In …","Maximum number of witness elements used to satisfy the …","Compute the intersection of two sets","Local helper function to display error messages with …","Create a new instance of SortedMultiVec given a list of …","Origin information (fingerprint and derivation path).","Origin information (fingerprint and derivation path).","Other top level checks that are context specific","Override the computed set of valid networks","","","","","Get the len of public key when serialized based on context …","public keys inside sorted Multi","","utility function to sanity a sorted multi vec","Attempt to produce a satisfying witness for the witness …","Size, in bytes of the script-pubkey. If this Miniscript is …","The type of signature required for satisfaction","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","Returns the public version of this key.","","","","","Check top level consensus rules.","Check whether the top-level is type B","This will panic if fpk returns an uncompressed key when …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Trait to add functions to extract utxos and calculate fees.","The total transaction fee amount, sum of input amounts …","The transaction’s fee rate. This value will only be …","Get the TxOut for the specified input index, if it doesn’…","The address index selection strategy to use to derived an …","A derived address and the index it was found at. For …","Balance, differentiated into various categories.","The changeset produced internally by Wallet when mutated.","The error variant that occurs when the caller attempts to …","There was problem with the descriptors passed in","An error that may occur when inserting a transaction into …","Trait to check if a value is below the dust limit. We are …","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Error returned from Wallet::new","Return the address for a specific descriptor index. Does …","We were unable to load the wallet’s data from the …","The update to a Wallet used in Wallet::apply_update. This …","A Bitcoin wallet","","Add an external signer","Address","Applies an update to the wallet and stages the changes …","","","","","","","","","","","","","","Bump the fee of a transaction previously created with this …","Start building a transaction.","Informs the wallet that you no longer intend to broadcast …","Get all the checkpoints the wallet is currently storing …","","","Coin selection","Commits all curently staged changed to the persistence …","Confirmed and immediately spendable balance","","","The derivation index of this wallet. It will return None …","Finds how the wallet derived the script pubkey spk.","Return the checksum of the public descriptor associated to …","","","","Wallet export","Finalize a PSBT, i.e., for each input determine if …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return a derived address using the external descriptor, …","Return the balance, separated into available, …","Returns the descriptor used to create addresses for a …","Return a derived address using the internal (change) …","get the corresponding PSBT Input for a LocalUtxo","Get the signers","Return a single transactions made and received by the …","Returns the utxo owned by this wallet corresponding to …","All coinbase outputs not yet matured","Child index of this address","Add a new checkpoint to the wallet’s internal view of …","Add a transaction to the wallet’s internal view of the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Check whether or not a value is below dust limit","Return whether or not a script is part of this wallet …","Type of keychain","Iterator over all keychains in this wallet","Returns the latest checkpoint.","Return the list of unspent outputs of this wallet","Get a reference to the inner LocalChain.","Get the Bitcoin network the wallet is using.","Create a wallet from a descriptor (and an optional …","Creates a wallet that does not persist data.","The index of the next address that you would get if you …","Return the spending policies for the wallet’s descriptor","","Return the “public” version of the wallet’s …","Return the secp256k1 context used for all signing …","","Sign a transaction with all the wallet’s signers, in the …","Generalized signers","Get a reference to the inner KeychainTxOutIndex.","Returns a iterators of all the script pubkeys for the …","Gets an iterator over all the script pubkeys in a single …","Returns the changes that will be staged with the next call …","","","","","Get the whole balance visible to the wallet.","Iterate over the transactions in the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","","","","","","","Transaction builder","Get a reference to the inner TxGraph.","","","","","","","Unconfirmed UTXOs received from an external wallet","","","","","","","Deterministically generate a unique name given the …","The internal chain’s tip height.","The introduced transaction’s confirmation height.","Branch and bound coin selection","It’s possible to create spendable output from excess …","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Remaining amount after performing coin selection","Simple and dumb coin selection","It’s not possible to create spendable output from excess …","OldestFirstCoinSelection always picks the utxo with the …","","","","","","","","","","","","","","","","","Perform the coin selection","","","","Decide if change can be created","","","","Remaining amount after deducing fees and outgoing outputs","Total fee amount for the selected utxos in satoshis","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The total value of the inputs selected from the local …","Create new instance with target size for change output","List of outputs selected for use as inputs","The total value of the inputs selected.","","","","","","","","","","","","","","","","","","","","","","","","Effective amount available to create change after …","The calculated fee for the drain TxOut with the selected …","Threshold to consider amount as dust for this particular …","The deducted change output fee","Exceeding amount of current selection over outgoing value …","Structure that contains the export of a wallet","Alias for FullyNodedExport","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","Return the external descriptor","","Export a wallet","","Returns the argument unchanged.","","Calls U::from(self).","Arbitrary label for the wallet","","","","","","","The signer will sign all the leaves it has a key for.","Dummy identifier","The signer won’t sign the specified leaves.","The fingerprint of a BIP32 extended key","The signer won’t sign leaves other than the ones …","Input index is out of range","PSBT Input signer","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","Invalid SIGHASH for the signing context in use","Legacy context","The fingerprint and derivation path are missing from the …","The private key is missing for the required public key","The non_witness_utxo field of the transaction is required …","The witness_script field of the transaction is required to …","The witness_utxo field of the transaction is required to …","The psbt contains a non-SIGHASH_ALL sighash in one of its …","The signer won’t sign any leaf.","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Segwit v0 context (BIP 143)","Error while computing the hash to sign","Options for a software signer","Common signer methods","Signing context","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Wrapper structure to pair a signer with its context","Container for multiple signers","Taproot context (BIP 340)","Customize which taproot script-path leaves the signer …","PSBT signer","The user canceled the operation","Adds an external signer to the container for the specified …","Whether the signer should use the sighash_type set in the …","Whether we should grind ECDSA signature to ensure signing …","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","Build a new signer container from a KeyMap","","","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Return the SignerId for this signer","","","Returns the list of identifiers of all the signers in the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Create a wrapped signer from a signer and a context","Default constructor","","","","Removes a signer from the container and returns it","Whether to remove partial signatures from the PSBT inputs …","Sign a single psbt input","","","Sign all the inputs of the psbt","","Whether we should try to sign a taproot transaction with …","Returns the list of signers in the container, sorted by …","Specifies which Taproot script-spend leaves we should sign …","","","","","","","","","","Whether the signer should trust the witness_utxo, if the …","Whether to try finalizing the PSBT after the inputs are …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether the signer can sign for the internal key or not","BIP69 / Lexicographic","Marker type to indicate the TxBuilder is being used to …","Use both change and non-change outputs (default)","Only use non-change outputs (see …","Policy regarding the use of change outputs when creating a …","Marker type to indicate the TxBuilder is being used to …","Only use change outputs (see TxBuilder::only_spend_change)","Randomized (default)","A transaction builder","Context in which the TxBuilder is valid","Ordering of the transaction’s inputs and outputs","Unchanged","Add data as an output, using OP_RETURN","Add a foreign UTXO i.e. a UTXO not owned by this wallet.","Fill-in the PSBT_GLOBAL_XPUB field with the extended keys …","Add a recipient to the internal list","Add a utxo to the internal list of unspendable utxos","Add a utxo to the internal list of utxos that must be spent","Add the list of outpoints to the internal list of UTXOs …","Set whether or not the dust limit is checked.","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","Set the current blockchain height.","","","","","Do not spend change outputs","Sets the address to drain excess coins to.","Spend all the available inputs. This respects filters like …","Enable signaling RBF","Enable signaling RBF with a specific nSequence value","","","Set an absolute fee The fee_absolute method refers to the …","Set a custom fee rate","Finish building the transaction.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Fill-in the psbt::Output::redeem_script and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Only spend utxos added by add_utxo.","Use a specific nLockTime while creating the transaction","Only spend change outputs","Only Fill-in the psbt::Input::witness_utxo field when …","Choose the ordering for inputs and outputs of the …","","","Set the policy path to use while creating the transaction …","Replace the recipients already added with a new list","Sign with a specific sig hash","Sort transaction inputs and outputs by TxOrdering variant","","","","","","","","","","","","","","","","","","","","","Replace the internal list of unspendable utxos with a new …","Build a transaction with a specific version","","","","",""],"i":[17,17,17,17,17,0,1,0,17,17,17,12,17,0,17,1,17,17,17,17,0,12,0,17,17,17,17,17,17,17,0,17,17,17,0,17,0,17,0,0,0,0,1,1,3,1,17,1,3,10,11,12,13,17,1,3,10,11,12,13,0,1,1,3,10,11,12,13,1,3,10,11,12,13,1,13,10,13,3,3,10,0,0,1,10,13,1,3,10,11,12,13,13,3,3,17,17,1,3,10,11,12,13,0,17,17,17,17,17,17,17,17,1,3,10,11,12,13,3,3,3,3,3,3,1,10,17,1,3,10,11,12,13,10,10,0,12,10,1,3,13,17,0,13,3,11,13,1,10,13,0,3,0,1,3,10,11,12,13,17,13,17,1,3,10,11,12,13,17,1,3,10,11,12,13,13,12,10,17,1,3,10,11,12,13,11,172,0,17,1,3,10,11,12,13,0,1,173,173,174,175,176,176,34,0,0,0,0,0,0,0,45,0,0,58,0,0,0,45,34,0,0,0,34,40,0,34,45,0,34,34,40,34,46,47,38,34,44,45,34,46,47,38,44,45,34,46,47,38,38,0,58,46,47,58,47,58,58,46,47,58,46,47,58,58,46,47,58,46,47,0,44,45,34,46,47,38,44,45,34,46,47,38,44,45,34,46,47,38,38,44,34,34,34,34,34,38,34,38,44,45,34,46,47,38,0,34,38,38,177,34,38,34,44,45,34,34,46,47,38,38,34,38,44,45,34,34,34,34,34,34,34,46,47,38,38,34,38,38,38,34,38,38,38,34,34,38,38,34,44,45,34,46,47,38,44,45,34,46,47,38,38,147,68,34,38,38,38,34,38,38,44,58,46,47,38,34,38,58,46,47,34,34,34,34,34,34,34,34,34,34,34,34,34,34,38,44,58,38,34,38,38,44,45,34,46,47,38,58,46,47,0,38,34,38,34,38,38,34,34,38,34,38,58,46,47,0,44,45,34,46,47,38,34,38,34,58,58,34,38,44,45,34,46,47,38,44,45,34,46,47,38,38,44,45,34,46,47,38,34,44,45,34,46,47,38,44,38,44,0,0,0,0,22,22,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,83,26,26,0,84,0,0,83,82,0,83,83,26,26,26,83,84,56,26,84,84,0,0,0,56,56,82,83,83,0,0,83,83,83,82,82,83,84,57,85,26,56,82,83,84,57,85,26,56,82,83,84,57,85,56,82,83,84,57,85,56,57,85,85,82,83,84,57,85,26,82,83,84,57,85,26,26,56,82,83,84,84,57,57,85,26,56,57,82,85,83,57,82,83,84,57,85,26,56,83,84,85,57,85,26,57,57,82,83,84,57,85,85,82,83,84,57,85,56,26,82,83,84,57,85,26,56,82,83,84,57,85,26,56,82,83,84,57,85,26,56,82,83,84,57,85,26,56,178,178,178,179,180,181,180,181,180,181,180,181,180,181,182,183,184,185,186,187,187,186,188,189,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,190,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,87,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,20,0,0,0,0,191,191,0,0,109,0,0,0,0,20,20,20,58,0,0,37,20,20,191,115,0,115,0,0,37,40,112,0,0,0,0,37,0,109,112,40,0,192,40,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,58,58,58,58,58,58,58,58,105,37,106,107,40,108,109,105,37,106,107,40,108,109,107,40,108,109,106,106,105,40,107,37,107,40,108,109,111,37,106,20,20,107,107,40,40,112,112,108,113,109,107,115,115,115,105,111,37,106,20,20,20,107,40,40,112,108,113,109,111,111,40,112,107,40,191,193,191,193,115,40,107,40,108,109,115,105,111,37,106,20,107,40,112,108,113,109,88,94,105,105,111,40,112,94,115,105,105,115,115,40,192,37,192,37,192,37,40,40,107,108,113,107,0,40,58,107,107,0,58,107,108,113,58,111,107,40,108,109,58,107,20,107,107,107,58,107,0,105,37,106,107,40,108,109,112,20,107,40,112,58,58,107,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,0,194,194,194,0,0,0,0,139,138,0,0,137,137,0,137,138,0,0,120,121,134,121,121,120,121,137,134,138,139,120,121,137,134,138,139,121,121,121,121,120,120,0,121,120,120,134,121,121,121,120,120,134,0,121,120,120,121,137,134,134,138,138,139,120,121,137,134,138,139,121,121,121,121,121,121,121,121,120,134,121,121,120,121,137,134,138,139,195,121,134,121,121,121,121,121,121,121,121,121,138,121,121,120,121,0,121,121,121,121,120,120,134,138,120,121,120,120,120,121,137,134,138,139,120,121,137,134,138,139,0,121,120,121,137,134,138,139,120,120,121,137,134,138,139,0,196,196,0,154,0,0,0,0,0,154,0,154,153,150,151,152,154,153,150,151,152,150,151,152,150,151,152,165,150,151,152,0,150,151,152,153,153,154,153,150,151,152,154,153,150,151,152,154,153,150,151,152,153,152,153,153,150,151,152,154,153,150,151,152,154,153,150,151,152,154,153,150,151,152,154,153,150,151,152,197,198,198,197,198,0,0,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,161,156,161,156,161,25,0,25,25,25,158,25,25,25,25,25,25,161,156,158,25,0,0,0,0,0,0,0,0,158,0,0,25,55,136,136,55,136,156,25,158,160,122,55,136,161,156,25,158,160,122,55,136,161,55,156,25,158,160,122,55,136,161,156,25,158,160,122,55,136,161,156,122,122,55,136,161,160,199,160,160,156,25,158,122,161,55,156,25,25,158,160,122,55,136,161,156,156,156,25,25,158,160,122,55,136,161,156,199,160,160,55,156,25,158,160,122,55,136,161,160,55,156,122,25,55,136,200,160,160,123,160,136,55,136,156,25,158,160,122,55,136,161,25,136,136,156,25,158,160,122,55,136,161,156,25,158,160,122,55,136,161,156,25,158,160,122,55,136,161,156,25,158,160,122,55,136,161,201,168,0,167,167,0,0,167,168,0,0,0,168,131,131,131,131,131,131,131,131,131,132,130,131,168,167,132,130,131,168,167,131,132,130,131,168,167,132,130,131,168,167,168,167,131,131,132,130,168,167,131,131,131,131,131,168,167,131,131,131,132,130,131,168,167,132,130,131,168,167,168,167,131,132,130,131,168,167,131,131,131,131,131,168,167,131,131,131,168,132,130,131,168,167,132,130,131,168,167,132,130,131,168,167,132,130,131,168,167,131,131,132,130,131,168,167],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[1],[3,4],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],[[9,[[8,[6,7]]]]]],[1,1],[3,3],[10,10],[11,11],[12,12],[13,13],[[]],[[]],[[]],[[]],[[]],[[]],[[1,1],14],[[13,13],14],0,0,[[],3],[[],3],0,0,0,[[],[[9,[1]]]],[[],[[9,[10]]]],[[],[[9,[13]]]],[[1,1],15],[[3,3],15],[[10,10],15],[[11,11],15],[[12,12],15],[[13,13],15],0,[[3,5],16],[[3,5],16],[[17,18],19],[[17,18],19],[[1,18],19],[[3,18],19],[[10,18],19],[[11,18],19],[[12,18],19],[[13,18],19],0,[20,17],[21,17],[22,17],[23,17],[24,17],[25,17],[[]],[26,17],[[]],[[]],[[]],[[]],[[]],[[]],[4,3],[4,3],[4,3],[4,3],[[16,5],3],[[16,5],3],[1],[10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[12,27],0,[[1,1],[[28,[14]]]],[[3,3],[[28,[14]]]],[[13,13],[[28,[14]]]],[29],0,0,[3,4],0,0,[1,9],[10,9],[13,9],0,[[3,3]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],0,[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[12,31],0,[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],0,[[],5],[[],33],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],9],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[34,35],[[9,[36,21]]]],[[],37],[[],37],[38,39],[[[34,[40]],41],[[34,[42]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[38,[[8,[38,7]]]],0,[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[39,[[9,[43]]]],[39,[[9,[43]]]],[39,[[9,[43]]]],[[],[[9,[43]]]],[[],[[9,[43]]]],[[],[[9,[43]]]],0,[44,44],[45,45],[34,34],[46,46],[47,47],[38,38],[[]],[[]],[[]],[[]],[[]],[[]],[[44,44],14],[[45,45],14],[[34,34],14],[[46,46],14],[[47,47],14],[[38,38],14],[38,15],0,[[[34,[40]],41],[[34,[42]]]],[[[34,[42]],48],[[9,[[34,[49]],50]]]],[[[34,[40]],48,41],[[9,[[34,[49]],50]]]],[34,51],[[],[[9,[34]]]],[[],[[9,[38]]]],[[[34,[40]]],16],[38,52],[[44,44],15],[[45,45],15],[[34,34],15],[[46,46],15],[[47,47],15],[[38,38],15],0,[34,[[9,[52,21]]]],0,[[38,53],[[9,[54]]]],[[55,56,48],[[9,[[28,[57]],22]]]],[[[34,[40]],55,56,48],[[9,[[28,[57]],22]]]],[[[38,[40,58]],55,56,48],[[9,[[28,[57]],22]]]],[[[34,[40]],48,52,[59,[41]]],[[9,[28,50]]]],[[44,18],[[9,[60]]]],[[45,18],[[9,[60]]]],[[34,18],[[9,[60]]]],[[34,18],[[9,[60]]]],[[46,18],[[9,[60]]]],[[47,18],[[9,[60]]]],[[38,18],[[9,[60]]]],[[38,18],[[9,[60]]]],[34,15],[38,15],[[]],[[]],[61,34],[62,34],[63,34],[64,34],[65,34],[66,34],[[]],[[]],[[]],[[]],[39,[[9,[38,21]]]],[33,[[9,[34,21]]]],[33,[[9,[38,21]]]],[[33,53],[[9,[38,21]]]],[33,[[9,[38,21]]]],[67,[[9,[34,21]]]],[67,[[9,[38,21]]]],[[38,5],[[28,[38]]]],[[38,5],28],[34,[[9,[21]]]],[34,[[9,[21]]]],[38,15],[38,15],[[[34,[40]]],15],[44],[45],[34],[46],[47],[38],[[]],[[]],[[]],[[]],[[]],[[]],[38,39],[[48,35],[[9,[22]]]],[[68,48,35],[[9,[22]]]],[[[34,[40]]],15],[38,15],[38,69],[38,70],[34,[[9,[71,21]]]],[38,[[9,[71,21]]]],[38,[[9,[72]]]],[[44,48],[[28,[73]]]],[38,[[28,[5]]]],[38,[[28,[5]]]],[38,[[28,[5]]]],[38,[[9,[5,21]]]],[34,[[9,[5,21]]]],[38,[[9,[5,21]]]],[[],33],[[],33],[[],33],[[[38,[74]]],[[9,[34,21]]]],[[],34],[[],34],[[[38,[46]]],[[9,[34,21]]]],[[5,[8,[7]]],[[9,[34,21]]]],[62,34],[64,34],[[],[[9,[34,21]]]],[[[38,[47]]],[[9,[34,21]]]],[[5,[8,[7]]],[[9,[34,21]]]],[[[28,[75]]],[[9,[34,21]]]],[[],[[9,[34,21]]]],[[[38,[47]]],[[9,[34,21]]]],[[5,[8,[7]]],[[9,[34,21]]]],0,0,[38,[[9,[21]]]],[52,[[9,[38,21]]]],[[48,33],[[9,[21]]]],[52,[[9,[38,21]]]],[[52,53],[[9,[38,21]]]],[[44,44],[[28,[14]]]],[[45,45],[[28,[14]]]],[[34,34],[[28,[14]]]],[[46,46],[[28,[14]]]],[[47,47],[[28,[14]]]],[[38,38],[[28,[14]]]],[[],5],[[],5],[[],5],0,[38,15],[34,[[9,[21]]]],[38,[[9,[54]]]],[[34,76],[[9,[21]]]],[38,[[9,[[8,[[8,[2,7]],7]],21]]]],[38,[[9,[[8,[[8,[2,7]],7]],21]]]],[34,[[9,[52,21]]]],[34,52],[38,5],[34,9],[38,9],[[],77],[[],77],[[],77],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],[[],30],[[[34,[40]],78],30],[38,[[9,[21]]]],[38,[[9,[21]]]],[34,9],[38,9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[34,52],[[]],[[]],[[]],[[]],[[]],[[]],0,[38,15],0,[33,[[9,[30,22]]]],[33,[[9,[22]]]],[33,[[9,[30,22]]]],[33,[[9,[22]]]],0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[22,18],19],[[22,18],19],[79,22],[23,22],[20,22],[21,22],[[]],[80,22],[26,22],[81,22],[[]],[29],[[],30],[[],9],[[],9],[[],32],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[82,82],[83,83],[84,84],[57,57],[85,85],[56,56],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],85],[[82,82],15],[[83,83],15],[[84,84],15],[[57,57],15],[[85,85],15],[[26,26],15],[[82,18],19],[[83,18],19],[[84,18],19],[[57,18],19],[[85,18],19],[[26,18],19],[[26,18],19],[[56,18],19],[[]],[[]],[15,84],[[]],[[]],[83,57],[[]],[[]],[[]],[[57,86],[[9,[85,26]]]],[82],[85],[83,30],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[83,15],[84,15],[85,15],0,[[85,85],[[28,[14]]]],[29],[57,15],0,[82,9],[83,9],[84,9],[57,9],[85,9],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[9,[87,22]]]],[[[89,[[88,[46]]]],35],[[9,[87,22]]]],[[[90,[[88,[47]]]],35],[[9,[87,22]]]],[[[91,[[88,[47]]]],35],[[9,[87,22]]]],[[[93,[[88,[92]]]],35],[[9,[87,22]]]],[[[95,[[94,[46]]]],35],[[9,[87,22]]]],[[[96,[[94,[46]]]],35],[[9,[87,22]]]],[[[97,[[94,[47]]]],35],[[9,[87,22]]]],[[[98,[[94,[47]]]],35],[[9,[87,22]]]],[[[99,[[94,[47]]]],35],[[9,[87,22]]]],[[[100,[[94,[47]]]],35],[[9,[87,22]]]],[[[101,[[94,[92]]]],35],[[9,[87,22]]]],[[[102,[[94,[92]]]],35],[[9,[87,22]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[87,48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],103],[[],37],[[40,41],42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[39,[[9,[43]]]],[[],[[9,[43]]]],[[[105,[104,58]]],[[105,[104,58]]]],[37,37],[106,106],[107,107],[40,40],[108,108],[109,109],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[107,107],14],[[40,40],14],[[108,108],14],[[109,109],14],0,[[],106],[[[105,[58]]]],[[40,41],42],[107,52],[[37,37],15],[[107,107],15],[[40,40],15],[[108,108],15],[[109,109],15],[[[111,[[0,[110,58]]]],18],19],[[37,18],19],[[106,18],19],[[20,18],19],[[20,18],19],[[107,18],[[9,[60]]]],[[107,18],[[9,[60]]]],[[40,18],[[9,[60]]]],[[40,18],[[9,[60]]]],[[112,18],[[9,[60]]]],[[112,18],[[9,[60]]]],[[108,18],[[9,[60]]]],[[113,18],[[9,[60]]]],[[109,18],[[9,[60]]]],[107,15],[[]],[114,[[115,[58]]]],[116,[[115,[58]]]],[[]],[[]],[[]],[[]],[[]],[23,20],[21,20],[[]],[42,40],[[]],[[]],[[]],[[]],[[]],[[40,103],[[111,[58]]]],[[112,103],[[111,[58]]]],[33,[[9,[40]]]],[33,[[9,[112]]]],[67,[[9,[107,21]]]],[40,73],[[],[[9,[105]]]],[[],[[9,[105]]]],[[],[[9,[105]]]],[[],[[9,[105]]]],[[[115,[58]]],15],[40,15],[107],[40],[108],[109],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[111,20]]]],[[[28,[117]],73],[[9,[111,20]]]],[105,[[9,[111,20]]]],[[105,[28,[117]],73],[[9,[111,20]]]],[[[111,[58]]],[[9,[[111,[58]],20]]]],[40,[[9,[[111,[58]],20]]]],[112,[[9,[[111,[58]],20]]]],[[],[[9,[115,20]]]],[[[115,[58]]],[[9,[[115,[58]],20]]]],[105,[[9,[115,20]]]],[[[105,[58]]]],[[[115,[58]],35],[[28,[116]]]],[[[115,[58]],35,48],114],[40,15],[[],15],[37,15],[[],15],[37,15],[[],15],[37,15],[40,15],[40,15],0,0,0,[107,[[9,[71,21]]]],[[],103],[40,118],[38,[[28,[5]]]],[107,5],[107,5],[[103,103],103],[[],33],[[5,[8,[7]]],[[9,[107,21]]]],0,0,[38,[[9,[21]]]],[[[111,[58]],103],[[111,[58]]]],[[107,107],[[28,[14]]]],[[40,40],[[28,[14]]]],[[108,108],[[28,[14]]]],[[109,109],[[28,[14]]]],[[],5],0,[29],[107,[[9,[21]]]],[107,[[9,[[8,[[8,[2,7]],7]],21]]]],[107,5],[[],77],[107,39],[[],103],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[112,48],[[9,[40,119]]]],[[],30],[[],30],[[],30],[[],30],[38,[[9,[21]]]],[38,[[9,[21]]]],[107,[[9,[107]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],[[28,[16]]]],[[],[[28,[3]]]],[5,[[28,[31]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[120,120],120],[[121,1,122,[124,[123]]]],0,[[121,125],[[9,[15,126]]]],[121,127],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[121,128],[[9,[[131,[129,130]],17]]]],[121,[[131,[129,132]]]],[[121,133]],[121,86],[120,120],[[]],0,[121,[[9,[15]]]],0,[[],120],[134],[[121,1],[[28,[41]]]],[[121,52],28],[[121,1],30],[[],[[9,[120]]]],[[120,120],15],[[134,134],15],0,[[121,135,136],[[9,[15,17]]]],[[120,18],[[9,[60]]]],[[120,18],[[9,[60]]]],[[[121,[110]],18],19],[[137,18],19],[[134,18],19],[[134,18],19],[[[138,[110]],18],19],[[138,18],19],[[139,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[121,137],134],[121,120],[[121,1],68],[[121,137],134],[[121,10,[28,[140]],15],[[9,[141,17]]]],[[121,1],[[124,[55]]]],[[121,128,15],[[28,[13]]]],[[121,27],[[28,[10]]]],0,0,[[121,142],[[9,[15,143]]]],[[121,133,144],[[9,[15,139]]]],[[]],[[]],[[]],[[]],[[]],[[]],[52,15],[[121,52],15],0,[121,86],[121,[[28,[142]]]],[121,145],[121,146],[121,35],[[147,[28,[147]],35],[[9,[121,138]]]],[[147,[28,[147]],35],[[9,[121,22]]]],[[121,1],41],[[121,1],[[9,[[28,[57]],17]]]],[29],[[121,1],[[28,[68]]]],[121,48],[120,9],[[121,135,136],[[9,[15,17]]]],0,[121,148],[121,[[86,[1,[0,[145,104]]]]]],[[121,1],[[0,[145,104]]]],[121,149],[[]],[[],30],[[],30],[[],30],[120,16],[121,145],0,[120,16],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[121,127],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],0,[[]],[[]],[[]],[[]],[[]],[[]],[[28,35,48],[[9,[30,17]]]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[150,150],[151,151],[152,152],[[]],[[]],[[]],[[[8,[11]],[8,[11]],3,16,52],[[9,[153,17]]]],[[150,[8,[11]],[8,[11]],3,16,52],[[9,[153,17]]]],[[151,[8,[11]],[8,[11]],3,16,52],[[9,[153,17]]]],[[152,[8,[11]],[8,[11]],3,16,52],[[9,[153,17]]]],[[16,3,52],154],[[],150],[[],151],[[],152],0,0,[[154,18],19],[[153,18],19],[[150,18],19],[[151,18],19],[[152,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[153,16],[16,152],0,[153,16],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[155,[[28,[30]]]],[155,30],[[],[[9,[155]]]],[[121,33,15],[[9,[155,33]]]],[[155,18],19],[[]],[33,[[9,[155]]]],[[]],0,[155,9],[155,30],[[],9],[[],9],[[],32],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[55,156,122,[124,[123]]],[[28,[[124,[123]]]]]],0,0,[[55,48],157],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[157,34,48],55],[156,156],[25,25],[158,158],[[[160,[[0,[104,159,110,104]]]]],[[160,[[0,[104,159,110,104]]]]]],[122,122],[55,55],[136,136],[161,161],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[156,156],14],[[122,122],14],[[],122],[[],55],[[],136],[[],161],[[[160,[[0,[159,110,104]]]]]],[[],[[28,[112]]]],[[[160,[162]]],[[28,[112]]]],[[[160,[[44,[116]]]]],[[28,[112]]]],[[156,156],15],[[25,25],15],[[158,158],15],[[122,122],15],[[161,161],15],[[55,156],[[28,[124]]]],[[156,18],19],[[25,18],19],[[25,18],19],[[158,18],19],[[[160,[[0,[110,159,110,104]]]],18],19],[[122,18],19],[[55,18],19],[[136,18],19],[[161,18],19],[[]],[163,156],[118,156],[164,25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[156],[48,156],[[[160,[162]],48],156],[[[160,[[44,[116]]]],48],156],[55,[[8,[156]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[0,[159,110,104]],158],[[160,[[0,[159,110,104]]]]]],[[],55],[[156,156],[[28,[14]]]],[[122,122],[[28,[14]]]],[29],[[55,156,122],[[28,[[124,[123]]]]]],0,[[135,5,136,48],[[9,[25]]]],[[[160,[162]],135,5,136,48],[[9,[25]]]],[[[160,[[44,[116]]]],135,5,136,48],[[9,[25]]]],[[135,136,48],[[9,[25]]]],[[135,136,48],[[9,[25]]]],0,[55,[[8,[124]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],30],0,0,[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[[131,[165,132]]],[[131,[165,132]]]],[[[131,[165,166]],27,141,5],[[9,[[131,[165,166]],17]]]],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,132]],52,16],[[131,[165,132]]]],[[[131,[165,166]],27],[[131,[165,166]]]],[[[131,[165,166]],27],[[9,[[131,[165,166]],17]]]],[[[131,[165,166]]],[[9,[[131,[165,166]],17]]]],[[[131,[165,166]],15],[[131,[165,166]]]],[[[131,[129,130]],52],[[9,[[131,[129,130]],17]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[131,[165,166]],167],[[131,[165,166]]]],[132,132],[130,130],[[[131,[104]]],[[131,[104]]]],[168,168],[167,167],[[]],[[]],[[]],[[]],[[]],[[168,168],14],[[167,167],14],[[[131,[165,166]],165],[[131,[165,166]]]],[[[131,[165,166]],41],[[131,[165,166]]]],[[],132],[[],130],[[],168],[[],167],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,132]],52],[[131,[165,132]]]],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,166]],169],[[131,[165,166]]]],[[168,168],15],[[167,167],15],[[[131,[165,166]],16],[[131,[165,166]]]],[[[131,[165,166]],3],[[131,[165,166]]]],[[[131,[165,166]]],[[9,[17]]]],[[132,18],19],[[130,18],19],[[[131,[110,110,110]],18],19],[[168,18],19],[[167,18],19],[[]],[[]],[[]],[[]],[[]],[168],[167],[[[131,[165,166]]],[[131,[165,166]]]],[[]],[[]],[[]],[[]],[[]],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,166]],170],[[131,[165,166]]]],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,166]]],[[131,[165,166]]]],[[[131,[165,166]],168],[[131,[165,166]]]],[[168,168],[[28,[14]]]],[[167,167],[[28,[14]]]],[[[131,[165,166]],[86,[30,[8,[5]]]],1],[[131,[165,166]]]],[[[131,[165,132]],8],[[131,[165,132]]]],[[[131,[165,166]],140],[[131,[165,166]]]],[[168,133]],[[]],[[]],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[[131,[165,166]],[8,[27]]],[[131,[165,166]]]],[[[131,[165,166]],171],[[131,[165,166]]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"KeychainKind"],[15,"u8"],[3,"FeeRate"],[15,"f32"],[15,"usize"],[3,"u5"],[3,"Global"],[3,"Vec"],[4,"Result"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[4,"Utxo"],[3,"TransactionDetails"],[4,"Ordering"],[15,"bool"],[15,"u64"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"KeyError"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"SignerError"],[4,"PolicyError"],[3,"OutPoint"],[4,"Option"],[3,"Demand"],[3,"String"],[3,"TxOut"],[3,"TypeId"],[15,"str"],[4,"Descriptor"],[4,"Network"],[3,"Address"],[4,"ScriptContextEnum"],[3,"Miniscript"],[4,"Terminal"],[4,"DescriptorPublicKey"],[15,"u32"],[3,"DefiniteDescriptorKey"],[4,"ScriptContextError"],[3,"DescriptorXKey"],[4,"Wildcard"],[4,"Legacy"],[4,"Segwitv0"],[3,"Secp256k1"],[3,"PublicKey"],[4,"ConversionError"],[4,"DescriptorType"],[3,"Script"],[3,"ExtParams"],[4,"AnalysisError"],[3,"SignersContainer"],[4,"BuildSatisfaction"],[3,"Policy"],[8,"ScriptContext"],[3,"Range"],[3,"Error"],[3,"Pkh"],[3,"Wpkh"],[3,"Sh"],[3,"Wsh"],[3,"Bare"],[3,"Tr"],[3,"Tree"],[6,"ExtendedDescriptor"],[3,"Iter"],[3,"PkIter"],[4,"Policy"],[4,"LiftError"],[3,"DerivationPath"],[4,"BareCtx"],[4,"TapTree"],[3,"TxIn"],[4,"SigType"],[3,"HashMap"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"PkOrF"],[4,"SatisfiableItem"],[4,"Satisfaction"],[3,"Condition"],[3,"BTreeMap"],[6,"DescriptorTemplateOut"],[8,"IntoDescriptorKey"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[4,"Tap"],[3,"P2TR"],[8,"DerivableKey"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[3,"Bip86"],[3,"Bip86Public"],[6,"ValidNetworks"],[8,"Clone"],[3,"GeneratedKey"],[3,"PrivateKeyGenerateOptions"],[3,"SortedMultiVec"],[3,"SinglePub"],[4,"SinglePubKey"],[8,"Debug"],[4,"DescriptorKey"],[4,"DescriptorSecretKey"],[3,"SinglePriv"],[3,"ExtendedPubKey"],[4,"ExtendedKey"],[3,"ExtendedPrivKey"],[6,"KeySource"],[3,"Fingerprint"],[3,"DescriptorKeyParseError"],[3,"Balance"],[3,"Wallet"],[3,"SignerOrdering"],[8,"TransactionSigner"],[3,"Arc"],[6,"Update"],[3,"UpdateNotConnectedError"],[3,"TxGraph"],[3,"Txid"],[6,"DefaultCoinSelectionAlgorithm"],[3,"BumpFee"],[3,"TxBuilder"],[3,"CreateTx"],[3,"Transaction"],[3,"AddressInfo"],[3,"PartiallySignedTransaction"],[3,"SignOptions"],[4,"AddressIndex"],[4,"NewError"],[4,"InsertTxError"],[3,"PsbtSighashType"],[3,"Input"],[3,"BlockId"],[3,"InsertBlockNotMatchingError"],[4,"ConfirmationTime"],[8,"Iterator"],[3,"LocalChain"],[8,"IntoWalletDescriptor"],[3,"KeychainTxOutIndex"],[6,"ChangeSet"],[3,"LargestFirstCoinSelection"],[3,"OldestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[3,"CoinSelectionResult"],[4,"Excess"],[3,"FullyNodedExport"],[4,"SignerId"],[6,"KeyMap"],[4,"SignerContext"],[8,"Sized"],[3,"SignerWrapper"],[4,"TapLeavesOptions"],[3,"PrivateKey"],[3,"Hash"],[4,"Error"],[8,"CoinSelectionAlgorithm"],[8,"TxBuilderContext"],[4,"ChangeSpendPolicy"],[4,"TxOrdering"],[3,"Sequence"],[4,"LockTime"],[15,"i32"],[8,"Vbytes"],[13,"InsufficientFunds"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Foreign"],[8,"ExtractPolicy"],[13,"PsbtTimelocks"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[8,"DescriptorTemplate"],[8,"GeneratableKey"],[8,"ExtScriptContext"],[8,"GeneratableDefaultOptions"],[8,"PsbtUtils"],[8,"IsDust"],[13,"ConfirmationHeightCannotBeGreaterThanTip"],[13,"Change"],[13,"NoChange"],[8,"SignerCommon"],[8,"InputSigner"],[13,"Tap"]]},\ -"bdk_chain":{"doc":"This crate is a collection of core structures for Bitcoin …","t":[8,8,17,3,17,8,4,3,4,3,13,13,8,16,8,3,2,16,3,8,3,3,2,13,13,16,11,10,11,11,12,12,10,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,12,12,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,10,11,12,11,11,11,0,10,0,11,2,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,12,12,12,16,3,3,8,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,10,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,6,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,3,3,3,3,3,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Anchor","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeAnchor","Confirmed","Confirmed","DescriptorExt","Error","ForEachTxOut","FullTxOut","IndexedTxGraph","LoadError","Persist","PersistBackend","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","WriteError","all_spks","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","apply_additions","bitcoin","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","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","commit","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","deserialize","deserialize","deserialize","deserialize","dust_value","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_txout","from","from","from","from","from","from","from","from","from","from","from","from","get_chain_tip","hash","hash","hash","hash","hash","hash","height","index_of_spk","index_tx","index_txout","indexed_tx_graph","insert_spk","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","load_from_persistence","local_chain","mark_used","miniscript","net_value","new","new","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serialize","serialize","serialize","serialize","spent_by","spk_at_index","stage","staged","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_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write_changes","height","last_seen","time","Additions","IndexedAdditions","IndexedTxGraph","Indexer","append","apply_additions","apply_additions","apply_update","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph_additions","index","index_additions","index_tx","index_txout","insert_relevant_txs","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","DerivationAdditions","KeychainTxOutIndex","LocalChangeSet","LocalUpdate","add","add_keychain","append","append","apply_additions","apply_additions","as_inner","as_ref","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","chain_changeset","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","confirmed","default","default","default","default","default","deref","deserialize","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","graph","immature","index_tx","index_txout","indexed_additions","inner","into","into","into","into","into","is_empty","is_empty","is_tx_relevant","keychain","keychains","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead_to_target","lookahead_to_target_multi","lookaheads","mark_used","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_spks_of_all_keychains","revealed_spks_of_keychain","scan","scan_txout","serialize","serialize","serialize","set_lookahead","set_lookahead_for_all","spks_of_all_keychains","spks_of_keychain","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","txouts_of_keychain","type_id","type_id","type_id","type_id","type_id","unmark_used","untrusted_pending","unused_spks_of_keychain","vzip","vzip","vzip","vzip","vzip","ChangeSet","InsertBlockNotMatchingError","LocalChain","UpdateNotConnectedError","apply_changeset","apply_update","as_ref","blocks","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","default","determine_changeset","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_blocks","get_chain_tip","height","initial_changeset","insert_block","into","into","into","is_block_in_chain","original_hash","partial_cmp","provide","provide","tip","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","Additions","CanonicalTx","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchors","anchors","append","apply_additions","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","determine_additions","direct_conflicts_of_tx","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","for_each_txout","for_each_txout","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","insert_anchor","insert_anchor_preview","insert_seen_at","insert_seen_at_preview","insert_tx","insert_tx_preview","insert_txout","insert_txout_preview","into","into","into","into","into","into_iter","is_empty","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_chain_txs","new","next","node","observed_as","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","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_list_chain_txs","tx","tx_outputs","tx_spends","txid","txouts","txouts","txs","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","walk_conflicts","walk_descendants"],"q":["bdk_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::ConfirmationTime","","","bdk_chain::indexed_tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::keychain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::local_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Trait that “anchors” blockchain data to a specific …","Trait that makes an object appendable.","Maximum BIP32 derivation index.","A reference to a block in the canonical chain.","How many confirmations are needed f or a coinbase output …","Represents a service that tracks the blockchain.","Represents the observed position of some chain data.","An Anchor implementation that also records the exact …","Block height and timestamp at which a transaction is …","An Anchor implementation that also records the exact …","The chain data is seen as confirmed, and in anchored by A.","The confirmed variant.","A trait to extend the functionality of a miniscript …","Error type.","Trait to do something with every txout contained in a …","A TxOut with as much data as we can retrieve about it","","The error the backend returns when it fails to load …","Persist wraps a PersistBackend (B) to create a convenient …","A persistence backend for Persist.","An iterator for derived script pubkeys.","An index storing TxOuts that have a script pubkey that …","","The chain data is seen in mempool at this given timestamp.","The unconfirmed variant.","The error the backend returns when it fails to write.","The script pubkeys that are being tracked by the index.","Returns the BlockId that the associated blockchain data is …","","","The anchor block.","The anchor block.","Append another object of the same type onto self.","","","","","","","","","","","","","","","","","","","","","The position of the transaction in outpoint in the overall …","","","","","","","","","","","","","","","","","Maps a ChainPosition<&A> into a ChainPosition<A> by …","","","","","","","Commit the staged changes to the underlying persistance …","The exact confirmation height of the transaction.","The confirmation height of the chain data being anchored.","Get the upper bound of the chain data’s confirmation …","Get the upper bound of the chain data’s confirmation …","Determines the upper bound of the confirmation height.","","","The confirmation time of the chain data being anchored.","","","","","","","","","Returns the minimum value (in satoshis) at which an output …","","","","","","","","","","","","","","","The provided closure f will be called with each …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the best chain’s chain tip.","","","","","","The hash of the block.","The height of the block.","Returns the index associated with the script pubkey.","","","Contains the IndexedTxGraph structure and associated types.","Adds a script pubkey to scan for. Returns false and does …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Determines whether block of BlockId exists as an ancestor …","Returns whether ChainPosition is confirmed or not.","Returns whether ConfirmationTime is the confirmed variant.","Whether the utxo is/was/will be spendable with chain tip.","Returns whether the structure is considered empty.","Whether the txout is considered mature.","Whether this output is on a coinbase transaction.","Whether any of the inputs of this transaction spend a …","","Returns whether the script pubkey at index has been used …","Module for keychain related structures.","Return the aggregate changeset C from persistence.","The LocalChain is a local implementation of ChainOracle.","Marks the script pubkey at index as used even though it …","","Computes the net value that this transaction gives to the …","Create a new Persist from PersistBackend.","Creates a new script pubkey iterator starting at 0 from a …","","","The location of the TxOut.","Get a reference to the set of indexed outpoints.","Iterates over all the outputs with script pubkeys in an …","","","","","","","Scans an object containing many txouts.","Scan a single TxOut for a matching script pubkey and …","Computes total input value going from script pubkeys in …","","","","","The txid and chain position of the transaction (if any) …","Returns the script that has been inserted at the index.","Stage a changeset to be commited later with commit.","Get the changes that have not been commited yet.","","","","","","","","","","","","","","","","","","","","","","","","","","","Module for structures that store and traverse transactions.","Returns the txout and script pubkey index of the TxOut at …","The TxOut.","Iterate over all known txouts that spend to tracked script …","Finds all txouts on a transaction that has previously been …","","","","","","","","","","Construct an unconfirmed variant using the given last_seen …","Undoes the effect of mark_used. Returns whether the index …","Iterates over all unused script pubkeys in an index range.","","","","","","","","","","Writes a changeset to the persistence backend.","Confirmation height.","The last-seen timestamp in unix seconds.","Confirmation time in unix seconds.","The resultant “additions” when new transaction data is …","A structure that represents changes to an IndexedTxGraph.","A struct that combines TxGraph and an Indexer …","Represents a structure that can index transaction data.","","Apply additions to itself.","Applies the IndexedAdditions to the IndexedTxGraph.","Apply an update directly.","","","","","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Get a reference of the internal transaction graph.","TxGraph additions.","Transaction index.","Indexer additions.","Scan and index the given transaction.","Scan and index the given outpoint and txout.","Insert relevant transactions from the given txs iterator.","Insert and index a transaction into the graph.","Insert a floating txout of given outpoint.","Calls U::from(self).","Calls U::from(self).","","Determines whether the transaction should be included in …","Construct a new IndexedTxGraph with a given index.","","","","","","","","","","","Balance, differentiated into various categories.","Represents updates to the derivation index of a …","A convenient wrapper around SpkTxOutIndex that relates …","A structure that records the corresponding changes as …","A structure to update KeychainTxOutIndex, TxGraph and …","","Add a keychain to the tracker’s txout_index with a …","Append another DerivationAdditions into self.","","Applies the derivation additions to the KeychainTxOutIndex…","","Get the inner map of the keychain to its new derivation …","","","","","","","","","","","","Update for the LocalChain.","Changes to the LocalChain.","","","","","","","","","","","Confirmed and immediately spendable balance","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Update for the TxGraph.","All coinbase outputs not yet matured","","","Additions to IndexedTxGraph.","Return a reference to the internal SpkTxOutIndex.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the additions are empty.","","","Last active derivation index per keychain (K).","Return a reference to the internal map of the keychain to …","Get the last derivation index revealed for keychain.","Get the last derivation index that is revealed for each …","Returns the highest derivation index of the keychain where …","Returns the highest derivation index of each keychain that …","Store lookahead scripts until target_index.","Convenience method to call lookahead_to_target for …","Return the lookahead setting for each keychain.","Marks the script pubkey at index as used even though the …","Get the next derivation index for keychain. The next index …","Gets the next unused script pubkey in the keychain. I.e., …","Get a reference to the set of indexed outpoints.","Attempts to reveal the next script pubkey for keychain.","Reveals script pubkeys of the keychain’s descriptor up …","Convenience method to call Self::reveal_to_target on …","Convenience method to get revealed_spks_of_keychain of all …","Iterates over the script pubkeys revealed by this index …","Scans an object for relevant outpoints, which are stored …","Scan a single outpoint for a matching script pubkey.","","","","Set the lookahead count for keychain.","Convenience method to call set_lookahead for all keychains.","Generates script pubkey iterators for every keychain. The …","Generates a script pubkey iterator for the given keychain…","","","","","","","Get the whole balance visible to the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","","","","","Iterates over all the OutPoint that have a TxOut with a …","","","","","","Undoes the effect of mark_used. Returns whether the index …","Unconfirmed UTXOs received from an external wallet","Iterates over all unused script pubkeys for a keychain …","","","","","","This is the return value of determine_changeset and …","Represents a failure when trying to insert a checkpoint …","This is a local implementation of ChainOracle.","Represents an update failure of LocalChain due to the …","Applies the given changeset.","Updates LocalChain with an update LocalChain.","","Get a reference to a map of block height to hash.","","","","","","","","","","","","","","","This is like the sparsechain’s logic, expect we must …","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Contruct a LocalChain from a list of BlockIds.","","The checkpoints’ height.","Derives a ChangeSet that assumes that there are no …","Insert a block of BlockId into the LocalChain.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Original checkpoint’s block hash.","","","","Get the chain tip.","","","","","","","","","","","","","","","Update checkpoint’s block hash.","","","","A structure that represents changes to a TxGraph.","An outwards-facing view of a transaction that is part of …","An iterator that traverses transaction descendants.","A graph of transactions and spends.","An outward-facing view of a (transaction) node in the …","Get all transaction anchors known by TxGraph.","Iterate over all tx outputs known by TxGraph.","The blocks that the transaction is “anchored” in.","Added anchors.","","Applies Additions to TxGraph.","Extends this graph with another so that self becomes the …","","Get the total balance of outpoints that are in chain of …","","","","","","","","","","","Calculates the fee of a given transaction. Returns 0 if tx …","","","","","","","","","","","","","","","","","Previews the resultant Additions when Self is updated …","Given a transaction, return an iterator of txids that …","","","","","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","Iterate over floating txouts known by TxGraph.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Iterate over all full transactions in the graph.","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","Get a transaction by txid. This only returns Some for full …","Get a transaction node by txid. This only returns Some for …","Obtains a single tx output (if any) at the specified …","Inserts the given anchor into TxGraph.","Returns the resultant Additions if the txid is set in …","Inserts the given seen_at into TxGraph.","Returns the resultant Additions if the txid is set to …","Inserts the given transaction into TxGraph.","Returns the resultant Additions if the given transaction …","Inserts the given TxOut at OutPoint.","Returns the resultant Additions if the given txout is …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Whether the graph has any transactions or outputs in it.","","Returns true if the Additions is empty (no transactions or …","Added last-seen unix timestamps of transactions.","The last-seen unix timestamp of the transaction as …","List graph transactions that are in chain with chain_tip.","Construct a new TxGraph from a list of transactions.","","The transaction node (as part of the graph).","How the transaction is observed as (confirmed or …","The transactions spending from this output.","","","","","","","","Get the total balance of outpoints that are in chain of …","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","","","","","","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","","","","","","List graph transactions that are in chain with chain_tip.","A partial or full representation of the transaction.","Returns known outputs of a given txid.","Iterates over the transactions spending from txid.","Txid of the transaction.","Iterates over all outpoints contained within Additions.","Added txouts.","Added transactions.","","","","","","","","","","","Creates an iterator that both filters and maps conflicting …","Creates an iterator that filters and maps descendants from …"],"i":[0,0,0,0,0,0,0,0,0,0,8,9,0,68,0,0,0,69,0,0,0,0,0,8,9,69,3,17,6,7,6,7,39,3,0,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,10,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,11,8,8,9,5,6,7,10,13,6,7,17,17,8,6,7,7,3,5,6,7,9,5,6,7,70,8,9,5,6,7,10,3,8,9,5,6,7,10,13,71,3,8,9,9,5,5,5,6,7,10,13,11,68,8,9,5,6,7,5,5,3,3,3,0,3,3,8,9,5,6,7,10,13,11,11,68,8,9,10,39,10,10,3,3,3,0,69,0,3,0,3,13,11,11,11,10,3,3,8,9,5,6,7,10,3,3,3,9,5,6,7,10,3,13,13,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,0,3,10,3,3,3,8,9,5,6,7,10,13,11,9,3,3,3,8,9,5,6,7,10,13,11,69,72,73,72,41,0,0,0,40,41,42,42,42,40,42,40,40,40,42,40,40,40,42,40,42,40,40,40,42,40,42,40,41,41,42,42,42,42,40,40,41,42,40,40,42,40,42,40,42,40,42,40,0,0,0,0,0,48,49,46,52,49,49,46,46,49,46,53,52,48,49,46,53,52,48,53,52,49,46,53,52,48,49,46,53,52,48,48,49,46,53,52,48,49,46,52,48,46,53,52,48,49,46,53,52,48,48,49,46,53,52,52,52,48,53,48,49,49,52,49,49,46,53,52,48,46,52,49,53,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,46,52,48,49,49,49,49,49,46,53,52,48,48,48,48,48,49,46,53,52,48,49,46,53,52,48,49,49,46,53,52,48,49,48,49,49,46,53,52,48,0,0,0,0,57,57,57,57,57,58,59,57,58,59,57,58,59,57,58,59,57,57,57,57,58,59,57,58,58,59,59,57,57,58,59,57,57,59,57,57,57,58,59,57,59,57,58,59,57,57,58,59,58,59,57,58,59,57,58,59,57,58,59,59,57,58,59,0,0,0,0,0,43,43,64,45,45,43,43,43,43,66,43,64,65,45,66,43,64,65,45,43,66,66,43,64,65,45,43,64,65,45,64,65,43,45,64,45,43,43,43,64,65,45,43,43,43,43,64,65,45,43,45,66,43,64,65,45,43,43,43,43,43,43,43,43,43,43,43,43,43,43,66,43,64,65,45,66,43,45,45,45,64,43,43,66,65,65,43,64,65,45,43,64,65,45,43,43,43,66,43,64,65,45,43,43,66,43,64,65,45,43,64,43,43,64,45,45,45,66,43,64,65,45,66,43,64,65,45,43,43],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[3,[[0,[1,2]]]]],4],[[],5],[6,5],[7,5],0,0,[[]],[[[3,[[0,[1,2]]]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[3,[1]]],[[3,[1]]]],[[[8,[1]]],[[8,[1]]]],[9,9],[5,5],[6,6],[7,7],[[[10,[1]]],[[10,[1]]]],[[[11,[1]]],[[11,[1]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,[[8,[1]]]],[[[8,[2]],8],12],[[9,9],12],[[5,5],12],[[6,6],12],[[7,7],12],[[[10,[2]],10],12],[13,[[15,[14]]]],0,0,[[],16],[[],16],[[[8,[17]]],[[14,[16]]]],[6,16],[7,16],0,[[],3],[[],5],[[],6],[[],7],[[],[[15,[9]]]],[[],[[15,[5]]]],[[],[[15,[6]]]],[[],[[15,[7]]]],[[],18],[[[8,[19]],8],20],[[9,9],20],[[5,5],20],[[6,6],20],[[7,7],20],[[[10,[19]],10],20],[[[3,[21]],22],23],[[[8,[21]],22],23],[[9,22],23],[[5,22],23],[[6,22],23],[[7,22],23],[[[10,[21]],22],23],[[[13,[21,21]],22],23],[24],[[]],[[]],[[]],[[[8,[7]]],9],[[],5],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[15,[[14,[5]]]]]],[[[8,[25]]]],[9],[5],[6],[7],0,0,[[[3,[[0,[1,2]]]],26],14],[[[3,[[0,[1,2]]]],27]],[[[3,[[0,[1,2]]]],28,29]],0,[[[3,[[0,[1,2]]]],[0,[1,2]],26],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,5],[[15,[[14,[20]]]]]],[8,20],[9,20],[[[10,[17]],16],20],[[],20],[[[10,[17]],16],20],0,[[[3,[[0,[1,2]]]],27],20],[[[3,[[0,[1,2]]]],27],20],[[[3,[[0,[1,2]]]]],20],0,[[],15],0,[[[3,[[0,[1,2]]]]],20],0,[[[3,[[0,[1,2]]]],27],30],[[],13],[[],11],[11,14],[[11,31],14],0,[[[3,[[0,[1,2]]]]],32],[[[3,[[0,[1,2]]]],[33,[[0,[1,2]]]]],34],[[[8,[35]],8],[[14,[12]]]],[[9,9],[[14,[12]]]],[[5,5],[[14,[12]]]],[[6,6],[[14,[12]]]],[[7,7],[[14,[12]]]],[[[10,[35]],10],[[14,[12]]]],[[[3,[[0,[1,2]]]]],[[32,[[0,[1,2]]]]]],[[[3,[[0,[1,2]]]],28,29],14],[[[3,[[0,[1,2]]]],27]],[9,15],[5,15],[6,15],[7,15],0,[[[3,[[0,[1,2]]]]],[[14,[26]]]],[13],[13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[[3,[[0,[1,2]]]],28],14],0,[[[3,[[0,[1,2]]]]],[[0,[34,36]]]],[[[3,[[0,[1,2]]]],37],34],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[18,9],[[[3,[[0,[1,2]]]]],20],[[[3,[[0,[1,2]]]]],34],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],0,0,0,0,0,0,0,[[[40,[17,39]],[40,[17,39]]]],[[]],[[[42,[17,41]],[40,[17]]]],[[[42,[17,41]],[43,[17]]],[[40,[17]]]],[[]],[[]],[[]],[[]],[[[40,[1,1]]],[[40,[1,1]]]],[[]],[[],[[42,[44]]]],[[],[[40,[44]]]],[[],[[15,[40]]]],[[[40,[19,19]],40],20],[[[42,[21,21]],22],23],[[[40,[21,21]],22],23],[[]],[45,[[40,[44]]]],[46,[[40,[46]]]],[[]],[42,43],0,0,0,[27],[[28,29]],[[[42,[17,41]],47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],27,47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],28,29],[[40,[17]]]],[[]],[[]],[[[40,[17,39]]],20],[27,20],[[],42],[40,15],[[]],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[]],[[]],0,0,0,0,0,[[48,48],48],[[[49,[[0,[1,2,21]]]],[0,[1,2,21]],[51,[50]]]],[[[46,[2]],[46,[2]]]],[[[52,[2,17]],[52,[2,17]]]],[[[49,[[0,[1,2,21]]]],[46,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[46,4],[46,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[[49,[1]]],[[49,[1]]]],[[[46,[1]]],[[46,[1]]]],[[[53,[1,1]]],[[53,[1,1]]]],[[[52,[1,1]]],[[52,[1,1]]]],[48,48],[[]],[[]],[[]],[[]],[[]],0,[[],49],[[],46],[[],53],[[],52],[[],48],[49],[[],[[15,[46]]]],[[],[[15,[52]]]],[[],[[15,[48]]]],[[[46,[19]],46],20],[[[53,[19,19]],53],20],[[[52,[19,19]],52],20],[[48,48],20],[[[49,[21]],22],23],[[[46,[21]],22],23],[[[53,[21,21]],22],23],[[[52,[21,21]],22],23],[[48,22],23],[[48,22],23],[[]],[[]],[[]],[[]],[[[40,[46]]],52],[54,52],[[]],0,0,[[[49,[[0,[1,2,21]]]],27]],[[[49,[[0,[1,2,21]]]],28,29]],0,[[[49,[[0,[1,2,21]]]]],3],[[]],[[]],[[]],[[]],[[]],[[[46,[2]]],20],[[[52,[2,17]]],20],[[[49,[[0,[1,2,21]]]],27],20],0,[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]],16],20],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]],32],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],4]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[0,[55,1]]]]]],[[[49,[[0,[1,2,21]]]]],[[0,[34,1]]]],[[[49,[[0,[1,2,21]]]]],[[46,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],28,29],[[46,[[0,[1,2,21]]]]]],[46,15],[52,15],[48,15],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[11,[[51,[50]]]]]]]],[[[49,[[0,[1,2,21]]]]],[[11,[[51,[50]]]]]],[[]],[[]],[[]],[[]],[[]],[[],56],[48,18],0,[48,18],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[49,[[0,[1,2,21]]]]],34],[[],38],[[],38],[[],38],[[],38],[[],38],[[[49,[[0,[1,2,21]]]],16],20],0,[[[49,[[0,[1,2,21]]]]],34],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[[57,54]],[[57,57],[[15,[54,58]]]],[57,4],[57,4],[[]],[[]],[[]],[[]],[[]],[[]],[57,57],[58,58],[59,59],[[]],[[]],[[]],[[57,57],12],[[],57],[[57,57],[[15,[54,58]]]],[[57,57],20],[[58,58],20],[[59,59],20],[[57,22],23],[[58,22],23],[[58,22],23],[[59,22],23],[[59,22],23],[[]],[[[4,[16,60]]],57],[[]],[[]],[[],57],[57,[[15,[[14,[5]]]]]],0,[57,54],[[57,5],[[15,[54,59]]]],[[]],[[]],[[]],[[57,5,5],[[15,[[14,[20]]]]]],0,[[57,57],[[14,[12]]]],[61],[61],[57,[[14,[5]]]],[[]],[[]],[[]],[[],56],[[],56],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[],38],0,[[]],[[]],[[]],0,0,0,0,0,[43,32],[43,55],0,0,[[[45,[2]],[45,[2]]]],[[[43,[[0,[1,2]]]],[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],[43,[[0,[1,2]]]]],[[45,[[0,[1,2]]]]]],[43,43],[[[43,[17]],5,47,24],48],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,27],[[14,[30]]]],[[],[[14,[62]]]],[[],[[14,[63]]]],[[[43,[1]]],[[43,[1]]]],[[[64,[1,1]]],[[64,[1,1]]]],[[[65,[1,1]]],[[65,[1,1]]]],[[[45,[1]]],[[45,[1]]]],[[]],[[]],[[]],[[]],[[[64,[2,2]],64],12],[[[65,[2,2]],65],12],[[],43],[[],45],[64],[[],[[15,[45]]]],[[[43,[[0,[1,2]]]],43],[[45,[[0,[1,2]]]]]],[[43,27],55],[[[43,[19]],43],20],[[[64,[19,19]],64],20],[[[65,[19,19]],65],20],[[[45,[19]],45],20],[[[43,[17]],5,47],55],[[[43,[17]],5,47],55],[43,55],[[[43,[21]],22],23],[[[64,[21,21]],22],23],[[[65,[21,21]],22],23],[[[45,[21]],22],23],[[43,24]],[[45,24]],[[]],[[]],[[]],[[]],[[]],[43,55],[[[43,[17]],5,37],[[14,[8]]]],[[[43,[17]],5,28],14],[[43,37],[[14,[27]]]],[[43,37],[[14,[[64,[27]]]]]],[[43,28],[[14,[29]]]],[[[43,[[0,[1,2]]]],37,[0,[1,2]]],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,[0,[1,2]]],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,18],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,18],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],27],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],27],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],28,29],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],28,29],[[45,[[0,[1,2]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[43,20],[[[45,[2]]],20],[45,20],0,0,[[[43,[17]],5],55],[47,[[43,[[0,[1,2]]]]]],[66,14],0,0,[[43,28],67],[[[64,[35,35]],64],[[14,[12]]]],[[[65,[35,35]],65],[[14,[12]]]],[45,15],[[]],[[]],[[]],[[]],[[[43,[17]],5,47,24],[[15,[48]]]],[[[43,[17]],5,47],55],[[[43,[17]],5,47],55],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5,37],[[15,[[14,[8]]]]]],[[[43,[17]],5,28],[[15,[14]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5],55],0,[[43,37],[[14,[[4,[16,29]]]]]],[[43,37],34],0,[45,55],0,0,[[],38],[[],38],[[],38],[[],38],[[],38],[[]],[[]],[[]],[[]],[[]],[[43,27],66],[[43,37],66]],"p":[[8,"Clone"],[8,"Ord"],[3,"SpkTxOutIndex"],[3,"BTreeMap"],[3,"BlockId"],[3,"ConfirmationHeightAnchor"],[3,"ConfirmationTimeAnchor"],[4,"ChainPosition"],[4,"ConfirmationTime"],[3,"FullTxOut"],[3,"SpkIterator"],[4,"Ordering"],[3,"Persist"],[4,"Option"],[4,"Result"],[15,"u32"],[8,"Anchor"],[15,"u64"],[8,"PartialEq"],[15,"bool"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[8,"FnMut"],[8,"Hash"],[3,"Script"],[3,"Transaction"],[3,"OutPoint"],[3,"TxOut"],[15,"i64"],[15,"usize"],[3,"BTreeSet"],[8,"RangeBounds"],[8,"DoubleEndedIterator"],[8,"PartialOrd"],[8,"ExactSizeIterator"],[3,"Txid"],[3,"TypeId"],[8,"Append"],[3,"IndexedAdditions"],[8,"Indexer"],[3,"IndexedTxGraph"],[3,"TxGraph"],[8,"Default"],[3,"Additions"],[3,"DerivationAdditions"],[8,"IntoIterator"],[3,"Balance"],[3,"KeychainTxOutIndex"],[4,"DescriptorPublicKey"],[4,"Descriptor"],[3,"LocalChangeSet"],[3,"LocalUpdate"],[6,"ChangeSet"],[8,"Iterator"],[3,"String"],[3,"LocalChain"],[3,"UpdateNotConnectedError"],[3,"InsertBlockNotMatchingError"],[3,"BlockHash"],[3,"Demand"],[3,"SignedAmount"],[3,"Amount"],[3,"TxNode"],[3,"CanonicalTx"],[3,"TxDescendants"],[3,"HashSet"],[8,"ChainOracle"],[8,"PersistBackend"],[8,"DescriptorExt"],[8,"ForEachTxOut"],[13,"Confirmed"],[13,"Unconfirmed"]]},\ +"bdk":{"doc":"bdk","t":[13,13,13,13,13,4,13,3,13,13,13,13,13,2,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,2,13,13,13,3,13,2,13,4,8,2,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,0,14,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,0,11,12,11,11,11,11,0,12,11,12,12,11,11,11,2,11,2,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,11,12,10,5,11,11,11,11,11,11,11,0,11,12,12,12,12,12,12,13,6,4,2,4,3,6,8,13,6,8,16,6,4,3,13,13,2,8,4,13,13,6,13,13,4,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,5,5,5,5,13,13,4,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,4,13,3,6,13,13,6,13,13,13,13,13,13,13,13,13,13,13,4,3,4,13,13,13,13,13,4,4,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,3,3,3,8,6,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,16,16,8,4,13,8,8,3,8,13,13,13,16,4,6,13,13,13,16,13,3,13,8,4,13,13,13,3,3,4,3,13,6,13,13,13,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,10,11,12,12,11,11,11,11,11,11,10,12,11,11,11,11,10,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,10,10,10,4,3,3,6,13,13,4,8,13,13,4,13,13,6,3,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,10,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,12,11,11,11,11,11,11,5,12,12,3,13,8,3,6,4,3,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,5,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,3,6,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,13,13,13,13,13,13,8,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,4,3,3,3,13,4,8,13,11,12,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,10,11,12,11,12,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,13,3,13,13,4,3,13,13,3,8,4,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Bip32","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","Descriptor","Error","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","HdKeyPaths","InsufficientFunds","Internal","InvalidOutpoint","InvalidPolicyPathError","IrreplaceableTransaction","Key","KeychainKind","Local","LocalUtxo","Miniscript","MiniscriptPsbt","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","Psbt","SignOptions","Signer","SpendingPolicyRequired","TransactionConfirmed","TransactionDetails","TransactionNotFound","TxBuilder","UnknownUtxo","Utxo","Vbytes","Wallet","WeightedUtxo","as_byte","as_ref","as_sat_per_vb","base32_len","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","check_base32","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","confirmation_time","confirmation_time","default","default_min_relay_fee","derivation_index","descriptor","descriptor","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","fee","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_kvb","from_sat_per_kwu","from_sat_per_vb","from_vb","from_wu","hash","hash","into","into","into","into","into","into","into","is_spent","keychain","keys","outpoint","outpoint","partial_cmp","partial_cmp","partial_cmp","provide","psbt","received","sat_per_kwu","satisfaction_weight","sent","serialize","serialize","serialize","signer","sub","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","transaction","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","txid","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","utxo","vbytes","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","available","needed","required","required","outpoint","psbt_input","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","DescriptorXKey","ExtendedDescriptor","ExtractPolicy","Hardened","HdKeyPaths","IntoWalletDescriptor","Key","KeyMap","Legacy","Miniscript","None","Pkh","Policy","ScriptContext","Segwitv0","Sh","Single","TapKeyOrigins","Tr","Unhardened","Wildcard","Wpkh","Wsh","XPub","address","as_enum","as_enum","as_inner","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","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_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","contains_raw_pkh","derivation_path","derive","derived_descriptor","derived_descriptor","desc_type","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from_ast","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","hash","hash","into","into","into","into","into","into","into_inner","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_non_malleable","iter","iter_pk","lift","lift","lift_check","matches","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","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","origin","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","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","template","to_owned","to_owned","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_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","vzip","vzip","wildcard","within_resource_limits","xkey","calc_checksum","calc_checksum_bytes","get_checksum","get_checksum_bytes","Base58","Bip32","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","provide","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","provide","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","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","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","encode","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","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_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_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","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","name_str","new","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","provide","sanity_check","satisfy","script_size","sig_type","sorted_node","test_networks","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","AddressIndex","AddressInfo","Balance","ChangeSet","ConfirmationHeightCannotBeGreaterThanTip","Descriptor","InsertTxError","IsDust","LastUnused","New","NewError","Peek","Persist","Update","Wallet","add","add_signer","address","apply_update","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","cancel_tx","checkpoints","clone","clone_into","coin_selection","commit","confirmed","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","eq","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_internal_address","get_psbt_input","get_signers","get_tx","get_utxo","immature","index","insert_checkpoint","insert_tx","into","into","into","into","into","into","is_dust","is_mine","keychain","keychains","latest_checkpoint","list_unspent","local_chain","network","new","new_no_persist","next_derivation_index","policies","provide","public_descriptor","secp_ctx","serialize","sign","signer","spk_index","spks_of_all_keychains","spks_of_keychain","staged","to_owned","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","tip_height","tx_height","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Excess","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","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","from","from","from","from","from","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","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","amount","change_fee","dust_threshold","fee","remaining_amount","FullyNodedExport","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","from","from_str","into","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Segwitv0","SighashError","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","clone_into","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","eq","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","provide","remove","remove_partial_sigs","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_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","Bip69Lexicographic","BumpFee","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","CreateTx","OnlyChange","Shuffle","TxBuilder","TxBuilderContext","TxOrdering","Untouched","add_data","add_foreign_utxo","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","allow_shrinking","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","current_height","default","default","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_owned","to_owned","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"],"q":["bdk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Error","","","","bdk::Utxo","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::checksum","","","","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::psbt","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::InsertTxError","","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::coin_selection::Excess","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerContext","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["BIP32 error","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Error related to the parsing and usage of descriptors","Errors that can be thrown by the Wallet","External keychain, used for deriving recipient addresses.","Fee rate","When bumping a tx the fee rate requested is lower than …","Node doesn’t have data to estimate a fee rate","When bumping a tx the absolute fee requested is lower than …","A UTXO owned by another wallet.","Generic error","","Wallet’s UTXO set is not enough to cover recipient’s …","Internal keychain, used for deriving change addresses.","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript error","Miniscript PSBT error","In order to use the TxBuilder::add_global_xpubs option …","Cannot build a tx without recipients","manually_selected_only option is selected but no utxo has …","Output created is under the dust limit, 546 satoshis","Partially signed bitcoin transaction error","","Signing error","Spending policy is not compatible with this KeychainKind","Happens when trying to bump a transaction that is already …","A wallet transaction","Thrown when a tx is not found in the internal database","","Happens when trying to spend an UTXO that is not in the …","An unspent transaction output (UTXO).","Trait implemented by types that can be used to measure …","","A Utxo with its satisfaction_weight.","Return KeychainKind as a byte","","Return the value as satoshi/vbyte","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The confirmation time for transaction containing this utxo","If the transaction is confirmed, contains height and Unix …","","Create a new FeeRate with the default min relay fee value","The derivation index for the script pubkey in the wallet","Descriptors","Macro to write full descriptors with code","","","","","","","","","","Fee value in sats if it was available.","Calculate absolute fee in Satoshis using size in virtual …","Calculate absolute fee in Satoshis using size in weight …","","","","","","","","","Macro to write descriptor fragments with code","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Calculate fee rate from fee and vbytes.","Calculate fee rate from fee and weight units (wu).","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Whether this UTXO is spent or not","Type of keychain","Key formats","Get the location of the UTXO","Reference to a transaction output","","","","","Additional functions on the rust-bitcoin …","Received value (sats) Sum of owned outputs of this …","Return the value as satoshi/kwu","The weight of the witness data and scriptSig expressed in …","Sent value (sats) Sum of owned inputs of this transaction.","","","","","","","","","","","","","","Optional transaction","","","","","","","","","","","","","","","Transaction id","Get the TxOut of the UTXO","Transaction output","","","","","","","","The UTXO","Convert weight units to virtual bytes.","Get the version of BDK at runtime","","","","","","","","Wallet","","Sats available for spending","Sats needed for some transaction","Required fee rate (satoshi/vbyte)","Required fee absolute value (satoshi)","The location of the output.","The information about the input we require to add it to a …","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Script descriptor","","The descriptor pubkey, either a single pubkey or an xpub.","An extended key with origin, derivation path, and wildcard.","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Unhardened wildcard, e.g. *h","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","The consensus key associated with the type. Must be a …","Alias type for a map of public key to secret key","Legacy ScriptContext To be used as P2SH scripts For …","Top-level script AST type","No wildcard","Pay-to-PubKey-Hash","","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Single public key.","Alias for the type of maps that represent taproot key …","Pay-to-Taproot","Unhardened wildcard, e.g. *","Whether a descriptor has a wildcard in it","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Extended public key (xpub).","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","Replaces all wildcards (i.e. /*) in the descriptor with a …","","","","","","","","","","","","","Enumerates all child nodes of the current AST node (self) …","","Depending on script Context, some of the Terminals might …","","","Depending on script Context, some of the script resource …","","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","","","Policy rules at the Miniscript satisfaction time. It is …","","","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","","","Check whether the given satisfaction is valid under the …","","","Descriptor checksum","","","","","","","","","","","","","","","","","","","Whether the given miniscript contains a raw pkh fragment","The derivation path","Deprecated name for [at_derivation_index].","Convert all the public keys in the descriptor to …","Convert all the public keys in the descriptor to …","Get the DescriptorType of Descriptor","","","","Encode as a Bitcoin script","","","","","","","Descriptor errors","Computes the the underlying script before any hashing is …","Additional information helpful for extra analysis.","Check whether the miniscript follows the given Extra …","Extract the spending policy","","","Utility method for deriving the descriptor at each index …","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Add type information(Type and Extdata) to Miniscript based …","","Parse a Miniscript from string and perform sanity checks …","Attempt to parse an Miniscripts that don’t follow the …","Attempt to parse an insane(scripts don’t clear sanity …","Parse an expression tree into a descriptor.","Parse an expression tree into a Miniscript. As a general …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns satisfying non-malleable witness and scriptSig to …","Returns a possilbly mallable satisfying non-malleable …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","Whether or not the descriptor has any wildcards i.e. /*.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Extracts the AstElem representing the root of the …","Convert to wallet descriptor","","Whether or not the descriptor has any wildcards","Whether the miniscript is malleable","Creates a new Iter iterator that will iterate over all …","Creates a new PkIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","Compares this key with a keysource and returns the …","Depending on script context, the size of a satifaction …","","","Maximum size, in bytes, of a satisfying witness. For …","Computes an upper bound on the weight of a satisfying …","Maximum number of witness elements used to satisfy the …","Local helper function to display error messages with …","","","Create a new bare descriptor from witness script Errors …","Create a new pk descriptor","Create a new PkH descriptor","Create a new sh for a given redeem script Errors when …","Create a new sh sortedmulti descriptor with threshold k …","Create a new sh wrapper for the given wpkh descriptor","Create a new sh wrapper for the given wsh descriptor","Create a new sh wrapped wpkh from Pk. Errors when …","Create a new sh wrapped wsh descriptor with witness script …","Create a new sh wrapped wsh sortedmulti descriptor from …","Create new tr descriptor Errors when miniscript exceeds …","Create a new Wpkh descriptor Will return Err if …","Create a new wsh descriptor from witness script Errors …","Create a new wsh sorted multi descriptor Errors when …","A node in the Abstract Syntax Tree(","Origin information","Other top level checks that are context specific","Attempt to parse a Script into Miniscript representation.","Parse a descriptor that may contain secret keys","Attempt to parse an insane(scripts don’t clear sanity …","Attempt to parse an miniscript with extra features that …","","","","","","","Get the len of public key when serialized based on context …","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Checks whether the descriptor is safe.","Check whether the underlying Miniscript is safe under the …","Attempts to produce a non-malleable satisfying witness and …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Computes the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor.","Size, in bytes of the script-pubkey. If this Miniscript is …","","","The type of signature required for satisfaction","","","Descriptor templates","","","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Converts a descriptor using abstract keys to one using …","Translates a struct from one generic to another where the …","","","","","","","","","","","","","The correctness and malleability type information for the …","","","","","","","Computes the scriptSig that will be in place for an …","","","","","","","Whether the descriptor is wildcard","Whether the miniscript can exceed the resource …","The extended key","Compute the checksum of a descriptor, excludes any …","Compute the checksum bytes of a descriptor, excludes any …","Compute the checksum of a descriptor","Compute the checksum bytes of a descriptor","Error during base58 decoding","BIP32 error","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid byte found in the descriptor checksum","The provided descriptor doesn’t match its checksum","Invalid HD Key path, such as having a wildcard but a …","Error thrown while working with keys","Miniscript error","Key-related error","Error while extracting and manipulating policies","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","Absolute timeclock timestamp","Can not add to an item that is Satisfaction::None or …","Can not add to an item that is …","Options to build the satisfaction field in the policy","Can satisfy the policy item","An extra condition that must be satisfied but that is out …","Type for a map of sets of Condition items keyed by each set…","ECDSA Signature for a raw public key","An extended key fingerprint","Type for a map of folded sets of Condition items keyed by …","SHA256 then RIPEMD160 preimage hash","Double SHA256 preimage hash","Incompatible conditions (not currently used)","Index out of range for an item to satisfy a …","Can not merge CSV or timelock values unless both are less …","Multi-signature public keys with threshold count","Cannot satisfy or contribute to the policy item","Don’t generate satisfaction field","Not enough items are selected to satisfy a …","Only a partial satisfaction of some kind of threshold …","Can reach the threshold of some kind of threshold policy","A unique identifier for a key","Descriptor spending policy","Errors that can happen while extracting and manipulating …","Analyze the given PSBT to check for existing signatures","Like Psbt variant and also check for expired timelocks","A legacy public key","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","Schnorr Signature for a raw public key","SHA256 preimage hash","Threshold items with threshold count","A x-only public key","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the SatisfiableItem is a leaf item","Returns whether the Satisfaction is a leaf item","Returns true if there are no extra conditions to verify","Type of this policy node","","","Return whether or not a specific path in the policy tree …","How much a given PSBT already satisfies this policy node …","","","","","","Optional timelock condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current blockchain height","The highest confirmation height between the inputs CSV …","Given PSBT","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","The items that can be satisfied by the descriptor or are …","The items that can be satisfied by the descriptor","Threshold","Threshold","Total number of items","Total number of items","Whether the items are sorted in lexicographic order (used …","Whether the items are sorted in lexicographic order (used …","The digest value","The digest value","The digest value","The digest value","The policy items","The raw public key or extended key fingerprint","The required threshold count","The required threshold count","The timelock value","The timelock value","BIP44 template. Expands to pkh(key/44'/{0,1}'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to …","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/{0,1}'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(key/{0,1}/*)","BIP86 template. Expands to tr(key/86'/{0,1}'/0'/{0,1}/*)","BIP86 public template. Expands to tr(key/{0,1}/*)","Trait for descriptor templates that can be built into a …","Type alias for the return type of DescriptorTemplate, …","P2PKH template. Expands to a descriptor pkh(key)","P2TR template. Expands to a descriptor tr(key)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The descriptor pubkey, either a single pubkey or an xpub.","The descriptor secret key, either a single private key or …","Type specifying the amount of entropy required e.g. [u8;32]","Returned error in case of failure","Trait that adds extra useful methods to ScriptContexts","Enum for extended keys that can be either xprv or xpub","A bitcoin public key (compressed or uncompressed).","Trait that allows generating a key with the default options","Trait for keys that can be generated","Output of a GeneratableKey key generation","Trait for objects that can be turned into a public or …","The key has an invalid checksum","The key is not valid for the given network","The key cannot exist in the given script context","The consensus key associated with the type. Must be a …","Errors thrown while working with keys","Alias type for a map of public key to secret key","Legacy scripts","Custom error message","Miniscript error","Extra options required by the generate_with_entropy","A private extended key, aka an xprv","Options for generating a PrivateKey","A public extended key, aka an xpub","The ScriptContext for Miniscript. Additional type …","Enum representation of the known valid ScriptContexts","Segwitv0 scripts","Single public key.","Single private key.","A descriptor bitcoin::PrivateKey with optional origin …","A descriptor SinglePubKey with optional origin information.","Single public key without any origin or range information.","Contents of a “sortedmulti” descriptor","Taproot scripts","Set of valid networks for a key","An xonly public key.","Extended private key (xpriv).","Extended public key (xpub).","Create a set containing mainnet, testnet, signet, and …","Returns the ScriptContext as a ScriptContextEnum","Replaces any wildcard (i.e. /*) in the key with a …","","","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","Deprecated name of [at_derivation_index].","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create an instance given a public key and a set of valid …","Create an instance given a secret key and a set of valid …","","","Parse an expression tree into a SortedMultiVec","Full path, from the master key","Generate a key given the options with a random entropy","Generate a key with the default options and a random …","Generate a key given the extra options and the entropy","Generate a key with the default options and a given entropy","Return whether or not the key contains the private data","Whether or not the key has a wildcard","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Turn the key into a DescriptorKey within the requested …","Consume self and turn it into a DescriptorKey by adding …","","","","","","Consume self and turn it into an ExtendedKey","","","Consumes self and returns the key","Transform the ExtendedKey into an ExtendedPrivKey for the …","Transform the ExtendedKey into an ExtendedPubKey for the …","Whether or not the key has a wildcard","Returns whether the script context is Legacy","Returns whether the script context is …","Returns whether the script context is Segwitv0","Returns whether the script context is …","Returns whether the script context is Tap, aka Taproot or …","Returns whether the script context is …","","","signatures required","The public key.","The private key.","","Create a set only containing mainnet","The fingerprint of the master key associated with this …","Depending on script context, the size of a satifaction …","Maximum size, in bytes, of a satisfying witness. In …","Maximum number of witness elements used to satisfy the …","Compute the intersection of two sets","Local helper function to display error messages with …","Create a new instance of SortedMultiVec given a list of …","Origin information (fingerprint and derivation path).","Origin information (fingerprint and derivation path).","Other top level checks that are context specific","Override the computed set of valid networks","","","","","Get the len of public key when serialized based on context …","public keys inside sorted Multi","","utility function to sanity a sorted multi vec","Attempt to produce a satisfying witness for the witness …","Size, in bytes of the script-pubkey. If this Miniscript is …","The type of signature required for satisfaction","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","Returns the public version of this key.","","","","","Check top level consensus rules.","Check whether the top-level is type B","This will panic if fpk returns an uncompressed key when …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Trait to add functions to extract utxos and calculate fees.","The total transaction fee amount, sum of input amounts …","The transaction’s fee rate. This value will only be …","Get the TxOut for the specified input index, if it doesn’…","The address index selection strategy to use to derived an …","A derived address and the index it was found at. For …","Balance, differentiated into various categories.","The changeset produced internally by Wallet when mutated.","The error variant that occurs when the caller attempts to …","There was problem with the descriptors passed in","An error that may occur when inserting a transaction into …","Trait to check if a value is below the dust limit. We are …","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Error returned from Wallet::new","Return the address for a specific descriptor index. Does …","We were unable to load the wallet’s data from the …","The update to a Wallet used in Wallet::apply_update. This …","A Bitcoin wallet","","Add an external signer","Address","Applies an update to the wallet and stages the changes …","","","","","","","","","","","","","","Bump the fee of a transaction previously created with this …","Start building a transaction.","Informs the wallet that you no longer intend to broadcast …","Get all the checkpoints the wallet is currently storing …","","","Coin selection","Commits all curently staged changed to the persistence …","Confirmed and immediately spendable balance","","","The derivation index of this wallet. It will return None …","Finds how the wallet derived the script pubkey spk.","Return the checksum of the public descriptor associated to …","","","","Wallet export","Finalize a PSBT, i.e., for each input determine if …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return a derived address using the external descriptor, …","Return the balance, separated into available, …","Returns the descriptor used to create addresses for a …","Return a derived address using the internal (change) …","get the corresponding PSBT Input for a LocalUtxo","Get the signers","Return a single transactions made and received by the …","Returns the utxo owned by this wallet corresponding to …","All coinbase outputs not yet matured","Child index of this address","Add a new checkpoint to the wallet’s internal view of …","Add a transaction to the wallet’s internal view of the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Check whether or not a value is below dust limit","Return whether or not a script is part of this wallet …","Type of keychain","Iterator over all keychains in this wallet","Returns the latest checkpoint.","Return the list of unspent outputs of this wallet","Get a reference to the inner LocalChain.","Get the Bitcoin network the wallet is using.","Create a wallet from a descriptor (and an optional …","Creates a wallet that does not persist data.","The index of the next address that you would get if you …","Return the spending policies for the wallet’s descriptor","","Return the “public” version of the wallet’s …","Return the secp256k1 context used for all signing …","","Sign a transaction with all the wallet’s signers, in the …","Generalized signers","Get a reference to the inner KeychainTxOutIndex.","Returns a iterators of all the script pubkeys for the …","Gets an iterator over all the script pubkeys in a single …","Returns the changes that will be staged with the next call …","","","","","Get the whole balance visible to the wallet.","Iterate over the transactions in the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","","","","","","","Transaction builder","Get a reference to the inner TxGraph.","","","","","","","Unconfirmed UTXOs received from an external wallet","","","","","","","Deterministically generate a unique name given the …","The internal chain’s tip height.","The introduced transaction’s confirmation height.","Branch and bound coin selection","It’s possible to create spendable output from excess …","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Remaining amount after performing coin selection","Simple and dumb coin selection","It’s not possible to create spendable output from excess …","OldestFirstCoinSelection always picks the utxo with the …","","","","","","","","","","","","","","","","","Perform the coin selection","","","","Decide if change can be created","","","","Remaining amount after deducing fees and outgoing outputs","Total fee amount for the selected utxos in satoshis","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The total value of the inputs selected from the local …","Create new instance with target size for change output","List of outputs selected for use as inputs","The total value of the inputs selected.","","","","","","","","","","","","","","","","","","","","","","","","Effective amount available to create change after …","The calculated fee for the drain TxOut with the selected …","Threshold to consider amount as dust for this particular …","The deducted change output fee","Exceeding amount of current selection over outgoing value …","Structure that contains the export of a wallet","Alias for FullyNodedExport","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","Return the external descriptor","","Export a wallet","","Returns the argument unchanged.","","Calls U::from(self).","Arbitrary label for the wallet","","","","","","","The signer will sign all the leaves it has a key for.","Dummy identifier","The signer won’t sign the specified leaves.","The fingerprint of a BIP32 extended key","The signer won’t sign leaves other than the ones …","Input index is out of range","PSBT Input signer","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","Invalid SIGHASH for the signing context in use","Legacy context","The fingerprint and derivation path are missing from the …","The private key is missing for the required public key","The non_witness_utxo field of the transaction is required …","The witness_script field of the transaction is required to …","The witness_utxo field of the transaction is required to …","The psbt contains a non-SIGHASH_ALL sighash in one of its …","The signer won’t sign any leaf.","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Segwit v0 context (BIP 143)","Error while computing the hash to sign","Options for a software signer","Common signer methods","Signing context","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Wrapper structure to pair a signer with its context","Container for multiple signers","Taproot context (BIP 340)","Customize which taproot script-path leaves the signer …","PSBT signer","The user canceled the operation","Adds an external signer to the container for the specified …","Whether the signer should use the sighash_type set in the …","Whether we should grind ECDSA signature to ensure signing …","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","Build a new signer container from a KeyMap","","","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Return the SignerId for this signer","","","Returns the list of identifiers of all the signers in the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Create a wrapped signer from a signer and a context","Default constructor","","","","Removes a signer from the container and returns it","Whether to remove partial signatures from the PSBT inputs …","Sign a single psbt input","","","Sign all the inputs of the psbt","","Whether we should try to sign a taproot transaction with …","Returns the list of signers in the container, sorted by …","Specifies which Taproot script-spend leaves we should sign …","","","","","","","","","","Whether the signer should trust the witness_utxo, if the …","Whether to try finalizing the PSBT after the inputs are …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether the signer can sign for the internal key or not","BIP69 / Lexicographic","Marker type to indicate the TxBuilder is being used to …","Use both change and non-change outputs (default)","Only use non-change outputs (see …","Policy regarding the use of change outputs when creating a …","Marker type to indicate the TxBuilder is being used to …","Only use change outputs (see TxBuilder::only_spend_change)","Randomized (default)","A transaction builder","Context in which the TxBuilder is valid","Ordering of the transaction’s inputs and outputs","Unchanged","Add data as an output, using OP_RETURN","Add a foreign UTXO i.e. a UTXO not owned by this wallet.","Fill-in the PSBT_GLOBAL_XPUB field with the extended keys …","Add a recipient to the internal list","Add a utxo to the internal list of unspendable utxos","Add a utxo to the internal list of utxos that must be spent","Add the list of outpoints to the internal list of UTXOs …","Set whether or not the dust limit is checked.","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","Set the current blockchain height.","","","","","Do not spend change outputs","Sets the address to drain excess coins to.","Spend all the available inputs. This respects filters like …","Enable signaling RBF","Enable signaling RBF with a specific nSequence value","","","Set an absolute fee The fee_absolute method refers to the …","Set a custom fee rate","Finish building the transaction.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Fill-in the psbt::Output::redeem_script and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Only spend utxos added by add_utxo.","Use a specific nLockTime while creating the transaction","Only spend change outputs","Only Fill-in the psbt::Input::witness_utxo field when …","Choose the ordering for inputs and outputs of the …","","","Set the policy path to use while creating the transaction …","Replace the recipients already added with a new list","Sign with a specific sig hash","Sort transaction inputs and outputs by TxOrdering variant","","","","","","","","","","","","","","","","","","","","","Replace the internal list of unspendable utxos with a new …","Build a transaction with a specific version","","","","",""],"i":[17,17,17,17,17,0,1,0,17,17,17,12,17,0,17,1,17,17,17,17,0,12,0,17,17,17,17,17,17,17,0,17,17,17,0,17,0,17,0,0,0,0,1,1,3,1,17,1,3,10,11,12,13,17,1,3,10,11,12,13,0,1,1,3,10,11,12,13,1,3,10,11,12,13,1,13,10,13,3,3,10,0,0,1,10,13,1,3,10,11,12,13,13,3,3,17,17,1,3,10,11,12,13,0,17,17,17,17,17,17,17,17,1,3,10,11,12,13,3,3,3,3,3,3,1,10,17,1,3,10,11,12,13,10,10,0,12,10,1,3,13,17,0,13,3,11,13,1,10,13,0,3,0,1,3,10,11,12,13,17,13,17,1,3,10,11,12,13,17,1,3,10,11,12,13,13,12,10,17,1,3,10,11,12,13,11,174,0,17,1,3,10,11,12,13,0,1,175,175,176,177,178,178,34,0,0,0,0,0,0,0,45,0,0,58,0,0,0,45,34,0,0,0,34,40,0,34,45,0,34,34,40,34,46,47,38,34,44,45,34,46,47,38,44,45,34,46,47,38,38,0,58,46,47,58,47,58,58,46,47,58,46,47,58,58,46,47,58,46,47,0,44,45,34,46,47,38,44,45,34,46,47,38,44,45,34,46,47,38,38,44,34,34,34,34,34,38,34,38,44,45,34,46,47,38,0,34,38,38,179,34,38,34,44,45,34,34,46,47,38,38,34,38,44,45,34,34,34,34,34,34,34,46,47,38,38,34,38,38,38,34,38,38,38,34,34,38,38,34,44,45,34,46,47,38,44,45,34,46,47,38,38,149,68,34,38,38,38,34,38,38,44,58,46,47,38,34,38,58,46,47,34,34,34,34,34,34,34,34,34,34,34,34,34,34,38,44,58,38,34,38,38,44,45,34,46,47,38,58,46,47,0,38,34,38,34,38,38,34,34,38,34,38,58,46,47,0,44,45,34,46,47,38,34,38,34,58,58,34,38,44,45,34,46,47,38,44,45,34,46,47,38,38,44,45,34,46,47,38,34,44,45,34,46,47,38,44,38,44,0,0,0,0,22,22,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,83,26,26,0,84,0,0,83,82,0,83,83,26,26,26,83,84,56,26,84,84,0,0,0,56,56,82,83,83,0,0,83,83,83,82,82,83,84,57,85,26,56,82,83,84,57,85,26,56,82,83,84,57,85,56,82,83,84,57,85,56,57,85,85,82,83,84,57,85,26,82,83,84,57,85,26,26,56,82,83,84,84,57,57,85,26,56,57,82,85,83,57,82,83,84,57,85,26,56,83,84,85,57,85,26,57,57,82,83,84,57,85,85,82,83,84,57,85,56,26,82,83,84,57,85,26,56,82,83,84,57,85,26,56,82,83,84,57,85,26,56,82,83,84,57,85,26,56,180,180,180,181,182,183,182,183,182,183,182,183,182,183,184,185,186,187,188,189,189,188,190,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,192,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,87,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,89,90,91,93,95,96,97,98,99,100,101,102,20,0,0,0,0,193,193,0,0,109,0,0,0,0,20,20,20,58,0,0,37,20,20,193,115,0,115,0,0,37,40,112,0,0,0,0,37,0,109,112,40,0,194,40,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,58,58,58,58,58,58,58,58,105,37,106,107,40,108,109,105,37,106,107,40,108,109,107,40,108,109,106,106,105,40,107,37,107,40,108,109,111,37,106,20,20,107,107,40,40,112,112,108,113,109,107,115,115,115,105,111,37,106,20,20,20,107,40,40,112,108,113,109,111,111,40,112,107,40,193,195,193,195,115,40,107,40,108,109,115,105,111,37,106,20,107,40,112,108,113,109,88,94,105,105,111,40,112,94,115,105,105,115,115,40,194,37,194,37,194,37,40,40,107,108,113,107,0,40,58,107,107,0,58,107,108,113,58,111,107,40,108,109,58,107,20,107,107,107,58,107,0,105,37,106,107,40,108,109,112,20,107,40,112,58,58,107,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,115,105,111,37,106,20,107,40,112,108,113,109,0,196,196,196,0,0,0,0,140,139,0,0,138,138,0,138,139,0,0,120,121,135,121,121,120,121,138,135,139,140,120,121,138,135,139,140,121,121,121,121,120,120,0,121,120,120,135,121,121,121,120,120,135,0,121,120,120,121,138,135,135,139,139,140,120,121,138,135,139,140,121,121,121,121,121,121,121,121,120,135,121,121,120,121,138,135,139,140,197,121,135,121,121,121,121,121,121,121,121,121,139,121,121,120,121,0,121,121,121,121,120,120,135,139,120,121,120,120,120,121,138,135,139,140,120,121,138,135,139,140,0,121,120,121,138,135,139,140,120,120,121,138,135,139,140,0,198,198,0,156,0,0,0,0,0,156,0,156,155,152,153,154,156,155,152,153,154,152,153,154,152,153,154,167,152,153,154,0,152,153,154,155,155,156,155,152,153,154,156,155,152,153,154,156,155,152,153,154,155,154,155,155,152,153,154,156,155,152,153,154,156,155,152,153,154,156,155,152,153,154,156,155,152,153,154,199,200,200,199,200,0,0,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,163,158,163,158,163,25,0,25,25,25,160,25,25,25,25,25,25,163,158,160,25,0,0,0,0,0,0,0,0,160,0,0,25,55,137,137,55,137,158,25,160,162,122,55,137,163,158,25,160,162,122,55,137,163,55,158,25,160,162,122,55,137,163,158,25,160,162,122,55,137,163,158,122,122,55,137,163,162,201,162,162,158,25,160,122,163,55,158,25,25,160,162,122,55,137,163,158,158,158,25,25,160,162,122,55,137,163,158,201,162,162,55,158,25,160,162,122,55,137,163,162,55,158,122,25,55,137,202,162,162,123,162,137,55,137,158,25,160,162,122,55,137,163,25,137,137,158,25,160,162,122,55,137,163,158,25,160,162,122,55,137,163,158,25,160,162,122,55,137,163,158,25,160,162,122,55,137,163,203,170,0,169,169,0,0,169,170,0,0,0,170,131,131,131,131,131,131,131,131,131,132,130,131,170,169,132,130,131,170,169,131,132,130,131,170,169,132,130,131,170,169,170,169,131,131,132,130,170,169,131,131,131,131,131,170,169,131,131,131,132,130,131,170,169,132,130,131,170,169,170,169,131,132,130,131,170,169,131,131,131,131,131,170,169,131,131,131,170,132,130,131,170,169,132,130,131,170,169,132,130,131,170,169,132,130,131,170,169,131,131,132,130,131,170,169],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[1],[3,4],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],[[9,[[8,[6,7]]]]]],[1,1],[3,3],[10,10],[11,11],[12,12],[13,13],[[]],[[]],[[]],[[]],[[]],[[]],[[1,1],14],[[13,13],14],0,0,[[],3],[[],3],0,0,0,[[],[[9,[1]]]],[[],[[9,[10]]]],[[],[[9,[13]]]],[[1,1],15],[[3,3],15],[[10,10],15],[[11,11],15],[[12,12],15],[[13,13],15],0,[[3,5],16],[[3,5],16],[[17,18],19],[[17,18],19],[[1,18],19],[[3,18],19],[[10,18],19],[[11,18],19],[[12,18],19],[[13,18],19],0,[20,17],[21,17],[22,17],[23,17],[24,17],[25,17],[[]],[26,17],[[]],[[]],[[]],[[]],[[]],[[]],[4,3],[4,3],[4,3],[4,3],[[16,5],3],[[16,5],3],[1],[10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[12,27],0,[[1,1],[[28,[14]]]],[[3,3],[[28,[14]]]],[[13,13],[[28,[14]]]],[29],0,0,[3,4],0,0,[1,9],[10,9],[13,9],0,[[3,3]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],0,[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[12,31],0,[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],0,[[],5],[[],33],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],9],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[34,35],[[9,[36,21]]]],[[],37],[[],37],[38,39],[[[34,[40]],41],[[34,[42]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[38,[[8,[38,7]]]],0,[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[39,[[9,[43]]]],[39,[[9,[43]]]],[39,[[9,[43]]]],[[],[[9,[43]]]],[[],[[9,[43]]]],[[],[[9,[43]]]],0,[44,44],[45,45],[34,34],[46,46],[47,47],[38,38],[[]],[[]],[[]],[[]],[[]],[[]],[[44,44],14],[[45,45],14],[[34,34],14],[[46,46],14],[[47,47],14],[[38,38],14],[38,15],0,[[[34,[40]],41],[[34,[42]]]],[[[34,[42]],48],[[9,[[34,[49]],50]]]],[[[34,[40]],48,41],[[9,[[34,[49]],50]]]],[34,51],[[],[[9,[34]]]],[[],[[9,[38]]]],[[[34,[40]]],16],[38,52],[[44,44],15],[[45,45],15],[[34,34],15],[[46,46],15],[[47,47],15],[[38,38],15],0,[34,[[9,[52,21]]]],0,[[38,53],[[9,[54]]]],[[55,56,48],[[9,[[28,[57]],22]]]],[[[34,[40]],55,56,48],[[9,[[28,[57]],22]]]],[[[38,[40,58]],55,56,48],[[9,[[28,[57]],22]]]],[[[34,[40]],48,52,[59,[41]]],[[9,[28,50]]]],[[44,18],[[9,[60]]]],[[45,18],[[9,[60]]]],[[34,18],[[9,[60]]]],[[34,18],[[9,[60]]]],[[46,18],[[9,[60]]]],[[47,18],[[9,[60]]]],[[38,18],[[9,[60]]]],[[38,18],[[9,[60]]]],[34,15],[38,15],[[]],[[]],[61,34],[62,34],[63,34],[64,34],[65,34],[66,34],[[]],[[]],[[]],[[]],[39,[[9,[38,21]]]],[33,[[9,[34,21]]]],[33,[[9,[38,21]]]],[[33,53],[[9,[38,21]]]],[33,[[9,[38,21]]]],[67,[[9,[34,21]]]],[67,[[9,[38,21]]]],[[38,5],[[28,[38]]]],[[38,5],28],[34,[[9,[21]]]],[34,[[9,[21]]]],[38,15],[38,15],[[[34,[40]]],15],[44],[45],[34],[46],[47],[38],[[]],[[]],[[]],[[]],[[]],[[]],[38,39],[[48,35],[[9,[22]]]],[[68,48,35],[[9,[22]]]],[[[34,[40]]],15],[38,15],[38,69],[38,70],[34,[[9,[71,21]]]],[38,[[9,[71,21]]]],[38,[[9,[72]]]],[[44,48],[[28,[73]]]],[38,[[28,[5]]]],[38,[[28,[5]]]],[38,[[28,[5]]]],[38,[[9,[5,21]]]],[34,[[9,[5,21]]]],[38,[[9,[5,21]]]],[[],33],[[],33],[[],33],[[[38,[74]]],[[9,[34,21]]]],[[],34],[[],34],[[[38,[46]]],[[9,[34,21]]]],[[5,[8,[7]]],[[9,[34,21]]]],[62,34],[64,34],[[],[[9,[34,21]]]],[[[38,[47]]],[[9,[34,21]]]],[[5,[8,[7]]],[[9,[34,21]]]],[[[28,[75]]],[[9,[34,21]]]],[[],[[9,[34,21]]]],[[[38,[47]]],[[9,[34,21]]]],[[5,[8,[7]]],[[9,[34,21]]]],0,0,[38,[[9,[21]]]],[52,[[9,[38,21]]]],[[48,33],[[9,[21]]]],[52,[[9,[38,21]]]],[[52,53],[[9,[38,21]]]],[[44,44],[[28,[14]]]],[[45,45],[[28,[14]]]],[[34,34],[[28,[14]]]],[[46,46],[[28,[14]]]],[[47,47],[[28,[14]]]],[[38,38],[[28,[14]]]],[[],5],[[],5],[[],5],0,[38,15],[34,[[9,[21]]]],[38,[[9,[54]]]],[[34,76],[[9,[21]]]],[38,[[9,[[8,[[8,[2,7]],7]],21]]]],[38,[[9,[[8,[[8,[2,7]],7]],21]]]],[34,[[9,[52,21]]]],[34,52],[38,5],[34,9],[38,9],[[],77],[[],77],[[],77],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],[[],30],[[[34,[40]],78],30],[38,[[9,[21]]]],[38,[[9,[21]]]],[34,9],[38,9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[34,52],[[]],[[]],[[]],[[]],[[]],[[]],0,[38,15],0,[33,[[9,[30,22]]]],[33,[[9,[22]]]],[33,[[9,[30,22]]]],[33,[[9,[22]]]],0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[22,18],19],[[22,18],19],[79,22],[23,22],[20,22],[21,22],[[]],[80,22],[26,22],[81,22],[[]],[29],[[],30],[[],9],[[],9],[[],32],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[82,82],[83,83],[84,84],[57,57],[85,85],[56,56],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],85],[[82,82],15],[[83,83],15],[[84,84],15],[[57,57],15],[[85,85],15],[[26,26],15],[[82,18],19],[[83,18],19],[[84,18],19],[[57,18],19],[[85,18],19],[[26,18],19],[[26,18],19],[[56,18],19],[[]],[[]],[15,84],[[]],[[]],[83,57],[[]],[[]],[[]],[[57,86],[[9,[85,26]]]],[82],[85],[83,30],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[83,15],[84,15],[85,15],0,[[85,85],[[28,[14]]]],[29],[57,15],0,[82,9],[83,9],[84,9],[57,9],[85,9],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[9,[87,22]]]],[[[89,[[88,[46]]]],35],[[9,[87,22]]]],[[[90,[[88,[47]]]],35],[[9,[87,22]]]],[[[91,[[88,[47]]]],35],[[9,[87,22]]]],[[[93,[[88,[92]]]],35],[[9,[87,22]]]],[[[95,[[94,[46]]]],35],[[9,[87,22]]]],[[[96,[[94,[46]]]],35],[[9,[87,22]]]],[[[97,[[94,[47]]]],35],[[9,[87,22]]]],[[[98,[[94,[47]]]],35],[[9,[87,22]]]],[[[99,[[94,[47]]]],35],[[9,[87,22]]]],[[[100,[[94,[47]]]],35],[[9,[87,22]]]],[[[101,[[94,[92]]]],35],[[9,[87,22]]]],[[[102,[[94,[92]]]],35],[[9,[87,22]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[87,48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[48,35],[[9,[22]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],103],[[],37],[[40,41],42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[38,[[9,[43]]]],[39,[[9,[43]]]],[[],[[9,[43]]]],[[[105,[104,58]]],[[105,[104,58]]]],[37,37],[106,106],[107,107],[40,40],[108,108],[109,109],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[107,107],14],[[40,40],14],[[108,108],14],[[109,109],14],0,[[],106],[[[105,[58]]]],[[40,41],42],[107,52],[[37,37],15],[[107,107],15],[[40,40],15],[[108,108],15],[[109,109],15],[[[111,[[0,[110,58]]]],18],19],[[37,18],19],[[106,18],19],[[20,18],19],[[20,18],19],[[107,18],[[9,[60]]]],[[107,18],[[9,[60]]]],[[40,18],[[9,[60]]]],[[40,18],[[9,[60]]]],[[112,18],[[9,[60]]]],[[112,18],[[9,[60]]]],[[108,18],[[9,[60]]]],[[113,18],[[9,[60]]]],[[109,18],[[9,[60]]]],[107,15],[[]],[114,[[115,[58]]]],[116,[[115,[58]]]],[[]],[[]],[[]],[[]],[[]],[23,20],[21,20],[[]],[42,40],[[]],[[]],[[]],[[]],[[]],[[40,103],[[111,[58]]]],[[112,103],[[111,[58]]]],[33,[[9,[40]]]],[33,[[9,[112]]]],[67,[[9,[107,21]]]],[40,73],[[],[[9,[105]]]],[[],[[9,[105]]]],[[],[[9,[105]]]],[[],[[9,[105]]]],[[[115,[58]]],15],[40,15],[107],[40],[108],[109],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[111,20]]]],[[[28,[117]],73],[[9,[111,20]]]],[105,[[9,[111,20]]]],[[105,[28,[117]],73],[[9,[111,20]]]],[[[111,[58]]],[[9,[[111,[58]],20]]]],[40,[[9,[[111,[58]],20]]]],[112,[[9,[[111,[58]],20]]]],[[],[[9,[115,20]]]],[[[115,[58]]],[[9,[[115,[58]],20]]]],[105,[[9,[115,20]]]],[[[105,[58]]]],[[[115,[58]],35],[[28,[116]]]],[[[115,[58]],35,48],114],[40,15],[[],15],[37,15],[[],15],[37,15],[[],15],[37,15],[40,15],[40,15],0,0,0,[107,[[9,[71,21]]]],[[],103],[40,118],[38,[[28,[5]]]],[107,5],[107,5],[[103,103],103],[[],33],[[5,[8,[7]]],[[9,[107,21]]]],0,0,[38,[[9,[21]]]],[[[111,[58]],103],[[111,[58]]]],[[107,107],[[28,[14]]]],[[40,40],[[28,[14]]]],[[108,108],[[28,[14]]]],[[109,109],[[28,[14]]]],[[],5],0,[29],[107,[[9,[21]]]],[107,[[9,[[8,[[8,[2,7]],7]],21]]]],[107,5],[[],77],[107,39],[[],103],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[112,48],[[9,[40,119]]]],[[],30],[[],30],[[],30],[[],30],[38,[[9,[21]]]],[38,[[9,[21]]]],[107,[[9,[107]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],[[28,[16]]]],[[],[[28,[3]]]],[5,[[28,[31]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[120,120],120],[[121,1,122,[124,[123]]]],0,[[121,125],[[9,[126]]]],[121,127],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[121,128],[[9,[[131,[129,130]],17]]]],[121,[[131,[129,132]]]],[[121,133]],[121,134],[120,120],[[]],0,[121,[[9,[15]]]],0,[[],120],[135],[[121,1],[[28,[41]]]],[[121,52],28],[[121,1],30],[[],[[9,[120]]]],[[120,120],15],[[135,135],15],0,[[121,136,137],[[9,[15,17]]]],[[120,18],[[9,[60]]]],[[120,18],[[9,[60]]]],[[[121,[110]],18],19],[[138,18],19],[[135,18],19],[[135,18],19],[[[139,[110]],18],19],[[139,18],19],[[140,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[121,138],135],[121,120],[[121,1],68],[[121,138],135],[[121,10,[28,[141]],15],[[9,[142,17]]]],[[121,1],[[124,[55]]]],[[121,128,15],[[28,[13]]]],[[121,27],[[28,[10]]]],0,0,[[121,143],[[9,[15,144]]]],[[121,133,145],[[9,[15,140]]]],[[]],[[]],[[]],[[]],[[]],[[]],[52,15],[[121,52],15],0,[121,86],[121,[[28,[146]]]],[121,147],[121,148],[121,35],[[149,[28,[149]],35],[[9,[121,139]]]],[[149,[28,[149]],35],[[9,[121,22]]]],[[121,1],41],[[121,1],[[9,[[28,[57]],17]]]],[29],[[121,1],[[28,[68]]]],[121,48],[120,9],[[121,136,137],[[9,[15,17]]]],0,[121,150],[121,[[86,[1,[0,[147,104]]]]]],[[121,1],[[0,[147,104]]]],[121,151],[[]],[[],30],[[],30],[[],30],[120,16],[121,147],0,[120,16],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[121,127],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],0,[[]],[[]],[[]],[[]],[[]],[[]],[[28,35,48],[[9,[30,17]]]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[152,152],[153,153],[154,154],[[]],[[]],[[]],[[[8,[11]],[8,[11]],3,16,52],[[9,[155,17]]]],[[152,[8,[11]],[8,[11]],3,16,52],[[9,[155,17]]]],[[153,[8,[11]],[8,[11]],3,16,52],[[9,[155,17]]]],[[154,[8,[11]],[8,[11]],3,16,52],[[9,[155,17]]]],[[16,3,52],156],[[],152],[[],153],[[],154],0,0,[[156,18],19],[[155,18],19],[[152,18],19],[[153,18],19],[[154,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[155,16],[16,154],0,[155,16],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[157,[[28,[30]]]],[157,30],[[],[[9,[157]]]],[[121,33,15],[[9,[157,33]]]],[[157,18],19],[[]],[33,[[9,[157]]]],[[]],0,[157,9],[157,30],[[],9],[[],9],[[],32],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[55,158,122,[124,[123]]],[[28,[[124,[123]]]]]],0,0,[[55,48],159],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[159,34,48],55],[158,158],[25,25],[160,160],[[[162,[[0,[104,161,110,104]]]]],[[162,[[0,[104,161,110,104]]]]]],[122,122],[55,55],[137,137],[163,163],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[158,158],14],[[122,122],14],[[],122],[[],55],[[],137],[[],163],[[[162,[[0,[161,110,104]]]]]],[[],[[28,[112]]]],[[[162,[164]]],[[28,[112]]]],[[[162,[[44,[116]]]]],[[28,[112]]]],[[158,158],15],[[25,25],15],[[160,160],15],[[122,122],15],[[163,163],15],[[55,158],[[28,[124]]]],[[158,18],19],[[25,18],19],[[25,18],19],[[160,18],19],[[[162,[[0,[110,161,110,104]]]],18],19],[[122,18],19],[[55,18],19],[[137,18],19],[[163,18],19],[[]],[165,158],[118,158],[166,25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[158],[48,158],[[[162,[164]],48],158],[[[162,[[44,[116]]]],48],158],[55,[[8,[158]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[0,[161,110,104]],160],[[162,[[0,[161,110,104]]]]]],[[],55],[[158,158],[[28,[14]]]],[[122,122],[[28,[14]]]],[29],[[55,158,122],[[28,[[124,[123]]]]]],0,[[136,5,137,48],[[9,[25]]]],[[[162,[164]],136,5,137,48],[[9,[25]]]],[[[162,[[44,[116]]]],136,5,137,48],[[9,[25]]]],[[136,137,48],[[9,[25]]]],[[136,137,48],[[9,[25]]]],0,[55,[[8,[124]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],30],0,0,[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[[131,[167,132]]],[[131,[167,132]]]],[[[131,[167,168]],27,142,5],[[9,[[131,[167,168]],17]]]],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,132]],52,16],[[131,[167,132]]]],[[[131,[167,168]],27],[[131,[167,168]]]],[[[131,[167,168]],27],[[9,[[131,[167,168]],17]]]],[[[131,[167,168]]],[[9,[[131,[167,168]],17]]]],[[[131,[167,168]],15],[[131,[167,168]]]],[[[131,[129,130]],52],[[9,[[131,[129,130]],17]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[131,[167,168]],169],[[131,[167,168]]]],[132,132],[130,130],[[[131,[104]]],[[131,[104]]]],[170,170],[169,169],[[]],[[]],[[]],[[]],[[]],[[170,170],14],[[169,169],14],[[[131,[167,168]],167],[[131,[167,168]]]],[[[131,[167,168]],41],[[131,[167,168]]]],[[],132],[[],130],[[],170],[[],169],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,132]],52],[[131,[167,132]]]],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,168]],171],[[131,[167,168]]]],[[170,170],15],[[169,169],15],[[[131,[167,168]],16],[[131,[167,168]]]],[[[131,[167,168]],3],[[131,[167,168]]]],[[[131,[167,168]]],[[9,[17]]]],[[132,18],19],[[130,18],19],[[[131,[110,110,110]],18],19],[[170,18],19],[[169,18],19],[[]],[[]],[[]],[[]],[[]],[170],[169],[[[131,[167,168]]],[[131,[167,168]]]],[[]],[[]],[[]],[[]],[[]],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,168]],172],[[131,[167,168]]]],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,168]]],[[131,[167,168]]]],[[[131,[167,168]],170],[[131,[167,168]]]],[[170,170],[[28,[14]]]],[[169,169],[[28,[14]]]],[[[131,[167,168]],[86,[30,[8,[5]]]],1],[[131,[167,168]]]],[[[131,[167,132]],8],[[131,[167,132]]]],[[[131,[167,168]],141],[[131,[167,168]]]],[[170,133]],[[]],[[]],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[[131,[167,168]],[8,[27]]],[[131,[167,168]]]],[[[131,[167,168]],173],[[131,[167,168]]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"KeychainKind"],[15,"u8"],[3,"FeeRate"],[15,"f32"],[15,"usize"],[3,"u5"],[3,"Global"],[3,"Vec"],[4,"Result"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[4,"Utxo"],[3,"TransactionDetails"],[4,"Ordering"],[15,"bool"],[15,"u64"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"KeyError"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"SignerError"],[4,"PolicyError"],[3,"OutPoint"],[4,"Option"],[3,"Demand"],[3,"String"],[3,"TxOut"],[3,"TypeId"],[15,"str"],[4,"Descriptor"],[4,"Network"],[3,"Address"],[4,"ScriptContextEnum"],[3,"Miniscript"],[4,"Terminal"],[4,"DescriptorPublicKey"],[15,"u32"],[3,"DefiniteDescriptorKey"],[4,"ScriptContextError"],[3,"DescriptorXKey"],[4,"Wildcard"],[4,"Legacy"],[4,"Segwitv0"],[3,"Secp256k1"],[3,"PublicKey"],[4,"ConversionError"],[4,"DescriptorType"],[3,"Script"],[3,"ExtParams"],[4,"AnalysisError"],[3,"SignersContainer"],[4,"BuildSatisfaction"],[3,"Policy"],[8,"ScriptContext"],[3,"Range"],[3,"Error"],[3,"Pkh"],[3,"Wpkh"],[3,"Sh"],[3,"Wsh"],[3,"Bare"],[3,"Tr"],[3,"Tree"],[6,"ExtendedDescriptor"],[3,"Iter"],[3,"PkIter"],[4,"Policy"],[4,"LiftError"],[3,"DerivationPath"],[4,"BareCtx"],[4,"TapTree"],[3,"TxIn"],[4,"SigType"],[3,"HashMap"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"PkOrF"],[4,"SatisfiableItem"],[4,"Satisfaction"],[3,"Condition"],[3,"BTreeMap"],[6,"DescriptorTemplateOut"],[8,"IntoDescriptorKey"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[4,"Tap"],[3,"P2TR"],[8,"DerivableKey"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[3,"Bip86"],[3,"Bip86Public"],[6,"ValidNetworks"],[8,"Clone"],[3,"GeneratedKey"],[3,"PrivateKeyGenerateOptions"],[3,"SortedMultiVec"],[3,"SinglePub"],[4,"SinglePubKey"],[8,"Debug"],[4,"DescriptorKey"],[4,"DescriptorSecretKey"],[3,"SinglePriv"],[3,"ExtendedPubKey"],[4,"ExtendedKey"],[3,"ExtendedPrivKey"],[6,"KeySource"],[3,"Fingerprint"],[3,"DescriptorKeyParseError"],[3,"Balance"],[3,"Wallet"],[3,"SignerOrdering"],[8,"TransactionSigner"],[3,"Arc"],[6,"Update"],[3,"CannotConnectError"],[3,"TxGraph"],[3,"Txid"],[6,"DefaultCoinSelectionAlgorithm"],[3,"BumpFee"],[3,"TxBuilder"],[3,"CreateTx"],[3,"Transaction"],[3,"CheckPointIter"],[3,"AddressInfo"],[3,"PartiallySignedTransaction"],[3,"SignOptions"],[4,"AddressIndex"],[4,"NewError"],[4,"InsertTxError"],[3,"PsbtSighashType"],[3,"Input"],[3,"BlockId"],[3,"InsertBlockError"],[4,"ConfirmationTime"],[3,"CheckPoint"],[8,"Iterator"],[3,"LocalChain"],[8,"IntoWalletDescriptor"],[3,"KeychainTxOutIndex"],[6,"ChangeSet"],[3,"LargestFirstCoinSelection"],[3,"OldestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[3,"CoinSelectionResult"],[4,"Excess"],[3,"FullyNodedExport"],[4,"SignerId"],[6,"KeyMap"],[4,"SignerContext"],[8,"Sized"],[3,"SignerWrapper"],[4,"TapLeavesOptions"],[3,"PrivateKey"],[3,"Hash"],[4,"Error"],[8,"CoinSelectionAlgorithm"],[8,"TxBuilderContext"],[4,"ChangeSpendPolicy"],[4,"TxOrdering"],[3,"Sequence"],[4,"LockTime"],[15,"i32"],[8,"Vbytes"],[13,"InsufficientFunds"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Foreign"],[8,"ExtractPolicy"],[13,"PsbtTimelocks"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[8,"DescriptorTemplate"],[8,"GeneratableKey"],[8,"ExtScriptContext"],[8,"GeneratableDefaultOptions"],[8,"PsbtUtils"],[8,"IsDust"],[13,"ConfirmationHeightCannotBeGreaterThanTip"],[13,"Change"],[13,"NoChange"],[8,"SignerCommon"],[8,"InputSigner"],[13,"Tap"]]},\ +"bdk_chain":{"doc":"This crate is a collection of core structures for Bitcoin …","t":[8,8,17,3,17,8,4,3,4,3,13,13,8,16,8,3,2,16,3,8,3,3,2,13,13,16,11,10,11,11,12,12,10,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,12,12,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,10,11,12,11,11,11,0,10,0,11,2,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,12,12,12,16,3,3,8,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,10,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,3,6,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,3,3,3,3,3,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Anchor","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeAnchor","Confirmed","Confirmed","DescriptorExt","Error","ForEachTxOut","FullTxOut","IndexedTxGraph","LoadError","Persist","PersistBackend","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","WriteError","all_spks","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","apply_additions","bitcoin","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","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","commit","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","deserialize","deserialize","deserialize","deserialize","dust_value","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_txout","from","from","from","from","from","from","from","from","from","from","from","from","get_chain_tip","hash","hash","hash","hash","hash","hash","height","index_of_spk","index_tx","index_txout","indexed_tx_graph","insert_spk","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","load_from_persistence","local_chain","mark_used","miniscript","net_value","new","new","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serialize","serialize","serialize","serialize","spent_by","spk_at_index","stage","staged","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_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write_changes","height","last_seen","time","Additions","IndexedAdditions","IndexedTxGraph","Indexer","append","apply_additions","apply_additions","apply_update","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph_additions","index","index_additions","index_tx","index_txout","insert_relevant_txs","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","DerivationAdditions","KeychainTxOutIndex","LocalChangeSet","LocalUpdate","add","add_keychain","append","append","apply_additions","apply_additions","as_inner","as_ref","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","chain_changeset","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","confirmed","default","default","default","default","deref","deserialize","deserialize","deserialize","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","graph","immature","index_tx","index_txout","indexed_additions","inner","into","into","into","into","into","is_empty","is_empty","is_tx_relevant","keychains","last_active_indices","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead_to_target","lookahead_to_target_multi","lookaheads","mark_used","new","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_spks_of_all_keychains","revealed_spks_of_keychain","scan","scan_txout","serialize","serialize","serialize","set_lookahead","set_lookahead_for_all","spks_of_all_keychains","spks_of_keychain","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","txouts_of_keychain","type_id","type_id","type_id","type_id","type_id","unmark_used","untrusted_pending","unused_spks_of_keychain","vzip","vzip","vzip","vzip","vzip","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InsertBlockError","LocalChain","Update","apply_changeset","apply_update","block_id","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","default","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_blocks","from_changeset","from_tip","get_chain_tip","hash","height","height","initial_changeset","insert_block","into","into","into","into","into","into","into_iter","into_iter","introduce_older_blocks","is_block_in_chain","is_empty","iter","iter_checkpoints","new","next","original_hash","prev","provide","provide","push","tip","tip","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_include_height","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","Additions","CanonicalTx","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchors","anchors","append","apply_additions","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","determine_additions","direct_conflicts_of_tx","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","for_each_txout","for_each_txout","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","insert_anchor","insert_anchor_preview","insert_seen_at","insert_seen_at_preview","insert_tx","insert_tx_preview","insert_txout","insert_txout_preview","into","into","into","into","into","into_iter","is_empty","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_chain_txs","missing_heights","new","next","node","observed_as","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","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_list_chain_txs","tx","tx_outputs","tx_spends","txid","txouts","txouts","txs","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","walk_conflicts","walk_descendants"],"q":["bdk_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::ConfirmationTime","","","bdk_chain::indexed_tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::keychain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::local_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Trait that “anchors” blockchain data to a specific …","Trait that makes an object appendable.","Maximum BIP32 derivation index.","A reference to a block in the canonical chain.","How many confirmations are needed f or a coinbase output …","Represents a service that tracks the blockchain.","Represents the observed position of some chain data.","An Anchor implementation that also records the exact …","Block height and timestamp at which a transaction is …","An Anchor implementation that also records the exact …","The chain data is seen as confirmed, and in anchored by A.","The confirmed variant.","A trait to extend the functionality of a miniscript …","Error type.","Trait to do something with every txout contained in a …","A TxOut with as much data as we can retrieve about it","","The error the backend returns when it fails to load …","Persist wraps a PersistBackend (B) to create a convenient …","A persistence backend for Persist.","An iterator for derived script pubkeys.","An index storing TxOuts that have a script pubkey that …","","The chain data is seen in mempool at this given timestamp.","The unconfirmed variant.","The error the backend returns when it fails to write.","The script pubkeys that are being tracked by the index.","Returns the BlockId that the associated blockchain data is …","","","The anchor block.","The anchor block.","Append another object of the same type onto self.","","","","","","","","","","","","","","","","","","","","","The position of the transaction in outpoint in the overall …","","","","","","","","","","","","","","","","","Maps a ChainPosition<&A> into a ChainPosition<A> by …","","","","","","","Commit the staged changes to the underlying persistance …","The exact confirmation height of the transaction.","The confirmation height of the chain data being anchored.","Get the upper bound of the chain data’s confirmation …","Get the upper bound of the chain data’s confirmation …","Determines the upper bound of the confirmation height.","","","The confirmation time of the chain data being anchored.","","","","","","","","","Returns the minimum value (in satoshis) at which an output …","","","","","","","","","","","","","","","The provided closure f will be called with each …","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the best chain’s chain tip.","","","","","","The hash of the block.","The height of the block.","Returns the index associated with the script pubkey.","","","Contains the IndexedTxGraph structure and associated types.","Adds a script pubkey to scan for. Returns false and does …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Determines whether block of BlockId exists as an ancestor …","Returns whether ChainPosition is confirmed or not.","Returns whether ConfirmationTime is the confirmed variant.","Whether the utxo is/was/will be spendable with chain tip.","Returns whether the structure is considered empty.","Whether the txout is considered mature.","Whether this output is on a coinbase transaction.","Whether any of the inputs of this transaction spend a …","","Returns whether the script pubkey at index has been used …","Module for keychain related structures.","Return the aggregate changeset C from persistence.","The LocalChain is a local implementation of ChainOracle.","Marks the script pubkey at index as used even though it …","","Computes the net value that this transaction gives to the …","Create a new Persist from PersistBackend.","Creates a new script pubkey iterator starting at 0 from a …","","","The location of the TxOut.","Get a reference to the set of indexed outpoints.","Iterates over all the outputs with script pubkeys in an …","","","","","","","Scans an object containing many txouts.","Scan a single TxOut for a matching script pubkey and …","Computes total input value going from script pubkeys in …","","","","","The txid and chain position of the transaction (if any) …","Returns the script that has been inserted at the index.","Stage a changeset to be commited later with commit.","Get the changes that have not been commited yet.","","","","","","","","","","","","","","","","","","","","","","","","","","","Module for structures that store and traverse transactions.","Returns the txout and script pubkey index of the TxOut at …","The TxOut.","Iterate over all known txouts that spend to tracked script …","Finds all txouts on a transaction that has previously been …","","","","","","","","","","Construct an unconfirmed variant using the given last_seen …","Undoes the effect of mark_used. Returns whether the index …","Iterates over all unused script pubkeys in an index range.","","","","","","","","","","Writes a changeset to the persistence backend.","Confirmation height.","The last-seen timestamp in unix seconds.","Confirmation time in unix seconds.","The resultant “additions” when new transaction data is …","A structure that represents changes to an IndexedTxGraph.","A struct that combines TxGraph and an Indexer …","Represents a structure that can index transaction data.","","Apply additions to itself.","Applies the IndexedAdditions to the IndexedTxGraph.","Apply an update directly.","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Get a reference of the internal transaction graph.","TxGraph additions.","Transaction index.","Indexer additions.","Scan and index the given transaction.","Scan and index the given outpoint and txout.","Insert relevant transactions from the given txs iterator.","Insert and index a transaction into the graph.","Insert a floating txout of given outpoint.","Calls U::from(self).","Calls U::from(self).","","Determines whether the transaction should be included in …","Construct a new IndexedTxGraph with a given index.","","","","","","","","","","","Balance, differentiated into various categories.","Represents updates to the derivation index of a …","A convenient wrapper around SpkTxOutIndex that relates …","A structure that records the corresponding changes as …","A structure to update KeychainTxOutIndex, TxGraph and …","","Add a keychain to the tracker’s txout_index with a …","Append another DerivationAdditions into self.","","Applies the derivation additions to the KeychainTxOutIndex…","","Get the inner map of the keychain to its new derivation …","","","","","","","","","","","","Update for the LocalChain.","Changes to the LocalChain.","","","","","","","","","","","Confirmed and immediately spendable balance","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Update for the TxGraph.","All coinbase outputs not yet matured","","","Additions to IndexedTxGraph.","Return a reference to the internal SpkTxOutIndex.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the additions are empty.","","","Return a reference to the internal map of the keychain to …","Contains the last active derivation indices per keychain (K…","Get the last derivation index revealed for keychain.","Get the last derivation index that is revealed for each …","Returns the highest derivation index of the keychain where …","Returns the highest derivation index of each keychain that …","Store lookahead scripts until target_index.","Convenience method to call lookahead_to_target for …","Return the lookahead setting for each keychain.","Marks the script pubkey at index as used even though the …","Construct a LocalUpdate with a given local_chain::Update.","Get the next derivation index for keychain. The next index …","Gets the next unused script pubkey in the keychain. I.e., …","Get a reference to the set of indexed outpoints.","Attempts to reveal the next script pubkey for keychain.","Reveals script pubkeys of the keychain’s descriptor up …","Convenience method to call Self::reveal_to_target on …","Convenience method to get revealed_spks_of_keychain of all …","Iterates over the script pubkeys revealed by this index …","Scans an object for relevant outpoints, which are stored …","Scan a single outpoint for a matching script pubkey.","","","","Set the lookahead count for keychain.","Convenience method to call set_lookahead for all keychains.","Generates script pubkey iterators for every keychain. The …","Generates a script pubkey iterator for the given keychain…","","","","","","","Get the whole balance visible to the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","","","","","Iterates over all the OutPoint that have a TxOut with a …","","","","","","Undoes the effect of mark_used. Returns whether the index …","Unconfirmed UTXOs received from an external wallet","Iterates over all unused script pubkeys for a keychain …","","","","","","Occurs when an update does not have a common checkpoint …","A structure that represents changes to LocalChain.","A LocalChain checkpoint is used to find the agreement …","A structure that iterates over checkpoints backwards.","Represents a failure when trying to insert a checkpoint …","This is a local implementation of ChainOracle.","A struct to update LocalChain.","Apply the given changeset.","Applies the given update to the chain.","Get the BlockId of the checkpoint.","Get a reference to the internal index mapping the height …","","","","","","","","","","","","","","","","","","","","","","","","","","","Extends the checkpoint linked list by a iterator of block …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Constructs a LocalChain from a BTreeMap of height to …","Construct a LocalChain from an initial changeset.","Construct a LocalChain from a given checkpoint tip.","","Get the block hash of the checkpoint.","Get the height of the checkpoint.","The checkpoints’ height.","Derives an initial ChangeSet, meaning that it can be …","Insert a BlockId.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Whether the update allows for introducing older blocks.","","Returns whether the LocalChain is empty (has no …","Iterate from this checkpoint in descending height.","Iterate over checkpoints in descending height order.","Construct a new base block at the front of a linked list.","","Original checkpoint’s block hash.","Get the previous checkpoint in the chain","","","Puts another checkpoint onto the linked list representing …","Get the highest checkpoint.","The update chain’s new tip.","","","","","","","","","","","","","","The suggested checkpoint to include to connect the two …","","","","","","","","","","","","","Update checkpoint’s block hash.","","","","","","","A structure that represents changes to a TxGraph.","An outwards-facing view of a transaction that is part of …","An iterator that traverses transaction descendants.","A graph of transactions and spends.","An outward-facing view of a (transaction) node in the …","Get all transaction anchors known by TxGraph.","Iterate over all tx outputs known by TxGraph.","The blocks that the transaction is “anchored” in.","Added anchors.","","Applies Additions to TxGraph.","Extends this graph with another so that self becomes the …","","Get the total balance of outpoints that are in chain of …","","","","","","","","","","","Calculates the fee of a given transaction. Returns 0 if tx …","","","","","","","","","","","","","","","","","Previews the resultant Additions when Self is updated …","Given a transaction, return an iterator of txids that …","","","","","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","Iterate over floating txouts known by TxGraph.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Iterate over all full transactions in the graph.","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","Get a transaction by txid. This only returns Some for full …","Get a transaction node by txid. This only returns Some for …","Obtains a single tx output (if any) at the specified …","Inserts the given anchor into TxGraph.","Returns the resultant Additions if the txid is set in …","Inserts the given seen_at into TxGraph.","Returns the resultant Additions if the txid is set to …","Inserts the given transaction into TxGraph.","Returns the resultant Additions if the given transaction …","Inserts the given TxOut at OutPoint.","Returns the resultant Additions if the given txout is …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Whether the graph has any transactions or outputs in it.","","Returns true if the Additions is empty (no transactions or …","Added last-seen unix timestamps of transactions.","The last-seen unix timestamp of the transaction as …","List graph transactions that are in chain with chain_tip.","Find missing block heights of chain.","Construct a new TxGraph from a list of transactions.","","The transaction node (as part of the graph).","How the transaction is observed as (confirmed or …","The transactions spending from this output.","","","","","","","","Get the total balance of outpoints that are in chain of …","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","","","","","","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","","","","","","List graph transactions that are in chain with chain_tip.","A partial or full representation of the transaction.","Returns known outputs of a given txid.","Iterates over the transactions spending from txid.","Txid of the transaction.","Iterates over all outpoints contained within Additions.","Added txouts.","Added transactions.","","","","","","","","","","","Creates an iterator that both filters and maps conflicting …","Creates an iterator that filters and maps descendants from …"],"i":[0,0,0,0,0,0,0,0,0,0,8,9,0,71,0,0,0,72,0,0,0,0,0,8,9,72,3,17,6,7,6,7,39,3,0,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,10,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,11,8,8,9,5,6,7,10,13,6,7,17,17,8,6,7,7,3,5,6,7,9,5,6,7,73,8,9,5,6,7,10,3,8,9,5,6,7,10,13,74,3,8,9,9,5,5,5,6,7,10,13,11,71,8,9,5,6,7,5,5,3,3,3,0,3,3,8,9,5,6,7,10,13,11,11,71,8,9,10,39,10,10,3,3,3,0,72,0,3,0,3,13,11,11,11,10,3,3,8,9,5,6,7,10,3,3,3,9,5,6,7,10,3,13,13,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,0,3,10,3,3,3,8,9,5,6,7,10,13,11,9,3,3,3,8,9,5,6,7,10,13,11,72,75,76,75,41,0,0,0,40,41,42,42,42,40,42,40,40,40,42,40,40,40,42,40,42,40,40,40,42,40,42,40,41,41,42,42,42,42,40,40,41,42,40,40,42,40,42,40,42,40,42,40,0,0,0,0,0,48,49,45,52,49,49,45,45,49,45,53,52,48,49,45,53,52,48,53,52,49,45,53,52,48,49,45,53,52,48,48,49,45,52,48,49,45,52,48,45,52,48,49,45,53,52,48,48,49,45,53,52,52,52,48,53,48,49,49,52,49,49,45,53,52,48,45,52,49,49,53,49,49,49,49,49,49,49,49,53,49,49,49,49,49,49,49,49,49,49,45,52,48,49,49,49,49,49,45,53,52,48,48,48,48,48,49,45,53,52,48,49,45,53,52,48,49,49,45,53,52,48,49,48,49,49,45,53,52,48,0,0,0,0,0,0,0,58,58,60,58,63,60,55,58,61,59,63,60,55,58,61,59,60,55,58,61,59,60,55,58,61,59,58,58,61,59,60,60,55,58,61,61,59,59,63,60,55,58,58,61,59,58,58,58,58,60,60,61,58,58,63,60,55,58,61,59,63,60,55,58,58,60,58,60,63,61,60,61,59,60,58,55,60,55,58,61,59,61,59,63,60,55,58,61,59,59,63,60,55,58,61,59,63,60,55,58,61,59,61,63,60,55,58,61,59,0,0,0,0,0,43,43,67,46,46,43,43,43,43,69,43,67,68,46,69,43,67,68,46,43,69,69,43,67,68,46,43,67,68,46,67,68,43,46,67,46,43,43,43,67,68,46,43,43,43,43,67,68,46,43,46,69,43,67,68,46,43,43,43,43,43,43,43,43,43,43,43,43,43,43,69,43,67,68,46,69,43,46,46,46,67,43,43,43,69,68,68,43,67,68,46,43,67,68,46,43,43,43,69,43,67,68,46,43,43,69,43,67,68,46,43,67,43,43,67,46,46,46,69,43,67,68,46,69,43,67,68,46,43,43],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[3,[[0,[1,2]]]]],4],[[],5],[6,5],[7,5],0,0,[[]],[[[3,[[0,[1,2]]]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[3,[1]]],[[3,[1]]]],[[[8,[1]]],[[8,[1]]]],[9,9],[5,5],[6,6],[7,7],[[[10,[1]]],[[10,[1]]]],[[[11,[1]]],[[11,[1]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,[[8,[1]]]],[[[8,[2]],8],12],[[9,9],12],[[5,5],12],[[6,6],12],[[7,7],12],[[[10,[2]],10],12],[13,[[15,[14]]]],0,0,[[],16],[[],16],[[[8,[17]]],[[14,[16]]]],[6,16],[7,16],0,[[],3],[[],5],[[],6],[[],7],[[],[[15,[9]]]],[[],[[15,[5]]]],[[],[[15,[6]]]],[[],[[15,[7]]]],[[],18],[[[8,[19]],8],20],[[9,9],20],[[5,5],20],[[6,6],20],[[7,7],20],[[[10,[19]],10],20],[[[3,[21]],22],23],[[[8,[21]],22],23],[[9,22],23],[[5,22],23],[[6,22],23],[[7,22],23],[[[10,[21]],22],23],[[[13,[21,21]],22],23],[24],[[]],[[]],[[[8,[7]]],9],[[]],[[],5],[[]],[[],5],[[]],[[]],[[]],[[]],[[]],[[],[[15,[[14,[5]]]]]],[[[8,[25]]]],[9],[5],[6],[7],0,0,[[[3,[[0,[1,2]]]],26],14],[[[3,[[0,[1,2]]]],27]],[[[3,[[0,[1,2]]]],28,29]],0,[[[3,[[0,[1,2]]]],[0,[1,2]],26],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,5],[[15,[[14,[20]]]]]],[8,20],[9,20],[[[10,[17]],16],20],[[],20],[[[10,[17]],16],20],0,[[[3,[[0,[1,2]]]],27],20],[[[3,[[0,[1,2]]]],27],20],[[[3,[[0,[1,2]]]]],20],0,[[],15],0,[[[3,[[0,[1,2]]]]],20],0,[[[3,[[0,[1,2]]]],27],30],[[],13],[[],11],[11,14],[[11,31],14],0,[[[3,[[0,[1,2]]]]],32],[[[3,[[0,[1,2]]]],[33,[[0,[1,2]]]]],34],[[[8,[35]],8],[[14,[12]]]],[[9,9],[[14,[12]]]],[[5,5],[[14,[12]]]],[[6,6],[[14,[12]]]],[[7,7],[[14,[12]]]],[[[10,[35]],10],[[14,[12]]]],[[[3,[[0,[1,2]]]]],[[32,[[0,[1,2]]]]]],[[[3,[[0,[1,2]]]],28,29],14],[[[3,[[0,[1,2]]]],27]],[9,15],[5,15],[6,15],[7,15],0,[[[3,[[0,[1,2]]]]],[[14,[26]]]],[13],[13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[[3,[[0,[1,2]]]],28],14],0,[[[3,[[0,[1,2]]]]],[[0,[34,36]]]],[[[3,[[0,[1,2]]]],37],34],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[18,9],[[[3,[[0,[1,2]]]]],20],[[[3,[[0,[1,2]]]]],34],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],0,0,0,0,0,0,0,[[[40,[17,39]],[40,[17,39]]]],[[]],[[[42,[17,41]],[40,[17]]]],[[[42,[17,41]],[43,[17]]],[[40,[17]]]],[[]],[[]],[[]],[[]],[[[40,[1,1]]],[[40,[1,1]]]],[[]],[[],[[42,[44]]]],[[],[[40,[44]]]],[[],[[15,[40]]]],[[[40,[19,19]],40],20],[[[42,[21,21]],22],23],[[[40,[21,21]],22],23],[[]],[[]],[45,[[40,[45]]]],[46,[[40,[44]]]],[42,43],0,0,0,[27],[[28,29]],[[[42,[17,41]],47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],27,47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],28,29],[[40,[17]]]],[[]],[[]],[[[40,[17,39]]],20],[27,20],[[],42],[40,15],[[]],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[]],[[]],0,0,0,0,0,[[48,48],48],[[[49,[[0,[1,2,21]]]],[0,[1,2,21]],[51,[50]]]],[[[45,[2]],[45,[2]]]],[[[52,[2,17]],[52,[2,17]]]],[[[49,[[0,[1,2,21]]]],[45,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[45,4],[45,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[[49,[1]]],[[49,[1]]]],[[[45,[1]]],[[45,[1]]]],[[[53,[1,1]]],[[53,[1,1]]]],[[[52,[1,1]]],[[52,[1,1]]]],[48,48],[[]],[[]],[[]],[[]],[[]],0,[[],49],[[],45],[[],52],[[],48],[49],[[],[[15,[45]]]],[[],[[15,[52]]]],[[],[[15,[48]]]],[[[45,[19]],45],20],[[[52,[19,19]],52],20],[[48,48],20],[[[49,[21]],22],23],[[[45,[21]],22],23],[[[53,[21,21]],22],23],[[[52,[21,21]],22],23],[[48,22],23],[[48,22],23],[[]],[[]],[[]],[[[40,[45]]],52],[54,52],[[]],[[]],0,0,[[[49,[[0,[1,2,21]]]],27]],[[[49,[[0,[1,2,21]]]],28,29]],0,[[[49,[[0,[1,2,21]]]]],3],[[]],[[]],[[]],[[]],[[]],[[[45,[2]]],20],[[[52,[2,17]]],20],[[[49,[[0,[1,2,21]]]],27],20],[[[49,[[0,[1,2,21]]]]],4],0,[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]],16],20],[55,53],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]],32],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],4]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[0,[56,1]]]]]],[[[49,[[0,[1,2,21]]]]],[[0,[34,1]]]],[[[49,[[0,[1,2,21]]]]],[[45,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],28,29],[[45,[[0,[1,2,21]]]]]],[45,15],[52,15],[48,15],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[11,[[51,[50]]]]]]]],[[[49,[[0,[1,2,21]]]]],[[11,[[51,[50]]]]]],[[]],[[]],[[]],[[]],[[]],[[],57],[48,18],0,[48,18],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[49,[[0,[1,2,21]]]]],34],[[],38],[[],38],[[],38],[[],38],[[],38],[[[49,[[0,[1,2,21]]]],16],20],0,[[[49,[[0,[1,2,21]]]]],34],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[58,54]],[[58,55],[[15,[54,59]]]],[60,5],[58,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[60,60],[55,55],[58,58],[61,61],[59,59],[[]],[[]],[[]],[[]],[[]],[[],58],[[58,58],20],[[61,61],20],[[59,59],20],[[60,47],[[15,[60,60]]]],[[60,22],23],[[55,22],23],[[58,22],23],[[61,22],23],[[61,22],23],[[59,22],23],[[59,22],23],[[]],[[]],[[]],[[]],[[[4,[16,62]]],58],[[]],[[]],[[[4,[16,62]]],58],[54,58],[60,58],[58,[[15,[[14,[5]]]]]],[60,62],[60,16],0,[58,54],[[58,5],[[15,[54,61]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[60],0,[[58,5,5],[[15,[[14,[20]]]]]],[58,20],[60,63],[58,63],[5,60],[63,14],0,[60,[[14,[60]]]],[64],[64],[[60,5],[[15,[60,60]]]],[58,[[14,[60]]]],0,[[]],[[]],[[]],[[]],[[]],[[],57],[[],57],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,[43,32],[43,56],0,0,[[[46,[2]],[46,[2]]]],[[[43,[[0,[1,2]]]],[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],[43,[[0,[1,2]]]]],[[46,[[0,[1,2]]]]]],[43,43],[[[43,[17]],5,47,24],48],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,27],[[14,[30]]]],[[],[[14,[65]]]],[[],[[14,[66]]]],[[[43,[1]]],[[43,[1]]]],[[[67,[1,1]]],[[67,[1,1]]]],[[[68,[1,1]]],[[68,[1,1]]]],[[[46,[1]]],[[46,[1]]]],[[]],[[]],[[]],[[]],[[[67,[2,2]],67],12],[[[68,[2,2]],68],12],[[],43],[[],46],[67],[[],[[15,[46]]]],[[[43,[[0,[1,2]]]],43],[[46,[[0,[1,2]]]]]],[[43,27],56],[[[43,[19]],43],20],[[[67,[19,19]],67],20],[[[68,[19,19]],68],20],[[[46,[19]],46],20],[[[43,[17]],5,47],56],[[[43,[17]],5,47],56],[43,56],[[[43,[21]],22],23],[[[67,[21,21]],22],23],[[[68,[21,21]],22],23],[[[46,[21]],22],23],[[43,24]],[[46,24]],[[]],[[]],[[]],[[]],[[]],[43,56],[[[43,[17]],5,37],[[14,[8]]]],[[[43,[17]],5,28],14],[[43,37],[[14,[27]]]],[[43,37],[[14,[[67,[27]]]]]],[[43,28],[[14,[29]]]],[[[43,[[0,[1,2]]]],37,[0,[1,2]]],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,[0,[1,2]]],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,18],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,18],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],27],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],27],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],28,29],[[46,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],28,29],[[46,[[0,[1,2]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[43,20],[[[46,[2]]],20],[46,20],0,0,[[[43,[17]],5],56],[[[43,[17]],58],56],[47,[[43,[[0,[1,2]]]]]],[69,14],0,0,[[43,28],70],[[[67,[35,35]],67],[[14,[12]]]],[[[68,[35,35]],68],[[14,[12]]]],[46,15],[[]],[[]],[[]],[[]],[[[43,[17]],5,47,24],[[15,[48]]]],[[[43,[17]],5,47],56],[[[43,[17]],5,47],56],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5,37],[[15,[[14,[8]]]]]],[[[43,[17]],5,28],[[15,[14]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5],56],0,[[43,37],[[14,[[4,[16,29]]]]]],[[43,37],34],0,[46,56],0,0,[[],38],[[],38],[[],38],[[],38],[[],38],[[]],[[]],[[]],[[]],[[]],[[43,27],69],[[43,37],69]],"p":[[8,"Clone"],[8,"Ord"],[3,"SpkTxOutIndex"],[3,"BTreeMap"],[3,"BlockId"],[3,"ConfirmationHeightAnchor"],[3,"ConfirmationTimeAnchor"],[4,"ChainPosition"],[4,"ConfirmationTime"],[3,"FullTxOut"],[3,"SpkIterator"],[4,"Ordering"],[3,"Persist"],[4,"Option"],[4,"Result"],[15,"u32"],[8,"Anchor"],[15,"u64"],[8,"PartialEq"],[15,"bool"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[8,"FnMut"],[8,"Hash"],[3,"Script"],[3,"Transaction"],[3,"OutPoint"],[3,"TxOut"],[15,"i64"],[15,"usize"],[3,"BTreeSet"],[8,"RangeBounds"],[8,"DoubleEndedIterator"],[8,"PartialOrd"],[8,"ExactSizeIterator"],[3,"Txid"],[3,"TypeId"],[8,"Append"],[3,"IndexedAdditions"],[8,"Indexer"],[3,"IndexedTxGraph"],[3,"TxGraph"],[8,"Default"],[3,"DerivationAdditions"],[3,"Additions"],[8,"IntoIterator"],[3,"Balance"],[3,"KeychainTxOutIndex"],[4,"DescriptorPublicKey"],[4,"Descriptor"],[3,"LocalChangeSet"],[3,"LocalUpdate"],[6,"ChangeSet"],[3,"Update"],[8,"Iterator"],[3,"String"],[3,"LocalChain"],[3,"CannotConnectError"],[3,"CheckPoint"],[3,"InsertBlockError"],[3,"BlockHash"],[3,"CheckPointIter"],[3,"Demand"],[3,"SignedAmount"],[3,"Amount"],[3,"TxNode"],[3,"CanonicalTx"],[3,"TxDescendants"],[3,"HashSet"],[8,"ChainOracle"],[8,"PersistBackend"],[8,"DescriptorExt"],[8,"ForEachTxOut"],[13,"Confirmed"],[13,"Unconfirmed"]]},\ "bdk_coin_select":{"doc":"","t":[3,3,4,4,3,3,13,6,13,3,4,13,13,13,3,4,3,13,13,17,13,13,13,13,13,3,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,12,11,12,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,12,11,11,11,11,12,11,12,12,11,12,12,12,11,11,11,11,12,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11],"n":["Bnb","BnbIter","BnbLimit","BranchStrategy","CoinSelector","CoinSelectorOpt","Continue","DecideStrategy","Duration","ExcessStrategy","ExcessStrategyKind","MinAbsoluteFee","MinDrainValue","Rounds","Selection","SelectionConstraint","SelectionError","SkipBoth","SkipInclusion","TXIN_BASE_WEIGHT","TargetFee","TargetValue","ToDrain","ToFee","ToRecipient","WeightedValue","advertise_new_score","all_selected","apply_selection","backtrack","base_weight","best_score","best_strategy","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","candidate","candidates","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_select_bnb","current_excess","current_weight","deselect","drain_value","drain_waste","drain_weight","effective_target","effective_value","eq","eq","excess","excess_strategies","fee","feerate","finish","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward","from","from","from","from","from","from","from","from","from","from","from","from","from","from","fund_outputs","hash","input_count","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_segwit","is_selected","long_term_feerate","long_term_feerate","max_extra_target","min_absolute_fee","min_drain_value","new","new","new","next","opts","partial_cmp","pool","pool_pos","provide","recipient_value","rem_abs","rem_eff","select","select_all","select_until_finished","selected","selected","selected_absolute_value","selected_count","selected_effective_value","selected_indexes","selected_waste","selected_weight","selection","spend_drain_weight","target_feerate","target_value","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unselected","unselected_indexes","value","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","waste","weight","weight","will_continue"],"q":["bdk_coin_select","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Bnb represents the current state of the BnB algorithm.","","Determines how we should limit rounds of branch and bound.","Strategy in which we should branch.","CoinSelector selects and deselects from a set of …","","We continue exploring subtrees of this node, starting with …","Closure to decide the branching strategy, alongside a …","","","","Min absolute fee is not met","Min drain value is not met","","","","","We skip both the inclusion and omission branches of this …","We continue exploring ONLY the omission branch of this …","Txin “base” fields include outpoint (32+4) and …","The target fee (given the feerate) is not met","The target is not met","","","","A WeightedValue represents an input candidate for …","Compare the advertised score with the current best. The …","","","Attempt to backtrack to the previously selected node’s …","The weight of the template transaction, including fixed …","","Returns the ExcessStrategy that results in the least waste.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This is a variation of the Branch and Bound Coin Selection …","Current excess.","Current weight of template tx + selected inputs.","","","","Additional weight if we include the drain (change) output.","This is the effective target value.","Effective value of this input candidate: …","","","","","","Returns feerate in sats/wu.","","","","","","","","","","","","","Continue down this branch and skip the inclusion branch if …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","The total number of inputs; so we can calculate extra …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Turns our Bnb state into an iterator.","","","Whether this WeightedValue contains at least one segwit …","","","The feerate","Additional leeway for the target value.","The minimum absolute fee. I.e., needed for RBF.","Minimum value allowed for a drain (change) output.","Creates a new Bnb.","Create a new WeightedValue that represents a single input.","","","","","","","","","","","","","","","","Absolute value sum of all selected inputs.","","Effective value sum of all selected inputs.","","Waste sum of all selected inputs.","Weight sum of all selected inputs.","","Weight of spending the drain (change) output in the future.","The feerate we should try and achieve in sats per weight …","The value we need to select. If the value is None, then …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Total value of the UTXO(s) that this WeightedValue …","","","","","","","","","","","","","","Total weight of including this/these UTXO(s). txin fields: …","",""],"i":[0,0,0,0,0,0,34,0,22,0,0,11,11,22,0,0,0,34,34,0,11,11,12,12,12,0,2,4,5,2,9,2,5,34,2,26,22,8,9,4,10,11,5,12,13,34,2,26,22,8,9,4,10,11,5,12,13,4,4,8,9,4,10,11,5,12,13,8,9,4,10,11,5,12,13,12,0,4,4,4,13,9,9,4,8,11,12,5,5,13,13,4,8,9,4,10,10,11,11,5,12,12,13,2,34,2,26,22,22,22,8,9,4,10,11,5,12,13,9,12,8,34,2,26,22,8,9,4,10,11,5,12,13,2,26,4,8,4,9,9,9,9,9,2,8,4,26,4,12,2,2,10,13,2,2,4,4,4,4,5,4,4,4,4,4,4,2,9,9,9,8,9,4,10,11,5,12,13,10,11,12,34,2,26,22,8,9,4,10,11,5,12,13,34,2,26,22,8,9,4,10,11,5,12,13,34,2,26,22,8,9,4,10,11,5,12,13,4,4,8,34,2,26,22,8,9,4,10,11,5,12,13,13,8,13,34],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[2,[1]],1],3],[4,3],[5,6],[[[2,[1]]],3],0,0,[5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[4,7],8],0,[8,8],[9,9],[4,4],[10,10],[11,11],[5,5],[12,12],[13,13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[12,12],14],[4,[[15,[4]]]],[4,16],[4,17],[[4,7],3],0,[9,16],0,[4,16],[[8,18],16],[[11,11],3],[[12,12],3],0,0,0,[13,18],[4,[[19,[5,10]]]],[[8,20],21],[[9,20],21],[[4,20],21],[[10,20],21],[[10,20],21],[[11,20],21],[[11,20],21],[[5,20],21],[[12,20],21],[[12,20],21],[[13,20],21],[[[2,[1]],3]],[[]],[[]],[[]],[[]],[7,22],[23,22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[24,17],9],[12],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]],25],[[26,[1]]]],[[]],[4,3],0,[[4,7],3],[9,18],0,0,0,0,[[4,27,1],[[2,[1]]]],[[28,17,3],8],[[27,9],4],[[[26,[[0,[1,29,30]]]]],15],0,[[12,12],[[15,[14]]]],0,0,[31],0,0,0,[[4,7],3],[4],[4,[[19,[5,10]]]],[4,6],0,[4,28],[4,7],[4,16],[4,6],[4,16],[4,17],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],32],[[],32],[[],32],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[4,6],[4,6],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[34,3]],"p":[[8,"Ord"],[3,"Bnb"],[15,"bool"],[3,"CoinSelector"],[3,"Selection"],[8,"Iterator"],[15,"usize"],[3,"WeightedValue"],[3,"CoinSelectorOpt"],[3,"SelectionError"],[4,"SelectionConstraint"],[4,"ExcessStrategyKind"],[3,"ExcessStrategy"],[4,"Ordering"],[4,"Option"],[15,"i64"],[15,"u32"],[15,"f32"],[4,"Result"],[3,"Formatter"],[6,"Result"],[4,"BnbLimit"],[3,"Duration"],[3,"TxOut"],[6,"DecideStrategy"],[3,"BnbIter"],[3,"Vec"],[15,"u64"],[8,"Copy"],[8,"Display"],[3,"Demand"],[3,"String"],[3,"TypeId"],[4,"BranchStrategy"]]},\ -"bdk_electrum":{"doc":"This crate is used for updating structures of the bdk_chain…","t":[8,3,2,11,11,12,11,11,11,2,11,11,11,11,10,12,11,12,11,10,11,11,11,11,11,11,11],"n":["ElectrumExt","ElectrumUpdate","bdk_chain","borrow","borrow_mut","chain_update","clone","clone_into","default","electrum_client","finalize","finalize_as_confirmation_time","fmt","from","get_tip","graph_update","into","keychain_update","missing_full_txs","scan","scan_without_keychain","scan_without_keychain","to_owned","try_from","try_into","type_id","vzip"],"q":["bdk_electrum","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","Finalizes the ElectrumUpdate with new_txs and anchors of …","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","",""],"i":[0,0,0,2,2,2,2,2,2,0,2,2,2,2,23,2,2,2,2,23,23,23,2,2,2,2,2],"f":[0,0,0,[[]],[[]],0,[[[2,[1,1]]],[[2,[1,1]]]],[[]],[[],2],0,[[[2,[3]],4,[6,[5]],[8,[7]]],[[11,[[9,[3]],10]]]],[[[2,[12]],4,[6,[5]],[8,[7]]],[[11,[[9,[13]],10]]]],[[[2,[14,14]],15],16],[[]],[[],[[11,[10]]]],0,[[]],0,[[[2,[3]],17],[[8,[7]]]],[[18,[18,[[0,[19,1]],20]],20,20,21,21],[[11,[[2,[[0,[19,1]]]],10]]]],[[18,20,20,20,21],[[11,[2,10]]]],[[18,20,20,20,21],[[11,[2,10]]]],[[]],[[],11],[[],11],[[],22],[[]]],"p":[[8,"Clone"],[3,"ElectrumUpdate"],[8,"Anchor"],[3,"Client"],[15,"u64"],[4,"Option"],[3,"Txid"],[3,"Vec"],[3,"LocalUpdate"],[4,"Error"],[4,"Result"],[3,"ConfirmationHeightAnchor"],[3,"ConfirmationTimeAnchor"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[3,"TxGraph"],[3,"BTreeMap"],[8,"Ord"],[8,"IntoIterator"],[15,"usize"],[3,"TypeId"],[8,"ElectrumExt"]]},\ -"bdk_esplora":{"doc":"BDK Esplora","t":[8,8,2,10,10,11,11,11,11],"n":["EsploraAsyncExt","EsploraExt","esplora_client","scan","scan","scan_without_keychain","scan_without_keychain","scan_without_keychain","scan_without_keychain"],"q":["bdk_esplora","","","","","","","",""],"d":["Trait to extend esplora_client::AsyncClient functionality.","Trait to extend esplora_client::BlockingClient …","","Scan the blockchain (via esplora) for the data specified …","Scan the blockchain (via esplora) for the data specified …","Convenience method to call scan without requiring a …","Convenience method to call scan without requiring a …","Convenience method to call scan without requiring a …","Convenience method to call scan without requiring a …"],"i":[0,0,0,14,15,14,14,15,15],"f":[0,0,0,[[1,[1,[[0,[2,3]],4]],4,4,5,5],[[9,[[7,[[0,[2,3]],6]],8]]]],[[1,[1,[[0,[4,10]]]],[0,[4,10]],[0,[4,10]],5,5],[[13,[[12,[11]]]]]],[[1,4,4,4,5],[[9,[[7,[6]],8]]]],[[1,4,4,4,5],[[9,[[7,[6]],8]]]],[[1,[0,[4,10]],[0,[4,10]],[0,[4,10]],5],[[13,[[12,[11]]]]]],[[1,[0,[4,10]],[0,[4,10]],[0,[4,10]],5],[[13,[[12,[11]]]]]]],"p":[[3,"BTreeMap"],[8,"Ord"],[8,"Clone"],[8,"IntoIterator"],[15,"usize"],[3,"ConfirmationTimeAnchor"],[3,"LocalUpdate"],[4,"Error"],[4,"Result"],[8,"Send"],[8,"Future"],[3,"Box"],[3,"Pin"],[8,"EsploraExt"],[8,"EsploraAsyncExt"]]},\ +"bdk_electrum":{"doc":"This crate is used for updating structures of the bdk_chain…","t":[8,3,2,11,11,11,11,2,11,11,11,11,12,11,12,11,12,10,11,11,11,11,11,11,11],"n":["ElectrumExt","ElectrumUpdate","bdk_chain","borrow","borrow_mut","clone","clone_into","electrum_client","finalize","finalize_as_confirmation_time","fmt","from","graph_update","into","keychain_update","missing_full_txs","new_tip","scan","scan_without_keychain","scan_without_keychain","to_owned","try_from","try_into","type_id","vzip"],"q":["bdk_electrum","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Trait to extend Client functionality.","Represents an update fetched from an Electrum server, but …","","","","","","","Finalizes update with missing txids to fetch from client.","Finalizes the ElectrumUpdate with new_txs and anchors of …","","Returns the argument unchanged.","Map of Txids to associated Anchors.","Calls U::from(self).","Last-used index update for KeychainTxOutIndex.","Determine the full transactions that are missing from graph…","The latest chain tip, as seen by the Electrum server.","Scan the blockchain (via electrum) for the data specified …","Convenience method to call scan without requiring a …","Convenience method to call scan without requiring a …","","","","",""],"i":[0,0,0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,24,24,24,2,2,2,2,2],"f":[0,0,0,[[]],[[]],[[[2,[1,1]]],[[2,[1,1]]]],[[]],0,[[[2,[3]],4,[6,[5]],[8,[7]]],[[11,[[9,[3]],10]]]],[[[2,[12]],4,[6,[5]],[8,[7]]],[[11,[[9,[13]],10]]]],[[[2,[14,14]],15],16],[[]],0,[[]],0,[[[2,[3]],17],[[8,[7]]]],0,[[[6,[18]],[21,[[0,[19,1]],20]],20,20,22,22],[[11,[[2,[[0,[19,1]]]],10]]]],[[[6,[18]],20,20,20,22],[[11,[2,10]]]],[[[6,[18]],20,20,20,22],[[11,[2,10]]]],[[]],[[],11],[[],11],[[],23],[[]]],"p":[[8,"Clone"],[3,"ElectrumUpdate"],[8,"Anchor"],[3,"Client"],[15,"u64"],[4,"Option"],[3,"Txid"],[3,"Vec"],[3,"LocalUpdate"],[4,"Error"],[4,"Result"],[3,"ConfirmationHeightAnchor"],[3,"ConfirmationTimeAnchor"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[3,"TxGraph"],[3,"CheckPoint"],[8,"Ord"],[8,"IntoIterator"],[3,"BTreeMap"],[15,"usize"],[3,"TypeId"],[8,"ElectrumExt"]]},\ +"bdk_esplora":{"doc":"BDK Esplora","t":[8,8,2,10,10,10,10,11,11,11,11],"n":["EsploraAsyncExt","EsploraExt","esplora_client","update_local_chain","update_local_chain","update_tx_graph","update_tx_graph","update_tx_graph_without_keychain","update_tx_graph_without_keychain","update_tx_graph_without_keychain","update_tx_graph_without_keychain"],"q":["bdk_esplora","","","","","","","","","",""],"d":["Trait to extend the functionality of …","Trait to extend the functionality of …","","Prepare an LocalChain update with blocks fetched from …","Prepare an LocalChain update with blocks fetched from …","Scan Esplora for the data specified and return a TxGraph …","Scan Esplora for the data specified and return a TxGraph …","Convenience method to call update_tx_graph without …","Convenience method to call update_tx_graph without …","Convenience method to call update_tx_graph without …","Convenience method to call update_tx_graph without …"],"i":[0,0,0,17,18,17,18,17,17,18,18],"f":[0,0,0,[[[2,[1]],3],[[6,[4,5]]]],[[[2,[1]],[0,[3,7]]],[[10,[[9,[8]]]]]],[[[13,[[0,[11,12]],3]],3,3,14,14],[[6,[5]]]],[[[13,[[0,[3,7]]]],[0,[3,7]],[0,[3,7]],14,14],[[10,[[9,[8]]]]]],[[3,3,3,14],[[6,[[16,[15]],5]]]],[[3,3,3,14],[[6,[[16,[15]],5]]]],[[[0,[3,7]],[0,[3,7]],[0,[3,7]],14],[[10,[[9,[8]]]]]],[[[0,[3,7]],[0,[3,7]],[0,[3,7]],14],[[10,[[9,[8]]]]]]],"p":[[3,"CheckPoint"],[4,"Option"],[8,"IntoIterator"],[3,"Update"],[4,"Error"],[4,"Result"],[8,"Send"],[8,"Future"],[3,"Box"],[3,"Pin"],[8,"Ord"],[8,"Clone"],[3,"BTreeMap"],[15,"usize"],[3,"ConfirmationTimeAnchor"],[3,"TxGraph"],[8,"EsploraExt"],[8,"EsploraAsyncExt"]]},\ "bdk_file_store":{"doc":"BDK File Store","t":[13,3,4,13,13,13,4,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12],"n":["Bincode","EntryIter","FileError","InvalidMagicBytes","Io","Io","IterError","Store","aggregate_changesets","append_changeset","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into_iter","iter_changesets","load_from_persistence","new","new","new_from_path","next","provide","provide","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","write_changes","expected","got"],"q":["bdk_file_store","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_file_store::FileError",""],"d":["Failure to decode data from the file.","Iterator over entries in a file store.","Error that occurs due to problems encountered with the …","Magic bytes do not match what is expected.","Failure to read from the file.","IO error, this may mean that the file is too short.","Error type for EntryIter.","Persists an append-only list of changesets (C) to a single …","Loads all the changesets that have been stored as one …","Append a new changeset to the file and truncate the file …","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Iterates over the stored changeset from first to last, …","","","Creates a new store from a File.","Creates or loads a store from db_path.","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[4,0,0,8,4,8,0,0,1,1,9,4,1,8,9,4,1,8,4,4,1,8,8,9,4,4,1,8,8,9,4,1,8,9,1,1,9,1,1,9,4,8,4,8,9,4,1,8,9,4,1,8,9,4,1,8,9,4,1,8,1,16,16],"f":[0,0,0,0,0,0,0,0,[1],[1,[[3,[2]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[4,5],6],[[4,5],6],[[[1,[7]],5],6],[[8,5],6],[[8,5],6],[[]],[[]],[2,4],[[]],[2,8],[[]],[[]],[[]],[[]],[[]],[[]],[1,9],[1,3],[[10,11],9],[11,[[3,[1,8]]]],[[],[[3,[1,8]]]],[9,12],[13],[13],[[],14],[[],14],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],15],[[],15],[[],15],[[],15],[[]],[[]],[[]],[[]],[1,3],0,0],"p":[[3,"Store"],[3,"Error"],[4,"Result"],[4,"IterError"],[3,"Formatter"],[6,"Result"],[8,"Debug"],[4,"FileError"],[3,"EntryIter"],[15,"u64"],[3,"File"],[4,"Option"],[3,"Demand"],[3,"String"],[3,"TypeId"],[13,"InvalidMagicBytes"]]},\ "bdk_tmp_plan":{"doc":"A spending plan or plan for short is a representation of a …","t":[3,8,13,13,13,13,3,3,4,4,3,3,13,13,4,13,13,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,11,11,11,11,11,11,11,11,12,12,11,5,11,11,11,11,11,12,12,12,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12],"n":["Assets","CanDerive","Complete","DerivationError","Incomplete","Legacy","Plan","PlanKey","PlanState","RequiredSignatures","Requirements","SatisfactionMaterial","Segwitv0","SigHashError","SigningError","TapKey","TapScript","asset_key","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_derive","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","derivation_hint","descriptor_key","ecdsa_sigs","expected_weight","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash160","hash160_images","hash160_preimages","hash256","hash256_images","hash256_preimages","into","into","into","into","into","into","into","into","keys","max_locktime","min_version","plan_satisfaction","provide","required_locktime","required_sequence","requirements","requires_hash_preimages","ripemd160","ripemd160_images","ripemd160_preimages","schnorr_sigs","sha256","sha256_images","sha256_preimages","sign_with_keymap","signatures","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_complete","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","txo_age","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","witness_version","final_script_sig","final_script_witness","keys","keys","leaf_hash","merkle_root","plan_key","plan_keys"],"q":["bdk_tmp_plan","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_tmp_plan::PlanState","","bdk_tmp_plan::RequiredSignatures","","","","",""],"d":["","","The plan is complete","","","Legacy ECDSA signatures are required","A plan represents a particular spending path for a …","A plan key contains the asset key originally provided …","The returned value from Plan::try_complete.","The signatures required to complete the plan","Signatures and hash pre-images that must be provided to …","Signatures and hash pre-images that can be used to …","Segwitv0 ECDSA signatures are required","","","A Taproot key spend signature is required","Taproot script path signatures are required","The key the planner will sign with","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A hint from how to get from the asset key to the concrete …","The key that was in the descriptor that we are satisfying …","ECDSA signatures under their keys","The expected satisfaction weight for the plan if it is …","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","required hash160 pre-images","hash160 pre-images under their images","","required hash256 pre-images","hash256 pre-images under their images","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","The minmum required transaction version required on the …","","","The minimum required locktime height or time on the …","The minimum required sequence (height or time) on the …","","Whether any hash pre-images are required in the plan","","required ripemd160 pre-images","ripemd160 pre-images under their images","Schnorr signautres under their keys","","required sha256 pre-images","SHA256 pre-images under their images","","required signatures","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Witness version for the plan","The script sig that should be set on the input","The witness that should be set on the input","","","The leaf hash of the script being used","The merkle root of the taproot output","the internal key","The keys in the script that require signatures"],"i":[0,0,33,7,33,6,0,0,0,0,0,0,6,7,0,6,6,8,33,5,6,7,8,9,10,11,33,5,6,7,8,9,10,11,36,5,6,7,8,9,10,11,5,6,7,8,9,10,11,5,6,10,11,8,8,10,9,5,6,7,7,8,9,10,11,33,5,6,7,7,7,8,9,10,11,11,5,10,11,5,10,33,5,6,7,8,9,10,11,11,11,9,0,7,9,9,9,5,11,5,10,10,11,5,10,6,5,5,6,7,8,9,10,11,7,9,33,5,6,7,8,9,10,11,33,5,6,7,8,9,10,11,11,33,5,6,7,8,9,10,11,33,5,6,7,8,9,10,11,9,37,37,38,39,40,41,41,40],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,[[3,[2]]]],[[[5,[4]]],[[5,[4]]]],[[[6,[4]]],[[6,[4]]]],[7,7],[[[8,[4]]],[[8,[4]]]],[[[9,[4]]],[[9,[4]]]],[10,10],[[[11,[4]]],[[11,[4]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],5],[[],6],[[],10],[[],11],0,0,0,[9,12],[[[5,[13]],14],15],[[[6,[13]],14],15],[[7,14],15],[[7,14],15],[[[8,[13]],14],15],[[[9,[13]],14],15],[[10,14],15],[[[11,[13]],14],15],[[]],[[]],[[]],[16,7],[[]],[17,7],[[]],[[]],[[]],[[]],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[9,[[3,[18]]]],[[19,11],[[3,[9]]]],[20],[9,[[3,[21]]]],[9,[[3,[22]]]],[9,5],[5,23],0,0,0,0,0,0,0,[[[6,[24]],12,25,26,[3,[27]],[3,[28]],29,10,30],[[31,[23,7]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],32],[[9,10],33],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],0,[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[9,[[3,[35]]]],0,0,0,0,0,0,0,0],"p":[[3,"DefiniteDescriptorKey"],[3,"DerivationPath"],[4,"Option"],[8,"Clone"],[3,"Requirements"],[4,"RequiredSignatures"],[4,"SigningError"],[3,"PlanKey"],[3,"Plan"],[3,"SatisfactionMaterial"],[3,"Assets"],[15,"usize"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[4,"Error"],[4,"Error"],[15,"u32"],[4,"Descriptor"],[3,"Demand"],[4,"LockTime"],[3,"Sequence"],[15,"bool"],[4,"DescriptorPublicKey"],[6,"KeyMap"],[4,"Prevouts"],[4,"SchnorrSighashType"],[4,"EcdsaSighashType"],[3,"SighashCache"],[3,"Secp256k1"],[4,"Result"],[3,"String"],[4,"PlanState"],[3,"TypeId"],[4,"WitnessVersion"],[8,"CanDerive"],[13,"Complete"],[13,"Legacy"],[13,"Segwitv0"],[13,"TapScript"],[13,"TapKey"]]},\ "example_cli":{"doc":"","t":[13,4,3,13,13,13,4,4,6,13,13,13,4,6,6,13,13,13,13,13,13,13,13,13,13,4,2,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,12,2,11,11,11,11,11,11,11,11,11,11,11,12,12,5,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,5,11,11,11,11,11,11,11,11,12,11,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12],"n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","CoinSelectionAlgo","Commands","Database","External","Index","Internal","Keychain","KeychainAdditions","KeychainTxGraph","LargestFirst","List","List","New","NewestFirst","Next","OldestFirst","Send","SmallestFirst","TxOut","TxOutCmd","anyhow","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","bdk_file_store","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_descriptor","clap","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","cp_limit","create_tx","db_path","default","descriptor","deserialize","eq","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_str","handle_commands","has_subcommand","has_subcommand","has_subcommand","init","into","into","into","into","into","into","into_app","into_app_for_update","network","partial_cmp","planned_utxos","run_address_cmd","run_balance_cmd","run_send_cmd","run_txo_cmd","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","change","addr_cmd","address","coin_select","txout_cmd","value","confirmed","spent","unconfirmed","unspent"],"q":["example_cli","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","example_cli::AddressCmd","example_cli::Commands","","","","","example_cli::TxOutCmd","","",""],"d":["Address generation and inspection.","","","Get the wallet balance.","","","","","","","","","","","","","List all addresses","","Get a new address regardless of the existing unused …","","Get the next unused address.","","Send coins to an address.","","TxOut related commands.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return only confirmed outputs.","Return only spent outputs.","Return only unconfirmed outputs.","Return only unspent outputs."],"i":[4,0,0,4,5,4,0,0,0,8,6,8,0,0,0,5,6,7,6,5,6,5,4,5,4,0,0,21,21,4,6,7,4,6,7,0,21,4,5,6,7,8,21,4,5,6,7,8,21,0,4,5,6,7,8,4,5,6,7,8,8,21,21,0,21,5,21,8,8,8,4,5,5,6,7,8,8,21,4,5,6,7,8,21,4,6,7,21,4,6,7,5,0,4,6,7,0,21,4,5,6,7,8,21,21,21,8,0,0,0,0,0,8,4,5,6,7,8,5,8,21,4,5,6,7,8,21,4,5,6,7,8,21,4,5,6,7,8,21,4,6,7,21,4,6,7,21,4,5,6,7,8,32,33,34,34,35,34,36,36,36,36],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[[4,[[0,[2,3]]]]],[[4,[[0,[2,3]]]]]],[5,5],[6,6],[7,7],[8,8],[[]],[[]],[[]],[[]],[[]],[[8,8],9],0,0,[[10,11,5,12,13],14],0,[[],5],0,[[],[[15,[8]]]],[[8,8],16],[[],16],[[[4,[[0,[17,3]]]],18],19],[[5,18],19],[[5,18],19],[[6,18],19],[[7,18],19],[[8,18],19],[[8,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[20,[[15,[[21,[3]],22]]]],[20,[[15,[[4,[3]],22]]]],[20,[[15,[6,22]]]],[20,[[15,[7,22]]]],[20,[[15,[[21,[3]],22]]]],[20,[[15,[[4,[3]],22]]]],[20,[[15,[6,22]]]],[20,[[15,[7,22]]]],[23,[[15,[5]]]],[[24,24,24,11,25,26,[4,[3]]],14],[23,16],[23,16],[23,16],[23,14],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],0,[[8,8],[[27,[9]]]],[[10,28],[[15,[29]]]],[[10,24,25,6],14],[10,15],[[24,24,11,5,12,13,26],14],[[10,25,7],14],[8,15],[[]],[[]],[[]],[[]],[[]],[[],30],[[],30],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],31],[[],31],[[],31],[[],31],[[],31],[[],31],[[[21,[3]],20],[[15,[22]]]],[[[4,[3]],20],[[15,[22]]]],[[6,20],[[15,[22]]]],[[7,20],[[15,[22]]]],[[[21,[3]],20],[[15,[22]]]],[[[4,[3]],20],[[15,[22]]]],[[6,20],[[15,[22]]]],[[7,20],[[15,[22]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0],"p":[[6,"Command"],[8,"Clone"],[8,"Subcommand"],[4,"Commands"],[4,"CoinSelectionAlgo"],[4,"AddressCmd"],[4,"TxOutCmd"],[4,"Keychain"],[4,"Ordering"],[6,"KeychainTxGraph"],[3,"HashMap"],[3,"Address"],[15,"u64"],[6,"Result"],[4,"Result"],[15,"bool"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[3,"Args"],[3,"Error"],[15,"str"],[3,"Mutex"],[4,"Network"],[8,"FnOnce"],[4,"Option"],[3,"Assets"],[3,"Vec"],[3,"String"],[3,"TypeId"],[13,"List"],[13,"Address"],[13,"Send"],[13,"TxOut"],[13,"List"]]},\ -"example_electrum":{"doc":"","t":[17,6,17,17,4,13,3,13,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12],"n":["ASSUME_FINAL_DEPTH","ChangeSet","DB_MAGIC","DB_PATH","ElectrumCommands","Scan","ScanOptions","Sync","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","batch_size","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","fmt","fmt","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","has_subcommand","into","into","into_app","into_app_for_update","main","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","all_spks","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":["example_electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","example_electrum::ElectrumCommands","","","","","",""],"d":["","","","","","Scans the addresses in the wallet using the electrum API.","","Scans particular addresses using the electrum API.","","","","","Set batch size for each script_history call to electrum …","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","Scan every address that you have derived.","","","When a gap this large has been found for a keychain, it …","Scan unconfirmed transactions for updates.","Scan all the unused addresses.","Scan unspent outpoints for spends or changes to …"],"i":[0,0,0,0,0,2,0,2,3,3,2,2,3,2,3,2,3,2,3,2,3,3,2,3,2,3,2,3,2,3,2,2,3,3,3,0,2,3,2,3,2,3,2,3,2,3,2,3,2,3,13,14,13,14,13,13,13],"f":[0,0,0,0,0,0,0,0,[1,1],[1,1],[1,1],[1,1],0,[[]],[[]],[[]],[[]],[2,2],[3,3],[[]],[[]],[[3,3],4],[[2,5],6],[[3,5],6],[[]],[[]],[7,[[9,[2,8]]]],[7,[[9,[3,8]]]],[7,[[9,[2,8]]]],[7,[[9,[3,8]]]],[10,4],[[]],[[]],[[],1],[[],1],[[],11],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],12],[[],12],[[2,7],[[9,[8]]]],[[3,7],[[9,[8]]]],[[2,7],[[9,[8]]]],[[3,7],[[9,[8]]]],[[]],[[]],0,0,0,0,0,0,0],"p":[[6,"Command"],[4,"ElectrumCommands"],[3,"ScanOptions"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[3,"Error"],[4,"Result"],[15,"str"],[6,"Result"],[3,"TypeId"],[13,"Sync"],[13,"Scan"]]},\ +"example_electrum":{"doc":"","t":[6,17,17,4,13,3,13,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12],"n":["ChangeSet","DB_MAGIC","DB_PATH","ElectrumCommands","Scan","ScanOptions","Sync","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","batch_size","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","fmt","fmt","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","has_subcommand","into","into","into_app","into_app_for_update","main","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","all_spks","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":["example_electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","example_electrum::ElectrumCommands","","","","","",""],"d":["","","","","Scans the addresses in the wallet using the electrum API.","","Scans particular addresses using the electrum API.","","","","","Set batch size for each script_history call to electrum …","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","Scan every address that you have derived.","","","When a gap this large has been found for a keychain, it …","Scan unconfirmed transactions for updates.","Scan all the unused addresses.","Scan unspent outpoints for spends or changes to …"],"i":[0,0,0,0,2,0,2,3,3,2,2,3,2,3,2,3,2,3,2,3,3,2,3,2,3,2,3,2,3,2,2,3,3,3,0,2,3,2,3,2,3,2,3,2,3,2,3,2,3,13,14,13,14,13,13,13],"f":[0,0,0,0,0,0,0,[1,1],[1,1],[1,1],[1,1],0,[[]],[[]],[[]],[[]],[2,2],[3,3],[[]],[[]],[[3,3],4],[[2,5],6],[[3,5],6],[[]],[[]],[7,[[9,[2,8]]]],[7,[[9,[3,8]]]],[7,[[9,[2,8]]]],[7,[[9,[3,8]]]],[10,4],[[]],[[]],[[],1],[[],1],[[],11],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],12],[[],12],[[2,7],[[9,[8]]]],[[3,7],[[9,[8]]]],[[2,7],[[9,[8]]]],[[3,7],[[9,[8]]]],[[]],[[]],0,0,0,0,0,0,0],"p":[[6,"Command"],[4,"ElectrumCommands"],[3,"ScanOptions"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[3,"Error"],[4,"Result"],[15,"str"],[6,"Result"],[3,"TypeId"],[13,"Sync"],[13,"Scan"]]},\ "wallet_electrum_example":{"doc":"","t":[17,17,17,17,5],"n":["BATCH_SIZE","DB_MAGIC","SEND_AMOUNT","STOP_GAP","main"],"q":["wallet_electrum_example","","","",""],"d":["","","","",""],"i":[0,0,0,0,0],"f":[0,0,0,0,[[],[[3,[[2,[1]]]]]]],"p":[[8,"Error"],[3,"Box"],[4,"Result"]]},\ "wallet_esplora":{"doc":"","t":[17,17,17,17,5],"n":["DB_MAGIC","PARALLEL_REQUESTS","SEND_AMOUNT","STOP_GAP","main"],"q":["wallet_esplora","","","",""],"d":["","","","",""],"i":[0,0,0,0,0],"f":[0,0,0,0,[[],[[3,[[2,[1]]]]]]],"p":[[8,"Error"],[3,"Box"],[4,"Result"]]},\ "wallet_esplora_async":{"doc":"","t":[17,17,17,17,5],"n":["DB_MAGIC","PARALLEL_REQUESTS","SEND_AMOUNT","STOP_GAP","main"],"q":["wallet_esplora_async","","","",""],"d":["","","","",""],"i":[0,0,0,0,0],"f":[0,0,0,0,[[],[[3,[[2,[1]]]]]]],"p":[[8,"Error"],[3,"Box"],[4,"Result"]]}\ diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html index 1839992231..88075933cb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html @@ -1903,7 +1903,6 @@ 1902 1903 1904 -1905
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -1929,7 +1928,7 @@
     use bdk_chain::{
         indexed_tx_graph::IndexedAdditions,
         keychain::{KeychainTxOutIndex, LocalChangeSet, LocalUpdate},
    -    local_chain::{self, LocalChain, UpdateNotConnectedError},
    +    local_chain::{self, CannotConnectError, CheckPoint, CheckPointIter, LocalChain},
         tx_graph::{CanonicalTx, TxGraph},
         Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeAnchor, FullTxOut,
         IndexedTxGraph, Persist, PersistBackend,
    @@ -1938,8 +1937,8 @@
     use bitcoin::secp256k1::Secp256k1;
     use bitcoin::util::psbt;
     use bitcoin::{
    -    Address, BlockHash, EcdsaSighashType, LockTime, Network, OutPoint, SchnorrSighashType, Script,
    -    Sequence, Transaction, TxOut, Txid, Witness,
    +    Address, EcdsaSighashType, LockTime, Network, OutPoint, SchnorrSighashType, Script, Sequence,
    +    Transaction, TxOut, Txid, Witness,
     };
     use core::fmt;
     use core::ops::Deref;
    @@ -2151,7 +2150,7 @@
             };
     
             let changeset = db.load_from_persistence().map_err(NewError::Persist)?;
    -        chain.apply_changeset(changeset.chain_changeset);
    +        chain.apply_changeset(&changeset.chain_changeset);
             indexed_graph.apply_additions(changeset.indexed_additions);
     
             let persist = Persist::new(db);
    @@ -2276,19 +2275,19 @@
                 .graph()
                 .filter_chain_unspents(
                     &self.chain,
    -                self.chain.tip().unwrap_or_default(),
    +                self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default(),
                     self.indexed_graph.index.outpoints().iter().cloned(),
                 )
                 .map(|((k, i), full_txo)| new_local_utxo(k, i, full_txo))
         }
     
         /// Get all the checkpoints the wallet is currently storing indexed by height.
    -    pub fn checkpoints(&self) -> &BTreeMap<u32, BlockHash> {
    -        self.chain.blocks()
    +    pub fn checkpoints(&self) -> CheckPointIter {
    +        self.chain.iter_checkpoints()
         }
     
         /// Returns the latest checkpoint.
    -    pub fn latest_checkpoint(&self) -> Option<BlockId> {
    +    pub fn latest_checkpoint(&self) -> Option<CheckPoint> {
             self.chain.tip()
         }
     
    @@ -2326,7 +2325,7 @@
                 .graph()
                 .filter_chain_unspents(
                     &self.chain,
    -                self.chain.tip().unwrap_or_default(),
    +                self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default(),
                     core::iter::once((spk_i, op)),
                 )
                 .map(|((k, i), full_txo)| new_local_utxo(k, i, full_txo))
    @@ -2343,7 +2342,7 @@
             let canonical_tx = CanonicalTx {
                 observed_as: graph.get_chain_position(
                     &self.chain,
    -                self.chain.tip().unwrap_or_default(),
    +                self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default(),
                     txid,
                 )?,
                 node: graph.get_tx_node(txid)?,
    @@ -2366,7 +2365,7 @@
         pub fn insert_checkpoint(
             &mut self,
             block_id: BlockId,
    -    ) -> Result<bool, local_chain::InsertBlockNotMatchingError>
    +    ) -> Result<bool, local_chain::InsertBlockError>
         where
             D: PersistBackend<ChangeSet>,
         {
    @@ -2410,13 +2409,13 @@
                         .range(height..)
                         .next()
                         .ok_or(InsertTxError::ConfirmationHeightCannotBeGreaterThanTip {
    -                        tip_height: self.chain.tip().map(|b| b.height),
    +                        tip_height: self.chain.tip().map(|b| b.height()),
                             tx_height: height,
                         })
    -                    .map(|(&anchor_height, &anchor_hash)| ConfirmationTimeAnchor {
    +                    .map(|(&anchor_height, &hash)| ConfirmationTimeAnchor {
                             anchor_block: BlockId {
                                 height: anchor_height,
    -                            hash: anchor_hash,
    +                            hash,
                             },
                             confirmation_height: height,
                             confirmation_time: time,
    @@ -2437,9 +2436,10 @@
         pub fn transactions(
             &self,
         ) -> impl Iterator<Item = CanonicalTx<'_, Transaction, ConfirmationTimeAnchor>> + '_ {
    -        self.indexed_graph
    -            .graph()
    -            .list_chain_txs(&self.chain, self.chain.tip().unwrap_or_default())
    +        self.indexed_graph.graph().list_chain_txs(
    +            &self.chain,
    +            self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default(),
    +        )
         }
     
         /// Return the balance, separated into available, trusted-pending, untrusted-pending and immature
    @@ -2447,7 +2447,7 @@
         pub fn get_balance(&self) -> Balance {
             self.indexed_graph.graph().balance(
                 &self.chain,
    -            self.chain.tip().unwrap_or_default(),
    +            self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default(),
                 self.indexed_graph.index.outpoints().iter().cloned(),
                 |&(k, _), _| k == KeychainKind::Internal,
             )
    @@ -2621,8 +2621,7 @@
                 None => self
                     .chain
                     .tip()
    -                .and_then(|cp| cp.height.into())
    -                .map(|height| LockTime::from_height(height).expect("Invalid height")),
    +                .map(|cp| LockTime::from_height(cp.height()).expect("Invalid height")),
                 h => h,
             };
     
    @@ -2936,7 +2935,7 @@
         ) -> Result<TxBuilder<'_, D, DefaultCoinSelectionAlgorithm, BumpFee>, Error> {
             let graph = self.indexed_graph.graph();
             let txout_index = &self.indexed_graph.index;
    -        let chain_tip = self.chain.tip().unwrap_or_default();
    +        let chain_tip = self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default();
     
             let mut tx = graph
                 .get_tx(txid)
    @@ -3171,7 +3170,7 @@
             psbt: &mut psbt::PartiallySignedTransaction,
             sign_options: SignOptions,
         ) -> Result<bool, Error> {
    -        let chain_tip = self.chain.tip().unwrap_or_default();
    +        let chain_tip = self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default();
     
             let tx = &psbt.unsigned_tx;
             let mut finished = true;
    @@ -3194,7 +3193,7 @@
                     });
                 let current_height = sign_options
                     .assume_height
    -                .or(self.chain.tip().map(|b| b.height));
    +                .or(self.chain.tip().map(|b| b.height()));
     
                 debug!(
                     "Input #{} - {}, using `confirmation_height` = {:?}, `current_height` = {:?}",
    @@ -3339,7 +3338,7 @@
             must_only_use_confirmed_tx: bool,
             current_height: Option<u32>,
         ) -> (Vec<WeightedUtxo>, Vec<WeightedUtxo>) {
    -        let chain_tip = self.chain.tip().unwrap_or_default();
    +        let chain_tip = self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default();
             //    must_spend <- manually selected utxos
             //    may_spend  <- all other available utxos
             let mut may_spend = self.get_available_utxos();
    @@ -3604,27 +3603,26 @@
     
         /// Applies an update to the wallet and stages the changes (but does not [`commit`] them).
         ///
    -    /// This returns whether the `update` resulted in any changes.
    -    ///
         /// Usually you create an `update` by interacting with some blockchain data source and inserting
         /// transactions related to your wallet into it.
         ///
         /// [`commit`]: Self::commit
    -    pub fn apply_update(&mut self, update: Update) -> Result<bool, UpdateNotConnectedError>
    +    pub fn apply_update(&mut self, update: Update) -> Result<(), CannotConnectError>
         where
             D: PersistBackend<ChangeSet>,
         {
    -        let mut changeset: ChangeSet = self.chain.apply_update(update.chain)?.into();
    +        let mut changeset = ChangeSet::from(self.chain.apply_update(update.chain)?);
             let (_, index_additions) = self
                 .indexed_graph
                 .index
    -            .reveal_to_target_multi(&update.keychain);
    +            .reveal_to_target_multi(&update.last_active_indices);
             changeset.append(ChangeSet::from(IndexedAdditions::from(index_additions)));
    -        changeset.append(self.indexed_graph.apply_update(update.graph).into());
    +        changeset.append(ChangeSet::from(
    +            self.indexed_graph.apply_update(update.graph),
    +        ));
     
    -        let changed = !changeset.is_empty();
             self.persist.stage(changeset);
    -        Ok(changed)
    +        Ok(())
         }
     
         /// Commits all curently [`staged`] changed to the persistence backend returning and error when
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html
    index b8bc5a1174..116cb28e2d 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html
    @@ -260,6 +260,14 @@
     260
     261
     262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
     
    //! Module for keychain related structures.
     //!
     //! A keychain here is a set of application-defined indexes for a miniscript descriptor where we can
    @@ -273,10 +281,7 @@
     //! [`SpkTxOutIndex`]: crate::SpkTxOutIndex
     
     use crate::{
    -    collections::BTreeMap,
    -    indexed_tx_graph::IndexedAdditions,
    -    local_chain::{self, LocalChain},
    -    tx_graph::TxGraph,
    +    collections::BTreeMap, indexed_tx_graph::IndexedAdditions, local_chain, tx_graph::TxGraph,
         Anchor, Append,
     };
     
    @@ -347,24 +352,33 @@
         }
     }
     
    -/// A structure to update [`KeychainTxOutIndex`], [`TxGraph`] and [`LocalChain`]
    -/// atomically.
    -#[derive(Debug, Clone, PartialEq)]
    +/// A structure to update [`KeychainTxOutIndex`], [`TxGraph`] and [`LocalChain`] atomically.
    +///
    +/// [`LocalChain`]: local_chain::LocalChain
    +#[derive(Debug, Clone)]
     pub struct LocalUpdate<K, A> {
    -    /// Last active derivation index per keychain (`K`).
    -    pub keychain: BTreeMap<K, u32>,
    +    /// Contains the last active derivation indices per keychain (`K`), which is used to update the
    +    /// [`KeychainTxOutIndex`].
    +    pub last_active_indices: BTreeMap<K, u32>,
    +
         /// Update for the [`TxGraph`].
         pub graph: TxGraph<A>,
    +
         /// Update for the [`LocalChain`].
    -    pub chain: LocalChain,
    +    ///
    +    /// [`LocalChain`]: local_chain::LocalChain
    +    pub chain: local_chain::Update,
     }
     
    -impl<K, A> Default for LocalUpdate<K, A> {
    -    fn default() -> Self {
    +impl<K, A> LocalUpdate<K, A> {
    +    /// Construct a [`LocalUpdate`] with a given [`local_chain::Update`].
    +    ///
    +    /// [`CheckPoint`]: local_chain::CheckPoint
    +    pub fn new(chain_update: local_chain::Update) -> Self {
             Self {
    -            keychain: Default::default(),
    -            graph: Default::default(),
    -            chain: Default::default(),
    +            last_active_indices: BTreeMap::new(),
    +            graph: TxGraph::default(),
    +            chain: chain_update,
             }
         }
     }
    @@ -384,6 +398,8 @@
     )]
     pub struct LocalChangeSet<K, A> {
         /// Changes to the [`LocalChain`].
    +    ///
    +    /// [`LocalChain`]: local_chain::LocalChain
         pub chain_changeset: local_chain::ChangeSet,
     
         /// Additions to [`IndexedTxGraph`].
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/local_chain.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/local_chain.rs.html
    index 5e88857f5e..c8e9a88e16 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/local_chain.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/local_chain.rs.html
    @@ -248,19 +248,486 @@
     248
     249
     250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +321
    +322
    +323
    +324
    +325
    +326
    +327
    +328
    +329
    +330
    +331
    +332
    +333
    +334
    +335
    +336
    +337
    +338
    +339
    +340
    +341
    +342
    +343
    +344
    +345
    +346
    +347
    +348
    +349
    +350
    +351
    +352
    +353
    +354
    +355
    +356
    +357
    +358
    +359
    +360
    +361
    +362
    +363
    +364
    +365
    +366
    +367
    +368
    +369
    +370
    +371
    +372
    +373
    +374
    +375
    +376
    +377
    +378
    +379
    +380
    +381
    +382
    +383
    +384
    +385
    +386
    +387
    +388
    +389
    +390
    +391
    +392
    +393
    +394
    +395
    +396
    +397
    +398
    +399
    +400
    +401
    +402
    +403
    +404
    +405
    +406
    +407
    +408
    +409
    +410
    +411
    +412
    +413
    +414
    +415
    +416
    +417
    +418
    +419
    +420
    +421
    +422
    +423
    +424
    +425
    +426
    +427
    +428
    +429
    +430
    +431
    +432
    +433
    +434
    +435
    +436
    +437
    +438
    +439
    +440
    +441
    +442
    +443
    +444
    +445
    +446
    +447
    +448
    +449
    +450
    +451
    +452
    +453
    +454
    +455
    +456
    +457
    +458
    +459
    +460
    +461
    +462
    +463
    +464
    +465
    +466
    +467
    +468
    +469
    +470
    +471
    +472
    +473
    +474
    +475
    +476
    +477
    +478
    +479
    +480
    +481
    +482
    +483
    +484
    +485
    +486
    +487
    +488
    +489
    +490
    +491
    +492
    +493
    +494
    +495
    +496
    +497
    +498
    +499
    +500
    +501
    +502
    +503
    +504
    +505
    +506
    +507
    +508
    +509
    +510
    +511
    +512
    +513
    +514
    +515
    +516
    +517
    +518
    +519
    +520
    +521
    +522
    +523
    +524
    +525
    +526
    +527
    +528
    +529
    +530
    +531
    +532
    +533
    +534
    +535
    +536
    +537
    +538
    +539
    +540
    +541
    +542
    +543
    +544
    +545
    +546
    +547
    +548
    +549
    +550
    +551
    +552
    +553
    +554
    +555
    +556
    +557
    +558
    +559
    +560
    +561
    +562
     
    //! The [`LocalChain`] is a local implementation of [`ChainOracle`].
     
     use core::convert::Infallible;
     
    -use alloc::collections::BTreeMap;
    +use crate::collections::BTreeMap;
    +use crate::{BlockId, ChainOracle};
    +use alloc::sync::Arc;
     use bitcoin::BlockHash;
     
    -use crate::{BlockId, ChainOracle};
    +/// A structure that represents changes to [`LocalChain`].
    +///
    +/// The key represents the block height, and the value either represents added a new [`CheckPoint`]
    +/// (if [`Some`]), or removing a [`CheckPoint`] (if [`None`]).
    +pub type ChangeSet = BTreeMap<u32, Option<BlockHash>>;
    +
    +/// A [`LocalChain`] checkpoint is used to find the agreement point between two chains and as a
    +/// transaction anchor.
    +///
    +/// Each checkpoint contains the height and hash of a block ([`BlockId`]).
    +///
    +/// Internaly, checkpoints are nodes of a reference-counted linked-list. This allows the caller to
    +/// cheaply clone a [`CheckPoint`] without copying the whole list and to view the entire chain
    +/// without holding a lock on [`LocalChain`].
    +#[derive(Debug, Clone)]
    +pub struct CheckPoint(Arc<CPInner>);
    +
    +/// The internal contents of [`CheckPoint`].
    +#[derive(Debug, Clone)]
    +struct CPInner {
    +    /// Block id (hash and height).
    +    block: BlockId,
    +    /// Previous checkpoint (if any).
    +    prev: Option<Arc<CPInner>>,
    +}
    +
    +impl CheckPoint {
    +    /// Construct a new base block at the front of a linked list.
    +    pub fn new(block: BlockId) -> Self {
    +        Self(Arc::new(CPInner { block, prev: None }))
    +    }
    +
    +    /// Puts another checkpoint onto the linked list representing the blockchain.
    +    ///
    +    /// Returns an `Err(self)` if the block you are pushing on is not at a greater height that the one you
    +    /// are pushing on to.
    +    pub fn push(self, block: BlockId) -> Result<Self, Self> {
    +        if self.height() < block.height {
    +            Ok(Self(Arc::new(CPInner {
    +                block,
    +                prev: Some(self.0),
    +            })))
    +        } else {
    +            Err(self)
    +        }
    +    }
    +
    +    /// Extends the checkpoint linked list by a iterator of block ids.
    +    ///
    +    /// Returns an `Err(self)` if there is block which does not have a greater height than the
    +    /// previous one.
    +    pub fn extend(self, blocks: impl IntoIterator<Item = BlockId>) -> Result<Self, Self> {
    +        let mut curr = self.clone();
    +        for block in blocks {
    +            curr = curr.push(block).map_err(|_| self.clone())?;
    +        }
    +        Ok(curr)
    +    }
    +
    +    /// Get the [`BlockId`] of the checkpoint.
    +    pub fn block_id(&self) -> BlockId {
    +        self.0.block
    +    }
    +
    +    /// Get the height of the checkpoint.
    +    pub fn height(&self) -> u32 {
    +        self.0.block.height
    +    }
    +
    +    /// Get the block hash of the checkpoint.
    +    pub fn hash(&self) -> BlockHash {
    +        self.0.block.hash
    +    }
    +
    +    /// Get the previous checkpoint in the chain
    +    pub fn prev(&self) -> Option<CheckPoint> {
    +        self.0.prev.clone().map(CheckPoint)
    +    }
    +
    +    /// Iterate from this checkpoint in descending height.
    +    pub fn iter(&self) -> CheckPointIter {
    +        self.clone().into_iter()
    +    }
    +}
    +
    +/// A structure that iterates over checkpoints backwards.
    +pub struct CheckPointIter {
    +    current: Option<Arc<CPInner>>,
    +}
    +
    +impl Iterator for CheckPointIter {
    +    type Item = CheckPoint;
    +
    +    fn next(&mut self) -> Option<Self::Item> {
    +        let current = self.current.clone()?;
    +        self.current = current.prev.clone();
    +        Some(CheckPoint(current))
    +    }
    +}
    +
    +impl IntoIterator for CheckPoint {
    +    type Item = CheckPoint;
    +    type IntoIter = CheckPointIter;
    +
    +    fn into_iter(self) -> Self::IntoIter {
    +        CheckPointIter {
    +            current: Some(self.0),
    +        }
    +    }
    +}
    +
    +/// A struct to update [`LocalChain`].
    +///
    +/// This is used as input for [`LocalChain::apply_update`]. It contains the update's chain `tip` and
    +/// a flag `introduce_older_blocks` which signals whether this update intends to introduce missing
    +/// blocks to the original chain.
    +///
    +/// Block-by-block syncing mechanisms would typically create updates that builds upon the previous
    +/// tip. In this case, `introduce_older_blocks` would be `false`.
    +///
    +/// Script-pubkey based syncing mechanisms may not introduce transactions in a chronological order
    +/// so some updates require introducing older blocks (to anchor older transactions). For
    +/// script-pubkey based syncing, `introduce_older_blocks` would typically be `true`.
    +#[derive(Debug, Clone)]
    +pub struct Update {
    +    /// The update chain's new tip.
    +    pub tip: CheckPoint,
    +
    +    /// Whether the update allows for introducing older blocks.
    +    ///
    +    /// Refer to [struct-level documentation] for more.
    +    ///
    +    /// [struct-level documentation]: Update
    +    pub introduce_older_blocks: bool,
    +}
     
     /// This is a local implementation of [`ChainOracle`].
    -#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
    +#[derive(Debug, Default, Clone)]
     pub struct LocalChain {
    -    blocks: BTreeMap<u32, BlockHash>,
    +    tip: Option<CheckPoint>,
    +    index: BTreeMap<u32, BlockHash>,
    +}
    +
    +impl PartialEq for LocalChain {
    +    fn eq(&self, other: &Self) -> bool {
    +        self.index == other.index
    +    }
    +}
    +
    +impl From<LocalChain> for BTreeMap<u32, BlockHash> {
    +    fn from(value: LocalChain) -> Self {
    +        value.index
    +    }
    +}
    +
    +impl From<BTreeMap<u32, BlockHash>> for LocalChain {
    +    fn from(value: BTreeMap<u32, BlockHash>) -> Self {
    +        Self::from_blocks(value)
    +    }
     }
     
     impl ChainOracle for LocalChain {
    @@ -269,215 +736,247 @@
         fn is_block_in_chain(
             &self,
             block: BlockId,
    -        static_block: BlockId,
    +        chain_tip: BlockId,
         ) -> Result<Option<bool>, Self::Error> {
    -        if block.height > static_block.height {
    +        if block.height > chain_tip.height {
                 return Ok(None);
             }
             Ok(
                 match (
    -                self.blocks.get(&block.height),
    -                self.blocks.get(&static_block.height),
    +                self.index.get(&block.height),
    +                self.index.get(&chain_tip.height),
                 ) {
    -                (Some(&hash), Some(&static_hash)) => {
    -                    Some(hash == block.hash && static_hash == static_block.hash)
    -                }
    +                (Some(cp), Some(tip_cp)) => Some(*cp == block.hash && *tip_cp == chain_tip.hash),
                     _ => None,
                 },
             )
         }
     
         fn get_chain_tip(&self) -> Result<Option<BlockId>, Self::Error> {
    -        Ok(self.tip())
    +        Ok(self.tip.as_ref().map(|tip| tip.block_id()))
         }
     }
     
    -impl AsRef<BTreeMap<u32, BlockHash>> for LocalChain {
    -    fn as_ref(&self) -> &BTreeMap<u32, BlockHash> {
    -        &self.blocks
    -    }
    -}
    +impl LocalChain {
    +    /// Construct a [`LocalChain`] from an initial `changeset`.
    +    pub fn from_changeset(changeset: ChangeSet) -> Self {
    +        let mut chain = Self::default();
    +        chain.apply_changeset(&changeset);
     
    -impl From<LocalChain> for BTreeMap<u32, BlockHash> {
    -    fn from(value: LocalChain) -> Self {
    -        value.blocks
    +        debug_assert!(chain._check_index_is_consistent_with_tip());
    +        debug_assert!(chain._check_changeset_is_applied(&changeset));
    +
    +        chain
         }
    -}
     
    -impl From<BTreeMap<u32, BlockHash>> for LocalChain {
    -    fn from(value: BTreeMap<u32, BlockHash>) -> Self {
    -        Self { blocks: value }
    +    /// Construct a [`LocalChain`] from a given `checkpoint` tip.
    +    pub fn from_tip(tip: CheckPoint) -> Self {
    +        let mut chain = Self {
    +            tip: Some(tip),
    +            ..Default::default()
    +        };
    +        chain.reindex(0);
    +        debug_assert!(chain._check_index_is_consistent_with_tip());
    +        chain
         }
    -}
     
    -impl LocalChain {
    -    /// Contruct a [`LocalChain`] from a list of [`BlockId`]s.
    -    pub fn from_blocks<B>(blocks: B) -> Self
    -    where
    -        B: IntoIterator<Item = BlockId>,
    -    {
    -        Self {
    -            blocks: blocks.into_iter().map(|b| (b.height, b.hash)).collect(),
    +    /// Constructs a [`LocalChain`] from a [`BTreeMap`] of height to [`BlockHash`].
    +    ///
    +    /// The [`BTreeMap`] enforces the height order. However, the caller must ensure the blocks are
    +    /// all of the same chain.
    +    pub fn from_blocks(blocks: BTreeMap<u32, BlockHash>) -> Self {
    +        let mut tip: Option<CheckPoint> = None;
    +
    +        for block in &blocks {
    +            match tip {
    +                Some(curr) => {
    +                    tip = Some(
    +                        curr.push(BlockId::from(block))
    +                            .expect("BTreeMap is ordered"),
    +                    )
    +                }
    +                None => tip = Some(CheckPoint::new(BlockId::from(block))),
    +            }
             }
    -    }
     
    -    /// Get a reference to a map of block height to hash.
    -    pub fn blocks(&self) -> &BTreeMap<u32, BlockHash> {
    -        &self.blocks
    +        let chain = Self { index: blocks, tip };
    +
    +        debug_assert!(chain._check_index_is_consistent_with_tip());
    +
    +        chain
         }
     
    -    /// Get the chain tip.
    -    pub fn tip(&self) -> Option<BlockId> {
    -        self.blocks
    -            .iter()
    -            .last()
    -            .map(|(&height, &hash)| BlockId { height, hash })
    +    /// Get the highest checkpoint.
    +    pub fn tip(&self) -> Option<CheckPoint> {
    +        self.tip.clone()
         }
     
    -    /// This is like the sparsechain's logic, expect we must guarantee that all invalidated heights
    -    /// are to be re-filled.
    -    pub fn determine_changeset(&self, update: &Self) -> Result<ChangeSet, UpdateNotConnectedError> {
    -        let update = update.as_ref();
    -        let update_tip = match update.keys().last().cloned() {
    -            Some(tip) => tip,
    -            None => return Ok(ChangeSet::default()),
    -        };
    +    /// Returns whether the [`LocalChain`] is empty (has no checkpoints).
    +    pub fn is_empty(&self) -> bool {
    +        let res = self.tip.is_none();
    +        debug_assert_eq!(res, self.index.is_empty());
    +        res
    +    }
     
    -        // this is the latest height where both the update and local chain has the same block hash
    -        let agreement_height = update
    -            .iter()
    -            .rev()
    -            .find(|&(u_height, u_hash)| self.blocks.get(u_height) == Some(u_hash))
    -            .map(|(&height, _)| height);
    -
    -        // the lower bound of the range to invalidate
    -        let invalidate_lb = match agreement_height {
    -            Some(height) if height == update_tip => u32::MAX,
    -            Some(height) => height + 1,
    -            None => 0,
    -        };
    +    /// Applies the given `update` to the chain.
    +    ///
    +    /// The method returns [`ChangeSet`] on success. This represents the applied changes to `self`.
    +    ///
    +    /// There must be no ambiguity about which of the existing chain's blocks are still valid and
    +    /// which are now invalid. That is, the new chain must implicitly connect to a definite block in
    +    /// the existing chain and invalidate the block after it (if it exists) by including a block at
    +    /// the same height but with a different hash to explicitly exclude it as a connection point.
    +    ///
    +    /// Additionally, an empty chain can be updated with any chain, and a chain with a single block
    +    /// can have it's block invalidated by an update chain with a block at the same height but
    +    /// different hash.
    +    ///
    +    /// # Errors
    +    ///
    +    /// An error will occur if the update does not correctly connect with `self`.
    +    ///
    +    /// Refer to [`Update`] for more about the update struct.
    +    ///
    +    /// [module-level documentation]: crate::local_chain
    +    pub fn apply_update(&mut self, update: Update) -> Result<ChangeSet, CannotConnectError> {
    +        match self.tip() {
    +            Some(original_tip) => {
    +                let changeset = merge_chains(
    +                    original_tip,
    +                    update.tip.clone(),
    +                    update.introduce_older_blocks,
    +                )?;
    +                self.apply_changeset(&changeset);
     
    -        // the first block's height to invalidate in the local chain
    -        let invalidate_from_height = self.blocks.range(invalidate_lb..).next().map(|(&h, _)| h);
    +                // return early as `apply_changeset` already calls `check_consistency`
    +                Ok(changeset)
    +            }
    +            None => {
    +                *self = Self::from_tip(update.tip);
    +                let changeset = self.initial_changeset();
     
    -        // the first block of height to invalidate (if any) should be represented in the update
    -        if let Some(first_invalid_height) = invalidate_from_height {
    -            if !update.contains_key(&first_invalid_height) {
    -                return Err(UpdateNotConnectedError(first_invalid_height));
    +                debug_assert!(self._check_index_is_consistent_with_tip());
    +                debug_assert!(self._check_changeset_is_applied(&changeset));
    +                Ok(changeset)
                 }
             }
    +    }
     
    -        let mut changeset: BTreeMap<u32, Option<BlockHash>> = match invalidate_from_height {
    -            Some(first_invalid_height) => {
    -                // the first block of height to invalidate should be represented in the update
    -                if !update.contains_key(&first_invalid_height) {
    -                    return Err(UpdateNotConnectedError(first_invalid_height));
    +    /// Apply the given `changeset`.
    +    pub fn apply_changeset(&mut self, changeset: &ChangeSet) {
    +        if let Some(start_height) = changeset.keys().next().cloned() {
    +            let mut extension = BTreeMap::default();
    +            let mut base: Option<CheckPoint> = None;
    +            for cp in self.iter_checkpoints() {
    +                if cp.height() >= start_height {
    +                    extension.insert(cp.height(), cp.hash());
    +                } else {
    +                    base = Some(cp);
    +                    break;
                     }
    -                self.blocks
    -                    .range(first_invalid_height..)
    -                    .map(|(height, _)| (*height, None))
    -                    .collect()
    -            }
    -            None => BTreeMap::new(),
    -        };
    -        for (height, update_hash) in update {
    -            let original_hash = self.blocks.get(height);
    -            if Some(update_hash) != original_hash {
    -                changeset.insert(*height, Some(*update_hash));
                 }
    -        }
    -
    -        Ok(changeset)
    -    }
     
    -    /// Applies the given `changeset`.
    -    pub fn apply_changeset(&mut self, changeset: ChangeSet) {
    -        for (height, blockhash) in changeset {
    -            match blockhash {
    -                Some(blockhash) => self.blocks.insert(height, blockhash),
    -                None => self.blocks.remove(&height),
    +            for (&height, &hash) in changeset {
    +                match hash {
    +                    Some(hash) => {
    +                        extension.insert(height, hash);
    +                    }
    +                    None => {
    +                        extension.remove(&height);
    +                    }
    +                };
    +            }
    +            let new_tip = match base {
    +                Some(base) => Some(
    +                    base.extend(extension.into_iter().map(BlockId::from))
    +                        .expect("extension is strictly greater than base"),
    +                ),
    +                None => LocalChain::from_blocks(extension).tip(),
                 };
    -        }
    -    }
    +            self.tip = new_tip;
    +            self.reindex(start_height);
     
    -    /// Updates [`LocalChain`] with an update [`LocalChain`].
    -    ///
    -    /// This is equivalent to calling [`determine_changeset`] and [`apply_changeset`] in sequence.
    -    ///
    -    /// [`determine_changeset`]: Self::determine_changeset
    -    /// [`apply_changeset`]: Self::apply_changeset
    -    pub fn apply_update(&mut self, update: Self) -> Result<ChangeSet, UpdateNotConnectedError> {
    -        let changeset = self.determine_changeset(&update)?;
    -        self.apply_changeset(changeset.clone());
    -        Ok(changeset)
    -    }
    -
    -    /// Derives a [`ChangeSet`] that assumes that there are no preceding changesets.
    -    ///
    -    /// The changeset returned will record additions of all blocks included in [`Self`].
    -    pub fn initial_changeset(&self) -> ChangeSet {
    -        self.blocks
    -            .iter()
    -            .map(|(&height, &hash)| (height, Some(hash)))
    -            .collect()
    +            debug_assert!(self._check_index_is_consistent_with_tip());
    +            debug_assert!(self._check_changeset_is_applied(changeset));
    +        }
         }
     
    -    /// Insert a block of [`BlockId`] into the [`LocalChain`].
    +    /// Insert a [`BlockId`].
         ///
    -    /// # Error
    +    /// # Errors
         ///
    -    /// If the insertion height already contains a block, and the block has a different blockhash,
    -    /// this will result in an [`InsertBlockNotMatchingError`].
    -    pub fn insert_block(
    -        &mut self,
    -        block_id: BlockId,
    -    ) -> Result<ChangeSet, InsertBlockNotMatchingError> {
    -        let mut update = Self::from_blocks(self.tip());
    -
    -        if let Some(original_hash) = update.blocks.insert(block_id.height, block_id.hash) {
    +    /// Replacing the block hash of an existing checkpoint will result in an error.
    +    pub fn insert_block(&mut self, block_id: BlockId) -> Result<ChangeSet, InsertBlockError> {
    +        if let Some(&original_hash) = self.index.get(&block_id.height) {
                 if original_hash != block_id.hash {
    -                return Err(InsertBlockNotMatchingError {
    +                return Err(InsertBlockError {
                         height: block_id.height,
                         original_hash,
                         update_hash: block_id.hash,
                     });
    +            } else {
    +                return Ok(ChangeSet::default());
                 }
             }
     
    -        Ok(self.apply_update(update).expect("should always connect"))
    +        let mut changeset = ChangeSet::default();
    +        changeset.insert(block_id.height, Some(block_id.hash));
    +        self.apply_changeset(&changeset);
    +        Ok(changeset)
         }
    -}
     
    -/// This is the return value of [`determine_changeset`] and represents changes to [`LocalChain`].
    -///
    -/// [`determine_changeset`]: LocalChain::determine_changeset
    -pub type ChangeSet = BTreeMap<u32, Option<BlockHash>>;
    +    /// Reindex the heights in the chain from (and including) `from` height
    +    fn reindex(&mut self, from: u32) {
    +        let _ = self.index.split_off(&from);
    +        for cp in self.iter_checkpoints() {
    +            if cp.height() < from {
    +                break;
    +            }
    +            self.index.insert(cp.height(), cp.hash());
    +        }
    +    }
     
    -/// Represents an update failure of [`LocalChain`] due to the update not connecting to the original
    -/// chain.
    -///
    -/// The update cannot be applied to the chain because the chain suffix it represents did not
    -/// connect to the existing chain. This error case contains the checkpoint height to include so
    -/// that the chains can connect.
    -#[derive(Clone, Debug, PartialEq)]
    -pub struct UpdateNotConnectedError(pub u32);
    +    /// Derives an initial [`ChangeSet`], meaning that it can be applied to an empty chain to
    +    /// recover the current chain.
    +    pub fn initial_changeset(&self) -> ChangeSet {
    +        self.index.iter().map(|(k, v)| (*k, Some(*v))).collect()
    +    }
     
    -impl core::fmt::Display for UpdateNotConnectedError {
    -    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    -        write!(
    -            f,
    -            "the update cannot connect with the chain, try include block at height {}",
    -            self.0
    -        )
    +    /// Iterate over checkpoints in descending height order.
    +    pub fn iter_checkpoints(&self) -> CheckPointIter {
    +        CheckPointIter {
    +            current: self.tip.as_ref().map(|tip| tip.0.clone()),
    +        }
         }
    -}
     
    -#[cfg(feature = "std")]
    -impl std::error::Error for UpdateNotConnectedError {}
    +    /// Get a reference to the internal index mapping the height to block hash.
    +    pub fn blocks(&self) -> &BTreeMap<u32, BlockHash> {
    +        &self.index
    +    }
    +
    +    fn _check_index_is_consistent_with_tip(&self) -> bool {
    +        let tip_history = self
    +            .tip
    +            .iter()
    +            .flat_map(CheckPoint::iter)
    +            .map(|cp| (cp.height(), cp.hash()))
    +            .collect::<BTreeMap<_, _>>();
    +        self.index == tip_history
    +    }
    +
    +    fn _check_changeset_is_applied(&self, changeset: &ChangeSet) -> bool {
    +        for (height, exp_hash) in changeset {
    +            if self.index.get(height) != exp_hash.as_ref() {
    +                return false;
    +            }
    +        }
    +        true
    +    }
    +}
     
     /// Represents a failure when trying to insert a checkpoint into [`LocalChain`].
     #[derive(Clone, Debug, PartialEq)]
    -pub struct InsertBlockNotMatchingError {
    +pub struct InsertBlockError {
         /// The checkpoints' height.
         pub height: u32,
         /// Original checkpoint's block hash.
    @@ -486,7 +985,7 @@
         pub update_hash: BlockHash,
     }
     
    -impl core::fmt::Display for InsertBlockNotMatchingError {
    +impl core::fmt::Display for InsertBlockError {
         fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
             write!(
                 f,
    @@ -497,6 +996,131 @@
     }
     
     #[cfg(feature = "std")]
    -impl std::error::Error for InsertBlockNotMatchingError {}
    +impl std::error::Error for InsertBlockError {}
    +
    +/// Occurs when an update does not have a common checkpoint with the original chain.
    +#[derive(Clone, Debug, PartialEq)]
    +pub struct CannotConnectError {
    +    /// The suggested checkpoint to include to connect the two chains.
    +    pub try_include_height: u32,
    +}
    +
    +impl core::fmt::Display for CannotConnectError {
    +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    +        write!(
    +            f,
    +            "introduced chain cannot connect with the original chain, try include height {}",
    +            self.try_include_height,
    +        )
    +    }
    +}
    +
    +#[cfg(feature = "std")]
    +impl std::error::Error for CannotConnectError {}
    +
    +fn merge_chains(
    +    original_tip: CheckPoint,
    +    update_tip: CheckPoint,
    +    introduce_older_blocks: bool,
    +) -> Result<ChangeSet, CannotConnectError> {
    +    let mut changeset = ChangeSet::default();
    +    let mut orig = original_tip.into_iter();
    +    let mut update = update_tip.into_iter();
    +    let mut curr_orig = None;
    +    let mut curr_update = None;
    +    let mut prev_orig: Option<CheckPoint> = None;
    +    let mut prev_update: Option<CheckPoint> = None;
    +    let mut point_of_agreement_found = false;
    +    let mut prev_orig_was_invalidated = false;
    +    let mut potentially_invalidated_heights = vec![];
    +
    +    // To find the difference between the new chain and the original we iterate over both of them
    +    // from the tip backwards in tandem. We always dealing with the highest one from either chain
    +    // first and move to the next highest. The crucial logic is applied when they have blocks at the
    +    // same height.
    +    loop {
    +        if curr_orig.is_none() {
    +            curr_orig = orig.next();
    +        }
    +        if curr_update.is_none() {
    +            curr_update = update.next();
    +        }
    +
    +        match (curr_orig.as_ref(), curr_update.as_ref()) {
    +            // Update block that doesn't exist in the original chain
    +            (o, Some(u)) if Some(u.height()) > o.map(|o| o.height()) => {
    +                changeset.insert(u.height(), Some(u.hash()));
    +                prev_update = curr_update.take();
    +            }
    +            // Original block that isn't in the update
    +            (Some(o), u) if Some(o.height()) > u.map(|u| u.height()) => {
    +                // this block might be gone if an earlier block gets invalidated
    +                potentially_invalidated_heights.push(o.height());
    +                prev_orig_was_invalidated = false;
    +                prev_orig = curr_orig.take();
    +
    +                // OPTIMIZATION: we have run out of update blocks so we don't need to continue
    +                // iterating becuase there's no possibility of adding anything to changeset.
    +                if u.is_none() {
    +                    break;
    +                }
    +            }
    +            (Some(o), Some(u)) => {
    +                if o.hash() == u.hash() {
    +                    // We have found our point of agreement 🎉 -- we require that the previous (i.e.
    +                    // higher because we are iterating backwards) block in the original chain was
    +                    // invalidated (if it exists). This ensures that there is an unambigious point of
    +                    // connection to the original chain from the update chain (i.e. we know the
    +                    // precisely which original blocks are invalid).
    +                    if !prev_orig_was_invalidated && !point_of_agreement_found {
    +                        if let (Some(prev_orig), Some(_prev_update)) = (&prev_orig, &prev_update) {
    +                            return Err(CannotConnectError {
    +                                try_include_height: prev_orig.height(),
    +                            });
    +                        }
    +                    }
    +                    point_of_agreement_found = true;
    +                    prev_orig_was_invalidated = false;
    +                    // OPTIMIZATION 1 -- If we know that older blocks cannot be introduced without
    +                    // invalidation, we can break after finding the point of agreement.
    +                    // OPTIMIZATION 2 -- if we have the same underlying pointer at this point, we
    +                    // can guarantee that no older blocks are introduced.
    +                    if !introduce_older_blocks || Arc::as_ptr(&o.0) == Arc::as_ptr(&u.0) {
    +                        return Ok(changeset);
    +                    }
    +                } else {
    +                    // We have an invalidation height so we set the height to the updated hash and
    +                    // also purge all the original chain block hashes above this block.
    +                    changeset.insert(u.height(), Some(u.hash()));
    +                    for invalidated_height in potentially_invalidated_heights.drain(..) {
    +                        changeset.insert(invalidated_height, None);
    +                    }
    +                    prev_orig_was_invalidated = true;
    +                }
    +                prev_update = curr_update.take();
    +                prev_orig = curr_orig.take();
    +            }
    +            (None, None) => {
    +                break;
    +            }
    +            _ => {
    +                unreachable!("compiler cannot tell that everything has been covered")
    +            }
    +        }
    +    }
    +
    +    // When we don't have a point of agreement you can imagine it is implicitly the
    +    // genesis block so we need to do the final connectivity check which in this case
    +    // just means making sure the entire original chain was invalidated.
    +    if !prev_orig_was_invalidated && !point_of_agreement_found {
    +        if let Some(prev_orig) = prev_orig {
    +            return Err(CannotConnectError {
    +                try_include_height: prev_orig.height(),
    +            });
    +        }
    +    }
    +
    +    Ok(changeset)
    +}
     
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_data_traits.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_data_traits.rs.html index 72d2367236..f2d801b9ba 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_data_traits.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_data_traits.rs.html @@ -118,6 +118,8 @@ 118 119 120 +121 +122
    use crate::collections::BTreeMap;
     use crate::collections::BTreeSet;
     use crate::BlockId;
    @@ -158,6 +160,8 @@
     
     /// Trait that "anchors" blockchain data to a specific block of height and hash.
     ///
    +/// [`Anchor`] implementations must be [`Ord`] by the anchor block's [`BlockId`] first.
    +///
     /// I.e. If transaction A is anchored in block B, then if block B is in the best chain, we can
     /// assume that transaction A is also confirmed in the best chain. This does not necessarily mean
     /// that transaction A is confirmed in block B. It could also mean transaction A is confirmed in a
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html
    index 1f7556264d..99682709a3 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html
    @@ -1183,6 +1183,69 @@
     1183
     1184
     1185
    +1186
    +1187
    +1188
    +1189
    +1190
    +1191
    +1192
    +1193
    +1194
    +1195
    +1196
    +1197
    +1198
    +1199
    +1200
    +1201
    +1202
    +1203
    +1204
    +1205
    +1206
    +1207
    +1208
    +1209
    +1210
    +1211
    +1212
    +1213
    +1214
    +1215
    +1216
    +1217
    +1218
    +1219
    +1220
    +1221
    +1222
    +1223
    +1224
    +1225
    +1226
    +1227
    +1228
    +1229
    +1230
    +1231
    +1232
    +1233
    +1234
    +1235
    +1236
    +1237
    +1238
    +1239
    +1240
    +1241
    +1242
    +1243
    +1244
    +1245
    +1246
    +1247
    +1248
     
    //! Module for structures that store and traverse transactions.
     //!
     //! [`TxGraph`] is a monotone structure that inserts transactions and indexes the spends. The
    @@ -1241,8 +1304,8 @@
     //! ```
     
     use crate::{
    -    collections::*, keychain::Balance, Anchor, Append, BlockId, ChainOracle, ChainPosition,
    -    ForEachTxOut, FullTxOut,
    +    collections::*, keychain::Balance, local_chain::LocalChain, Anchor, Append, BlockId,
    +    ChainOracle, ChainPosition, ForEachTxOut, FullTxOut,
     };
     use alloc::vec::Vec;
     use bitcoin::{OutPoint, Script, Transaction, TxOut, Txid};
    @@ -1783,6 +1846,69 @@
     }
     
     impl<A: Anchor> TxGraph<A> {
    +    /// Find missing block heights of `chain`.
    +    ///
    +    /// This works by scanning through anchors, and seeing whether the anchor block of the anchor
    +    /// exists in the [`LocalChain`]. The returned iterator does not output duplicate heights.
    +    pub fn missing_heights<'a>(&'a self, chain: &'a LocalChain) -> impl Iterator<Item = u32> + 'a {
    +        // Map of txids to skip.
    +        //
    +        // Usually, if a height of a tx anchor is missing from the chain, we would want to return
    +        // this height in the iterator. The exception is when the tx is confirmed in chain. All the
    +        // other missing-height anchors of this tx can be skipped.
    +        //
    +        // * Some(true)  => skip all anchors of this txid
    +        // * Some(false) => do not skip anchors of this txid
    +        // * None        => we do not know whether we can skip this txid
    +        let mut txids_to_skip = HashMap::<Txid, bool>::new();
    +
    +        // Keeps track of the last height emitted so we don't double up.
    +        let mut last_height_emitted = Option::<u32>::None;
    +
    +        self.anchors
    +            .iter()
    +            .filter(move |(_, txid)| {
    +                let skip = *txids_to_skip.entry(*txid).or_insert_with(|| {
    +                    let tx_anchors = match self.txs.get(txid) {
    +                        Some((_, anchors, _)) => anchors,
    +                        None => return true,
    +                    };
    +                    let mut has_missing_height = false;
    +                    for anchor_block in tx_anchors.iter().map(Anchor::anchor_block) {
    +                        match chain.blocks().get(&anchor_block.height) {
    +                            None => {
    +                                has_missing_height = true;
    +                                continue;
    +                            }
    +                            Some(chain_hash) => {
    +                                if chain_hash == &anchor_block.hash {
    +                                    return true;
    +                                }
    +                            }
    +                        }
    +                    }
    +                    !has_missing_height
    +                });
    +                #[cfg(feature = "std")]
    +                debug_assert!({
    +                    println!("txid={} skip={}", txid, skip);
    +                    true
    +                });
    +                !skip
    +            })
    +            .filter_map(move |(a, _)| {
    +                let anchor_block = a.anchor_block();
    +                if Some(anchor_block.height) != last_height_emitted
    +                    && !chain.blocks().contains_key(&anchor_block.height)
    +                {
    +                    last_height_emitted = Some(anchor_block.height);
    +                    Some(anchor_block.height)
    +                } else {
    +                    None
    +                }
    +            })
    +    }
    +
         /// Get the position of the transaction in `chain` with tip `chain_tip`.
         ///
         /// If the given transaction of `txid` does not exist in the chain of `chain_tip`, `None` is
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/electrum_ext.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/electrum_ext.rs.html
    index cab646137e..e6d17f12b0 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/electrum_ext.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/electrum_ext.rs.html
    @@ -484,38 +484,111 @@
     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
     
    use bdk_chain::{
    -    bitcoin::{hashes::hex::FromHex, BlockHash, OutPoint, Script, Transaction, Txid},
    +    bitcoin::{hashes::hex::FromHex, OutPoint, Script, Transaction, Txid},
         keychain::LocalUpdate,
    -    local_chain::LocalChain,
    +    local_chain::{self, CheckPoint},
         tx_graph::{self, TxGraph},
         Anchor, BlockId, ConfirmationHeightAnchor, ConfirmationTimeAnchor,
     };
    -use electrum_client::{Client, ElectrumApi, Error};
    +use electrum_client::{Client, ElectrumApi, Error, HeaderNotification};
     use std::{
         collections::{BTreeMap, BTreeSet, HashMap, HashSet},
         fmt::Debug,
     };
     
    -#[derive(Debug, Clone)]
    +/// We assume that a block of this depth and deeper cannot be reorged.
    +const ASSUME_FINAL_DEPTH: u32 = 8;
    +
    +/// Represents an update fetched from an Electrum server, but excludes full transactions.
    +///
    +/// To provide a complete update to [`TxGraph`], you'll need to call [`Self::missing_full_txs`] to
    +/// determine the full transactions missing from [`TxGraph`]. Then call [`Self::finalize`] to fetch
    +/// the full transactions from Electrum and finalize the update.
    +#[derive(Debug, Clone)]
     pub struct ElectrumUpdate<K, A> {
    -    pub graph_update: HashMap<Txid, BTreeSet<A>>,
    -    pub chain_update: LocalChain,
    -    pub keychain_update: BTreeMap<K, u32>,
    +    /// Map of [`Txid`]s to associated [`Anchor`]s.
    +    pub graph_update: HashMap<Txid, BTreeSet<A>>,
    +    /// The latest chain tip, as seen by the Electrum server.
    +    pub new_tip: local_chain::CheckPoint,
    +    /// Last-used index update for [`KeychainTxOutIndex`](bdk_chain::keychain::KeychainTxOutIndex).
    +    pub keychain_update: BTreeMap<K, u32>,
     }
     
    -impl<K, A> Default for ElectrumUpdate<K, A> {
    -    fn default() -> Self {
    +impl<K, A: Anchor> ElectrumUpdate<K, A> {
    +    fn new(new_tip: local_chain::CheckPoint) -> Self {
             Self {
    -            graph_update: Default::default(),
    -            chain_update: Default::default(),
    -            keychain_update: Default::default(),
    +            new_tip,
    +            graph_update: HashMap::new(),
    +            keychain_update: BTreeMap::new(),
             }
         }
    -}
     
    -impl<K, A: Anchor> ElectrumUpdate<K, A> {
    -    pub fn missing_full_txs<A2>(&self, graph: &TxGraph<A2>) -> Vec<Txid> {
    +    /// Determine the full transactions that are missing from `graph`.
    +    ///
    +    /// Refer to [`ElectrumUpdate`].
    +    pub fn missing_full_txs<A2>(&self, graph: &TxGraph<A2>) -> Vec<Txid> {
             self.graph_update
                 .keys()
                 .filter(move |&&txid| graph.as_ref().get_tx(txid).is_none())
    @@ -523,7 +596,10 @@
                 .collect()
         }
     
    -    pub fn finalize(
    +    /// Finalizes update with `missing` txids to fetch from `client`.
    +    ///
    +    /// Refer to [`ElectrumUpdate`].
    +    pub fn finalize(
             self,
             client: &Client,
             seen_at: Option<u64>,
    @@ -540,9 +616,12 @@
                 }
             }
             Ok(LocalUpdate {
    -            keychain: self.keychain_update,
    +            last_active_indices: self.keychain_update,
                 graph: graph_update,
    -            chain: self.chain_update,
    +            chain: local_chain::Update {
    +                tip: self.new_tip,
    +                introduce_older_blocks: true,
    +            },
             })
         }
     }
    @@ -608,7 +687,7 @@
             };
     
             Ok(LocalUpdate {
    -            keychain: update.keychain,
    +            last_active_indices: update.last_active_indices,
                 graph: {
                     let mut graph = TxGraph::default();
                     graph.apply_additions(graph_additions);
    @@ -619,12 +698,22 @@
         }
     }
     
    -pub trait ElectrumExt<A> {
    -    fn get_tip(&self) -> Result<(u32, BlockHash), Error>;
    -
    -    fn scan<K: Ord + Clone>(
    +/// Trait to extend [`Client`] functionality.
    +pub trait ElectrumExt<A> {
    +    /// Scan the blockchain (via electrum) for the data specified and returns a [`ElectrumUpdate`].
    +    ///
    +    /// - `prev_tip`: the most recent blockchain tip present locally
    +    /// - `keychain_spks`: keychains that we want to scan transactions for
    +    /// - `txids`: transactions for which we want updated [`Anchor`]s
    +    /// - `outpoints`: transactions associated with these outpoints (residing, spending) that we
    +    ///     want to included in the update
    +    ///
    +    /// The scan for each keychain stops after a gap of `stop_gap` script pubkeys with no associated
    +    /// transactions. `batch_size` specifies the max number of script pubkeys to request for in a
    +    /// single batch request.
    +    fn scan<K: Ord + Clone>(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
    +        prev_tip: Option<CheckPoint>,
             keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
             txids: impl IntoIterator<Item = Txid>,
             outpoints: impl IntoIterator<Item = OutPoint>,
    @@ -632,9 +721,12 @@
             batch_size: usize,
         ) -> Result<ElectrumUpdate<K, A>, Error>;
     
    -    fn scan_without_keychain(
    +    /// Convenience method to call [`scan`] without requiring a keychain.
    +    ///
    +    /// [`scan`]: ElectrumExt::scan
    +    fn scan_without_keychain(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
    +        prev_tip: Option<CheckPoint>,
             misc_spks: impl IntoIterator<Item = Script>,
             txids: impl IntoIterator<Item = Txid>,
             outpoints: impl IntoIterator<Item = OutPoint>,
    @@ -646,7 +738,7 @@
                 .map(|(i, spk)| (i as u32, spk));
     
             self.scan(
    -            local_chain,
    +            prev_tip,
                 [((), spk_iter)].into(),
                 txids,
                 outpoints,
    @@ -657,15 +749,9 @@
     }
     
     impl ElectrumExt<ConfirmationHeightAnchor> for Client {
    -    fn get_tip(&self) -> Result<(u32, BlockHash), Error> {
    -        // TODO: unsubscribe when added to the client, or is there a better call to use here?
    -        self.block_headers_subscribe()
    -            .map(|data| (data.height as u32, data.header.block_hash()))
    -    }
    -
         fn scan<K: Ord + Clone>(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
    +        prev_tip: Option<CheckPoint>,
             keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
             txids: impl IntoIterator<Item = Txid>,
             outpoints: impl IntoIterator<Item = OutPoint>,
    @@ -682,20 +768,20 @@
             let outpoints = outpoints.into_iter().collect::<Vec<_>>();
     
             let update = loop {
    -            let mut update = ElectrumUpdate::<K, ConfirmationHeightAnchor> {
    -                chain_update: prepare_chain_update(self, local_chain)?,
    -                ..Default::default()
    -            };
    -            let anchor_block = update
    -                .chain_update
    -                .tip()
    -                .expect("must have atleast one block");
    +            let (tip, _) = construct_update_tip(self, prev_tip.clone())?;
    +            let mut update = ElectrumUpdate::<K, ConfirmationHeightAnchor>::new(tip.clone());
    +            let cps = update
    +                .new_tip
    +                .iter()
    +                .take(10)
    +                .map(|cp| (cp.height(), cp))
    +                .collect::<BTreeMap<u32, CheckPoint>>();
     
                 if !request_spks.is_empty() {
                     if !scanned_spks.is_empty() {
                         scanned_spks.append(&mut populate_with_spks(
                             self,
    -                        anchor_block,
    +                        &cps,
                             &mut update,
                             &mut scanned_spks
                                 .iter()
    @@ -708,7 +794,7 @@
                         scanned_spks.extend(
                             populate_with_spks(
                                 self,
    -                            anchor_block,
    +                            &cps,
                                 &mut update,
                                 keychain_spks,
                                 stop_gap,
    @@ -720,20 +806,14 @@
                     }
                 }
     
    -            populate_with_txids(self, anchor_block, &mut update, &mut txids.iter().cloned())?;
    +            populate_with_txids(self, &cps, &mut update, &mut txids.iter().cloned())?;
     
    -            let _txs = populate_with_outpoints(
    -                self,
    -                anchor_block,
    -                &mut update,
    -                &mut outpoints.iter().cloned(),
    -            )?;
    +            let _txs =
    +                populate_with_outpoints(self, &cps, &mut update, &mut outpoints.iter().cloned())?;
     
                 // check for reorgs during scan process
    -            let server_blockhash = self
    -                .block_header(anchor_block.height as usize)?
    -                .block_hash();
    -            if anchor_block.hash != server_blockhash {
    +            let server_blockhash = self.block_header(tip.height() as usize)?.block_hash();
    +            if tip.hash() != server_blockhash {
                     continue; // reorg
                 }
     
    @@ -754,46 +834,86 @@
         }
     }
     
    -/// Prepare an update "template" based on the checkpoints of the `local_chain`.
    -fn prepare_chain_update(
    +/// Return a [`CheckPoint`] of the latest tip, that connects with `prev_tip`.
    +fn construct_update_tip(
         client: &Client,
    -    local_chain: &BTreeMap<u32, BlockHash>,
    -) -> Result<LocalChain, Error> {
    -    let mut update = LocalChain::default();
    -
    -    // Find the local chain block that is still there so our update can connect to the local chain.
    -    for (&existing_height, &existing_hash) in local_chain.iter().rev() {
    -        // TODO: a batch request may be safer, as a reorg that happens when we are obtaining
    -        //       `block_header`s will result in inconsistencies
    -        let current_hash = client.block_header(existing_height as usize)?.block_hash();
    -        let _ = update
    -            .insert_block(BlockId {
    -                height: existing_height,
    -                hash: current_hash,
    -            })
    -            .expect("This never errors because we are working with a fresh chain");
    +    prev_tip: Option<CheckPoint>,
    +) -> Result<(CheckPoint, Option<u32>), Error> {
    +    let HeaderNotification { height, .. } = client.block_headers_subscribe()?;
    +    let new_tip_height = height as u32;
     
    -        if current_hash == existing_hash {
    -            break;
    +    // If electrum returns a tip height that is lower than our previous tip, then checkpoints do
    +    // not need updating. We just return the previous tip and use that as the point of agreement.
    +    if let Some(prev_tip) = prev_tip.as_ref() {
    +        if new_tip_height < prev_tip.height() {
    +            return Ok((prev_tip.clone(), Some(prev_tip.height())));
             }
         }
     
    -    // Insert the new tip so new transactions will be accepted into the sparsechain.
    -    let tip = {
    -        let (height, hash) = crate::get_tip(client)?;
    -        BlockId { height, hash }
    +    // Atomically fetch the latest `ASSUME_FINAL_DEPTH` count of blocks from Electrum. We use this
    +    // to construct our checkpoint update.
    +    let mut new_blocks = {
    +        let start_height = new_tip_height.saturating_sub(ASSUME_FINAL_DEPTH);
    +        let hashes = client
    +            .block_headers(start_height as _, ASSUME_FINAL_DEPTH as _)?
    +            .headers
    +            .into_iter()
    +            .map(|h| h.block_hash());
    +        (start_height..).zip(hashes).collect::<BTreeMap<u32, _>>()
         };
    -    if update.insert_block(tip).is_err() {
    -        // There has been a re-org before we even begin scanning addresses.
    -        // Just recursively call (this should never happen).
    -        return prepare_chain_update(client, local_chain);
    -    }
     
    -    Ok(update)
    +    // Find the "point of agreement" (if any).
    +    let agreement_cp = {
    +        let mut agreement_cp = Option::<CheckPoint>::None;
    +        for cp in prev_tip.iter().flat_map(CheckPoint::iter) {
    +            let cp_block = cp.block_id();
    +            let hash = match new_blocks.get(&cp_block.height) {
    +                Some(&hash) => hash,
    +                None => {
    +                    assert!(
    +                        new_tip_height >= cp_block.height,
    +                        "already checked that electrum's tip cannot be smaller"
    +                    );
    +                    let hash = client.block_header(cp_block.height as _)?.block_hash();
    +                    new_blocks.insert(cp_block.height, hash);
    +                    hash
    +                }
    +            };
    +            if hash == cp_block.hash {
    +                agreement_cp = Some(cp);
    +                break;
    +            }
    +        }
    +        agreement_cp
    +    };
    +
    +    let agreement_height = agreement_cp.as_ref().map(CheckPoint::height);
    +
    +    let new_tip = new_blocks
    +        .into_iter()
    +        // Prune `new_blocks` to only include blocks that are actually new.
    +        .filter(|(height, _)| Some(*height) > agreement_height)
    +        .map(|(height, hash)| BlockId { height, hash })
    +        .fold(agreement_cp, |prev_cp, block| {
    +            Some(match prev_cp {
    +                Some(cp) => cp.push(block).expect("must extend checkpoint"),
    +                None => CheckPoint::new(block),
    +            })
    +        })
    +        .expect("must have at least one checkpoint");
    +
    +    Ok((new_tip, agreement_height))
     }
     
    -fn determine_tx_anchor(
    -    anchor_block: BlockId,
    +/// A [tx status] comprises of a concatenation of `tx_hash:height:`s. We transform a single one of
    +/// these concatenations into a [`ConfirmationHeightAnchor`] if possible.
    +///
    +/// We use the lowest possible checkpoint as the anchor block (from `cps`). If an anchor block
    +/// cannot be found, or the transaction is unconfirmed, [`None`] is returned.
    +///
    +/// [tx status](https://electrumx-spesmilo.readthedocs.io/en/latest/protocol-basics.html#status)
    +fn determine_tx_anchor(
    +    cps: &BTreeMap<u32, CheckPoint>,
         raw_height: i32,
         txid: Txid,
     ) -> Option<ConfirmationHeightAnchor> {
    @@ -805,6 +925,7 @@
             == Txid::from_hex("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")
                 .expect("must deserialize genesis coinbase txid")
         {
    +        let anchor_block = cps.values().next()?.block_id();
             return Some(ConfirmationHeightAnchor {
                 anchor_block,
                 confirmation_height: 0,
    @@ -817,6 +938,7 @@
             }
             h => {
                 let h = h as u32;
    +            let anchor_block = cps.range(h..).next().map(|(_, cp)| cp.block_id())?;
                 if h > anchor_block.height {
                     None
                 } else {
    @@ -831,7 +953,7 @@
     
     fn populate_with_outpoints<K>(
         client: &Client,
    -    anchor_block: BlockId,
    +    cps: &BTreeMap<u32, CheckPoint>,
         update: &mut ElectrumUpdate<K, ConfirmationHeightAnchor>,
         outpoints: &mut impl Iterator<Item = OutPoint>,
     ) -> Result<HashMap<Txid, Transaction>, Error> {
    @@ -880,7 +1002,7 @@
                     }
                 };
     
    -            let anchor = determine_tx_anchor(anchor_block, res.height, res.tx_hash);
    +            let anchor = determine_tx_anchor(cps, res.height, res.tx_hash);
     
                 let tx_entry = update.graph_update.entry(res.tx_hash).or_default();
                 if let Some(anchor) = anchor {
    @@ -893,7 +1015,7 @@
     
     fn populate_with_txids<K>(
         client: &Client,
    -    anchor_block: BlockId,
    +    cps: &BTreeMap<u32, CheckPoint>,
         update: &mut ElectrumUpdate<K, ConfirmationHeightAnchor>,
         txids: &mut impl Iterator<Item = Txid>,
     ) -> Result<(), Error> {
    @@ -915,7 +1037,7 @@
                 .into_iter()
                 .find(|r| r.tx_hash == txid)
             {
    -            Some(r) => determine_tx_anchor(anchor_block, r.height, txid),
    +            Some(r) => determine_tx_anchor(cps, r.height, txid),
                 None => continue,
             };
     
    @@ -929,7 +1051,7 @@
     
     fn populate_with_spks<K, I: Ord + Clone>(
         client: &Client,
    -    anchor_block: BlockId,
    +    cps: &BTreeMap<u32, CheckPoint>,
         update: &mut ElectrumUpdate<K, ConfirmationHeightAnchor>,
         spks: &mut impl Iterator<Item = (I, Script)>,
         stop_gap: usize,
    @@ -963,7 +1085,7 @@
     
                 for tx in spk_history {
                     let tx_entry = update.graph_update.entry(tx.tx_hash).or_default();
    -                if let Some(anchor) = determine_tx_anchor(anchor_block, tx.height, tx.tx_hash) {
    +                if let Some(anchor) = determine_tx_anchor(cps, tx.height, tx.tx_hash) {
                         tx_entry.insert(anchor);
                     }
                 }
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/lib.rs.html
    index 621f859653..0bff2e31e7 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/lib.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_electrum/lib.rs.html
    @@ -26,13 +26,6 @@
     26
     27
     28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
     
    //! This crate is used for updating structures of the [`bdk_chain`] crate with data from electrum.
     //!
     //! The star of the show is the [`ElectrumExt::scan`] method, which scans for relevant blockchain
    @@ -50,23 +43,16 @@
     //!
     //! Refer to [`bdk_electrum_example`] for a complete example.
     //!
    -//! [`ElectrumClient::scan`]: ElectrumClient::scan
    +//! [`ElectrumClient::scan`]: electrum_client::ElectrumClient::scan
     //! [`missing_full_txs`]: ElectrumUpdate::missing_full_txs
    -//! [`batch_transaction_get`]: ElectrumApi::batch_transaction_get
    +//! [`batch_transaction_get`]: electrum_client::ElectrumApi::batch_transaction_get
     //! [`bdk_electrum_example`]: https://github.com/LLFourn/bdk_core_staging/tree/master/bdk_electrum_example
     
    -use bdk_chain::bitcoin::BlockHash;
    -use electrum_client::{Client, ElectrumApi, Error};
    -mod electrum_ext;
    +#![warn(missing_docs)]
    +
    +mod electrum_ext;
     pub use bdk_chain;
     pub use electrum_client;
     pub use electrum_ext::*;
    -
    -fn get_tip(client: &Client) -> Result<(u32, BlockHash), Error> {
    -    // TODO: unsubscribe when added to the client, or is there a better call to use here?
    -    client
    -        .block_headers_subscribe()
    -        .map(|data| (data.height as u32, data.header.block_hash()))
    -}
     
    \ No newline at end of file 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 5bdfe15619..b0a8b1bd3f 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 @@ -267,44 +267,114 @@ 267 268 269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325
    use async_trait::async_trait;
    +use bdk_chain::collections::btree_map;
     use bdk_chain::{
         bitcoin::{BlockHash, OutPoint, Script, Txid},
    -    collections::BTreeMap,
    -    keychain::LocalUpdate,
    -    BlockId, ConfirmationTimeAnchor,
    +    collections::{BTreeMap, BTreeSet},
    +    local_chain::{self, CheckPoint},
    +    BlockId, ConfirmationTimeAnchor, TxGraph,
     };
    -use esplora_client::{Error, OutputStatus, TxStatus};
    +use esplora_client::{Error, TxStatus};
     use futures::{stream::FuturesOrdered, TryStreamExt};
     
    -use crate::map_confirmation_time_anchor;
    +use crate::{anchor_from_status, ASSUME_FINAL_DEPTH};
     
    -/// Trait to extend [`esplora_client::AsyncClient`] functionality.
    +/// Trait to extend the functionality of [`esplora_client::AsyncClient`].
     ///
    -/// This is the async version of [`EsploraExt`]. Refer to
    -/// [crate-level documentation] for more.
    +/// Refer to [crate-level documentation] for more.
     ///
    -/// [`EsploraExt`]: crate::EsploraExt
     /// [crate-level documentation]: crate
     #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
     #[cfg_attr(not(target_arch = "wasm32"), async_trait)]
     pub trait EsploraAsyncExt {
    -    /// Scan the blockchain (via esplora) for the data specified and returns a
    -    /// [`LocalUpdate<K, ConfirmationTimeAnchor>`].
    +    /// Prepare an [`LocalChain`] update with blocks fetched from Esplora.
         ///
    -    /// - `local_chain`: the most recent block hashes present locally
    -    /// - `keychain_spks`: keychains that we want to scan transactions for
    -    /// - `txids`: transactions for which we want updated [`ConfirmationTimeAnchor`]s
    -    /// - `outpoints`: transactions associated with these outpoints (residing, spending) that we
    -    ///     want to included in the update
    +    /// * `prev_tip` is the previous tip of [`LocalChain::tip`].
    +    /// * `get_heights` is the block heights that we are interested in fetching from Esplora.
    +    ///
    +    /// The result of this method can be applied to [`LocalChain::apply_update`].
    +    ///
    +    /// [`LocalChain`]: bdk_chain::local_chain::LocalChain
    +    /// [`LocalChain::tip`]: bdk_chain::local_chain::LocalChain::tip
    +    /// [`LocalChain::apply_update`]: bdk_chain::local_chain::LocalChain::apply_update
    +    #[allow(clippy::result_large_err)]
    +    async fn update_local_chain(
    +        &self,
    +        local_tip: Option<CheckPoint>,
    +        request_heights: impl IntoIterator<IntoIter = impl Iterator<Item = u32> + Send> + Send,
    +    ) -> Result<local_chain::Update, Error>;
    +
    +    /// Scan Esplora for the data specified and return a [`TxGraph`] and a map of last active
    +    /// indices.
    +    ///
    +    /// * `keychain_spks`: keychains that we want to scan transactions for
    +    /// * `txids`: transactions for which we want updated [`ConfirmationTimeAnchor`]s
    +    /// * `outpoints`: transactions associated with these outpoints (residing, spending) that we
    +    ///     want to include in the update
         ///
         /// The 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.
    -    #[allow(clippy::result_large_err)] // FIXME
    -    async fn scan<K: Ord + Clone + Send>(
    +    #[allow(clippy::result_large_err)]
    +    async fn update_tx_graph<K: Ord + Clone + Send>(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
             keychain_spks: BTreeMap<
                 K,
                 impl IntoIterator<IntoIter = impl Iterator<Item = (u32, Script)> + Send> + Send,
    @@ -313,22 +383,20 @@
             outpoints: impl IntoIterator<IntoIter = impl Iterator<Item = OutPoint> + Send> + Send,
             stop_gap: usize,
             parallel_requests: usize,
    -    ) -> Result<LocalUpdate<K, ConfirmationTimeAnchor>, Error>;
    +    ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>;
     
    -    /// Convenience method to call [`scan`] without requiring a keychain.
    +    /// Convenience method to call [`update_tx_graph`] without requiring a keychain.
         ///
    -    /// [`scan`]: EsploraAsyncExt::scan
    -    #[allow(clippy::result_large_err)] // FIXME
    -    async fn scan_without_keychain(
    +    /// [`update_tx_graph`]: EsploraAsyncExt::update_tx_graph
    +    #[allow(clippy::result_large_err)]
    +    async fn update_tx_graph_without_keychain(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
             misc_spks: impl IntoIterator<IntoIter = impl Iterator<Item = Script> + Send> + Send,
             txids: impl IntoIterator<IntoIter = impl Iterator<Item = Txid> + Send> + Send,
             outpoints: impl IntoIterator<IntoIter = impl Iterator<Item = OutPoint> + Send> + Send,
             parallel_requests: usize,
    -    ) -> Result<LocalUpdate<(), ConfirmationTimeAnchor>, Error> {
    -        self.scan(
    -            local_chain,
    +    ) -> Result<TxGraph<ConfirmationTimeAnchor>, Error> {
    +        self.update_tx_graph(
                 [(
                     (),
                     misc_spks
    @@ -343,16 +411,123 @@
                 parallel_requests,
             )
             .await
    -    }
    +        .map(|(g, _)| g)
    +    }
     }
     
     #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
     #[cfg_attr(not(target_arch = "wasm32"), async_trait)]
     impl EsploraAsyncExt for esplora_client::AsyncClient {
    -    #[allow(clippy::result_large_err)] // FIXME
    -    async fn scan<K: Ord + Clone + Send>(
    +    async fn update_local_chain(
    +        &self,
    +        local_tip: Option<CheckPoint>,
    +        request_heights: impl IntoIterator<IntoIter = impl Iterator<Item = u32> + Send> + Send,
    +    ) -> Result<local_chain::Update, Error> {
    +        let request_heights = request_heights.into_iter().collect::<BTreeSet<_>>();
    +        let new_tip_height = self.get_height().await?;
    +
    +        // atomically fetch blocks from esplora
    +        let mut fetched_blocks = {
    +            let heights = (0..=new_tip_height).rev();
    +            let hashes = self
    +                .get_blocks(Some(new_tip_height))
    +                .await?
    +                .into_iter()
    +                .map(|b| b.id);
    +            heights.zip(hashes).collect::<BTreeMap<u32, BlockHash>>()
    +        };
    +
    +        // fetch heights that the caller is interested in
    +        for height in request_heights {
    +            // do not fetch blocks higher than remote tip
    +            if height > new_tip_height {
    +                continue;
    +            }
    +            // only fetch what is missing
    +            if let btree_map::Entry::Vacant(entry) = fetched_blocks.entry(height) {
    +                let hash = self.get_block_hash(height).await?;
    +                entry.insert(hash);
    +            }
    +        }
    +
    +        // find the earliest point of agreement between local chain and fetched chain
    +        let earliest_agreement_cp = {
    +            let mut earliest_agreement_cp = Option::<CheckPoint>::None;
    +
    +            if let Some(local_tip) = local_tip {
    +                let local_tip_height = local_tip.height();
    +                for local_cp in local_tip.iter() {
    +                    let local_block = local_cp.block_id();
    +
    +                    // the updated hash (block hash at this height after the update), can either be:
    +                    // 1. a block that already existed in `fetched_blocks`
    +                    // 2. a block that exists locally and atleast has a depth of ASSUME_FINAL_DEPTH
    +                    // 3. otherwise we can freshly fetch the block from remote, which is safe as it
    +                    //    is guaranteed that this would be at or below ASSUME_FINAL_DEPTH from the
    +                    //    remote tip
    +                    let updated_hash = match fetched_blocks.entry(local_block.height) {
    +                        btree_map::Entry::Occupied(entry) => *entry.get(),
    +                        btree_map::Entry::Vacant(entry) => *entry.insert(
    +                            if local_tip_height - local_block.height >= ASSUME_FINAL_DEPTH {
    +                                local_block.hash
    +                            } else {
    +                                self.get_block_hash(local_block.height).await?
    +                            },
    +                        ),
    +                    };
    +
    +                    // since we may introduce blocks below the point of agreement, we cannot break
    +                    // here unconditionally - we only break if we guarantee there are no new heights
    +                    // below our current local checkpoint
    +                    if local_block.hash == updated_hash {
    +                        earliest_agreement_cp = Some(local_cp);
    +
    +                        let first_new_height = *fetched_blocks
    +                            .keys()
    +                            .next()
    +                            .expect("must have atleast one new block");
    +                        if first_new_height >= local_block.height {
    +                            break;
    +                        }
    +                    }
    +                }
    +            }
    +
    +            earliest_agreement_cp
    +        };
    +
    +        let tip = {
    +            // first checkpoint to use for the update chain
    +            let first_cp = match earliest_agreement_cp {
    +                Some(cp) => cp,
    +                None => {
    +                    let (&height, &hash) = fetched_blocks
    +                        .iter()
    +                        .next()
    +                        .expect("must have atleast one new block");
    +                    CheckPoint::new(BlockId { height, hash })
    +                }
    +            };
    +            // transform fetched chain into the update chain
    +            fetched_blocks
    +                // we exclude anything at or below the first cp of the update chain otherwise
    +                // building the chain will fail
    +                .split_off(&(first_cp.height() + 1))
    +                .into_iter()
    +                .map(|(height, hash)| BlockId { height, hash })
    +                .fold(first_cp, |prev_cp, block| {
    +                    prev_cp.push(block).expect("must extend checkpoint")
    +                })
    +        };
    +
    +        Ok(local_chain::Update {
    +            tip,
    +            introduce_older_blocks: true,
    +        })
    +    }
    +
    +    async fn update_tx_graph<K: Ord + Clone + Send>(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
             keychain_spks: BTreeMap<
                 K,
                 impl IntoIterator<IntoIter = impl Iterator<Item = (u32, Script)> + Send> + Send,
    @@ -361,179 +536,116 @@
             outpoints: impl IntoIterator<IntoIter = impl Iterator<Item = OutPoint> + Send> + Send,
             stop_gap: usize,
             parallel_requests: usize,
    -    ) -> Result<LocalUpdate<K, ConfirmationTimeAnchor>, Error> {
    +    ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error> {
    +        type TxsOfSpkIndex = (u32, Vec<esplora_client::Tx>);
             let parallel_requests = Ord::max(parallel_requests, 1);
    -
    -        let (mut update, tip_at_start) = loop {
    -            let mut update = LocalUpdate::<K, ConfirmationTimeAnchor>::default();
    -
    -            for (&height, &original_hash) in local_chain.iter().rev() {
    -                let update_block_id = BlockId {
    -                    height,
    -                    hash: self.get_block_hash(height).await?,
    -                };
    -                let _ = update
    -                    .chain
    -                    .insert_block(update_block_id)
    -                    .expect("cannot repeat height here");
    -                if update_block_id.hash == original_hash {
    -                    break;
    -                }
    -            }
    -
    -            let tip_at_start = BlockId {
    -                height: self.get_height().await?,
    -                hash: self.get_tip_hash().await?,
    -            };
    -
    -            if update.chain.insert_block(tip_at_start).is_ok() {
    -                break (update, tip_at_start);
    -            }
    -        };
    +        let mut graph = TxGraph::<ConfirmationTimeAnchor>::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_active_index = None;
    -            let mut empty_scripts = 0;
    -            type IndexWithTxs = (u32, Vec<esplora_client::Tx>);
    +            let mut last_index = Option::<u32>::None;
    +            let mut last_active_index = Option::<u32>::None;
     
                 loop {
    -                let futures = (0..parallel_requests)
    -                    .filter_map(|_| {
    -                        let (index, script) = spks.next()?;
    +                let handles = spks
    +                    .by_ref()
    +                    .take(parallel_requests)
    +                    .map(|(spk_index, spk)| {
                             let client = self.clone();
    -                        Some(async move {
    -                            let mut related_txs = client.scripthash_txs(&script, None).await?;
    -
    -                            let n_confirmed =
    -                                related_txs.iter().filter(|tx| tx.status.confirmed).count();
    -                            // esplora pages on 25 confirmed transactions. If there are 25 or more we
    -                            // keep requesting to see if there's more.
    -                            if n_confirmed >= 25 {
    -                                loop {
    -                                    let new_related_txs = client
    -                                        .scripthash_txs(
    -                                            &script,
    -                                            Some(related_txs.last().unwrap().txid),
    -                                        )
    -                                        .await?;
    -                                    let n = new_related_txs.len();
    -                                    related_txs.extend(new_related_txs);
    -                                    // we've reached the end
    -                                    if n < 25 {
    -                                        break;
    -                                    }
    +                        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));
                                     }
                                 }
    -
    -                            Result::<_, esplora_client::Error>::Ok((index, related_txs))
    -                        })
    +                        }
                         })
                         .collect::<FuturesOrdered<_>>();
     
    -                let n_futures = futures.len();
    +                if handles.is_empty() {
    +                    break;
    +                }
     
    -                for (index, related_txs) in futures.try_collect::<Vec<IndexWithTxs>>().await? {
    -                    if related_txs.is_empty() {
    -                        empty_scripts += 1;
    -                    } else {
    +                for (index, txs) in handles.try_collect::<Vec<TxsOfSpkIndex>>().await? {
    +                    last_index = Some(index);
    +                    if !txs.is_empty() {
                             last_active_index = Some(index);
    -                        empty_scripts = 0;
                         }
    -                    for tx in related_txs {
    -                        let anchor = map_confirmation_time_anchor(&tx.status, tip_at_start);
    -
    -                        let _ = update.graph.insert_tx(tx.to_tx());
    -                        if let Some(anchor) = anchor {
    -                            let _ = update.graph.insert_anchor(tx.txid, anchor);
    +                    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);
                             }
                         }
                     }
     
    -                if n_futures == 0 || empty_scripts >= stop_gap {
    +                if last_index > last_active_index.map(|i| i + stop_gap as u32) {
                         break;
                     }
                 }
     
                 if let Some(last_active_index) = last_active_index {
    -                update.keychain.insert(keychain, last_active_index);
    +                last_active_indexes.insert(keychain, last_active_index);
                 }
             }
     
    -        for txid in txids.into_iter() {
    -            if update.graph.get_tx(txid).is_none() {
    -                match self.get_tx(&txid).await? {
    -                    Some(tx) => {
    -                        let _ = update.graph.insert_tx(tx);
    -                    }
    -                    None => continue,
    -                }
    +        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 = self.clone();
    +                    async move { client.get_tx_status(&txid).await.map(|s| (txid, s)) }
    +                })
    +                .collect::<FuturesOrdered<_>>();
    +
    +            if handles.is_empty() {
    +                break;
                 }
    -            match self.get_tx_status(&txid).await? {
    -                tx_status if tx_status.confirmed => {
    -                    if let Some(anchor) = map_confirmation_time_anchor(&tx_status, tip_at_start) {
    -                        let _ = update.graph.insert_anchor(txid, anchor);
    -                    }
    +
    +            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);
                     }
    -                _ => continue,
                 }
             }
     
             for op in outpoints.into_iter() {
    -            let mut op_txs = Vec::with_capacity(2);
    -            if let (
    -                Some(tx),
    -                tx_status @ TxStatus {
    -                    confirmed: true, ..
    -                },
    -            ) = (
    -                self.get_tx(&op.txid).await?,
    -                self.get_tx_status(&op.txid).await?,
    -            ) {
    -                op_txs.push((tx, tx_status));
    -                if let Some(OutputStatus {
    -                    txid: Some(txid),
    -                    status: Some(spend_status),
    -                    ..
    -                }) = self.get_output_status(&op.txid, op.vout as _).await?
    -                {
    -                    if let Some(spend_tx) = self.get_tx(&txid).await? {
    -                        op_txs.push((spend_tx, spend_status));
    -                    }
    +            if graph.get_tx(op.txid).is_none() {
    +                if let Some(tx) = self.get_tx(&op.txid).await? {
    +                    let _ = graph.insert_tx(tx);
    +                }
    +                let status = self.get_tx_status(&op.txid).await?;
    +                if let Some(anchor) = anchor_from_status(&status) {
    +                    let _ = graph.insert_anchor(op.txid, anchor);
                     }
                 }
     
    -            for (tx, status) in op_txs {
    -                let txid = tx.txid();
    -                let anchor = map_confirmation_time_anchor(&status, tip_at_start);
    -
    -                let _ = update.graph.insert_tx(tx);
    -                if let Some(anchor) = anchor {
    -                    let _ = update.graph.insert_anchor(txid, anchor);
    +            if let Some(op_status) = self.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) = self.get_tx(&txid).await? {
    +                            let _ = graph.insert_tx(tx);
    +                        }
    +                        let status = self.get_tx_status(&txid).await?;
    +                        if let Some(anchor) = anchor_from_status(&status) {
    +                            let _ = graph.insert_anchor(txid, anchor);
    +                        }
    +                    }
                     }
                 }
             }
     
    -        if tip_at_start.hash != self.get_block_hash(tip_at_start.height).await? {
    -            // A reorg occurred, so let's find out where all the txids we found are now in the chain
    -            let txids_found = update
    -                .graph
    -                .full_txs()
    -                .map(|tx_node| tx_node.txid)
    -                .collect::<Vec<_>>();
    -            update.chain = EsploraAsyncExt::scan_without_keychain(
    -                self,
    -                local_chain,
    -                [],
    -                txids_found,
    -                [],
    -                parallel_requests,
    -            )
    -            .await?
    -            .chain;
    -        }
    -
    -        Ok(update)
    +        Ok((graph, last_active_indexes))
         }
     }
     
    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 2ecb7f309b..446daa60a6 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 @@ -249,57 +249,145 @@ 249 250 251 -
    use bdk_chain::bitcoin::{BlockHash, OutPoint, Script, Txid};
    -use bdk_chain::collections::BTreeMap;
    -use bdk_chain::BlockId;
    -use bdk_chain::{keychain::LocalUpdate, ConfirmationTimeAnchor};
    -use esplora_client::{Error, OutputStatus, TxStatus};
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +
    use std::thread::JoinHandle;
     
    -use crate::map_confirmation_time_anchor;
    +use bdk_chain::bitcoin::{OutPoint, Txid};
    +use bdk_chain::collections::btree_map;
    +use bdk_chain::collections::{BTreeMap, BTreeSet};
    +use bdk_chain::{
    +    bitcoin::{BlockHash, Script},
    +    local_chain::{self, CheckPoint},
    +    BlockId, ConfirmationTimeAnchor, TxGraph,
    +};
    +use esplora_client::{Error, TxStatus};
     
    -/// Trait to extend [`esplora_client::BlockingClient`] functionality.
    +use crate::{anchor_from_status, ASSUME_FINAL_DEPTH};
    +
    +/// Trait to extend the functionality of [`esplora_client::BlockingClient`].
     ///
     /// Refer to [crate-level documentation] for more.
     ///
     /// [crate-level documentation]: crate
     pub trait EsploraExt {
    -    /// Scan the blockchain (via esplora) for the data specified and returns a
    -    /// [`LocalUpdate<K, ConfirmationTimeAnchor>`].
    +    /// Prepare an [`LocalChain`] update with blocks fetched from Esplora.
    +    ///
    +    /// * `prev_tip` is the previous tip of [`LocalChain::tip`].
    +    /// * `get_heights` is the block heights that we are interested in fetching from Esplora.
    +    ///
    +    /// The result of this method can be applied to [`LocalChain::apply_update`].
    +    ///
    +    /// [`LocalChain`]: bdk_chain::local_chain::LocalChain
    +    /// [`LocalChain::tip`]: bdk_chain::local_chain::LocalChain::tip
    +    /// [`LocalChain::apply_update`]: bdk_chain::local_chain::LocalChain::apply_update
    +    #[allow(clippy::result_large_err)]
    +    fn update_local_chain(
    +        &self,
    +        local_tip: Option<CheckPoint>,
    +        request_heights: impl IntoIterator<Item = u32>,
    +    ) -> Result<local_chain::Update, Error>;
    +
    +    /// Scan Esplora for the data specified and return a [`TxGraph`] and a map of last active
    +    /// indices.
         ///
    -    /// - `local_chain`: the most recent block hashes present locally
    -    /// - `keychain_spks`: keychains that we want to scan transactions for
    -    /// - `txids`: transactions for which we want updated [`ConfirmationTimeAnchor`]s
    -    /// - `outpoints`: transactions associated with these outpoints (residing, spending) that we
    -    ///     want to included in the update
    +    /// * `keychain_spks`: keychains that we want to scan transactions for
    +    /// * `txids`: transactions for which we want updated [`ConfirmationTimeAnchor`]s
    +    /// * `outpoints`: transactions associated with these outpoints (residing, spending) that we
    +    ///     want to include in the update
         ///
         /// The 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.
    -    #[allow(clippy::result_large_err)] // FIXME
    -    fn scan<K: Ord + Clone>(
    +    #[allow(clippy::result_large_err)]
    +    fn update_tx_graph<K: Ord + Clone>(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
             keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
             txids: impl IntoIterator<Item = Txid>,
             outpoints: impl IntoIterator<Item = OutPoint>,
             stop_gap: usize,
             parallel_requests: usize,
    -    ) -> Result<LocalUpdate<K, ConfirmationTimeAnchor>, Error>;
    +    ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>;
     
    -    /// Convenience method to call [`scan`] without requiring a keychain.
    +    /// Convenience method to call [`update_tx_graph`] without requiring a keychain.
         ///
    -    /// [`scan`]: EsploraExt::scan
    -    #[allow(clippy::result_large_err)] // FIXME
    -    fn scan_without_keychain(
    +    /// [`update_tx_graph`]: EsploraExt::update_tx_graph
    +    #[allow(clippy::result_large_err)]
    +    fn update_tx_graph_without_keychain(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
             misc_spks: impl IntoIterator<Item = Script>,
             txids: impl IntoIterator<Item = Txid>,
             outpoints: impl IntoIterator<Item = OutPoint>,
             parallel_requests: usize,
    -    ) -> Result<LocalUpdate<(), ConfirmationTimeAnchor>, Error> {
    -        self.scan(
    -            local_chain,
    +    ) -> Result<TxGraph<ConfirmationTimeAnchor>, Error> {
    +        self.update_tx_graph(
                 [(
                     (),
                     misc_spks
    @@ -313,191 +401,241 @@
                 usize::MAX,
                 parallel_requests,
             )
    +        .map(|(g, _)| g)
         }
     }
     
     impl EsploraExt for esplora_client::BlockingClient {
    -    fn scan<K: Ord + Clone>(
    +    fn update_local_chain(
             &self,
    -        local_chain: &BTreeMap<u32, BlockHash>,
    -        keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
    -        txids: impl IntoIterator<Item = Txid>,
    -        outpoints: impl IntoIterator<Item = OutPoint>,
    -        stop_gap: usize,
    -        parallel_requests: usize,
    -    ) -> Result<LocalUpdate<K, ConfirmationTimeAnchor>, Error> {
    -        let parallel_requests = Ord::max(parallel_requests, 1);
    +        local_tip: Option<CheckPoint>,
    +        request_heights: impl IntoIterator<Item = u32>,
    +    ) -> Result<local_chain::Update, Error> {
    +        let request_heights = request_heights.into_iter().collect::<BTreeSet<_>>();
    +        let new_tip_height = self.get_height()?;
     
    -        let (mut update, tip_at_start) = loop {
    -            let mut update = LocalUpdate::<K, ConfirmationTimeAnchor>::default();
    +        // atomically fetch blocks from esplora
    +        let mut fetched_blocks = {
    +            let heights = (0..=new_tip_height).rev();
    +            let hashes = self
    +                .get_blocks(Some(new_tip_height))?
    +                .into_iter()
    +                .map(|b| b.id);
    +            heights.zip(hashes).collect::<BTreeMap<u32, BlockHash>>()
    +        };
     
    -            for (&height, &original_hash) in local_chain.iter().rev() {
    -                let update_block_id = BlockId {
    -                    height,
    -                    hash: self.get_block_hash(height)?,
    -                };
    -                let _ = update
    -                    .chain
    -                    .insert_block(update_block_id)
    -                    .expect("cannot repeat height here");
    -                if update_block_id.hash == original_hash {
    -                    break;
    -                }
    +        // fetch heights that the caller is interested in
    +        for height in request_heights {
    +            // do not fetch blocks higher than remote tip
    +            if height > new_tip_height {
    +                continue;
                 }
    +            // only fetch what is missing
    +            if let btree_map::Entry::Vacant(entry) = fetched_blocks.entry(height) {
    +                let hash = self.get_block_hash(height)?;
    +                entry.insert(hash);
    +            }
    +        }
     
    -            let tip_at_start = BlockId {
    -                height: self.get_height()?,
    -                hash: self.get_tip_hash()?,
    -            };
    +        // find the earliest point of agreement between local chain and fetched chain
    +        let earliest_agreement_cp = {
    +            let mut earliest_agreement_cp = Option::<CheckPoint>::None;
    +
    +            if let Some(local_tip) = local_tip {
    +                let local_tip_height = local_tip.height();
    +                for local_cp in local_tip.iter() {
    +                    let local_block = local_cp.block_id();
     
    -            if update.chain.insert_block(tip_at_start).is_ok() {
    -                break (update, tip_at_start);
    +                    // the updated hash (block hash at this height after the update), can either be:
    +                    // 1. a block that already existed in `fetched_blocks`
    +                    // 2. a block that exists locally and atleast has a depth of ASSUME_FINAL_DEPTH
    +                    // 3. otherwise we can freshly fetch the block from remote, which is safe as it
    +                    //    is guaranteed that this would be at or below ASSUME_FINAL_DEPTH from the
    +                    //    remote tip
    +                    let updated_hash = match fetched_blocks.entry(local_block.height) {
    +                        btree_map::Entry::Occupied(entry) => *entry.get(),
    +                        btree_map::Entry::Vacant(entry) => *entry.insert(
    +                            if local_tip_height - local_block.height >= ASSUME_FINAL_DEPTH {
    +                                local_block.hash
    +                            } else {
    +                                self.get_block_hash(local_block.height)?
    +                            },
    +                        ),
    +                    };
    +
    +                    // since we may introduce blocks below the point of agreement, we cannot break
    +                    // here unconditionally - we only break if we guarantee there are no new heights
    +                    // below our current local checkpoint
    +                    if local_block.hash == updated_hash {
    +                        earliest_agreement_cp = Some(local_cp);
    +
    +                        let first_new_height = *fetched_blocks
    +                            .keys()
    +                            .next()
    +                            .expect("must have atleast one new block");
    +                        if first_new_height >= local_block.height {
    +                            break;
    +                        }
    +                    }
    +                }
                 }
    +
    +            earliest_agreement_cp
    +        };
    +
    +        let tip = {
    +            // first checkpoint to use for the update chain
    +            let first_cp = match earliest_agreement_cp {
    +                Some(cp) => cp,
    +                None => {
    +                    let (&height, &hash) = fetched_blocks
    +                        .iter()
    +                        .next()
    +                        .expect("must have atleast one new block");
    +                    CheckPoint::new(BlockId { height, hash })
    +                }
    +            };
    +            // transform fetched chain into the update chain
    +            fetched_blocks
    +                // we exclude anything at or below the first cp of the update chain otherwise
    +                // building the chain will fail
    +                .split_off(&(first_cp.height() + 1))
    +                .into_iter()
    +                .map(|(height, hash)| BlockId { height, hash })
    +                .fold(first_cp, |prev_cp, block| {
    +                    prev_cp.push(block).expect("must extend checkpoint")
    +                })
             };
     
    +        Ok(local_chain::Update {
    +            tip,
    +            introduce_older_blocks: true,
    +        })
    +    }
    +
    +    fn update_tx_graph<K: Ord + Clone>(
    +        &self,
    +        keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, Script)>>,
    +        txids: impl IntoIterator<Item = Txid>,
    +        outpoints: impl IntoIterator<Item = OutPoint>,
    +        stop_gap: usize,
    +        parallel_requests: usize,
    +    ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error> {
    +        type TxsOfSpkIndex = (u32, Vec<esplora_client::Tx>);
    +        let parallel_requests = Ord::max(parallel_requests, 1);
    +        let mut graph = TxGraph::<ConfirmationTimeAnchor>::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_active_index = None;
    -            let mut empty_scripts = 0;
    -            type IndexWithTxs = (u32, Vec<esplora_client::Tx>);
    +            let mut last_index = Option::<u32>::None;
    +            let mut last_active_index = Option::<u32>::None;
     
                 loop {
    -                let handles = (0..parallel_requests)
    -                    .filter_map(
    -                        |_| -> Option<std::thread::JoinHandle<Result<IndexWithTxs, _>>> {
    -                            let (index, script) = spks.next()?;
    +                let handles = spks
    +                    .by_ref()
    +                    .take(parallel_requests)
    +                    .map(|(spk_index, spk)| {
    +                        std::thread::spawn({
                                 let client = self.clone();
    -                            Some(std::thread::spawn(move || {
    -                                let mut related_txs = client.scripthash_txs(&script, None)?;
    -
    -                                let n_confirmed =
    -                                    related_txs.iter().filter(|tx| tx.status.confirmed).count();
    -                                // esplora pages on 25 confirmed transactions. If there are 25 or more we
    -                                // keep requesting to see if there's more.
    -                                if n_confirmed >= 25 {
    -                                    loop {
    -                                        let new_related_txs = client.scripthash_txs(
    -                                            &script,
    -                                            Some(related_txs.last().unwrap().txid),
    -                                        )?;
    -                                        let n = new_related_txs.len();
    -                                        related_txs.extend(new_related_txs);
    -                                        // we've reached the end
    -                                        if n < 25 {
    -                                            break;
    -                                        }
    +                            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>>>>();
     
    -                                Result::<_, esplora_client::Error>::Ok((index, related_txs))
    -                            }))
    -                        },
    -                    )
    -                    .collect::<Vec<_>>();
    -
    -                let n_handles = handles.len();
    +                if handles.is_empty() {
    +                    break;
    +                }
     
                     for handle in handles {
    -                    let (index, related_txs) = handle.join().unwrap()?; // TODO: don't unwrap
    -                    if related_txs.is_empty() {
    -                        empty_scripts += 1;
    -                    } else {
    +                    let (index, txs) = handle.join().expect("thread must not panic")?;
    +                    last_index = Some(index);
    +                    if !txs.is_empty() {
                             last_active_index = Some(index);
    -                        empty_scripts = 0;
                         }
    -                    for tx in related_txs {
    -                        let anchor = map_confirmation_time_anchor(&tx.status, tip_at_start);
    -
    -                        let _ = update.graph.insert_tx(tx.to_tx());
    -                        if let Some(anchor) = anchor {
    -                            let _ = update.graph.insert_anchor(tx.txid, anchor);
    +                    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);
                             }
                         }
                     }
     
    -                if n_handles == 0 || empty_scripts >= stop_gap {
    +                if last_index > last_active_index.map(|i| i + stop_gap as u32) {
                         break;
                     }
                 }
     
                 if let Some(last_active_index) = last_active_index {
    -                update.keychain.insert(keychain, last_active_index);
    +                last_active_indexes.insert(keychain, last_active_index);
                 }
             }
     
    -        for txid in txids.into_iter() {
    -            if update.graph.get_tx(txid).is_none() {
    -                match self.get_tx(&txid)? {
    -                    Some(tx) => {
    -                        let _ = update.graph.insert_tx(tx);
    -                    }
    -                    None => continue,
    -                }
    +        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| {
    +                    std::thread::spawn({
    +                        let client = self.clone();
    +                        move || client.get_tx_status(&txid).map(|s| (txid, s))
    +                    })
    +                })
    +                .collect::<Vec<JoinHandle<Result<(Txid, TxStatus), Error>>>>();
    +
    +            if handles.is_empty() {
    +                break;
                 }
    -            match self.get_tx_status(&txid)? {
    -                tx_status @ TxStatus {
    -                    confirmed: true, ..
    -                } => {
    -                    if let Some(anchor) = map_confirmation_time_anchor(&tx_status, tip_at_start) {
    -                        let _ = update.graph.insert_anchor(txid, anchor);
    -                    }
    +
    +            for handle in handles {
    +                let (txid, status) = handle.join().expect("thread must not panic")?;
    +                if let Some(anchor) = anchor_from_status(&status) {
    +                    let _ = graph.insert_anchor(txid, anchor);
                     }
    -                _ => continue,
                 }
             }
     
             for op in outpoints.into_iter() {
    -            let mut op_txs = Vec::with_capacity(2);
    -            if let (
    -                Some(tx),
    -                tx_status @ TxStatus {
    -                    confirmed: true, ..
    -                },
    -            ) = (self.get_tx(&op.txid)?, self.get_tx_status(&op.txid)?)
    -            {
    -                op_txs.push((tx, tx_status));
    -                if let Some(OutputStatus {
    -                    txid: Some(txid),
    -                    status: Some(spend_status),
    -                    ..
    -                }) = self.get_output_status(&op.txid, op.vout as _)?
    -                {
    -                    if let Some(spend_tx) = self.get_tx(&txid)? {
    -                        op_txs.push((spend_tx, spend_status));
    -                    }
    +            if graph.get_tx(op.txid).is_none() {
    +                if let Some(tx) = self.get_tx(&op.txid)? {
    +                    let _ = graph.insert_tx(tx);
    +                }
    +                let status = self.get_tx_status(&op.txid)?;
    +                if let Some(anchor) = anchor_from_status(&status) {
    +                    let _ = graph.insert_anchor(op.txid, anchor);
                     }
                 }
     
    -            for (tx, status) in op_txs {
    -                let txid = tx.txid();
    -                let anchor = map_confirmation_time_anchor(&status, tip_at_start);
    -
    -                let _ = update.graph.insert_tx(tx);
    -                if let Some(anchor) = anchor {
    -                    let _ = update.graph.insert_anchor(txid, anchor);
    +            if let Some(op_status) = self.get_output_status(&op.txid, op.vout as _)? {
    +                if let Some(txid) = op_status.txid {
    +                    if graph.get_tx(txid).is_none() {
    +                        if let Some(tx) = self.get_tx(&txid)? {
    +                            let _ = graph.insert_tx(tx);
    +                        }
    +                        let status = self.get_tx_status(&txid)?;
    +                        if let Some(anchor) = anchor_from_status(&status) {
    +                            let _ = graph.insert_anchor(txid, anchor);
    +                        }
    +                    }
                     }
                 }
             }
     
    -        if tip_at_start.hash != self.get_block_hash(tip_at_start.height)? {
    -            // A reorg occurred, so let's find out where all the txids we found are now in the chain
    -            let txids_found = update
    -                .graph
    -                .full_txs()
    -                .map(|tx_node| tx_node.txid)
    -                .collect::<Vec<_>>();
    -            update.chain = EsploraExt::scan_without_keychain(
    -                self,
    -                local_chain,
    -                [],
    -                txids_found,
    -                [],
    -                parallel_requests,
    -            )?
    -            .chain;
    -        }
    -
    -        Ok(update)
    +        Ok((graph, last_active_indexes))
         }
     }
     
    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 70ad77f97f..fc5cee9590 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 @@ -27,6 +27,12 @@ 27 28 29 +30 +31 +32 +33 +34 +35
    #![doc = include_str!("../README.md")]
     use bdk_chain::{BlockId, ConfirmationTimeAnchor};
     use esplora_client::TxStatus;
    @@ -43,18 +49,24 @@
     #[cfg(feature = "async")]
     pub use async_ext::*;
     
    -pub(crate) fn map_confirmation_time_anchor(
    -    tx_status: &TxStatus,
    -    tip_at_start: BlockId,
    -) -> Option<ConfirmationTimeAnchor> {
    -    match (tx_status.block_time, tx_status.block_height) {
    -        (Some(confirmation_time), Some(confirmation_height)) => Some(ConfirmationTimeAnchor {
    -            anchor_block: tip_at_start,
    -            confirmation_height,
    -            confirmation_time,
    -        }),
    -        _ => None,
    -    }
    +const ASSUME_FINAL_DEPTH: u32 = 15;
    +
    +fn anchor_from_status(status: &TxStatus) -> Option<ConfirmationTimeAnchor> {
    +    if let TxStatus {
    +        block_height: Some(height),
    +        block_hash: Some(hash),
    +        block_time: Some(time),
    +        ..
    +    } = status.clone()
    +    {
    +        Some(ConfirmationTimeAnchor {
    +            anchor_block: BlockId { height, hash },
    +            confirmation_height: height,
    +            confirmation_time: time,
    +        })
    +    } else {
    +        None
    +    }
     }
     
    \ No newline at end of file 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 3c1a824214..2a402d3ec0 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 @@ -300,22 +300,6 @@ 300 301 302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318
    use std::{
         collections::BTreeMap,
         io::{self, Write},
    @@ -323,7 +307,7 @@
     };
     
     use bdk_chain::{
    -    bitcoin::{Address, BlockHash, Network, OutPoint, Txid},
    +    bitcoin::{Address, Network, OutPoint, Txid},
         indexed_tx_graph::{IndexedAdditions, IndexedTxGraph},
         keychain::LocalChangeSet,
         local_chain::LocalChain,
    @@ -340,8 +324,7 @@
     };
     
     const DB_MAGIC: &[u8] = b"bdk_example_electrum";
    -const DB_PATH: &str = ".bdk_electrum_example.db";
    -const ASSUME_FINAL_DEPTH: usize = 10;
    +const DB_PATH: &str = ".bdk_example_electrum.db";
     
     #[derive(Subcommand, Debug, Clone)]
     enum ElectrumCommands {
    @@ -391,11 +374,7 @@
             graph
         });
     
    -    let chain = Mutex::new({
    -        let mut chain = LocalChain::default();
    -        chain.apply_changeset(init_changeset.chain_changeset);
    -        chain
    -    });
    +    let chain = Mutex::new(LocalChain::from_changeset(init_changeset.chain_changeset));
     
         let electrum_url = match args.network {
             Network::Bitcoin => "ssl://electrum.blockstream.info:50002",
    @@ -437,7 +416,7 @@
                 stop_gap,
                 scan_options,
             } => {
    -            let (keychain_spks, local_chain) = {
    +            let (keychain_spks, tip) = {
                     let graph = &*graph.lock().unwrap();
                     let chain = &*chain.lock().unwrap();
     
    @@ -460,20 +439,13 @@
                         })
                         .collect::<BTreeMap<_, _>>();
     
    -                let c = chain
    -                    .blocks()
    -                    .iter()
    -                    .rev()
    -                    .take(ASSUME_FINAL_DEPTH)
    -                    .map(|(k, v)| (*k, *v))
    -                    .collect::<BTreeMap<u32, BlockHash>>();
    -
    -                (keychain_spks, c)
    +                let tip = chain.tip();
    +                (keychain_spks, tip)
                 };
     
                 client
                     .scan(
    -                    &local_chain,
    +                    tip,
                         keychain_spks,
                         core::iter::empty(),
                         core::iter::empty(),
    @@ -492,7 +464,7 @@
                 // Get a short lock on the tracker to get the spks we're interested in
                 let graph = graph.lock().unwrap();
                 let chain = chain.lock().unwrap();
    -            let chain_tip = chain.tip().unwrap_or_default();
    +            let chain_tip = chain.tip().map(|cp| cp.block_id()).unwrap_or_default();
     
                 if !(all_spks || unused_spks || utxos || unconfirmed) {
                     unused_spks = true;
    @@ -572,23 +544,17 @@
                     }));
                 }
     
    -            let c = chain
    -                .blocks()
    -                .iter()
    -                .rev()
    -                .take(ASSUME_FINAL_DEPTH)
    -                .map(|(k, v)| (*k, *v))
    -                .collect::<BTreeMap<u32, BlockHash>>();
    +            let tip = chain.tip();
     
                 // drop lock on graph and chain
                 drop((graph, chain));
     
                 let update = client
    -                .scan_without_keychain(&c, spks, txids, outpoints, scan_options.batch_size)
    +                .scan_without_keychain(tip, spks, txids, outpoints, scan_options.batch_size)
                     .context("scanning the blockchain")?;
                 ElectrumUpdate {
                     graph_update: update.graph_update,
    -                chain_update: update.chain_update,
    +                new_tip: update.new_tip,
                     keychain_update: BTreeMap::new(),
                 }
             }
    @@ -614,7 +580,9 @@
     
             let indexed_additions = {
                 let mut additions = IndexedAdditions::<ConfirmationHeightAnchor, _>::default();
    -            let (_, index_additions) = graph.index.reveal_to_target_multi(&final_update.keychain);
    +            let (_, index_additions) = graph
    +                .index
    +                .reveal_to_target_multi(&final_update.last_active_indices);
                 additions.append(IndexedAdditions {
                     index_additions,
                     ..Default::default()
    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 6a6a2cc551..51dbf49196 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
    @@ -90,7 +90,6 @@
     90
     91
     92
    -93
     
    const DB_MAGIC: &str = "bdk_wallet_electrum_example";
     const SEND_AMOUNT: u64 = 5000;
     const STOP_GAP: usize = 50;
    @@ -128,7 +127,7 @@
         print!("Syncing...");
         let client = electrum_client::Client::new("ssl://electrum.blockstream.info:60002")?;
     
    -    let local_chain = wallet.checkpoints();
    +    let prev_tip = wallet.latest_checkpoint();
         let keychain_spks = wallet
             .spks_of_all_keychains()
             .into_iter()
    @@ -145,8 +144,7 @@
             })
             .collect();
     
    -    let electrum_update =
    -        client.scan(local_chain, keychain_spks, None, None, STOP_GAP, BATCH_SIZE)?;
    +    let electrum_update = client.scan(prev_tip, keychain_spks, None, None, STOP_GAP, BATCH_SIZE)?;
     
         println!();
     
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora/main.rs.html
    index 5531f7f200..0c9a9d1e7a 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/wallet_esplora/main.rs.html
    @@ -92,15 +92,20 @@
     92
     93
     94
    +95
    +96
    +97
    +98
     
    const DB_MAGIC: &str = "bdk_wallet_esplora_example";
    -const SEND_AMOUNT: u64 = 5000;
    -const STOP_GAP: usize = 50;
    -const PARALLEL_REQUESTS: usize = 5;
    +const SEND_AMOUNT: u64 = 1000;
    +const STOP_GAP: usize = 5;
    +const PARALLEL_REQUESTS: usize = 1;
     
     use std::{io::Write, str::FromStr};
     
     use bdk::{
         bitcoin::{Address, Network},
    +    chain::keychain::LocalUpdate,
         wallet::AddressIndex,
         SignOptions, Wallet,
     };
    @@ -130,7 +135,7 @@
         let client =
             esplora_client::Builder::new("https://blockstream.info/testnet/api").build_blocking()?;
     
    -    let local_chain = wallet.checkpoints();
    +    let prev_tip = wallet.latest_checkpoint();
         let keychain_spks = wallet
             .spks_of_all_keychains()
             .into_iter()
    @@ -146,17 +151,20 @@
                 (k, k_spks)
             })
             .collect();
    -    let update = client.scan(
    -        local_chain,
    -        keychain_spks,
    -        None,
    -        None,
    -        STOP_GAP,
    -        PARALLEL_REQUESTS,
    -    )?;
    -    println!();
    +
    +    let (update_graph, last_active_indices) =
    +        client.update_tx_graph(keychain_spks, None, None, STOP_GAP, PARALLEL_REQUESTS)?;
    +    let missing_heights = wallet.tx_graph().missing_heights(wallet.local_chain());
    +    let chain_update = client.update_local_chain(prev_tip, missing_heights)?;
    +    let update = LocalUpdate {
    +        last_active_indices,
    +        graph: update_graph,
    +        ..LocalUpdate::new(chain_update)
    +    };
    +
         wallet.apply_update(update)?;
         wallet.commit()?;
    +    println!();
     
         let balance = wallet.get_balance();
         println!("Wallet balance after syncing: {} sats", balance.total());
    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 e7125e532c..ba85f7a382 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
    @@ -95,10 +95,12 @@
     95
     96
     97
    +98
     
    use std::{io::Write, str::FromStr};
     
     use bdk::{
         bitcoin::{Address, Network},
    +    chain::keychain::LocalUpdate,
         wallet::AddressIndex,
         SignOptions, Wallet,
     };
    @@ -134,7 +136,7 @@
         let client =
             esplora_client::Builder::new("https://blockstream.info/testnet/api").build_async()?;
     
    -    let local_chain = wallet.checkpoints();
    +    let prev_tip = wallet.latest_checkpoint();
         let keychain_spks = wallet
             .spks_of_all_keychains()
             .into_iter()
    @@ -150,19 +152,19 @@
                 (k, k_spks)
             })
             .collect();
    -    let update = client
    -        .scan(
    -            local_chain,
    -            keychain_spks,
    -            [],
    -            [],
    -            STOP_GAP,
    -            PARALLEL_REQUESTS,
    -        )
    +    let (update_graph, last_active_indices) = client
    +        .update_tx_graph(keychain_spks, None, None, STOP_GAP, PARALLEL_REQUESTS)
             .await?;
    -    println!();
    +    let missing_heights = wallet.tx_graph().missing_heights(wallet.local_chain());
    +    let chain_update = client.update_local_chain(prev_tip, missing_heights).await?;
    +    let update = LocalUpdate {
    +        last_active_indices,
    +        graph: update_graph,
    +        ..LocalUpdate::new(chain_update)
    +    };
         wallet.apply_update(update)?;
         wallet.commit()?;
    +    println!();
     
         let balance = wallet.get_balance();
         println!("Wallet balance after syncing: {} sats", balance.total());
    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 facc9c8fb9..82b3d758c4 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<(), Box<dyn Error>>
    \ No newline at end of file +main in wallet_electrum_example - Rust

    Function wallet_electrum_example::main

    source ·
    pub(crate) fn main() -> Result<(), Box<dyn 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 b9f2e3459d..73adf2965f 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

    Constants

    BATCH_SIZE ðŸ”’
    DB_MAGIC ðŸ”’
    SEND_AMOUNT ðŸ”’
    STOP_GAP ðŸ”’

    Functions

    main ðŸ”’
    \ No newline at end of file +wallet_electrum_example - Rust

    Constants

    BATCH_SIZE ðŸ”’
    DB_MAGIC ðŸ”’
    SEND_AMOUNT ðŸ”’
    STOP_GAP ðŸ”’

    Functions

    main ðŸ”’
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.PARALLEL_REQUESTS.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.PARALLEL_REQUESTS.html index c6d3bd3e08..3cd04d18ea 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.PARALLEL_REQUESTS.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.PARALLEL_REQUESTS.html @@ -1 +1 @@ -PARALLEL_REQUESTS in wallet_esplora - Rust
    pub(crate) const PARALLEL_REQUESTS: usize = 5;
    \ No newline at end of file +PARALLEL_REQUESTS in wallet_esplora - Rust
    pub(crate) const PARALLEL_REQUESTS: usize = 1;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.SEND_AMOUNT.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.SEND_AMOUNT.html index 5832319a00..909ddfe97a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.SEND_AMOUNT.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.SEND_AMOUNT.html @@ -1 +1 @@ -SEND_AMOUNT in wallet_esplora - Rust

    Constant wallet_esplora::SEND_AMOUNT

    source ·
    pub(crate) const SEND_AMOUNT: u64 = 5000;
    \ No newline at end of file +SEND_AMOUNT in wallet_esplora - Rust

    Constant wallet_esplora::SEND_AMOUNT

    source ·
    pub(crate) const SEND_AMOUNT: u64 = 1000;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.STOP_GAP.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.STOP_GAP.html index a6d60ab3e9..d78a0ece27 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.STOP_GAP.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/constant.STOP_GAP.html @@ -1 +1 @@ -STOP_GAP in wallet_esplora - Rust

    Constant wallet_esplora::STOP_GAP

    source ·
    pub(crate) const STOP_GAP: usize = 50;
    \ No newline at end of file +STOP_GAP in wallet_esplora - Rust

    Constant wallet_esplora::STOP_GAP

    source ·
    pub(crate) const STOP_GAP: usize = 5;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/fn.main.html index 11105f6066..981f374dff 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/fn.main.html @@ -1 +1 @@ -main in wallet_esplora - Rust

    Function wallet_esplora::main

    source ·
    pub(crate) fn main() -> Result<(), Box<dyn Error>>
    \ No newline at end of file +main in wallet_esplora - Rust

    Function wallet_esplora::main

    source ·
    pub(crate) fn main() -> Result<(), Box<dyn Error>>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/index.html index 7d6305798e..1e9daadab8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora/index.html @@ -1 +1 @@ -wallet_esplora - Rust

    Crate wallet_esplora

    source ·

    Constants

    DB_MAGIC ðŸ”’
    SEND_AMOUNT ðŸ”’
    STOP_GAP ðŸ”’

    Functions

    main ðŸ”’
    \ No newline at end of file +wallet_esplora - Rust

    Crate wallet_esplora

    source ·

    Constants

    DB_MAGIC ðŸ”’
    SEND_AMOUNT ðŸ”’
    STOP_GAP ðŸ”’

    Functions

    main ðŸ”’
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.DB_MAGIC.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.DB_MAGIC.html index 101a9161ff..884c7849e2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.DB_MAGIC.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.DB_MAGIC.html @@ -1 +1 @@ -DB_MAGIC in wallet_esplora_async - Rust
    pub(crate) const DB_MAGIC: &str = "bdk_wallet_esplora_async_example";
    \ No newline at end of file +DB_MAGIC in wallet_esplora_async - Rust
    pub(crate) const DB_MAGIC: &str = "bdk_wallet_esplora_async_example";
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.PARALLEL_REQUESTS.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.PARALLEL_REQUESTS.html index 137d4d9713..5b2d408750 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.PARALLEL_REQUESTS.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.PARALLEL_REQUESTS.html @@ -1 +1 @@ -PARALLEL_REQUESTS in wallet_esplora_async - Rust
    pub(crate) const PARALLEL_REQUESTS: usize = 5;
    \ No newline at end of file +PARALLEL_REQUESTS in wallet_esplora_async - Rust
    pub(crate) const PARALLEL_REQUESTS: usize = 5;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.SEND_AMOUNT.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.SEND_AMOUNT.html index 5934fd7137..45026c51bc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.SEND_AMOUNT.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.SEND_AMOUNT.html @@ -1 +1 @@ -SEND_AMOUNT in wallet_esplora_async - Rust
    pub(crate) const SEND_AMOUNT: u64 = 5000;
    \ No newline at end of file +SEND_AMOUNT in wallet_esplora_async - Rust
    pub(crate) const SEND_AMOUNT: u64 = 5000;
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.STOP_GAP.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.STOP_GAP.html index 1ff7ae69e4..4b86bccd83 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.STOP_GAP.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/wallet_esplora_async/constant.STOP_GAP.html @@ -1 +1 @@ -STOP_GAP in wallet_esplora_async - Rust
    pub(crate) const STOP_GAP: usize = 50;
    \ No newline at end of file +STOP_GAP in wallet_esplora_async - Rust
    pub(crate) const STOP_GAP: usize = 50;
    \ 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 aca61f0b83..563ecd3d40 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<(), Box<dyn Error>>
    \ No newline at end of file +main in wallet_esplora_async - Rust

    Function wallet_esplora_async::main

    source ·
    pub(crate) fn main() -> Result<(), Box<dyn 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 ecdf0e354d..d685d76dfa 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

    Constants

    DB_MAGIC ðŸ”’
    SEND_AMOUNT ðŸ”’
    STOP_GAP ðŸ”’

    Functions

    main ðŸ”’
    \ No newline at end of file +wallet_esplora_async - Rust

    Constants

    DB_MAGIC ðŸ”’
    SEND_AMOUNT ðŸ”’
    STOP_GAP ðŸ”’

    Functions

    main ðŸ”’
    \ No newline at end of file -- 2.49.0